Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

PROGRAM DYNAM_MEMORY;

Читайте также:
  1. Program asm_prg;
  2. Program Cikl_3;
  3. Program MyFirst;
  4. Program primer;
  5. Program Str1; Var S : String; Begin
  6. Program Str4; Var S,B : String; I : Byte; Begin
  7. Program Str6; Var
  8. Заголовок программы Program

TYPE MAS = ARRAY [1..2] OF < требуемый_тип_элемента >;

MS = ^MAS;

VAR A: MS;

I, NF: INTEGER;

BEGIN

WRITELN ('Введите фактическое число элементов массива');

READLN (NF);

GETMEM (A, SIZEOF(< требуемый_тип_элемента >)*NF);

FOR I:= 1 TO NF DO

BEGIN

WRITELN('Введите ', I, ' -ый элемент массива ');

READLN(A^[I])

END; {И далее все циклы работы с массивом используют NF }

.....

FREEMEM (A, NF*SIZEOF (< требуемый_тип_элемента> ));

END.

Рассмотрим пример использования динамического одномерного массива, который используется как двумерный массив. После ввода реальной размерности массива и выделения памяти для обращения к элементу двумерного массива адрес его рассчитывается, исходя из фактической длины строки и положения элемента в строке (при заполнении матрицы по строкам). Требуется найти максимальный элемент в матрице и его координаты.

USES CRT;

TYPE T1=ARRAY[1..1] OF INTEGER;

VAR A:^T1;

N,M,I,J,K,P:INTEGER;

MAX:INTEGER;

BEGIN

CLRSCR;

WRITE('N='); READLN (N);

WRITE('M='); READLN (M);

GETMEM (A,SIZEOF(INTEGER)*N*M);

FOR I:=1 TO N*M DO READ(A^[I]);

MAX:=A^[1]; K:=1; P:=1;

FOR I:=1 TO N DO

FOR J:=1 TO M DO

IF A^[(I-1)*M+J] > MAX THEN

BEGIN

MAX:=A^[(I-1)*M+J];

K:=I; P:=J

END;

WRITE('строка=',K:2,' столбец=',P:2);

FREEMEM(A,2*N*M);

READKEY;

END.

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

местами.

USES CRT;

TYPE VK=^T1;

T1=ARRAY[1..1] OF INTEGER;

MT=^T2;

T2=ARRAY[1..1] OF VK;

VAR A:MT;

M,N,I,J,K,L:INTEGER;

MAX,MIN:INTEGER;

R:POINTER;

BEGIN

CLRSCR;

READLN (N,M);

GETMEM(A,SIZEOF (POINTER)*M); {выделение памяти под указатели столбцов матрицы}

FOR J:=1 TO M DO

GETMEM (A^[J],SIZEOF(INTEGER)*N); {выделение памяти под элементы столбцов}

FOR I:=1 TO N DO

FOR J:=1 TO M DO

READ(A^[J]^[I]);

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO M DO

WRITE (A^[J]^[I]:4);

WRITELN

END;

MAX:=A^[1]^[1]; K:=1; MIN:=MAX; L:=1;

FOR J:=1 TO M DO

FOR I:=1 TO N DO

IF A^[J]^[I]<MIN THEN

Begin MIN:=A^[J]^[I]; L:=J; end

ELSE

IF A^[J]^[I]>MAX THEN

BEGIN MAX:=A^[J]^[I]; K:=J; END;

{для обмена столбцов достаточно поменять указатели на столбцы}

IF K<>L THEN R:=A^[K]; A^[K]:=A^[L]; A^[L]:=R

FOR I:=1 TO N DO

BEGIN

FOR J:=1 TO M DO

WRITE(A^[J]^[I]:3,' ');

WRITELN

END;

FOR I:=1 TO M DO

FREEMEM (A^[I],N*SIZEOF(INTEGER));

FREEMEM (A,M*SIZEOF(POINTER))

END.

Контрольные вопросы:




Дата добавления: 2014-12-18; просмотров: 234 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2026 год. (0.078 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав