Здравствуйте, нужно перевернуть четные строки двумерного массива. переворот одномерного ясен но вот с двумерным не выходит. помогите добавить условие плиз!!!
#include <iostream>
#include <stdlib.h>
#include <conio.h>
int **formMatr (int n, int m)
{
int **matr = new int *[n];
for (int i=0; i<n; i++)
matr=new int [m];
return matr;
}
int **formMatr2 (int **matr,int n, int m)
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
matr[j]=rand()%20;
return matr;
}
void print (int **matr, int n, int m)
{
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++) printf («%7d »,matr[j]);
printf («\n» );
}
}
int ** dell (int **matr,int n, int m)
{
int r;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
if (matr%2==0)
for(int i=0,j=n-1;i<j;i++,j--)
{int r=matr;
matr=matr[j];
matr[j]=r;}
}
int main ()
{
int **matr;
int n=3,m=3;
matr=formMatr(n,m);
matr=formMatr2(matr,n,m);
print (matr,n,m);
matr=dell(matr,n,m);
print (matr,n,m);
for (int i=0; i<n; ++i)
delete [] matr ;
delete [] matr ;
system(«PAUSE»);
return 0;
}
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Строчка 1 программы, очевидно, нужна для того, чтобы организовать цикл по строкам, и i у нас — номер строки матрицы.
Зачем нужна строчка 2?
В строчке 3, что там считается в качестве условия цикла? Я спорить готов, что matr%2 всегда равен нулю. Потому что matr — это адрес, который скорее всего выравнен на 4-х байтовую границу, то есть делится на четыре, значит остаток от деления на 2 — это ноль, бла-бла-бла. По-моему, хотелось, чтобы это условие проверяло бы чётность номера строки, то есть чётность числа лежащего в переменной i. Не так ли? Надо ли объяснять как записать условие проверки чётности i?
Строка 4 выглядит так, будто хотелось организовать цикл, который будет выполнять своё тело для всех пар (i,j) из списка (0, n-1); (1, n-2);… (n/2, n/2+1). (Если n чётное то так, если же нечётное, то последняя пара будет выглядеть несколько иначе, но не суть важно). И мы даже можем предположить зачем такой цикл нужен: чтобы обменять i-тый и j-тый элементы строки, таким образом поменяв порядок расположения элементов на обратный. Но — увы, — таким образом записанный цикл сделает всю программу неработоспособной, по двум причинам:
Строки 5..7, выглядит как код меняющий местами значения двух переменных. Но каких переменных? matr и matr[j]? matr — это i-тая строка, matr[j] — это j-тая строка. Мы же хотим менять местами не строки, а элементы. Значит везде вместо matr или matr[j] должно стоять выражение вида matr[?][?], где вместо вопросиков какие-то переменные. Какие? Вместо первого вопросика — номер текущей строки (надо полагать i), вместо второго — номер элемента в строке. Мы меняем местами два элемента, один из них имеет номер — j, второй — например, k, если ты исправишь недочёты в моём замечании к строке 4.
Затем, внутри функции main есть строчка: matr=dell(matr, n, m). Эта строчка приведёт к тому, что будет вызвана функция dell (которая должна проделать всю работу из задания), и в переменную matr будет записано значение, возвращённое функцией dell. Но, внутри функции dell нигде не использован return. А он там должен быть. Или, в качестве альтернативы, можно изменить заголовок функции dell, чтобы она возвращала не int**, а void. После чего вызывать dell из main таким образом: dell(matr, n, m), без предшествующей части «matr=».
Если всё это проделать, программа, по-моему, должна начать работать. Но можно её ещё немного довести до ума, можно удалить строчку 3, и изменить строчку 1, чтобы i перебирало бы не все числа от 0 до n, а только числа 0, 2, 4,… Для этого надо заменить i++ (увеличивающий каждый раз i на 1) на другой закон изменения.
ps. А где это тебя так программированием мучают. В школе что ли? Ну дык каникулы только кончились, до конца четверти ещё полтора месяца. Или ты двоечник и «хвосты» подбираешь?
меня куда больше пугает совместное использование #include <iostream> и printf :-)
Вы уж решите, это C++ или C. ;-)
Про программисткие мучения — по крайней мере здесь есть попытки предложить свой код, и это не может не радовать.
Ну люблю я printf и всё )))
«Только разжав мои холодеющие пальцы, мы сможете забрать у меня printf()» :-D
Просто — если это C++ — тогда std::cout (и #include <iostream> ) а если C — то printf() и #include <stdio.h>
Да где то так, спасибо))
Если уж на то пошло то двоечница )
и нет не такая мучают в институте))
Спасибо уже разобралась )