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(функция)
Что такое подпрограмма
ü это оператор, разработанный программистом
ü имеет имя
ü может иметь входные и выходные параметры
ü размещается в разделе описаний в виде полноценной программы
Как пишется п/п
- П/п имеет заголовок, который начинается словом
Procedure или Function
(процедура) (функция) - Рядом указывается имя п/п, которое программист выбирает самостоятельно
- Если необходимо добавляются параметры (в круглых скобках)
- Для имени функции задаётся тип(результата)
- В конце заголовка ставится знак «;»
- Ниже заголовка размещается текст п/п по правилам написания программы
- После заключительного слова 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: