P:Array Of Array Of Integer;

//

i,j:Integer;

Begin

//Задание статического массива

WriteLn('Array a:'); // Array a:

For i:=1 To 4 Do // 0 3 86 20 27 67 31 16

Begin // 37 42 8 47 7 84 5 29

For j:=1 To 8 Do // 91 36 77 32 69 84 71 30

Begin // 16 32 46 24 82 27 48 14

a[i,j]:=Random(100);

Write(a[i,j]:5);

End;

WriteLn;

End;

//----------------------------

//Задание статического массива

b:=a; //Присваивание возможно, т.к. описаны вместе

WriteLn('Array b:'); // Array b:

For i:=1 To 4 Do // | 87| 28| 77| 97| 49| 88| 82| 2|

Begin // | 14| 14| 50| 2| 59| 0| 77| 65|

Write('|'); // | 77| 70| 55| 20| 68| 59| 95| 64|

For j:=1 To 8 Do // | 99| 24| 67| 29| 8| 77| 49| 88|

Begin

b[i,j]:=Random(100);

Write(a[i,j]:4,'|');

End;

WriteLn;

End;

//----------------------------

//Задание двух матриц и вычисление суммы

WriteLn('Arrays m,n,k:');

For i:=1 To 2 Do

Begin

For j:=1 To 2 Do

Begin

m[i,j]:=Random(10); // Arrays m,n,k:

n[i,j]:=Random(10); // | 5 9| | 5 6| | 10 15|

k[i,j]:=m[i,j]+n[i,j]; // | 3 7| | 0 9| | 3 16|

End;

Write('|');

For j:=1 To 2 Do

Write(m[i,j]:2);

Write('| |');

For j:=1 To 2 Do

Write(n[i,j]:2);

Write('| |');

For j:=1 To 2 Do

Write(k[i,j]:3);

WriteLn('|');

End;

//----------------------------

//Задание динамического прямоугольного массива

SetLength(d,3,4);

WriteLn('Array d:'); // Array d:

For i:=0 To 2 Do // N O Y R

Begin // I A S Z

For j:=0 To 3 Do // U T F D

Begin //

d[i,j]:=Char(Ord('A')+Random(26));

Write(d[i,j]:4);

End;

WriteLn;

End;

//----------------------------

//Задание динамического треугольного массива (треугольник Паскаля)

SetLength(p,5); //Столько будет строк

For i:=0 To 4 Do //Формирование остальных строк

Begin

SetLength(p[i],i+2); //Столько элементов в i-й строке

p[i,0]:=1; p[i,i+1]:=1; //Задание крайних элементов

For j:=1 To i Do //Вычисление средних элементов

p[i,j]:=p[i-1,j-1]+p[i-1,j];

End;

WriteLn('Array p:'); // Array p:

For i:=0 To 4 Do // 1 1

Begin // 1 2 1

Write('':8-i*2); // 1 3 3 1

For j:=0 To i+1 Do // 1 4 6 4 1

Write(p[i,j]:4); // 1 5 10 10 5 1

WriteLn;

End;

//----------------------------

WriteLn('Len p = ',Length(p));// Len p = 5

WriteLn('Low p = ',Low(p)); // Low p = 0

WriteLn('Hig p = ',High(p)); // Hig p = 4

//----------------------------

ReadLn;

End.

 

{---------------------}

{ ОПИСАНИЕ МАССИВОВ }

{---------------------}

Var {Статические массивы} s:Array['A'..'C'] Of Boolean; //Логический массив c:Array[1..5] Of Char= //Символьный массив 'ABCDE'; //с начальными данными a:Array[5..10] Of Integer= //Числовой массив (3,5,4,2,6,7); //с начальными данными {Динамические массивы} d:Array Of Integer; //Числовой динамический массив

I:Integer;

Begin

SetLength(d,10); //Выделение памяти дин. массиву

{--------------------}

d[1]:=100; s['A']:=True; //Присваивание значения элементу

a[7]:=Random(100); //Случайное значение

{--------------------}

WriteLn(SizeOf(a)); //Размер статического массива

WriteLn(SizeOf(d[0])*Length(d));//Размера динамического массива

{--------------------}

FillChar(a,SizeOf(a),0); //Заполнение массива нулями

FillChar(d[0],SizeOf(d[0])*Length(d),0);

{--------------------}

WriteLn(Low(d),'-',High(d)); //Получение диапазона индексов

WriteLn(Length(d)); //и длины массива

{--------------------}

For i:=Low(a) To High(a) Do //Заполнение массива

a[i]:=10+Random(90); //случайными двузначными числами

// ЗАМЕЧАНИЕ // Элемент массива не может служить счётчиком цикла FOR: // For a[1]:=1 To 10 Do; - ОШИБКА !

ReadLn;

End.

 

{---------------------}

{ ОПИСАНИЕ МАССИВОВ }

{---------------------}

Var

a:Array[0..9] Of Integer; {Числовой массив}

IMax,IMin:Integer; {Наибольший и наименьший}

c:Array[1..11] Of Char= {Символьный массив}

'ABRACADABRA';

S:Char;

I:Integer;

Begin

//-------------------------------------------------

//ЗАДАЧА 1.

//Заполнить массив случайными двухзначными числами.

//Найти

//а) индексы наибольшего и наименьшего элементов

//б) диапазон значений элементов

//-------------------------------------------------

Randomize;

For i:=Low(a) To High(a) Do //Заполнение числового массива

Begin

a[i]:=10+Random(90); //случайными двузначными числами

Write(a[i],' '); //Вывод элементов в строчку

End;

WriteLn;

IMax:=Low(a); IMin:=Low(a); //Начальные значения индексов

For i:=Low(a)+1 To High(a) Do

Begin

If a[i]<a[IMin] Then IMin:=i; //Обновление наименьшего

If a[i]>a[IMax] Then IMax:=i; //Обновление наибольшего

End;

WriteLn('Min: a[',IMin,'] = ',a[IMin],' Max: a[',IMax,

'] = ',a[IMax]);

//-------------------------------------------------

//ЗАДАЧА 2.

//В заданном символьном массиве найти первую позицию

//указанной буквы

//-------------------------------------------------

For i:=Low(c) To High(c) Do //Вывод символьного массива

Write(c[i]);

WriteLn;

Write('Symbol: '); ReadLn(s);

For i:=Low(c) To High(c) Do //Перебор элементов массива

If c[i]=s Then Break;

If i<=High(c) Then WriteLn('Result: ',i)

Else WriteLn('No Result');

ReadLn;

End.

Билет №11, 12:

Строковый тип данных является сложным. Строки рассматриваются как одномерный символьный массив, со строкой можно выполнить те же действия что и с динамическим массивом, однако строки выделены в особый тип и для них разработана масса операторов, основная задача этих операторов выполнять преобразование и анализ строк.

//Строки

Var

S,T,F:String; //Описание строк

i,c:Integer;

Ch:Char;

Begin

//Образование строк

T:=''; //Пустая строка

S:='asd'; //Присваивание произвольного текста

S:=StringOfChar('@', 20); //Строка с повторяющимся символом

S:=S+T; //Соединение строк (конкатенация)

 

//Числовые функции строковых аргументов

i:=Length('qwerty'); //Длина i строки 'qwerty'

i:=StrToInt('123'); //Преобразование строки '123' в целое число i

i:=Pos('mid','piramida'); //Поиск подстроки 'mid' в строке 'piramida'

//i - позиция вхождения (иначе i = 0)

//Строковые функции строковых аргументов

S:=AnsiUpperCase('Abc'); //Преобразование малых букв 'Abc' в большие

S:=AnsiLowerCase('Abc'); //Преобразование больших букв 'Abc' в малые

S:=Trim(' qwerty '); //Удаление нач. и кон. пробелов около 'qwerty'

S:=TrimLeft(' qwerty'); //Удаление только нач. пробелов ' qwerty'

S:=TrimRight('qwerty '); //Удаление только кон. пробелов 'qwerty '

S:=Copy('qwerty', 2, 3); //Выделение из 'qwerty' подстроки 'wer'

 

//Строковые функции числовых аргументов

S:=IntToStr(123); //Преобразование целого числа 123 в строку '123'

S:=FloatToStr(123.34); //Преобразование вещественного числа в строку

 

//Строковые процедуры

Delete(S,2,3); //Удаление из S со второго символа трёх штук

Insert('qwerty',S,4); //Вставка 'qwerty' в S от четвёртого символа

Val('123',i,c); //Преобразование строки '123' в число i,

//c - позиция неправильного символа (иначе c = 0)

 

//Пример 1. Замена всех малых латинских букв пробелами

//----------------------------------------------------

S:='123asd123';

For i:=1 To Length(S) Do

If ('a'<=S[i]) And (S[i]<='z') Then S[i]:=' ';

WriteLn('Result ',S);

 

//Пример 2. Переворот строки

//----------------------------------------------------

Write('String : '); ReadLn(S);

 

T:='';

For i:=1 To Length(S) Do

T:=S[i] + T;

WriteLn('Result ',T);

 

//Пример 3. Замена указанного символа на заданный текст

//----------------------------------------------------

Write('String: '); ReadLn(S);

Write('Symbol: '); ReadLn(Ch);

Write('Text : '); ReadLn(F);

 

T:='';

For i:=1 To Length(S) Do

If S[i]=Ch Then T:=T+F Else T:=T+S[i];

WriteLn('Result ',T);

 

//Пример 4. Разбиение строки на слова

//----------------------------------------------------

Write('String: '); ReadLn(S);

c:=0;

For i:=1 To Length(S) Do

If S[i]=' ' Then

Begin

If i>c+1 Then

WriteLn(Copy(S,c+1,i-c-1));

c:=i;

End;

If i>c+1 Then WriteLn(Copy(S,c+1,i-c-1));

 

//Пример 5. Сортировка массива строк

//----------------------------------------------------

SetLength(M,5);

M[0]:='Cat'; M[1]:='Dog';

M[2]:='Horse'; M[3]:='Bird';

M[4]:='Mouse';

 

WriteLn('Strings: ');

For i:=0 To High(M) Do Write(M[i],' ');

WriteLn;

 

For i:=Low(M)+1 To High(M) Do

Begin

S:=M[i]; c:=i;

While (c>0) And (M[c-1]>S) Do

Begin

M[c]:=M[c-1];

c:=c-1;

End;

M[c]:=S;

End;

 

WriteLn('Result: ');

For i:=0 To High(M) Do Write(M[i],' ');

WriteLn;//----------------------------------------------------

ReadLn;

End.

 

Билет №13, 14:

Существует 2 вида подпрограмм: Procedure (процедура) и Function(функция)

Что такое подпрограмма

ü это оператор, разработанный программистом

ü имеет имя

ü может иметь входные и выходные параметры

ü размещается в разделе описаний в виде полноценной программы

Как пишется п/п

  1. П/п имеет заголовок, который начинается словом
    Procedure или Function
    (процедура) (функция)
  2. Рядом указывается имя п/п, которое программист выбирает самостоятельно
  3. Если необходимо добавляются параметры (в круглых скобках)
  4. Для имени функции задаётся тип(результата)
  5. В конце заголовка ставится знак «;»
  6. Ниже заголовка размещается текст п/п по правилам написания программы
  7. После заключительного слова End ставится знак «;» (а не «.»)

 

Как вызывается п/п

Упоминанием своего имени в тексте программы

 

Пример процедуры без параметров

Program Examp1;

{$APPTYPE CONSOLE}

Uses

SysUtils;

//--------------------------------------

//Пример процедуры, выполняющей задержку

//--------------------------------------

Procedure MyPause; //Заголовок с именем MyPause

Begin //Начало раздела операторов подпрограммы

Write('Press ENTER');

ReadLn;

End; //Конец подпрограммы

Begin //Раздел операторов основной программы

MyPause; //Вызов подпрограммы

End.

 

 

Параметры п/п

 

Параметры используются для обмена данными между основной программой и п/п. Различают функциональные параметры и аргументы.

С помощью параметров –аргументов передаются данные от основной программы к п/п. Аргументы описываются рядом с именем п/п в круглых скобках как обычные переменные, но без слова Var.

При вызове п/п вместо аргументов можно подставлять любые выражения соответствующего типа.

 

 

Program Examp2;

{$APPTYPE CONSOLE}

Uses

SysUtils;

//------------------------------------

//Процедура, выводящая разряжённый текст

//------------------------------------

Procedure WidthTxt(s:String); //Заголовок с именем WidthTxt и аргументом s

Var //Раздел описаний подпрограммы

I:Integer;

Begin //Раздел операторов подпрограммы

For i:=1 To Length(s) Do

Write(s[i],' ');

End; //Конец подпрограммы

Begin //Раздел операторов основной программы

WidthTxt('Dog'+'Cat'); //Вызов подпрограммы

ReadLn;

End.

Аргументы и переменные раздела описаний п/п называют локальными переменными. Они формируются в начале выполнения п/п и удаляются из памяти по окончании работы п/п.

С помощью функциональных параметров передаются данные от п/п к основной программе. Функциональные параметры описываются так же, как и аргументы, но с приставкой слова Var.

При вызове п/п вместо функционального параметра необходимо подставить переменную соответствующего типа (а не выражение).

Program Examp3;

{$APPTYPE CONSOLE}

Uses

SysUtils;

//------------------------------------

//Процедура, удаляющая лишние пробелы

//ВХОД: s - строка текста

//ВЫХОД: t - строка без лишних пробелов

//------------------------------------

Procedure KillSpace(s:String; Var t:String);

Var //Раздел описаний подпрограммы

I:Integer;

Begin //Раздел операторов подпрограммы

t:=s[1];

For i:=2 To Length(s) Do

If (s[i]<>' ') Or

(s[i-1]<>' ') Then

t:=t+s[i];

t:=Trim(t);

End; //Конец подпрограммы

Var

x:String; //Раздел описаний основной программы

Begin //Раздел операторов основной программы

KillSpace(' Dog Cat ',x); //Вызов подпрограммы

WriteLn(x); //Вывод результата

ReadLn;

End.

Функциональные параметры разрешается употреблять и в качестве аргументов для передачи данных в п/п.

 

При написании подпрограмм можно пользоваться уже имеющимися подпрограммами, в том числе и функциями API (Application Programming Interface), которые находятся в библиотеках DLL.

 

Program Examp4;

{$APPTYPE CONSOLE}

Uses

Windows, SysUtils;

//-----------------------------------------

// Установка курсора по координатам X, Y

//-----------------------------------------

procedure GotoXY(X, Y: Word);

Var

Coord: TCoord; //Для установки позиции экрана (Windows)

Begin

Coord.X := X;

Coord.Y := Y;

SetConsoleCursorPosition(

GetStdHandle(STD_OUTPUT_HANDLE), Coord); //(Функция API)

End;

Begin //Раздел операторов основной программы

GotoXY(10,20);

WriteLn('1234'); //Вывод результата

ReadLn;

End.

 

 

Билет №20: