Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 30.03.2013
Сообщений: 108
1

Вывести каждую вторую строку матрицы в обратном порядке

24.04.2013, 19:21. Просмотров 1690. Ответов 3
Метки нет (Все метки)

не могу найти ошибку в программе. программа должа решать задачу: Из одномерного массива, формировать квадратную матрицу порядка n по заданному образцу (матрица формируется методом повторения массива, причем каждая 2-я строка в обратном порядке). Вывод матрицы на экран оформить в виде процедуры.
но она выдает строки в обратном порядке с лишними числами, причем всегда с одной и той-же комбанацией цифр.
помогите найти ошибку. Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream.h>
void main(){
int  n,i,j;
cout<<"VVedite n: "<<endl;
cin>>n;
 
int*mas=new int[n];
cout<<"Zapolnite matricu: "<<endl;
for(i=0;i<n;i++)
cin>>mas[i];
cout<<"Vacha matrica:"<<endl;
int z;
for(z=1;z<=n/2;z++)
{
cout<<endl;
 
for(i=0;i<n;i++)
cout<<mas[i]<<" ";
 
cout<<endl;
 
for(i=n;i>1;i--)
cout<<mas[i]<<" ";
}
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2013, 19:21
Ответы с готовыми решениями:

Вывести в порядке обратном алфавитному по одному разу все строчные буквы, входящие в первую строку, но не во вторую.
Даны две строки. Вывести в порядке обратном алфавитному по одному разу все строчные буквы, входящие...

Использую компонент Memo заполнить строковый массив и вывести каждую строку в обратном порядке в List box
Собственно, задача. Помогите, пожалуйста

Написать программу, которая перевернёт в обратном порядке каждую вторую строку матрицы
Дана прямоугольная матрица из целых чисел (10 строк и 15 столбцов). Написать программу, которая...

Отсортировать в порядке возрастания каждую строку матрицы и вывести их на экран
программа генерирует матрицу размерностью 5*5 со значениями в интервале от 0 до 9 включительно и...

3
39 / 39 / 5
Регистрация: 14.09.2012
Сообщений: 85
24.04.2013, 20:15 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
void out(int n, int **d2)
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
            cout<<d2[i][j]<<' ';
        cout<<endl;
    }
}
 
void main()
{
    int n;
    cin>>n;
    int *d1 = new int[n];
    for(int i=0; i<n; i++)
        cin>>d1[i];
    int **d2 = new int*[n];
    for(int i=0; i<n; i++)
    {
        d2[i] = new int[n];
        if(i%2 == 0) d2[i] = d1;
        else
        {
            for(int j=n-1; j>-1; j--)
                d2[i][j] = d1[n-1-j];
        }
    }
    cout<<endl;
    out(n, d2);
    system("pause");
}
1
380 / 351 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
24.04.2013, 23:28 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

vasilisa-9090, мой вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <iterator>
#include <time.h>
#include <cstdlib>
using namespace std;
 
//отключаем варнинг рандомизации
#pragma warning(disable:4244)
 
//перегруженный оператор вывода матрицы
ostream &operator<<(ostream &strm, vector<vector<int> > &coll){
    strm << "Matrix:\n";
    for(size_t i = 0; i < coll.size(); ++i){
        cout << "\n\t";
        //выводим матрицу с помощью алгоритмы и лямбды
        for_each(coll[i].begin(), coll[i].end(), [&strm](int &elem)
        {
            strm << setw(3) << elem << ' ';
        });
    }
 
    return strm;
}
 
int main(int argc, char* argv[])
{
    srand(time(NULL));      //для генерации случайных чисел
 
    int size(4);            //размер квадратной матрицы
    vector<int> tmp(size);  //массив для строк
 
    //рандомно заполняем с помощью алгоритма и лямбды
    for_each(tmp.begin(), tmp.end(), [](int &elem){ elem = rand() % 21; });
 
    //наша квадратная матрица
    vector<vector<int> > coll(size);
 
    for(int i = 0; i < size; ++i){
        if(i & 1)
            //если нечетная строка заполняем в обратном порядке
            copy(tmp.rbegin(), tmp.rend(), back_inserter(coll[i]));
        else
            //ну тут понятно
            copy(tmp.begin(), tmp.end(), back_inserter(coll[i]));
    }
 
    //вывод матрицы с помощью перегруженного оператора поместить в поток
    cout << coll;
 
    cout << "\n\n";
    return 0;
}
Добавлено через 16 минут
vasilisa-9090, и вот попроще вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <iomanip>
using namespace std;
 
void output(int mas[][4], int size){
    cout << "Matrix:\n";
    for(int i = 0; i < size; ++i){
        cout << "\n\t";
        for(int j = 0; j < size; ++j)
            cout << setw(3) << mas[i][j] << ' ';
    }
}
 
int main(int argc, char* argv[])
{
    const int size(4);
    int arr[size] = {1,2,3,4};
 
    int mas[size][size];
 
    for(int i = 0; i < size; ++i){
        if(i % 2 == 0){
            for(int j = size - 1, k = 0; j >= 0; --j, k++)
                mas[i][k] = arr[j];
        }
        else{
            for(int j = 0; j < size; ++j)
                mas[i][j] = arr[j];
        }
    }
 
    output(mas, size);
 
    cout << "\n\n";
    return 0;
}
2
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
24.04.2013, 23:32 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
using namespace std;
 
void print(int** arr, size_t n)
{
    for (size_t i = 0; i != n; i++, cout << endl)
        for (size_t j = 0; j != n; j++)
            cout << arr[i][j] << " ";
}
 
int main()
{
    size_t  n;
    cout << "VVedite n: " << endl;
    cin >> n;
 
    int *mas = new int[n];
 
    cout << "Zapolnite matricu: " << endl;
 
    for(size_t i = 0; i != n; i++)
        cin >> mas[i];
    cout << "Vacha matrica:" << endl;
 
    int **arr = new int*[n];
 
    for(size_t i = 0; i != n; i++) {
        arr[i] = new int[n];
        if (i % 2)
            for (size_t j = n; j != 0; j--)
                arr[i][n - j] = mas[j - 1];
        else
            for (size_t j = 0; j != n; j++)
                arr[i][j] = mas[j];
    }
 
    print(arr, n);
 
    for (size_t i = 0; i!=n; i++)
        delete[] arr[i];
 
    delete[] arr;
 
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2013, 23:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести самую нижнюю строку матрицы в обратном порядке
Здравствуйте! Нужна помощь: как с помощью данной процедуры procedure M2MS; var i, j, k:...

Каждую строку переписать в обратном порядке
1. Дан диапазон чисел. Каждую строку переписать в обратном порядке.

Прочитать в файле каждую строку в обратном порядке
Прочитать в файле каждую строку в обратном порядке!

Записать в файл каждую нечетную строку в обратном порядке
Помогите. Срочно надо.Дан текстовый файл T («2.txt»). Сформировать из данного новый файл, …записав...

Вывести на экран каждую вторую строку файла
Дан текстовый файл хранящийся в текстовом файле вывести на экран каждую вторую строку файла

Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран.
Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.