Этапы создания программы в среде Pascal ABC.NET 1. Запустить среду разработки Pascal ABC.NET

Тема 1

Лабораторная работа № 1 "Разветвляющиеся программы"

1. Запустить среду разработки PascalABC.NET.

 

2. Ввести текст программы

 

3. Сохранить программу.

4. Выполнить компиляцию программу - CTRL+F9 (меню Программа - Компилировать)
Если на данном этапе обнаружены ошибки, исправить их и повторно откомпилировать.

5. Запустить программу на исполнение - F9 (меню Программа - Выполнить)

 

После ввода данных выводится результат работы программы

В случае если Вы не можете определить где допущена ошибка в программе можно выполнить пошаговую трассировку.

Для этого необходимо:

1. Установить точку останова на строке с которой предполагается возникновение ошибки. Для этого щелкнуть левой кнопкой мыши на поле возле данной строки.

 

2. Запустить программу на исполнение - F9

3. Программа выполниться до точки останова


4. После этого необходимо выполнить пошаговую трассировку с помощью клавиш F7 и F8.

 

Объявление переменных

Переменные могут быть описаны в разделе описаний, а также непосредственно внутри любого блока begin/end.

Примеры объявления переменных

var
a,b,c: integer;
d: real := 3.7;
s := 'Pascal forever';
al := new ArrayList;
p1 := 1;

Внутриблочные объявления переменных (в каждой секции var может быть лишь один элемент описания)

begin
var
a1,a2,a3: integer;
var s := '';
...
end
.

 

Основные типы

Целые

shortint -128..127
smallint -32768..32767
integer, longint -2147483648..2147483647
int64 -9223372036854775808..9223372036854775807
byte 0..255
word 0..65535
longword, cardinal 0..4294967295
uint64 0..18446744073709551615

Вещественный

Тип Размер, байт Количество значащих цифр Диапазон значений
real 15-16 -1.8∙10308 .. 1.8∙10308
double 15-16 -1.8∙10308 .. 1.8∙10308
single 7-8 -3.4∙1038 .. 3.4∙1038

Логический

boolean

Условный оператор

Условный оператор имеет полную и краткую формы.

Полная форма условного оператора выглядит следующим образом:

if условие then оператор1
else оператор2

Краткая форма условного оператора имеет вид:

if условие then оператор

Вложенное условие:

if условие1 then
if
условие2 then оператор1
else оператор2

 

if условие1 then
begin
if
условие2 then оператор1
end
else оператор2

 

Определение знака числа

Блок-схема

 

Программа

program exm1;

объявление переменной целого типа

var
n:integer;

Begin

вывод поясняющего сообщения
write('Введите число : ');

ввод с клавиатуры значения переменной n
readln( n ) ;

проверка условия
if n > 0 then

Если условие выполняется (ветвь +) writeln('Число положительное!!!') вывод на экран сообщения

else
если условие не выполняется (ветвь -)
writeln('Вы ввели число', N); вывод на экран сообщения и значения переменной n

End.

 

Составить блок-схему и написать программу в среде PascalABC.NET.
Использую операторы ввода, вывода организовать удобный интерфейс.

В отчет включить формулировку задания, блок-схему, программу и скриншоты работы программы.

Вариант задания соответствует порядковому номеру в списке группы.

Варианты заданий

1. Даны три целых числа. Найти количество положительных чисел в исходном наборе.

2. Даны три числа. Найти наименьшее из них.

3. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения:

2·sin(x), если x>0

f(x) = x, если x<-10

3x, в остальных случаях


4. Для данного целого x найти значение следующей функции f, принимающей значения целого типа:

x,если x < −2

f(x) = -3х, если х > 2

5x, в остальных случаях


5. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения:

-x, если x<0

f(x) = 2x, если x<2

x^2, в остальных случаях


6. Дано целое число в диапазоне от -99 до 99. Вывести его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число» и т. д.

7. Даны положительные действительные числа x, y, z. Выяснить, существует ли треугольник с длинами сторон x, y, z, и напечатать соответствующее сообщение.

8. Даны три действительных числа. Возвести в квадрат те из них, значения которых не отрицательны.

9. Если сумма трех чисел меньше единицы, то наибольшее из этих чисел заменить вычисленной суммой.

10. Вычислить функцию


11. Для функций заданных графически определить значение y при заданном значении х

12. Для функций заданных графически определить значение y при заданном значении х


13. Для функций заданных графически определить значение y при заданном значении х

14. Если сумма трех чисел четное число, то наименьшее из этих чисел заменить вычисленной суммой.

15. Даны два числа. Если оба значения чисел отрицательны, то каждое заменить его модулем. Если отрицательно одно из них, то его заменить его модулем, и если оба положительны, то оба значения увеличить на 1.

16. В ЭВМ поступают результаты соревнований по плаванию для 3-х спортсменов. Составьте программу, которая выбирает лучший результат и выводит его на экран с сообщением, что это результат победителя заплыва.

17. Даны три действительных числа х,y и z. Меньшее из этих чисел заменить их полусуммой.

18. Даны действительные числа x, y, z. Минимальное из этих чисел заменить произведением этих трех чисел.

19. Компьютер запрашивает стоимость книг и сумму денег, внесенную покупателем. Если сдачи не требуется, печатает на экране «Спасибо». Если денег внесено больше, то печатает «Возьмите сдачу» и сумму сдачи. Если денег мало, то печатает «Не хватает» и указывает размер недостающей суммы.

20. Даны три целых числа. Если максимальное из трех чисел больше их полусуммы, то поменять его знак.

21. Даны три целых числа. Если максимальное из трех чисел больше их полусуммы, то поменять его знак.

22. Компьютер запрашивает стоимость одного литра бензина, сумму денег и кол-во бензина, которые необходимо залить в бак. Если денег достаточно и сдачи не требуется, вывести на экран «Спасибо. Машина заправлена». Если денег внесено больше, то вывести на экран «Возьмите сдачу» и сумму сдачи. Если денег мало, то вывести на экран «Не хватает» и указать размер недостающей суммы и на сколько литров бензина хватает денег.

 


Тема 2

Лабораторная работа № 2 "Циклические программы"

Циклы с предусловием (WHILE)

Особенности цикла с предусловием:

1. Цикл работает пока условие истинно (пока TRUE).

2. Цикл может не выполниться ни разу, если исходное значение условия при входе в цикл FALSE.

3. Если в теле цикла требуется выполнить более одного оператора, то необходимо использовать составной оператор (begin - end).

while <условие> dobegin <тело цикла>end;

Циклы с постусловием (REPEAT)

Особенности цикла с предусловием:

1. Цикл работает пока условие ложно (пока FALSE).

2. Цикл выполняется хотя бы один раз, даже если исходное значение условия при входе в цикл TRUE (истинно).

3. Независимо от количества операторов в теле цикла, использование составного оператора не требуется.

repeat <тело цикла>until<условие>

Циклы с заданным числом повторений (FOR)

Особенности цикла с предусловием:

  1. Начальная установка переменной счетчика цикла до заголовка не требуется.
  2. Изменение в теле значений переменных, стоящих в заголовке не допускается.
  3. Количество итераций цикла неизменно и точно определяется значениями нижней и верхней границ и приращения.
  4. Цикл может не выполниться ни разу, если шаг цикла будет изменять значение счетчика от нижней границы в направлении, противоположном верхней границе.
  5. Нет необходимости изменять параметр цикла, он изменяется сам.

FOR i := a TO b DO
BEGIN

<тело цикла>
END;

FOR i := a DOWNTO b DO
BEGIN

<тело цикла>
END;

Кроме того, переменную можно описать непосредственно в заголовке цикла:

for переменная: тип := начальное значение to или downto конечное значение do
оператор

или

for var переменная := начальное значение to или downto конечное значение do
оператор

Составить блок-схему и написать программу в среде PascalABC.NET. В отчет включить формулировку задания, блок-схему, программу и скриншоты работы программы.

 

Задания(двойной щелчок):


Тема 3

Лабораторная работа № 3 "Работа с одномерными массивами"

Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются в последовательных ячейках памяти, обозначаются именем массива и индексом. Каждое из значений, составляющих массив, называется его компонентой (или элементом массива).

Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.

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

Примеробъявления одномерного массива А из 10 элементов целого типа.

var a: array[1..10] of integer;

или

type masInt = array[1..10] of integer;

var a:masInt;

Пример обращения к третьему элементу массива a[3]:=4;

При работе с массивом часто используются циклы for и foreach.

Например:

vara:array [1..10] of integer;
i:integer;
begin
for i:=1 to 10 do a[i]:=random(100);
foreach x: integer in a do write(x, ' ');
end.

Элементы массива можно инициализировать при описании

var a: array of string:= ('Иванов','Петров','Сидорова');

Динамический одномерный массив

Динамическим называется массив, память под который выделяется в процессе работы программы.

Динамические массивы индексируются с нуля, тип индекса - только целое.

Объявление массива

var a: array of integer;

Выделение памяти

SetLength(a,n);

До выделения памяти а равно nil.

Length(a) - возвращает длину массива.

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

var a : array of integer;

SetLength(a,3);

a[0] := 1;

a[1] := 3;

a[2] := 2;

SetLength(a,4);

  • Задание на лабораторную работу

Составить блок-схему (только для первого задания) и написать программу в среде PascalABC.NET (для первого и второго заданий).

В отчет включить формулировку задания, блок-схему, программу и скриншоты работы программы.

Для каждого заданиясделать несколько скриншотов работы программы.

Вариант задания соответствует порядковому номеру в списке группы.


Тема 4

Лабораторная работа № 4 "Работа с двумерными массивами"

Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы.

Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i][j].

По-другому двумерный массив также называют матрицей, а в том случае, когда n=m (число строк равно числу столбцов) матрицу называют квадратной.

Для работы с двумерным массивом удобно использовать двойной цикл, где внешний цикл по i будет пробегать по всем строкам, а внутренний цикл по j будет для текущей строки i перебирать все ее элементы.

Пример работы с двумерным массивом:

var a: array [1..10, 1..10] of integer;
i,j:integer;
begin

For i:=1 to 10 do

For j:=1 to 10 do

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

end.

Индекс массива может быть целого, символьного или перечислимого типа. Пример:

var a:array [1..10, 'a'..'z'] of integer;
i,j:integer;
begin
a[1,'b']:=Random(100);
writeln(a[1,'b']);

end.

 

Составить блок-схему (только для первого задания) и написать программу в среде PascalABC.NET (для первого и второго заданий).

В отчет включить формулировку задания, блок-схему, программу и скриншоты работы программы.

Для каждого заданиясделать несколько скриншотов работы программы.

Вариант задания соответствует порядковому номеру в списке группы.

 


Тема 5

Лабораторная работа №5 "Перечислимый и диапазонные типы. Строки. Множества"

Перечислимый тип


Тип, задаваемый перечислением значений, называется перечислимым.

Пример 1.

type

Days = (Mon, Tue, Wen, Thi, Fri, Sat, Sun);
Months = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);

var
d: Days;
m: Months;

begin
d := Tue;
m := Months.May;
writeln(d,m);
end.

Переменные перечислимого типа хранятся в памяти, как целые числа. Первому значению соответствует 0, второму — 1, и т.д.

Пример 2.

for m: Months:=Jan to Dec do
case m of
Jan: writeln('Январь');
Feb: writeln('Февраль');
else writeln('Забыли');
end;

Пример 3.

type

Days = (Mon, Tue, Wen, Thi, Fri, Sat, Sun);

var
d: Days;

begin

d := Tue;

{возвращает следующее значение перечислимого типа}
writeln(Succ(d)); {Wen}

{возвращает предыдущее значение перечислимого типа}
writeln(Pred(d)); {Mon}

{возвращает порядковый номер текущего значения перечислимого типа}
writeln(Ord(d)); {1}

end.

Диапазонный тип

 

Диапазонный тип строится на базе

 

type Marks = 2..5; Digits = '0'..'9'; Letters = 'a'..'z'; Summer = Jun..Aug;


Пример 5. Применение диапазонного типа для массива

var a:array [1..10, 'a'..'z'] of integer;
i,j:integer;
begin
a[1,'b']:=Random(100);
writeln(a[1,'b']);

end.


var
i:'a'..'z';
j:integer;
begin
var a:array [1..4, 'a'..'d'] of integer;

for j:=1 to 4 do
for i:='a' to 'd' do
begin
a[j,i]:=random(10);
write(i,' = ',a[j,i]:2,' ');
end
end.

Пример 6.Словесное наименование сезона по номеру месяца

var Month: integer;

Season: string;

Begin

write('Введите номер месяца: ');

readln(Month);

Case Month of

1,2,12: Season := 'Зима';

3..5: Season := 'Весна';

6..8: Season := 'Лето';

9..11: Season := 'Осень';

else Season := 'Вы ввели неверный номер месяца';

end;

writeln('Это ',Season)

End.

 

Символы


c : char

Пример

var
c: char;
a:byte;

begin

readln(c);

writeln(ord(c)); {возвращает код символа}

a:=120;
writeln(chr(a)); {возвращает символ по коду}

writeln(UpperCase(c)); {преобразует символ в заглавную букву}

writeln(LowerCase(c)); {преобразует символ в прописную букву}

if (char.IsDigit(c)) then writeln('цифра'); {проверка, что символ - это цифра}

if (char.IsLetter(c)) then writeln('буква'); {проверка, что символ - это буква}

if (char.IsLetterOrDigit(c)) then writeln('буква или цифра'); {проверка, что символ - это буква или цифра}

end.

Строки


st : string

Строка - это одномерный массив типа char.

Пример

var
c: char;
st:string;

begin
readln(st);
{ввод строки}
c:=st[3];
{переменной c присваивается третья буквы строки st}
writeln(c);
end.

Пример

var
st, st1, st2:string;

begin
readln(st);
readln(st1);
st2:=st+' '+st1;
{конкатенация строк}
writeln(st2);

{сравнение строк}
if st>st1 then writeln('st>st1') else writeln('st<st1');
end.

Подпрограммы работы со строками

Length(s) - функция, возвращающая длину строки s

SetLength(s,n) - процедура, устанавливающая длину строки s равной n

Copy(s,from,len) - функция, возвращающая подстроку s с позиции from длины len

Insert(subs,s,form) - процедура, вставляющая подстроку subs в строку s с позиции from

Delete(s,from,len) - процедура, удаляющая из строки s len символов с позиции from

Pos(subs,s) - функция, возвращающая позицию первого вхождения подстроки subs в строку s или 0, если подстрока не найдена

PoGender(subs,s,from=1) - функция, возвращающая позицию первого вхождения подстроки subs в строку s, начиная с позиции from, или 0, если подстрока не найдена

TrimLeft(s) - функция, возвращающая строку s, в которой удалены все начальные пробелы

TrimRight(s) - функция, возвращающая строку s, в которой удалены все заключительные пробелы

Trim(s) - функция, возвращающая строку s, в которой удалены все удаляет все начальные и заключительные пробелы

Преобразование строка ↔ число

Val(s,x,errcode) - процедура, преобразующая строку s к целому или вещественному значению и записывающая результат в целую или вещественную… IntToStr(i) - функция, преобразующая целое x в строку StrToInt(s) - функция, преобразующая строку s к целому; может генерировать исключение

Проверки на вложение множеств

m1<m2

m1>m2

 

 

Пример на множества

 

type num = set of 0 ..9;

digit = set of '0' .. '9';

var s1, s2, s3 : digit;

s4, s5, s6 : num;

begin

s1 := ['1', '2', '3'];

s2 := ['2', '1', '3'];

s3 := ['1', '3'];

s4 := [0..3];

s5 := [4 .. 6];

s6 := [3, 5 .. 9];

end.

 

Вариант 1

1. Определить два перечислимых типа: месяцы и сезоны. Нужно составить программу, определяющую на какой сезон приходится данный месяц.
2. Дано слово s1. Получить слово s2, образованное нечетными буквами слова s1.
3. Дано предложение. Найти сумму цифр, встречающихся в этом предложении и вывести их на экран.
4. Дано 2 предложения. Составить два множества: первое содержит слова из первого предложения, а второе - из второго предложения. Вывести элементы каждого множества на экран. Найти их пересечение.

Вариант 2

1. Определить два перечислимых типа: страны и столицы. Нужно составить программу, определяющую какой стране относится указанная столица.
2. Дано слово s. Получить слово t, получаемое путем прочтения слова s начиная с его конца.
3. Дано предложение. Найти произведение цифр, встречающихся в этом предложении и вывести их на экран.
4. Дано два одномерных массива. Составить два множества: первое множество содержит элементы первого массива, а второе - второго массива. Вывести элементы каждого множества на экран. Найти объединение этих множеств.

Вариант 3

1. Задать два перечислимых типа: первый фамилии целиком, второй - первые буквы фамилий. Вводится первая буква фамилии нужно вывести фамилию целиком.
2. Дано слово. Добавить к нему в начале четыре символа "+" и в конце - пять символов "-".
3. Дано предложение. Найти максимальную цифру, среди цифр встречающихся в этом предложении и вывести их на экран.
4. Используя множество посчитать количество различных чисел встречающихся в одномерном массиве.

Вариант 4

1. Задать два перечислимых типа: первый коды цветов, второй - названия цветов. Вводится имя цвета, выводится его код.
2. Дано слово. Добавить к нему в начале и конце столько звездочек, сколько букв в этом слове.
3. Дано предложение. Найти минимальную цифру, среди цифр встречающихся в этом предложении и вывести их на экран.
4. Организовать ввод символов с клавиатуры, до тех пор пока не будет нажат символ "#". Вводимые символы добавляются в множество. Вывести на экран из данного множества только цифры и посчитать их количество. Сформировать второе множество, в которое попадут все четные цифры из первого множества, вывести его на экран и посчитать количество.

Вариант 5

1. Объявить два диапазонных типа: один буквы русского алфавита, второй буквы английского алфавита. Вводится буква с клавиатуры - выводится к какому алфавиту она принадлежит и ее номер в алфавите.
2. Дано предложение. Составить программу, которая печатает столбиком все вхождения в предложение некоторого символа и считает их количество.
3. Дан текст, имеющий вид "d1+d2+d3+...+dn", где di - цифры. Вычислить записанную в тексте сумму и количество слагаемых.
4. Дано множество целых чисел. На его основе построить два множества: в первое множество входят числа которые делятся на 4, а во второе - на 2. Найти пересечение полученных множеств.


Вариант 6

1. Объявить одномерный массив из 20 элементов целого типа, в котором в качестве индекса массива выступает диапазонный тип английских букв. Необходимо заполнить элементы массива, вывести на экран как индекс, так и значение. Найти максимальный элемент массива и указать какому индексу он соответствует.
2. Дано предложение. Определить долю (в %) букв "а" в нем.
3. Дан текст, имеющий вид "d1-d2+d3-...+dn", где di - цифры. Вычислить записанную в тексте сумму и количество слагаемых.
4. Организовать ввод символов с клавиатуры, до тех пор пока не будет нажат символ "%". Вводимые символы добавляются в множество. Вывести на экран из данного множества только буквы английского алфавита и посчитать их количество. Сформировать второе множество, в которое попадут все гласные буквы английского алфавита из первого множества, вывести его на экран и посчитать количество.

Вариант 7

1. Символ вводится с клавиатуры. Используя диапазонные типы определить и вывести на экран - это цифра, малая буква анг. алфавита, большая буква анг. алфавита, малая буква русского алфавита, большая буква русского алфавита, не буква.
2. Дано предложение. Определить сколько в нем одинаковых соседних букв и вывести какие это буквы.
3. Дано предложение. Найти наибольшее количество идущих подряд цифр и вывести их на экран.
4. Дано слово. С помощью множеств посчитать количество гласных и согласных букв русского алфавита (повторяющиеся буквы считать за одну).

Вариант 8

1. Задать два перечислимых типа: первый коды регионов, второй - названия регионов. Вводится код региона, выводится его название.
2. Дано предложение. Вывести столбиком все его буквы "и", стоящие на четных местах и посчитать их количество.
3. Дано предложение. Найти наименьшее количество идущих подряд цифр и вывести их на экран.
4. Используя множества, удалить из слова повторяющиеся символы.

Вариант 9
1. Объявить два диапазонных типа: один буквы русского алфавита, второй буквы английского алфавита. Вводится буква с клавиатуры - выводится к какому алфавиту она принадлежит и ее номер в алфавите.
2. Дано предложение. Определить сколько в нем гласных букв и вывести их на экран.
3. Дан текст, имеющий вид "d1*d2*d3*...*dn", где di - цифры. Вычислить записанное в тексте произведение и количество множителей.
4. Символы вводятся с клавиатуры до тех пор пока не будет нажата клавиша ".". С помощью множеств необходимо проверить какие и сколько символов из введенных принадлежат диапазону от "a" до "f".


Вариант 10
1. Объявить одномерный массив из 20 элементов целого типа, в котором в качестве индекса массива выступает диапазонный тип английских букв. Необходимо заполнить элементы массива, вывести на экран как индекс, так и значение. Найти максимальный элемент массива и указать какому индексу он соответствует.
2. Дано предложение. Найти порядковый номер первой и последней буквы "е" в нем. Посчитать количество букв "е".
3. Дан текст, имеющий вид "х+d1+d2+..+dn=y", где где di b y - цифры. Найти x.
4. Символы вводятся с клавиатуры до тех пор пока не будет введен символ "+". С помощью множеств вывести из данной последовательности на экран символы, которые не являются буквами и цифрами, посчитать их количество.

Вариант 11
1. Символ вводится с клавиатуры. Используя диапазонные типы определить и вывести на экран - это цифра, малая буква анг. алфавита, большая буква анг. алфавита, малая буква русского алфавита, большая буква русского алфавита, не буква.
2. Дано слово. Определить является он перевертышем или нет (перевертыш - слово которое одинаково читается в двух направлениях).
3. Дан текст, имеющий вид "х-d1-d2-..-dn=y", где где di b y - цифры. Найти x.
4. Дано 2 предложения. Составить два множества: первое содержит слова из первого предложения, а второе - из второго предложения. Вывести элементы каждого множества на экран. Найти их пересечение.

Вариант 12
1. Определить два перечислимых типа: месяцы и сезоны. Нужно составить программу, определяющую на какой сезон приходится данный месяц.
2. Дано предложение. Определить количество букв "и", предшествующих первой запятой предложения.
3. Дан текст, имеющий вид "х*d1*d2*..*dn=y", где где di b y - цифры. Найти x.
4. Дано два одномерных массива. Составить два множества: первое множество содержит элементы первого массива, а второе - второго массива. Вывести элементы каждого множества на экран. Найти объединение этих множеств.

Вариант 13
1. Определить два перечислимых типа: страны и столицы. Нужно составить программу, определяющую какой стране относится указанная столица.
2. Дано предложение. Напечатать все символы, расположенные между первой и второй запятой, посчитать их количество. Если второй запятой нет, то должны быть напечатаны все символы, расположенные после первой запятой и до конца предложения.
3. Дано предложение. Найти длину самого короткого слова.
4. Дано множество целых чисел. На его основе построить два множества: в первое множество входят числа которые делятся на 4, а во второе - на 2. Найти пересечение полученных множеств.

Вариант 14
1. Задать два перечислимых типа: первый фамилии целиком, второй - первые буквы фамилий. Вводится первая буква фамилии нужно вывести фамилию целиком.
2. Дано предложение. Заменить в нем все вхождения буквосочетания "да" на "не".
3. Дано предложение. Найти длину самого длинного слова.
4. Организовать ввод символов с клавиатуры, до тех пор пока не будет нажат символ "%". Вводимые символы добавляются в множество. Вывести на экран из данного множества только буквы английского алфавита и посчитать их количество. Сформировать второе множество, в которое попадут все гласные буквы английского алфавита из первого множества, вывести его на экран и посчитать количество.

Вариант 15
1. Задать два перечислимых типа: первый коды цветов, второй - названия цветов. Вводится имя цвета, выводится его код.
2. Дано предложение. Удалить из него все буквы "c". Посчитать количество удаленных букв.
3. Дано предложение. Напечатать в столбик все слова из этого предложения и посчитать их количество.
4. Дано слово. С помощью множеств посчитать количество гласных и согласных букв русского алфавита (повторяющиеся буквы считать за одну).

Вариант 16
1. Объявить два диапазонных типа: один буквы русского алфавита, второй буквы английского алфавита. Вводится буква с клавиатуры - выводится к какому алфавиту она принадлежит и ее номер в алфавите.
2. Дано предложение. Удалить из него все буквы "о", стоящие начетных местах. Посчитать количество удаленных букв.
3. Дано предложение. Найти какое-нибудь его слова начинающиеся на букву "к" и напечатать это слово.
4. Используя множества, удалить из слова повторяющиеся символы.

Вариант 17
1. Объявить одномерный массив из 20 элементов целого типа, в котором в качестве индекса массива выступает диапазонный тип английских букв. Необходимо заполнить элементы массива, вывести на экран как индекс, так и значение. Найти максимальный элемент массива и указать какому индексу он соответствует.
2. Дано слово. Вставить заданную букву после первой буквой "и".
3. Дано предложение. Определить количество слов в предложении, начинающихся с буквы "а".
4. Символы вводятся с клавиатуры до тех пор пока не будет нажата клавиша ".". С помощью множеств необходимо проверить какие и сколько символов из введенных принадлежат диапазону от "a" до "f".


Вариант 18
1. Определить два перечислимых типа: месяцы и сезоны. Нужно составить программу, определяющую на какой сезон приходится данный месяц.
2. Дано слово. Вставить заданную букву перед последней буквой "и".
3. Дано предложение. Напечатать все слова этого предложения, длина которых не более 6 символов. Посчитать их количество.
4. Дано 2 предложения. Составить два множества: первое содержит слова из первого предложения, а второе - из второго предложения. Вывести элементы каждого множества на экран. Найти их пересечение.


Тема 7

Лабораторная работа №6 "Подпрограммы"

Подпрограмма - это вспомогательный алгоритм, который используется для реализации другого алгоритма.
Вспомогательные алгоритмы имеют:

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

Процедуры procedure NameProc(a,b:integer); begin

тело процедуры

end;

Вызов процедуры
Begin
var x,y:integer;
NameProc(3,2);
NameProc(x,y);
end.

Если необходимо, чтобы в теле процедуры переменная изменила свое значение, то необходимо ее описать с ключевым словом var.

Пример

var x,y:integer;

procedure nameProc(x:integer; var y:integer);
begin
x:=x+2; y:=y+3;
end;

begin
x:=3; y:=5;
nameProc(x,y);
writeln('x= ',x); writeln('y= ',y);
end.

Результат работы программы
x = 3
y = 8

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

Пример

function Stepen(x,y:integer):integer;
var i,p:integer;
begin
p:=1;
for i:=1 to y do
p:=p*x;
Result:=p;
end;

begin
writeln(Stepen(3,4));
end.

Переменные, объявленные внутри подпрограммы, считаются локальными и не будут видны после выхода из подпрограммы.

Досрочное завершение подпрограммы - оператор exit

В программе можно описать несколько подпрограмм с одним именем, но разными типами или количеством формальных параметров.

Пример

procedure Swap(var x,y:integer);
var d:integer;
begin
d:=x;
x:=y;
y:=d;
end;

procedure Swap(var x,y:real);
var d:real;
begin
d:=x;
x:=y;
y:=d;
end;

begin
var a,b:integer;
var n,m:real;
a:=2; b:=5;
Swap(a,b);
writeln('a = ',a,' b = ',b);
n:=2.1; m:=5.4;
Swap(n,m);
writeln('n = ',n,' m = ',m);
end.

Передача в подпрограмму массива

const n=10;
type
mas=array[1..n] of integer;

var
a:mas;

procedure InitMas(var x:mas);
begin
for var i:=1 to n do
x[i]:=Random(30)-10;
end;

procedure PrintMas(x:mas);
begin
writeln;
for var i:=1 to n do
write(x[i]:4);
writeln;
end;

function NumZero(x:mas):integer;
begin
Result:=0;
foreach var i:integer in x do
if i=0 then inc(Result);
end;

begin
InitMas(a);
PrintMas(a);
writeln('Количество элементов = ',NumZero(a));

end.

 

uses FormsABC;

Создание элементов интерфейса

Uses FormsABC; var a:IntegerField; begin a := new IntegerField('a:'); end.

Поле, в которое можно вводить только целые и дробные числа - RealField Поле, в которое можно вводить строку - Field Кнопка - Button … Создание списка и работа с ним var l:Listbox; begin

Задание 2 для всех вариантов

Необходимо взять задание №2 из лабораторной работы №3. И написать программу, решающую данную задачу, но с использованием формы и подпрограмм.

Реализовать следующие подпрограммы:

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


Тема 8

Лабораторная работа №7 "Записи"

Запись позволяет объединить разнородные элементы.

Объявление типа запись

type <имя записи>= record
<поля записи>
end;

В качестве полей записей могут выступать как переменные, так и методы.

Type GenderType = (male, female); Person = record

Name: string;

Age, Weight: integer;

Gender: GenderType;

end;

Инициализация записи:

var p: Person := (Name: 'Иванов'; Age: 20; Weight: 80; Gender: male);

или

var p: Person;
begin

p.Age:=20;
p.Name:='Иванов';

end.

Операция присваивания для записей:

var p,p1: Person;
begin

p.Age:=20;
p.Name:='Иванов';
p1:=p;

end.

Для того чтобы при обращении к полям записи не писать каждый раз префикс (p.) можно использовать оператор with.

begin
with p do
begin

write('Введите имя '); readln(Name);
write('Введите возраст '); readln(Age);

end;
writeln('Вас зовут ',p.Name,'. Вам ',p.Age,'года\лет');
end.

Также можно объявить массив записей. Например:

var list:array[1..10] of Person;
i:integer;
begin
for i:=1 to 10 do
begin
readln(list[i].Name);
readln(list[i].Age);
end;

end.

или

var list:array[1..10] of Person;
i:integer;
begin
for i:=1 to 10 do

With list[i] do begin

readln(Name);
readln(Age);

end;

end.

Записи в качестве параметров можно передавать как в процедуры, так и функции. Функции также могут возвращать запись.
Например:

type
GenderType = (male, female);
Person = record
Name: string;
Age, Weight: integer;
Gender: GenderType;
end;

var list:array[1..10] of Person;
i:integer;

procedure add(var p:Person);
begin
with p do
begin
readln(Name);
readln(Age);
end;
end;

procedure print(p:Person);
begin
with p do
writeln(Name,' - ',Age);
end;

begin
for i:=1 to 1 do
add(list[i]);
for i:=1 to 1 do
print(list[i]);
end.

Procedure menu; forward; procedure add; var i:byte; begin

writeln;
writeln('add');
sleep(2000);
writeln;
menu;

end;

procedure menu;
var x:byte;
begin

Writeln('1-add'); writeln('2-exit'); readln(x); case x of

1:add;
2:exit;

end;

end;


begin

menu;

End.

uses FormsABC;
var l:listbox;
a:array[1..10] of integer;
b:button;

procedure del;
var i:byte;
begin
for i:=l.SelectedIndex+1 to 10-1 do
a[i]:=a[i+1];
a[10]:=0;
l.Items.Clear;
for i:=1 to 10 do l.Items.Add(a[i]);
end;

begin
MainForm.SetSize(300,300);
//устанавливаем размер формы
MainForm.CenterOnScreen;
// устанавливаем, чтобы форма выводилась по центру
l:=new ListBox();
for var i:=1 to 10 do
begin
a[i]:=random(50);
l.Items.Add(a[i]);
end;
b:=new Button('Del');
b.Click+=del;
end.

Создать программу, которая хранит базу данных в виде одномерного массива. Тип элементов массива - запись.
Для данной базы данных необходимо реализовать подпрограммы:

В программе обязательно должны быть подпрограммы в виде функций и процедур.

Для получения не более 7 балов за лаб. раб. достаточно создать консольное приложение, организовав диалог с пользователем с помощью операторов read и write.

Для получения от 8 до 10 балов необходимо создать windows приложение, где интерфейс реализован в виде формы и управляющих элементов.

Варианты заданий

При поиске предусмотреть, что в базе могут быт одинаковые записи.
Поиск должен происходить по каждому критерию отдельно.

  1. База студентов. О каждом студенте хранится: номер его зачетки, фамилия, имя, группа, год рождения. Организовать поиск по фамилии и номеру зачетки.
  2. База автомобилей. О каждой машине хранится: номер машины, марка, цвет, пробег, год выпуска. Организовать поиск по марке и году выпуска .
  3. База книг. О каждой книге хранится: номер книги, автор, название, год издания, количество страниц. Организовать поиск по автору и году издания.
  4. База лекарств. О каждом лекарстве: название, год выпуска, назначение, вес, тип (таблетки, микстура, ...). Организовать поиск по названию и назначению.
  5. База вин. О каждом вине хранится тип вина (сухое, полусладкое, ...), название, цвет, год урожая. Организовать поиск по названию и типу.
  6. База оборудования. Об оборудовании тип, наименование, стоимость, состояние (отличное, хор, удовл). Организовать поиск по типу и наименованию.
  7. База сотрудников. О каждом сотруднике фамилия, имя, пол, паспорт, год рождения. Поиск по фамилии и году рождения.
  8. База фильмов. О каждом фильме: название, год выпуска, страна, продолжительность. Поиск по названию и году выпуска.
  9. База программ. О каждой программе: название, назначение, тип (системная, прикладная, инструментальная), год выпуска. Поиск по названию и году выпуска.
  10. База продуктов. О каждом продукте: наименование, тип (молочный, мясной...), стоимость, вес. Поиск по наименованию и стоимости.
  11. База кафе (ресторанов). О каждом кафе: название, адрес (название улицы), уровень, год открытия. Поиск по названию и адресу.
  12. База писем. О каждом письме: фамилия получателя, фамилия отправителя, адрес отправителя, адрес получателя, дата получения. Поиск по фамилии отправителя и дате получения.
  13. База пользователей форума. О каждом пользователе: логин, пароль, фамилия, дата регистрации, дата последнего входа. Поиск по фамилии и дате регистрации.