Помогите найти ошибку - обработка матрицы

Ответить
nitrozevs
Сообщения: 14
Зарегистрирован: 13 дек 2009, 15:38

Задача: Дан двумерный массив, заполненный случайным образом. Удалить последний столбец, в котором первый элемент массива равен последнему. Учесть ситуацию если таких столбцов нет.
я написал программу:

Код: Выделить всё

#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
#include<time.h>
#define n 3
#define m 4
main()
{clrscr();
randomize();
int a[n][m],i,j,k,l,p,o,c;
o=10;
k=0;
cout<<"ICXODHbIi MACCIB"<<'\n';
for(i=0;i<n;i++)
for(j=0;j<m;i++)
{a[i][j]=0+rand()%10;};
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
cout<<a[i][j]<<'\t';};
cout<<'\n';
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{if(a[i][0]==a[i][m]) {k=k+1;
			l=i;};};
if(k==0) cout<<"Takix ctolbcoB HET"<<'\n';
else{for(i=0;i<n;i++)
       for(j=0;j<m;j++)
       if(i=l) {c=i;
	for(int s;s<m;s++)
	a[i][j]=a[i][j+1];};
};
return 0;
}
НО УЖАС, при запуске программы она выдаёт: "ICXODHbIi MACCIB" и замирает(ничего не нажимается, не "тыкается")
В чём "погрешность" моей программы???
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

15-ая строка. for(j=0;j<m;j++).
Да и с "удалением" там полный непорядок, тем более непонятно, что понимается под удалением у вас.
nitrozevs
Сообщения: 14
Зарегистрирован: 13 дек 2009, 15:38

Удаляется та строка в которой первый элемент равен последнему, причём если строк несколько(таких) то удаляется последняя(в которой первый равен последнему)
nitrozevs
Сообщения: 14
Зарегистрирован: 13 дек 2009, 15:38

я почти решил эту задачу, но она работает через раз, то удаляет то что нужно, то просто удаляет столбец "от балды"

Код: Выделить всё

#include<stdlib.h>
#include<iostream.h>
#include<conio.h>
#include<time.h>
#define n 4
#define m 3
main()
{clrscr();
randomize();
int a[n][m],i,j,k,l,p,o,c;
o=10;
k=0;
cout<<"ICXODHbIi MACCIB"<<'\n';
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{a[i][j]=0+rand()%7;};
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
{cout<<a[i][j]<<'\t';};
cout<<'\n';};
cout<<endl;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{if(a[i][0]==a[i][m]) {k=k+1;
			l=i;};};
if(k==0) cout<<"Takix ctolbcoB HET"<<'\n';
else{for(i=l;i<n;i++)
      {for(j=0;j<m;j++)
       {a[i][j]=a[i+1][j];};};
cout<<endl;
for(i=0;i<n-1;i++)
{for(j=0;j<m;j++)
{cout<<a[i][j]<<'\t';};
cout<<'\n';};
};
return 0;
}
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Определение последнего столбца, подходящего под условие
for (i=n-1;i>=0; i--)
if (a[0]==a[m-1]) break;
После выполнения i - номер искомого столбца или -1, если такого нет. Не забывайте, что у массива a[m][n] элемент с максимальными номерами - a[m-1][n-1]
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить