Вопрос № 165423: Здравствуйте! У меня проблема! Не получается задача: Дана матрица целых чисел. Подсчитать количество элементов, предшествующих максимуму и количество элементов, следующих за минимумом.. <i>На языке си</i>. Помогите пожалуйста кто чем сможет!!!<...
Вопрос № 165425: Здравствуйте. Помогите пожалуйста написать программу. Вычислить сумму порядковых номеров всех букв, входящих в слово SUM. Спасибо....
Вопрос № 165.423
Здравствуйте! У меня проблема! Не получается задача: Дана матрица целых чисел. Подсчитать количество элементов, предшествующих максимуму и количество элементов, следующих за минимумом.. На языке си. Помогите пожалуйста кто чем сможет!!!
Отправлен: 20.04.2009, 15:48
Вопрос задала: Silentm (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Silentm! Задача решается следующим образом: 1. Ищем позицию минимума и максимума в матрице (если есть повторяющиеся элементы, взять первый или последний). Делается это примерно так: int i, j, imax=0, jmax=0, imin=0, jmin=0; for (i=0; i<m; i++) for (j=0; j<n; j++) { if (a[i][j]>a[imax][jmax]) {imax = i; jmax = j;} if (a[i][j]<a[imin][jmin]) {imin = i; jmin = j;} } 2. Количество элементов до (i,j) элемента вычисляется как i*n+j (n-число столбцов массива). 3.
Количество элементов после (i,j) элемента вычисляется, например, как m*n-(i*n+j)-1. Вот так решается задача, реализовать, надеюсь, сможете сами, я писать код не буду, не хочу путать Вас, потому что могу ошибиться с чистым си-стилем. Удачи!
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Специалист)
Ответ отправлен: 20.04.2009, 20:55
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 247922 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
int main() { unsigned int i,j; int
matrix[ROWS][COLS],*iPtr,*endPtr,*min,*max; setlocale(LC_ALL,"russian"); srand((unsigned int)time(0)); // Заполним матрицу случайными значениями и выведем ее printf("Исходная матрица:
"); for(i=0;i<ROWS;++i) { for(j=0;j<COLS;++j) { matrix[i][j]=rand()%51-25; printf("%4d ",matrix[i][j]); } printf("
"); } // Установим указатели на начало min=max=iPtr=&matrix[0][0]; endPtr=iPtr+ROWS*COLS; // Указатель на следующий за концом элемент // Пока не конец матрицы while(iPtr!=endPtr) { min=*min>=*iPtr?iPtr:min; max=*max<*iPtr?iPtr:max; ++iPtr; } // Печатаем результат printf("Элементов предшествующих максимуму: %d
",max-&matrix[0][0]); printf("Элементов следующих за минимумом : %d
",endPtr-1-min); system("PAUSE"); return 0; }
Результат работы:
Код:
Исходная матрица: -19 7 2 -23 -23 19 -16 -20 -8 2 -11 -16 17 -7 18 23 -19 -23 -25 -3 Элементов предшествующих максимуму:
15 Элементов следующих за минимумом : 1
Ответ отправил: Micren (статус: Практикант)
Ответ отправлен: 20.04.2009, 21:11
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 247925 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.