Программирование типичных задач при работе с массивами.

Цель работы

1. Приемы программирования циклических алгоритмов для задач с обработкой одномерного и двумерного маcсивов.

2. Вывода элементов одномерного и двумерного маcсивов.

3. Изучение одного из видов сортировки одномерного массива.

Пример первого задания.

Дан массив целых чисел А ( 4 , 5). Переставить четвертый и пятый столбец местами.

Program change_;

Var

a:array[1..4,1..5] of integer;

i,n:byte;

buf:integer;

BEGIN

Writeln(Введите элементы массива А (4*5)’);

Randomize;

For i:=1 to 4 do

For n:=1 to 5 do

a[I,n]:= integer(random(100))-50;

writeln(‘исходный массив А до перестановки’);

For i:=1 to 4 do

begin

For n:=1 to 5 do

Write(a[I,n]:4);

Writeln

End;

For i:=1 to 4 do

Begin

Buf:=a[I,4];

a[I,4]:= a[I,5];

a[I,5]:= Buf

End;

writeln(‘исходный массив А после перестановки’);

For i:=1 to 4 do

begin

For n:=1 to 5 do

Write(a[I,n]:4);

Writeln

End

END.

Пример второго задания.

Ввести n чисел. Отсортировать числа по возрастанию.

Program Sогt _;

type

size=l..100:

mas=array[size] of' integer;

var

arr_: mas;

i,n,k: size;

Buf: integer;

BEGIN

Write(‘введите количество сортируемых элементов массива ’);

Readln(n);

Writeln(‘Введите элементы массива АRR_’);

Randomize;

For i:=1 to n do

Arr_[I]:= integer(random(100))-50;

writeln(‘исходный массив до перестановки’);

For i:=1 to n do

Write(arr_[i]:4);

Writeln;

For i:=1 to n-1 do

For k:=i+1 to n do

If arr_[i]> arr_[k] then

begin

buf:= arr_[i];

arr_[i]:= arr_[k];

arr_[k]:=buf

End;

writeln(‘исходный массив после перестановки’);

For i:=1 to n do

Write(a[i]:4);

Writeln;

END.

 

Лабораторная работа №4.

Процедуры и функции – элементы структуризации программ.

Цель работы

1. Использование подпрограмм (процедур и функций) для ввода/вывода векторов и матриц.

2. Использование подпрограмм (процедур и функций) для вставки и удаления элементов массива.

Пример первого задания.

Удалить из массива последний (в том случае, если их несколько) максимальный элемент.

Для решения задачи необходимо:

· найти номер максимального элемента к;

· сдвинуть все элементы, начиная с к+1-го на один элемент влево;

· последнему элементу присвоить значение 0.

 

{$R+}

Program My;

Const

MaxN=10;la=-10;ha=21; {Размер массива и интервал значений}

Type

MyArray=Array[1..MaxN] Of Integer;

Var

A:MyArray;

k:Integer;

Procedure Init(t,v,w:Integer; Var X:MyArray);{Процедура формирования значений элементов массива}

Var

I:Integer;

Begin

Randomize;

For i:=1 To t Do

X[i]:=v+Integer(Random(w));

End;

Procedure Print(t:Integer;X:MyArray);{Вывод t первых элементов массива X}

Var

i:Integer;

Begin

For i:=l To t Do

Write(X[i]:5);

WriteLn;

End;

Function Max(t:Integer;X:MyArray):Integer;

{Поиск номера последнего максимального элемента}

Var

i,mx:Integer;

Begin

mx:=1;

For i: =2 To t Do

If X[i]>=X[Mx] Then Mx:=i;

Max:=Mx;

End;

Procedure Sz (t,q:Integer;Var X:MyArray);{Сдвиг элементов массива влево на одну позицию, начиная с элемента с номером q+1}

Var

i:Integer;

Begin

For i:=q To t-1 Do

X[i] :=X[i+1] ;

X[t]:=0;

End;

Begin

n:=MaxN;

Init(n,la,ha,A) ;

WriteLn ('Исходный массив ') ;

Print(n,A) ;

k:=Max(n,A);

Sz(n,k,A);

WriteLn(‘Массив после удаления элемента ') ;

Print(n-1,A) ;

ReadLn;

END.

Пример второго задания.

Даны 3матрицы (5*4,4*5,5*5), содержащие целые компоненты. Требуется в каждой матрице определить минимальный по модулю элемент. Распечатать ту, в которой находится больший из минимальных по модулю элемент. Считать, что такой элемент один.

{$R+}

Const

MaxN=5; МахМ=5;

Type

TMyArray=Array[l..MaxN,l..MaxM] Of Integer;

Var

A,B,C:TMyArray;

Res:array[1..3] of Integer;

M,n,max:Integer;

Procedure Init(t,v:Integer; Var X:TMyArray);{Процедура формирования значений элементов массива}

Var

I,j:Integer;

Begin

Randomize;

For i:=l To t Do

For j:=1 To v Do

X[I,j]:=Integer(Random(50))-20;

End;

For i:=l To t Do

Procedure Print(t,v:Integer;X:TMyArray);{Вывод элементов массива }

Var

I,j:Integer;

Begin

For i:=l To t Do

Begin

For j:=1 To v Do

Write(X[I,j]:5);

WriteLn;

End;

End;

Function Min(t,v:Integer;X:TmyArray):Integer;{ Функция нахождения минимального по модулю элемента}

Var

i,j:Integer;

Begin

Min:=X[1,1]:

For i:=l To t Do

For j:=1 To v Do

If abs(X[I,j])<abs(min) then

min:=X[I,j];

End;

Begin{ 0сновная программа }

Init(5,4,A) ;

Init(4,5,B) ;

Init(5,5,C) ;

Writeln(‘Матрица А’); Print(5,4,A) ;

Writeln(‘Матрица B’); Print(4,5,B) ;

Writeln(‘Матрица C’); Print(5,5,C) ;

Res[1]:=Min(5,4,A);

Res[2]:=Min(4,5,B);

Res[3]:=Min(5,5,C);

Max:=Res[1];

For n:=2 to 3 do

If Res[n]>max then

begin

Max:=res[n];

M:=n

End;

Writeln(‘Матрица содержащая максимальный из минимальных по модулю’);

Case m of

1: Print(5,4,A) ;

2: Print(4,5,B) ;

3: Print(5,5,C) ;

End;

END.

Лабораторная работа №5