|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.11.2012, 17:34 | #1 |
Новичок
Джуниор
Регистрация: 08.11.2012
Сообщений: 1
|
двумерные массивы
Ребята помогите пожалуйста довести програмку до ума.
Задача заключается в следующем:Подсчитать количество локальных максимумов массива. Элемент массива является локальным максимумом, если он строго больше всех имеющихся у него соседей. Я тут набросал немного, но она работает неправильно( #include<stdio.h> #include<conio.h> #include<math.h> main() {int a[50][50],i,j,n,m,num=0,k,c,f,z; printf("Vvedite n&m\n"); scanf("%d%d",&n,&m); printf("\nVvedite massiv\n"); for (i=0;i<n;i++) for (j=0;j<m;j++) {printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]);} for (i=0;i<n;i++) {k=++i; c=--i; if(c<0) continue; for (j=0;j<m;j++) { f=++j; z=--j; if(z<0) continue; if(a[i][j]>a[c][j]) if(a[i][j]>a[i][z]) if(a[i][j]>a[k][j]) if(a[i][j]>a[i][f]) if(a[i][j]>a[c][z]) if(a[i][j]>a[c][f]) if(a[i][j]>a[k][z]) if(a[i][j]>a[k][f]) num=num+1; else printf("Error!"); } } printf("Num=%d",num); getch(); } Помогите пожалуйста, буду очень благодарен |
08.11.2012, 18:23 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
Попробуйте так:
Код:
Можно было сделать через циклы (еще 2 вложенных), но мне лень
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
08.11.2012, 18:25 | #3 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
В следующих строках не должно меняться i:
Код:
Код:
Я бы упростил следующим образом: создал вокруг матрицы "барьер". Поясняю на матрице 3х3: 00000 01230 02340 03450 00000 т.е. матрица получается не NxM, а (N+2)x(M+2). Заполняем крайние значение минимальным значением (в данном случае я написал ноль, но нужно заполнять минимальным значением для типа int, т.е. отрицательное длинное число). Эта штука позволит работать с краевыми значениями как со всеми остальными и проверок будет меньше (всегда будет восемь соседей и не нужно беспокоиться о выходе за границы выделенной под массив памяти). "Полезная" матрица, соответственно, будет начинаться с элемента с индексами [1,1], а не с нулей, как обычно. Так же советую почитать про && и перестать писать вложенные if'ы. Не проверяются на локальную максимальность угловые и прочие "краевые" элементы, а они, по идее, тоже должны участвовать. Последний раз редактировалось pu4koff; 08.11.2012 в 18:27. |
08.11.2012, 18:33 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,341
|
pu4koff, Вы правы, действительно краевые не проверяются, но сделано это умышленно.
Тогда можно сделать так, например: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Одномерные массивы, двумерные массивы, строки | Sand093 | C++ Builder | 11 | 20.05.2012 21:48 |
Двумерные массивы | ZelFar | Помощь студентам | 4 | 06.03.2012 09:57 |
Двумерные массивы(матрица) 2)Строковые массивы(строки): 3)Структуры | nuriyat | Помощь студентам | 1 | 21.01.2012 16:16 |
Двумерные массивы(массивы указателей на массивы) | krytishka99 | Помощь студентам | 1 | 29.12.2011 19:51 |
Двумерные массивы | 1Dima | Помощь студентам | 1 | 09.04.2011 15:54 |