Консультация № 173952
04.11.2009, 04:44
0.00 руб.
0 7 1
Добрый день уважаемые эксперты!
Помогите в решении одной небольшой задачки по Паскалю!
Дана действительная матрица размера 18 x n. Найти значение наибольшего по модулю элемента матрицы, а также индексы какого-нибудь элемента с найденным значение модуля.

Заранее огромное спасибо!!!

Обсуждение

Неизвестный
04.11.2009, 12:00
общий
это ответ
Здравствуйте, Андреев Дмитрий Фёдорович.
Вот программа, решающая Вашу задачу. Надо заметить, что мало будет таких элементов. Вот если ограничить число цифр: это возможно.
Если захотите, сделаю
Пример окна вывода программы:
Код:
Введите число столбцов N (от 1 до 10): 7
-0.820 -1.727 8.302 -12.867 14.069 -10.622 2.701
-8.586 -13.447 -4.567 12.362 2.710 -11.745 -18.582
6.518 18.815 -3.697 3.756 -8.867 -1.162 2.670
-5.526 -2.760 -17.617 17.599 15.884 -18.184 11.438
6.524 -17.361 -14.427 16.822 9.827 18.048 -17.959
1.089 -15.169 -18.475 -17.695 19.741 -0.611 -5.954
9.795 -7.356 16.453 -1.509 9.476 -12.490 -1.005
1.736 5.839 -12.669 -5.351 15.385 -5.952 3.622
-10.535 2.011 18.632 7.370 10.124 -16.228 -15.916
-0.452 4.024 0.291 -8.246 -6.923 -3.428 12.669
7.410 8.104 -4.903 -19.497 -6.175 -7.522 -1.275
-11.215 12.795 -10.699 3.611 -8.434 10.929 3.414
-17.101 -10.753 13.619 -11.288 -9.217 -13.621 -18.464
-11.849 -9.958 6.843 -5.954 -11.673 12.428 13.298
-6.080 -19.505 -8.720 -12.251 17.696 9.915 15.745
0.129 6.089 5.392 5.965 -18.233 18.814 -9.118
18.623 10.606 8.197 11.046 2.218 5.060 -4.052
-7.371 -8.568 13.377 -12.526 13.524 19.983 15.384

Максимальный элемента находится в ряду 18, колонке 6.
Его значение: 19.983
Индексы элементов, равных максимальному:
18, 6



Приложение:
CONST
max_cols = 10; {максимально возможное число столбцов N
измените, если мало. Это число - еще можно показать
без проблем}
max_rows = 18; {Из условия задачи}
max_element = 20; {Множители для случайных чисел}
min_element = -20;
diap = (max_element - min_element);

VAR
ar: array [1..max_rows, 1..max_cols] of Real;
{Действительные - это вещественные}
N1: Integer; {введенное число столбцов}
max_row, max_col, row, col: Integer;
count : Integer; {Число равных максимальному}
BEGIN
Write('Введите число столбцов N (от 1 до ', max_cols,'): ');
ReadLn(N1);
if N1 < 1 then N1 := 1; {Что делать, если неверный ввод}
if N1 > max_cols then N1 := max_cols;
{Заполнение случайными числами}
randomize; {Каждый раз новыми - инициализация генератора
псевдослучайных чисел}
for row :=1 to max_rows do
begin
for col := 1 to N1 do
begin
ar[row, col] := random*diap + min_element;
Write(ar[row, col]:8:3);
end;
WriteLn
end;

{Ищем максимальный по модулю, вернее, его индексы}
max_row := 1; {Для начала полагаем, что это первый}
max_col := 1;
for row :=1 to max_rows do
for col :=1 to N1 do
if abs(ar[row, col]) > abs(ar[max_row, max_col]) then
begin
max_row := row; max_col := col
end;
WriteLn;
WriteLn('Максимальный элемента находится в ряду ',max_row,
', колонке ',max_col,'.');
WriteLn('Его значение: ',ar[max_row, max_col]:8:3);
{Теперь найдем число равных ему - различный вывод, если есть
и если нет равных}
count := 0;
for row := 1 to max_rows do
for col := 1 to N1 do
if abs(ar[max_row, max_col]) = abs(ar[row, col]) then
inc(count);
if count = 0 then WriteLn('В массиве нет элементов, равных максимальному')
else
begin
for row := 1 to max_rows do
for col := 1 to N1 do
if abs(ar[row, col]) = abs(ar[max_row, max_col]) then
Write(row:2,',',col:2,' ');
end;
END.
5
спасибо.
Неизвестный
04.11.2009, 12:27
общий
большое спасибо!
ага..можете ограничить, я вам буду очень признателен!
Неизвестный
04.11.2009, 13:00
общий
Вот вариант с ограничением. Заодно исправил ошибку (или неточность): при подсчете числа равных не учитывалось равенство самому себе.
Все изменения отмечены так:
1) строка {!!! ИЗМЕНЕНИЕ:}
2) потом все измененные/добавленные строки отмечены {}

Код:
CONST
max_cols = 10; {максимально возможное число столбцов N
измените, если мало. Это число - еще можно показать
без проблем}
max_rows = 18; {Из условия задачи}
max_element = 10; {Множители для случайных чисел}
min_element = -10;
diap = (max_element - min_element);

{!!! ИЗМЕНЕНИЕ:}
{} fract = 0; {Самое важное - число цифр после десятичной точки}
{} {поэтому только их и ограничиваем}

VAR
ar: array [1..max_rows, 1..max_cols] of Real;
{Действительные - это вещественные}
N1: Integer; {введенное число столбцов}
max_row, max_col, row, col: Integer;
count : Integer; {Число равных максимальному}

{!!! ИЗМЕНЕНИЕ:}
{} coeff: Integer; {Поможет получить ограничение}

BEGIN
Write('Введите число столбцов N (от 1 до ', max_cols,'): ');
ReadLn(N1);
if N1 < 1 then N1 := 1; {Что делать, если неверный ввод}
if N1 > max_cols then N1 := max_cols;
{Заполнение случайными числами}
randomize; {Каждый раз новыми - инициализация генератора
псевдослучайных чисел}
{!!! ИЗМЕНЕНИЕ:}
{} coeff := 1;
{} for row := 1 to fract do coeff := coeff * 10;

for row :=1 to max_rows do
begin
for col := 1 to N1 do
begin
ar[row, col] := random*diap + min_element;
{!!! ИЗМЕНЕНИЕ:}
{} ar[row, col] := round(ar[row, col]*coeff)/coeff;

Write(ar[row, col]:8:3);
end;
WriteLn
end;

{Ищем максимальный по модулю, вернее, его индексы}
max_row := 1; {Для начала полагаем, что это первый}
max_col := 1;
for row :=1 to max_rows do
for col :=1 to N1 do
if abs(ar[row, col]) > abs(ar[max_row, max_col]) then
begin
max_row := row; max_col := col
end;
WriteLn;
WriteLn('Максимальный элемента находится в ряду ',max_row,
', колонке ',max_col,'.');
WriteLn('Его значение: ',ar[max_row, max_col]:8:3);
{Теперь найдем число равных ему - различный вывод, если есть
и если нет равных}
count := 0;
for row := 1 to max_rows do
for col := 1 to N1 do
if abs(ar[max_row, max_col]) = abs(ar[row, col]) then
inc(count);
{!!! ИЗМЕНЕНИЕ:}
{Тут была ошибка/неточность - равенство самому себе не отрабатывалась}
{} if count <= 1 then WriteLn('В массиве нет элементов, равных максимальному')
else
begin
WriteLn('Индексы элементов, равных максимальному:');
for row := 1 to max_rows do
for col := 1 to N1 do
if abs(ar[row, col]) = abs(ar[max_row, max_col]) then
Write(row:2,',',col:2,' ');
end;
WriteLn;
END.

И, конечно, если что не понятно, спрашивайте
Неизвестный
04.11.2009, 13:05
общий
спасибо!!!
давно
Профессор
401888
1232
05.11.2009, 06:44
общий
Кстати количество одинаковых здесь и не нужно, нужны только индексы любого совпавшего.
а также индексы какого-нибудь элемента с найденным значение модуля.

И вообще мне кажется что автор, как обычно бывает, исказил условие, в котором наверняка было просто найти максимальный и его индексы. Искать равные среди случайно заданных вещественных чисел это не корректно.
Неизвестный
05.11.2009, 09:01
общий
Пупорев Юрий Борисович:
Количество одинаковых нужно для корректного вывода результата.
Насчет условия могу сказать:
1) автор не возражал против предложенного варианта;
2) тогда не понятно, как понимать такую однозначную фразу:
а также индексы какого-нибудь элемента с найденным значение модуля

3) Всегда стараюсь показать, что можно сделать больше в этом задании. Иначе скучно жить
Неизвестный
05.11.2009, 14:25
общий
нее ни чего я не искожал))
как было так и написал!
Форма ответа