Осталось 15 минут, помогите с лабой. Матрицы на Си
Задана матрица A целых чисел размера N M (N, M не превышают 20, задаются как параметры). Преобразовать ее в матрицу B путем удаления столбца этой матрицы с максимальным номером, в котором все элементы больше 1 и упорядочены по возрастанию.
Если такого столбца не найдется, программа должна выдать соответствующее сообщение. На печать следует вывести как исходную, так и результирующую матрицу. Матрицы в программе должно быть две. Исходня матрица должна остаться не измененной.
В программе должна быть предусмотренна проверка на правильность ввода параметра N и M. В случае не правильного ввода необходимо выдать "Error" и завершить работу программы
вот мой код.
#include <stdio.h>
#define N 20
#define M 20
int main()
{
int arr[N][M],n,m,x,del;
int a = scanf("%d", &n);
if(a==0){
printf("Error");
return -1;
a = scanf("%d", &m);
if(a==0){
printf("Error");
return -1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf("%d", &x);
arr[i][j] = x;
}
}
int flag = 0;
for(int i=m-1; -1<i; i--)
{
for(int j=0; j<n; j++)
{
if(arr[j][i] > 1)
{ if(j+1!=n+1)
{
if(arr[j][i] < arr[j+1][i])
{
flag = 1;
}
else flag = 0;
}
}
else{
flag = 0;
}
//printf("%d ", arr[j][i]);
}
if(flag == 1)
{
del = i;
break;
}
//printf("\n");
}
if(flag == 0) printf("not found\n");
printf("A:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("B:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if(flag==1){
if(j == del) continue;
}
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
Ответы (1 шт):
Если у вас
a != 0, то у вас ничего не происходит т.к. у вас написано вот так:int a = scanf("%d", &n); if (a == 0) { printf("Error"); return -1; //Тут дальше ваш код }А должно быть примерно вот так:
int a = scanf("%d", &n); if (a == 0) { printf("Error"); return -1; }else{ //Тут дальше ваш код }Или же просто поставить скобку
}послеreturn -1;если безelseделатьВ двойном цикле, внутренний цикл должен идти от
0доn - 1. Чтобы не выходить за пределы матрицы при проверкеif(arr[j][i] < arr[j + 1][i])Если элемент матрицы <= 1, то вам уже не подходит этот столбец. Так что мало просто
flag = 0, послеelse. Нужно так же пропустить этот столбец при помощиbreak.