Форум «Всё о Паскале» _ Задачи _ Процедуры и функции
Автор: DISQUE 16.12.2007 20:59
Помогите, пожалуйста, решить задачу : Определить функцию, определяющую максимальный элемент массива и использовать ее для определения максимального элемента матрицы.
Автор: Client 16.12.2007 21:03
Цитата
Помогите, пожалуйста, решить задачу
А в чем проблема? Как найти макс элемент-смотри в FAQ'е
Автор: DISQUE 16.12.2007 21:09
В смысле, как связать максимальный элемент массива и матрицы.
Автор: andriano 16.12.2007 21:17
Сперва надо разобраться, что такое массив, и что такое матрица.
Автор: DISQUE 16.12.2007 21:27
Допустим, что массив - структура данных array, а матрица - двумерный массив со значениями i и j.
Автор: andriano 16.12.2007 22:04
Т.е. массив может иметь роизвольную размерность, а матрица - только 2? Или имеются в виду только лдномерные массивы (разница в том, как передавать параметры в функцию)?
Автор: volvo 16.12.2007 22:20
andriano как всегда - в своем репертуаре
Автору: все просто:
type vector = array[0 .. n - 1] of integer; matrix = array[0 .. m - 1] of vector;
function find_max(const arr: array of integer; const size: integer): integer; var i, max: integer; begin max := arr[0]; for i := 1 to pred(size) do if max < arr[i] then max := arr[i]; find_max := max; end;
Вызвать-то сам сумеешь?
Автор: Айра 16.12.2007 22:21
Цитата
В смысле, как связать максимальный элемент массива и матрицы.
Смотри, одномерный массив выглядит, например, так:
array[1..n] of integer
а двумерный, то бишь матрица, так
array[1 .. n, 1 .. n] of integer
что аналогично:
array[1 .. n] of array[1 .. n] of integer
т.е. матрица, грубо говоря, массив массивов.. Значит ты можешь написать ф-ию, которая находим максимум в одномерном массиве, а потом использовать ее по отдельности на каждой строке матрицы и из результатов выбрать максимальный.. Загляни сюда: http://forum.pascal.net.ru/index.php?s=&showtopic=20511&view=findpost&p=114862, там реализовано тоже, только для поиска минимального значения среди максимальных значений каждой строки матрицы, тебе же нужен максимум из максимумов..
Автор: Гость 17.12.2007 2:26
Цитата(andriano @ 16.12.2007 18:04)
Т.е. массив может иметь роизвольную размерность, а матрица - только 2? Или имеются в виду только лдномерные массивы (разница в том, как передавать параметры в функцию)?
Видимо, как в варианте volvo.
Автор: andriano 17.12.2007 2:45
Цитата(Айра @ 16.12.2007 18:21)
Значит ты можешь написать ф-ию, которая находим максимум в одномерном массиве, а потом использовать ее по отдельности на каждой строке матрицы и из результатов выбрать максимальный..
Это можно сделать и в один вызов. Примерно так:
type IntArray = array[0..0]of integer; const m = 15; n = 25; var matrix : array[0..n-1,0..m-1]of integer;
function find_max(var arr: array of integer; const size: integer): integer; begin ... end;
begin ... find_max(IntArray(matrix[0,0]), m*n);
Автор: Айра 17.12.2007 4:23
Цитата
Это можно сделать и в один вызов. Примерно так:
А можешь привести полный вариант, а то я чет не понимаю?
Автор: volvo 17.12.2007 4:45
Оля, это ж обычный TypeCast - приведение двумерной матрицы к одномерному массиву:
const n = 5; m = 4; type vector = array[1 .. m] of integer; matrix = array[1 .. n] of vector;
IntArr = array[1 .. 1] of integer;
function find_max(const arr: array of integer; const size: integer): integer; var i, max: integer; begin max := arr[0]; for i := 1 to pred(size) do if max < arr[i] then max := arr[i]; find_max := max; end;
var a: matrix; i, j: integer;
begin for i := 1 to m do begin for j := 1 to n do begin a[i, j] := random(100); write(a[i, j]:4); end; writeln; end; writeln(find_max(IntArr(a[1, 1]), m*n)); end.
Автор: Айра 17.12.2007 7:06
Цитата
это ж обычный TypeCast
volvo, я ж еще только учусь)) (у нас в универе даже практики по строкам еще не было ) а с такой записью:
IntArr = array[1 .. 1] of integer;
я сталкнулась впервые, и было непонятно, как работать с ней дальше.. Спасибо за полный код, буду разбираться)))
Автор: DISQUE 17.12.2007 15:24
Цитата(volvo @ 17.12.2007 0:45)
Оля, это ж обычный TypeCast - приведение двумерной матрицы к одномерному массиву:
const n = 5; m = 4; type vector = array[1 .. m] of integer; matrix = array[1 .. n] of vector;
IntArr = array[1 .. 1] of integer;
function find_max(const arr: array of integer; const size: integer): integer; var i, max: integer; begin max := arr[0]; for i := 1 to pred(size) do if max < arr[i] then max := arr[i]; find_max := max; end; var a: matrix; i, j: integer;
begin for i := 1 to m do begin for j := 1 to n do begin a[i, j] := random(100); write(a[i, j]:4); end; writeln; end; writeln(find_max(IntArr(a[1, 1]), m*n)); end.
Я это решение проверил в Паскале, вроде всё работает. Так это и есть правильное решение? java script:emoticon(':cool:', 'smid_4') Примечание: гость 'Гость' = гость 'DISQUE'.
Автор: andriano 17.12.2007 22:40
Цитата(Айра @ 17.12.2007 3:06)
volvo, я ж еще только учусь)) (у нас в универе даже практики по строкам еще не было ) а с такой записью:
IntArr = array[1 .. 1] of integer;
я сталкнулась впервые, и было непонятно, как работать с ней дальше.. Спасибо за полный код, буду разбираться)))
Смотри в доках по "опредеяемые пользователем типы данных" или "user defined".
Автор: DISQUE 19.12.2007 1:30
Всё-таки это и есть решение?
Автор: Malice 19.12.2007 1:37
Цитата(DISQUE @ 18.12.2007 21:30)
Всё-таки это и есть решение?
Что ты как маленький ? Решение это или нет зависит только от того сможешь ли ты объяснить его при необходимости преподавателю. Если работает правильно, то это уже решение. Не может быть одной однозначно правильной реализации задачи, правильных решений может быть бесконечно много.
Автор: DISQUE 19.12.2007 1:48
Цитата(Malice @ 18.12.2007 21:37)
Что ты как маленький ? Решение это или нет зависит только от того сможешь ли ты объяснить его при необходимости преподавателю. Если работает правильно, то это уже решение. Не может быть одной однозначно правильной реализации задачи, правильных решений может быть бесконечно много.