Форум программистов, компьютерный форум CyberForum.ru

Перевернуть все нечётные строки матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
_StellS_
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 9
12.12.2011, 00:39     Перевернуть все нечётные строки матрицы #1
Тема: Функции и массивы в С++
Задание: Перевернуть все нечётные строки матрицы

 Комментарий модератора 
Помоги срочно с задачей плиззз на завтра надо, заранее благодарен
Название темы, конечно, впечатляет, но в другой раз всё-таки поменьше эмоций, побольше смысла...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2011, 00:39     Перевернуть все нечётные строки матрицы
Посмотрите здесь:

C++ Текстовый файл. Напечатать все нечётные строки.
C++ Перевернуть все четные строки матрицы
C++ Строки. В каждом чётном по порядку слове удалить все нечётные буквы, а в каждом нечётном слове удалить все чётные буквы.
Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке C++
Удалить все нечётные строки двумерного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
12.12.2011, 00:53     Перевернуть все нечётные строки матрицы #2
Цитата Сообщение от _StellS_ Посмотреть сообщение
ема: Функции и массивы в С++
Задание: Перевернуть все нечётные строки матрицы
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
#include <iostream>
using namespace std;
 
//Функция поповрачивает вектор наоборот
int * swapvec(int * vec, int n)
{
    for(int i = 0,buf; i < n/2; i++)
    {
        buf = vec[i];
        vec[i] = vec[n - i - 1];
        vec[n - i - 1] = buf;
    }
    return vec;
}
    
int main()
{
    int i,j,m,n;
    int ** arr;//Указатель на наш массив
    cout<<"Enter number of Rows : ";cin>>m;
    cout<<"Enter number of Cols : ";cin>>n;
    arr = new int * [m];//Память под указатели на строки
    for(i = 0; i < m; i++)
    {
        arr[i] = new int[n];//Память под элементы строки
        for(j = 0; j < n; j++)
        {
            cout<<"a["<<i + 1<<"]["<<j + 1<<"] = ";
            cin>>arr[i][j];
        }
        cout<<endl;
 
    }
    cout<<"Input matrix :\n";
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
            cout<<arr[i][j]<<" ";
        cout<<endl;
    }
    cout<<"Matrix after swap :\n";
    for(i = 0; i < m; i++)
    {
        if(i%2 != 0)
            arr[i] = swapvec(arr[i], n);
        for(j = 0; j < n; j++)
            cout<<arr[i][j]<<" ";
        cout<<endl;
    }
    for(i = m - 1; 0 <= i; i--)
        delete [] arr[i];
    system("pause");
    return 0;
}
Миниатюры
Перевернуть все нечётные строки матрицы  
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
12.12.2011, 01:27     Перевернуть все нечётные строки матрицы #3
Мой вариант:
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
56
57
58
59
60
61
62
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
 
using namespace std;
#define my_dimm1 5 // количество строк
#define my_dimm2 6 // количество столбцов
 
// вывод массива на экран
void print_array( int[ my_dimm1 ][ my_dimm2 ] );
// заполнение массива псевдослучайными значениями
void fill_array( int[ my_dimm1 ][ my_dimm2 ] );
// инверсия строк матрицы
void inv_odd_rows( int[ my_dimm1 ][ my_dimm2 ] );
// обмен значений
void my_swap( int&, int& );
 
int main() {
    srand( time( NULL ) );
 
    int arr [ my_dimm1 ][ my_dimm2 ];
    fill_array( arr );
    cout << "Исходный массив: " << endl;
    print_array( arr );
 
    inv_odd_rows( arr );
 
    cout << "Преобразованный массив: " << endl;
    print_array( arr );
    return 0;
}
 
void print_array( int array[ my_dimm1 ][ my_dimm2 ] ) {
 
    for ( size_t i = 0; i < my_dimm1; ++i ) {
        for ( size_t j = 0; j < my_dimm2; ++j )
            cout << setw(5) <<  array[ i ][ j ];
 
        cout << endl;
    }
}
 
void fill_array( int array [ my_dimm1 ][ my_dimm2 ] ){
    for ( size_t i = 0; i < my_dimm1; ++i )
        for ( size_t j = 0; j < my_dimm2; ++j )
            array[ i ][ j ] = rand() % 201 - 100; //[ -100..100 ]
}
 
void inv_odd_rows( int array [ my_dimm1 ][ my_dimm2 ] ){
    size_t check = my_dimm2 / 2 - 1;
    for ( size_t i = 0; i < my_dimm1; ++i )
        for ( size_t j = 0; j < my_dimm2; ++j )
            if ( ( i % 2 )  && ( j <= check ) )
                my_swap( array[ i ][ j ], array[ i ][ my_dimm2 - j - 1 ] );
}
 
void my_swap( int& x, int& y ) {
    x += y;
    y = x - y;
    x -= y;
}
Консоль
Исходный массив:
-43 -33 3 42 50 -53
-92 -66 85 77 -79 -9
0 26 -29 -66 -59 -31
69 -29 11 59 -3 84
-72 15 -36 -28 44 82
Преобразованный массив:
-43 -33 3 42 50 -53
-9 -79 77 85 -66 -92
0 26 -29 -66 -59 -31
84 -3 59 11 -29 69
-72 15 -36 -28 44 82


Номера строк считаю с нуля

Добавлено через 5 минут
2 -=ЮрА=-
Насколько я понимаю Вы
C++
1
delete[] arr;
забыли
-=ЮрА=-
Заблокирован
Автор FAQ
12.12.2011, 11:13     Перевернуть все нечётные строки матрицы #4
Цитата Сообщение от Roof Посмотреть сообщение
Насколько я понимаю Вы
Код C++
1
delete[] arr;
забыли
- ничего я не забыл, delete [] a осмысленно не приводил, т.к. мы и так чистим память под строки здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
delete [] arr[i];
в результате arr[i] - уничтожается(удалиться указатель вместе с элементами строки), тогда если делать так delete [] arr мы будем пытаться удалить уже пустой объёкт!(Не нужно делать масло маслянным)

Не по теме:

PS:чистку памяти при 1-но кратном использовании программы можно вообще НЕ производить - система сама всё за exe почистит.

_StellS_
0 / 0 / 0
Регистрация: 09.11.2011
Сообщений: 9
12.12.2011, 16:37  [ТС]     Перевернуть все нечётные строки матрицы #5
Спасибо большое=), всё отлично работает)
Yandex
Объявления
12.12.2011, 16:37     Перевернуть все нечётные строки матрицы
Ответ Создать тему
Опции темы

Текущее время: 11:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru