Использование динамических массивов

Задача

Десять раз генерировать ряд случайных чисел от 0 до 99.
Каждый ряд также должен иметь произвольную длину.
В каждом ряде следует найти максимальное число.
Сохранить только максимальные числа и вывести их на экран.

Решение

 

Описание переменных: 

arrmax – обычный массив, где будут сохраняться максимальные значения рядов;
row – динамический массив для текущего ряда чисел;
n – длина текущего ряда чисел.

Алгоритм решения задачи: 

Переменной j будет играть роль индекса элементов массива arrmax. В конце цикла for, который сделает 10 итераций, j будет увеличиваться на единицу, что будет означать переход к следующей ячейке массива.

Длина очередного ряда чисел случайна. Получив значение n, выделяем память под динамический массив с помощью процедуры getmem.

Заполняем динамический массив случайными числами.

Записываем в очередную ячейку массива arrmax первое значение динамического массива. Если какое-либо последующее значение массива, на который указывает row, будет большеarrmax[j], то производится перезапись значения.

После нахождения максимума память можно освободить (freemem).

Программа на языке Паскаль: 

 

type
    arrdinamic = array[1..50] of integer;
 
var
    arrmax: array[1..10] of integer;
    row: ^arrdinamic;
    n, i, j, k: integer;
 
begin
    randomize;
 
    j := 1;
    for i := 1 to 10 do begin
        n := random(50) + 1;
        getmem(row,n*sizeof(integer));
        for k := 1 to n do
            row^[k] := random(100);
        arrmax[j] := row^[1];
        for k := 1 to n do
            if row^[k] > arrmax[j] then
                arrmax[j] := row^[k];
        freemem(row,n*sizeof(integer));
        j := j + 1
    end;
 
    for i := 1 to 10 do
        write(arrmax[i], ' ');
 
readln
end.

 

Тема

Динамические структуры

Уровень

Сложные задачи

Комментарии

uses crt;
const nmax=20;
type
  Tmas=^TTmas;
  TTmas=array[1..1] of integer;
  Tmatr=^TTmatr;
  TTmatr=array[1..1] of Tmas;
var
  a:Tmatr;
  n,m,i,j,x:integer;
  f:boolean;
begin
clrscr;
randomize;
repeat
write('vvedite kolichestvo strok ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('vvedite kolichestvo stolbtsov ',nmax,' m=');
readln(m);
until m in [1..nmax];
getmem(a,sizeof(TTmatr)*n);
for i:=1 to m do
getmem(a^[i],sizeof(integer)*m);
writeln ('mu poluchili takuy matristy:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    repeat
    a^[i]^[j]:=random(20);
    until a^[i]^[j]<>0;
    write(a^[i]^[j]:4);
   end;
  writeln;
 end;
writeln;
 
end.

freemem(row,n*sizeof(integer)); - ошибка, должно быть freemem(row); И произвольный массив - это не до 50, а любое число, включая числа больше 50