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

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

Форум «Всё о Паскале» _ Задачи _ Процедуры и функции

Автор: 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 как всегда - в своем репертуаре dry.gif

Автору: все просто:

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

Цитата
Это можно сделать и в один вызов. Примерно так:

А можешь привести полный вариант, а то я чет не понимаю? rolleyes.gif

Автор: 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

smile.gif volvo, я ж еще только учусь)) (у нас в универе даже практики по строкам еще не было blink.gif ) а с такой записью:
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) *

smile.gif volvo, я ж еще только учусь)) (у нас в универе даже практики по строкам еще не было blink.gif ) а с такой записью:
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) *

Что ты как маленький ? Решение это или нет зависит только от того сможешь ли ты объяснить его при необходимости преподавателю. Если работает правильно, то это уже решение. Не может быть одной однозначно правильной реализации задачи, правильных решений может быть бесконечно много.

Я ничего такого не сделал. Просто хотел уточнить.

Автор: DISQUE 6.01.2008 6:32

Огромное спасибо всем! Всё работает! good.gif