5.2 Работа программы
Begin
Задаем цикл, и заполняем массив ch, который будет отвечать за введение информации в другой массив.
for i:=1 to 200 do
ch[i]:=false;
Очищаем экран для удобного ввода, и выводим меню на экран, которое представлено на рисунке 4.
Рисунок 5 - меню пятой программы.
clrscr;
menu;
Задаем две переменные, которые отвечают за работу программы и за введение количества элементов.
cont:=true;
fzap:=false;
while cont do
begin
write(Vvedite komandu: );
readln(command);
case command of
0: cont := false;
1:
Begin
Задаем общее количество элементов массива, если запись будет соответствовать условию, то fzap присвоится true.
Write(Vvedite kol-vo zapisei(1..200): );
readln(n);
if (n>0) and (n<=200) then
fzap:=true else fzap:=false;
end;
2:
Begin
Если было введено общее количество записей, то запустится цикл с повторяющейся процедурой, до тех пор пока не будут введены все записи. В противном случае выведется сообщение, что не введено общее количество записей.
if fzap=true then
begin
for i:=1 to n do
сhange(i, avtovl, ch);
clrscr;
menu;
end
else writeln(Ne vvedeno kol-vo zapisei);
end;
3:
Begin
Если было введено общее количество элементов, то можно редактировать записи по очереди. Если введено число больше общего числа элементов, то программа сообщит от ошибке ввода.
if fzap=true then
begin
write(Vvedite nomer redaktiryemoi zapisi: );
readln(i);
if i>n then writeln(Wrong input)
else
begin
change(i, avtovl, ch);
clrscr;
menu;
end;
end
else Writeln(Ne vvedeno obshee chislo zapisei);
end;
4:
Begin
Вначале программа проверяет, введено ли общее число элементов. Затем проверяет каждый элемент по очереди. Если все они заполнены, то начинается выполнятся процедура по подсчету машин каждой марки.
if fzap=true then
begin
for i:=1 to n do
if ch[i]=false then
begin
dzap:=false;
writeln(Vvedeni ne vse zapisi);
end
else dzap:=true;
if dzap=true then
mark(avtovl);
end
else
Writeln(Ne vvedeno obshee chislo zapisei);
end;
5:
Begin
Все проверки выполняются аналогично предыдущему варианту, но здесь выбирается процедура нахождения хозяина самого старого авто.
if fzap=true then
begin
for i:=1 to n do
if ch[i]=false then
begin
dzap:=false;
writeln(Vvedeni ne vse zapisi);
end
else dzap:=true;
if dzap=true then
mostold(avtovl);
end
else
Writeln(Ne vvedeno obshee chislo zapisei);
end;
6:
Begin
Все проверки выполняются аналогично предыдущему варианту, но здесь выбирается иная процедура.
if fzap=true then
begin
for i:=1 to n do
if ch[i]=false then
begin
dzap:=false;
writeln(Vvedeni ne vse zapisi);
end
else dzap := true;
if dzap=true then
oprmarki(avtovl);
end
else
Writeln(Ne vvedeno obshee chislo zapisei);
end;
end;
end;
end.
Процедура oprmarki;
procedure oprmarki(x: mas);
var
h:integer;
m:string;
begin
Вводим название марки, и программа переберет все записи и при нахождение такой же марки выведет на экран фамилию владельца и номер автомобиля.
Write(Vvedite marku avto: );
readln(m);
for h:=1 to n do
if x[h].Avto=m then
writeln(x[h].Familia, nomer-, x[h].Nomer);
end;
Процедура нахождения самого старого авто
procedure mostold(x: mas);
var
min,nmin,h:integer;
begin
min:=x[1].Vypusk;
nmin:=0;
Перебираем все записи и сохраняем минимальный год выпуска в переменную min, а номер записи в переменную nmin. А после цикла их выводит на экран.
for h:=1 to n do
if x[h].Vypusk<min then
begin
min:=x[h].Vypusk;
nmin:=h;
end;
Writeln(x[nmin].Familia, - , min, god vypuska);
end;
Процедура подсчета автомобилей каждой марки.
procedure mark(x: mas);
var
h, l, k: integer;
begin
for h := 1 to n do
begin
Вначале программы задаем пустое множество. И запускаем цикл. Если определенной марки нет в множестве, тогда добавляем ее. И запускаем второй цикл, только начиная не с единицы, а с h-го элемента. Затем если h-ый и l-ый элементы совпадают, прибавляем к счетчику единицу .И в конце второго цикла выводим собранные данные на экран.
if not (x[h].avto in marki) = true then
begin
k := 0;
include(marki, x[h].avto);
for l:=h to n do
if x[h]=x[l] then
if x[l].avto in marki then
k:=k + 1;
writeln(x[h].avto, -, k);
end;
end;
end;
Процедура ввода данных в запись.
procedure change(x: integer; var z: mas; var v: mas2);
begin
clrscr;
В контрольный массив ставим, что данная запись с этим номер заполнена.
v[x]:=true;
write(Vvedite familiu: );
readln(z[x].familia);
write(Vvedite adress: );
readln(z[x].adress);
write(Vvedite marku avto: );
readln(z[x].avto);
write(Vvedite nomer avto: );
readln(z[x].nomer);
z[x].Vypusk:= 0;
while (z[x].Vypusk < 1900) or (z[x].Vypusk > 2000) do
begin
write(Vvedite god vipuska(1900..2000): );
readln(z[x].vypusk);
end;
end;
- Действия с одномерными массивами
- 66. Массивы текстовых строк (двумерные массивы символов)
- Вопрос 61. Методика изучения структур данных (простые величины, массивы, строки)
- Двумерные массивы
- Двумерные и многомерные массивы
- Примеры функций для работы с двумерным массивом
- Обработка и модификация двумерных массивов
- 27) Массивы и их организация. Типы данных в массиве. Диапазон индекса. Одномерные массивы примеры.
- Двумерные массивы