Двумерные массивы

  • Автор темы Rivass
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rivass

#1
Последняя задача на массивы из моей лабы) Проблема в том, что я не могу сделать так, чтобы цикл перебирал все элементы выше главной диагонали, и именно для матриц любого размера....
По моему коду, программа будет перебирать элементы выше главной диагонали, но только в первой строке, а дальше он вылезет за пределы.... Прошу помочь разобраться....
Текст задачи:
Вводится квадратная матрица целых чисел A размером N, а также целое число K. Проверить наличие среди элементов, стоящих выше главной диагонали, элементов меньших K (вывести yes, если такие элементы имеются, иначе вывести no).
C++:
#include<stdio.h>
int a[50][50],n,m,k,i,j,s;
void main(){
scanf_s ("%d%d%d",&n,&m,&k); 
for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf_s("%d",&a[i][j]);
for(i=0,j=1;j<m;j++)
{
if(a[i][j]<k)
s=1; break;
}
if (s==1)
printf("yes");
else
printf("no");
}
 
R

Rivass

#2
rrrFer
По заданию написано что матрица квадратная, видимо забыли дописать что она размером NxM ,а не только N)
Пример:
Ввод:
C++:
N=3 M=3 K=4
Matrix
0 1 2
3 4 5
6 7 8
Вывод:
C++:
Yes
 
R

Rivass

#3
Спасибо большое за код... Но я не совсем понял кое что:
C++:
for(i=0;i<n;i++)
if(a[i][i]==k) //здесь сравнивается К с главной диагональю?
break;
 
R

Rivass

#4
Может я не правильно понимаю, но вы написали программу которая будет проверять есть ли среди элементов главной диагонали элементы меньше К) Наверное это легче чем найти элементы выше главной диагонали которые будут меньше чем К... У меня к сожалению второй случай не получается, первый получается))
 
R

Rivass

#5
Не знаю как написать подругому... Моя программа будет все считать правильно но для матриц не более чем 3 на 3, а нужна универсальная....
C++:
#include<stdio.h>
int a[50][50],n,m,k,i,j,s,z;
void main(){
scanf_s ("%d%d%d",&n,&m,&k); 
for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf_s("%d",&a[i][j]);
for(i=0,j=1;j<m;j++)
{
if(a[i][j]<k)
s=1; 
if(a[i][j]>=k)
z=0;
}
for(i=1,j=2;j<m;j++)
{
if(a[i][j]<k)
s=1;
if(a[i][j]>=k)
z=0;
}
if (s==1)
printf("yes");
else
printf("no");
}
 
R

Rivass

#6
Спасибо большое. Я дочитал до конца ваш ответ, даже вставил код в свою программу
C++:
#include<stdio.h>
int a[50][50],n,m,k,i,j,s,z;
void main(){
scanf_s ("%d%d%d",&n,&m,&k); 
for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf_s("%d",&a[i][j]);
for(i=0;i<n;i++){
for(j=i;j<n;j++)
if(a[i][j]<k)
break;
if(j<n)
break;
}
printf("%s",(i==n?"no":"yes"));
}
Но
Ввод:
C++:
N=4 K=4
matrix
5 5 5 5
5 5 5 5
5 5 5 5
5 5 5 1
Вывод:
C++:
Yes
Поидее так не должно быть, может я что-то не так сделал, посмотрите пожалуйста мой код....
 
R

Rivass

#7
Всё, дошло, использовал вложенный цикл, вот как получается:
C++:
#include<stdio.h>
int main(){
int n,m,k,s=0;
scanf("%d%d%d",&n,&m,&k); 
int a[50][50];
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]<k && j>i)
s=1; break;
}
}
if (s==1)
printf("yes");
else
printf("no");
}
 
R

Rivass

#8
rrrFer
Оказывается с break программа работает неправильно) Пришлось полностью убрать все break'и. Программа заработала корректно))
 
Статус
Закрыто для дальнейших ответов.