Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Многомерные массивы в языке СИ

Автор: 18192123 25.02.2007 19:45

Дана матрица А(55). Найти в каждой строке количество тех элементов, которые строго меньше двух своих соседей.
количество нужных элементов в каждой строке хочу записать в новый массив...но точно не знаю, как это сделать...


#include <STDIO.H>
void main ()
{
int a[5] [5], i, j;
FILE *fp;
for (i = 0; i < 5; i++)
for (j = 0; j <5; j++)
scanf ("%d" , & a[i] [j]);
fp = fopen("out.txt", "w");
for (i = 0; i <5; i++)
{
for (j = 0; j < 5; j++)
fprintf (fp, "%d", a[i] [j]);
fprintf (fp, "\n");
fprintf (fp, "============================");
}
int c[5], count ;
for (i = 0; i < 5; i++)
{
count = 0;
for (j = 0; j < 5; j++)
if ( (a[i][j+1] < a[i][j]) && (a[i][j+1] < a[i][j+2])
{
count = count + 1;
c[i] = c[i] + count;
fprintf (fp, "%d", c[i]);
}

}
fclose(fp);

}


Автор: klem4 25.02.2007 22:24

#include <stdio.h>

const int n = 5;

int M[n][n] = {
{1, 4, 3, 4, 5},
{4, 5, 5, 1, 5},
{5, 2, 6, 2, 5},
{5, 4, 1, 5, 7},
{5, 9, 10, 9, 0}
}, counts[n];

int main(void){
for (int i = 0; i < n; i++){
int count = 0;
for (int j = 1; j < n - 1; j++)
count = ((M[i][j] < M[i][j - 1]) && (M[i][j] < M[i][j + 1])) ? ++count : count;
counts[i] = count;
}
for (int i = 0; i < n; i++) printf("i = %d, counts[%d] = %d\n", i, i, counts[i]);
return 0;
}

Автор: volvo 25.02.2007 22:32

klem4,

for (int j = 1; j < n - 1; j++)
count += ((M[i][j] < M[i][j - 1]) && (M[i][j] < M[i][j + 1])) ? 1 : 0;
Полностью соответствует Стандарту, твой вариант может вызвать гнев некоторых компилеров...

Автор: 18192123 25.02.2007 23:19

 
#include <STDIO.H>
const int n = 5;
void main ()
{
int a[n] [n], i, j, counts[n];
FILE *fp;
for (i = 0; i < n; i++)
for (j = 0; j <n; j++)
scanf ("%d" , & a[i] [j]);
fp = fopen("out.txt", "w");
for (i = 0; i <n; i++)
{
for (j = 0; j < n; j++)
fprintf (fp, "%d", a[i] [j]);
fprintf (fp, "\n");
fprintf (fp, "============================");
}

for (i = 0; i < n; i++)
{
int count = 0;
for (j = 1; j < n - 1; j++)
count += ((a[i][j] < a[i][j-1]) && (a[i][j] < a[i][j+1] )) ? 1 : 0;

counts[i] = count;
}
fprintf (fp,"i= %d, counts[%d] = %d\n", i, i, counts[i] );


}
fclose(fp);

}




Объясните, из-из чего компилятор выдаёт ошибки?

Автор: volvo 25.02.2007 23:22

Вопрос на засыпку: КАКОЙ компилятор у тебя?

Автор: klem4 25.02.2007 23:24

Спасибо, надо запомнить.

Гнев - это плохо, особенно гнев компилятора smile.gif

Автор: volvo 25.02.2007 23:25

18192123
У тебя напутано с открывающими/закрывающими скобками... Вот эти 2 строки компилятор считает лишними:

fclose(fp);

}