РефератыИнформатикаРаРабота с текстовыми строками, двумерными массивами, файловыми структурами данных

Работа с текстовыми строками, двумерными массивами, файловыми структурами данных



Оглавление


1 Задание №1.


1.1 Блок-схема программы.


1.2 Работа программы


2 Задание №2.


2.1 Блок-схема программы


2.2 Работа программы.


3 Задание №3.


3.1 Блок-схема программы


3.2 Работа программы


4 Задание №4.


4.1 Работа программы


5 Задание №5.


5.1 Блок-схема программы


5.2 Работа программы


6 Заключение.


7 Список используемой литературы.


8 Приложения А


9 Приложение Б


10 Приложение В


11 Приложение Г


12 Приложение Д


1 Задание №1

Подсчитать количество слов последовательности, начинающихся с большой буквы и оканчивающихся цифрой. Напечатать слова, содержащие задаваемую цепочку символов и хотя бы один знак.


1.1 Блок-схема программы















Работа программы


Основное тело программы.


Begin


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


Vvod:=False;


Cont:=True;


while Cont do


Begin


Очмщаем экран для удобства ввода и вывода информации.


clrscr;


Выводим меню с номерами команд, которое можно увидеть на рисунке 1.



Рисунок 1 – главное меню первой программы.


menu;


write('Vvedite komandu: ');


Считываем команду в переменную Rem.


readln(Rem);


Распознаем команду и выберем необходимые функции для выполнения в соответствии с введенном знаком.


case Rem of


'0': Cont:=False;


'1': begin


Считываем введенную строку в переменную Txt и присваиваем Vvod значение True, показывая, что текст введен.


writeln('Text:');


readln(Txt);


Vvod:=True;


end;


'2': begin


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


if Not Vvod then


writeln('Ne vveden text')


else


alfslovo(Txt);


end;


'3': begin


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


if Not Vvod then


writeln('Ne vveden text')


else


colsimmslovo(Txt);


end;


'4': begin


Вывод на экран введенной строки, если же она не введены, выводится соответствующее сообщение.


if Not Vvod then


writeln('Ne vveden text')


else


writeln(Txt);


end


else


Если переменная Rem не удовлетворяет предыдущим условиям, то выводится сообщение о том что введена неизвестная команда.


writeln('Neizvestnaya komanda');


end;


Если программа все еще работает, то выводится предупреждающее сообщение о том что после нажатия клавиши ENTER необходимо будет ввести следующую команду.


if Cont then


begin


write('Nagmite ENTER dlya vvoda sleduyuschei komandy... ');


readln;


end


else


clrscr;


end;


end.


Процедура для нахождения слова с максимальным количеством букв, находящихся в алфавитном порядке.


Она получает в качестве параметра строку S и считает в ней слова, в которых латинские буквы расположены по алфавиту и печатает такое слово, в котором максимально количество букв.


procedure alfslovo(S: Stroka250);


var


Если переменная F становится True, то это показывает что найдено новое слово.


F: boolean;


Len: Byte;


I: Byte;


Counter: Byte;


FSlovo, Buf: Slovo;


Index, L: Byte;


MaxCol: Byte;


begin


Len:=Length(S);


Вставляем в конец строки пробел, если его там нет.


if S[Len]<>' ' then


begin


S:=S+' ';


Inc(Len);


end;


F:=False;


MaxCol:=0;


for I:=1 to Len do


if S[I]<>' ' then


begin


Если находим начало нового слова, тогда устанавливаем признак нового слова, запоминаем номер символа начала слова в строке в переменную Index и вводим начальную длину слова в L.


if F=False then


begin


F:=True;


Index:=I;


L:=1;


end


else


Увеличиваем длину до тех пор, пока не находим пробел.


Inc(L);


end


else


Если i-й символ пробел, то сбрасываем признак слова, копируем слово в переменную Buf и длину строки в нулевую ячейку.


if F=True then


begin


F:=False;


Buf:=Copy1(S, Index, L);


Buf[0]:=char(L);


Следующая процедура проверяет слово. Если буквы расположены в алфавитном порядке, то возвращает True иначе False.


if alforder(Buf, Counter) then


begin


Если в слове больше символов, чем в максимальном, то заносим слово в Fslovo и колличество букв в MaxCol.


if Counter>MaxCol then


begin


FSlovo:=Copy1(S, Index, L);


FSlovo[0]:=char(L);


MaxCol:=Counter;


end;


end;


end;


Если таких слов нет то выводим сообщение об этом, иначе выводим слово.


if MaxCol=0 then


writeln('Net podhodyaschi slov v texte')


else


writeln(FSlovo, ' kol-vo bukv: ', MaxCol);


end;


Функция alforder получает в качестве параметров строку S1, если в строке латинские буквы расположены по алфавиту, то функция вернет True иначе False. Count – количество латинских букв в строке.


function alforder(Sl: Slovo; var Count: Byte): Boolean;


var


I, L: Byte;


F: Boolean;


Buf: Char;


begin


L:=Length(Sl);


Сбрасываем начальное количество букв в строке.


Count:=0;


Находим в цикле количество латинских букв в строке и приводим все заглавные буквы к строчному виду.


for I:=1 to L do


begin


if (isletter(Sl[I])) then


Inc(Count);


if (Sl[I]>='A') and (Sl[I]<='Z') then


Sl[I]:=char(byte(Sl[I])+32);


end;


if Count=0 then


alforder:=False


else


if Count=1 then


alforder:=True


else


begin


F:=True;


Перемещаем все буквы строки в начало строки.


While F do


begin


F:=False;


for I:=1 to L-1 do


Если i-й символ не буква, а его сосед справа – буква, то меняем эти символы местами.


if (Not isletter(Sl[I])) And (isletter(Sl[I+1])) then


begin


F:=True;


Buf:=Sl[I];


Sl[I]:=Sl[I+1];


Sl[I+1]:=Buf;


end;


end;


F:=true;


Далее проверяем расположения букв по алфавиту.


for I:=1 to Count-1 do


if Sl[I]>Sl[I+1] then


begin


F:=False;


break;


end;


alforder:=F;


end;


end;


Процедура colsimmsolvo получает в качестве параметра строку S, и считает в ней симметричные слова, выводит их на экран и выводит количество найденных симметричных слов.


procedure colsimmslovo(S: Stroka250);


var


F: boolean;


Len: Byte;


I: Byte;


Counter: Byte;


Buf: Slovo;


Index, L: Byte;


MaxCol: Byte;


begin


Len:=Length(S);


Заносим в конец строки пробел, если его там нет.


if S[Len]<>' ' then


begin


S:=S+' ';


Inc(Len);


end;


За F обозначаем флаг нахождения слова, F=true –найдено новое слово. И сбрасываем начальное значение количества симметричных слов.


F:=False;


Counter:=0;


writeln('Spisok simmetrichnyh slov iz bolshe chem 2 znaka:');


Начинаем поиск симметричных слов в строке.


for I:=1 to Len do


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


if S[I]<>' ' then


begin


if F=False then


begin


F:=True;


Index:=I;


L:=1;


end


else


Inc(L);


end


else


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


if F=True then


begin


F:=False;


if L>2 then


begin


Buf:=Copy(S, Index, L); {kopiruem slovo v Buf}


Buf[0]:=char(L);


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


if simmetr(Buf) then


begin


Inc(Counter);


writeln(Buf);


end;


end;


end;


writeln('Kol-vo naidennyh slov: ', Counter);


end;


Процедура проверки словва на симметричность.


function simmetr(S: Slovo):boolean;


var


L, I, R: Byte;


F: Boolean;


Begin


Начинаем проверять симметричные относительно центра символы. Если они совпадают, то функции присваивается True. Если хоть один символ не сходится, то программа выходит из цикла и функции присваивается значение False.


L:=Length(S);


R:=L div 2;


F:=True;


for I:=1 to R do


if S[I]<>S[L-I+1] then


begin


F:=False;


break;


end;


simmetr:=F;


end;


2 Задание №2

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


2.1 Блок-схема программы



2.2 Работа программы

Вначале задаем 2 типа: самой матрицы и буффера.


type


Matrix=array[1..20,1..20] of Integer;


type


Vector=array[1..80] of Integer;


Begin


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


clrscr;


Повторяем ввод до тех пор, пока не будет введено число от 12 до 22.


repeat


write('Razmer matricy (12..20): ');


readln(N);


until (N>=12) and (N<=20);


Используем процедуру для формирования матрицы Matr размером N на N ячеек. Затем выводим ее на экран.


FormMatrix(Matr, N, N);


writeln('Sformirovana matrica:');


PrintMatrix(Matr, N, N);


Используем процедуру поворота матрицы и выводим матрицу на экран.


TurnMatrix(Matr, N);


writeln('Matrica posle povorota');


PrintMatrix(Matr, N, N);


readln;


end.


Процедура FormMatrix


Данная процедура присваивает значения от -99 до 99 элементам матрицы.


procedure FormMatrix(var A: Matrix; N, M: Integer);


var


I, J: Integer;


D: Integer;


R: Integer;


begin


randomize;


for I:=1 to N do


for J:=1 to M do


begin


Присваиваем элементу любое значение от 0 до 99.


A[I,J]:=random(100);


Если случайное число от 0 до 999 четное, данный элемент становится отрицательным, иначе знак не изменяется.


if (random(1000) mod 2)=0 then


A[I,J]:=0-A[I,J];


end;


end;


Процедура вывода матрицы на экран.


procedure PrintMatrix(var A: Matrix; N, M: Integer);


var


I, J: Integer;


Begin


Задаем два цикла, один для столбцов, второй для строк и поочередно выводим все элементы строки. После чего выводим следующую строку.


for I:=1 to N do


begin


for J:=1 to M do


write(A[I,J]:4);


writeln;


end;


end;


Процедура поворота матрицы на 90 градусов направо.


procedure TurnMatrix(var A: Matrix; N: Integer);


var


Arr: Vector;


I, J, K, Ot, L: Integer;


R: Integer;


Revers: Integer;


Buf1, Buf2: Integer;


begin


R:=N div 2;


Ставим начальное значение отступа Ot равным нулю.


Ot:=0;


for K:=1 to R do


begin


Переменная L отвечает за количество элементов в массиве Arr. Ставим начальное значение равное нулю, а затем заносим в массив Arr элементы матрицы.


L:=0;


for J:=1+Ot to N-Ot do


begin


Inc(L);


Arr[L]:=A[1+Ot, J];


end;


for I:=2+Ot to N-1-Ot do


begin


Inc(L);


Arr[L]:=A[I, N-Ot];


end;


for J:=N-Ot downto 1+Ot do


begin


Inc(L);


Arr[L]:=A[N-Ot, J];


end;


for I:=N-1-Ot downto 2+Ot do


begin


Inc(L);


Arr[L]:=A[I, 1+Ot];


end;


Находим на сколько элементов нужно сдвинуть массив Arr.


Revers:=N-2*Ot-1;


Далее, с помощью процедуры, циклически сдвигаем массив Arr из L элементов на Revers позиций вправо. И записываем получившийся массив обратно в матрицу.


TurnArray(Arr, L, Revers);


L:=0;


for J:=1+Ot to N-Ot do


begin


Inc(L);


A[1+Ot, J]:=Arr[L];


end;


for I:=2+Ot to N-1-Ot do


begin


Inc(L);


A[I, N-Ot]:=Arr[L];


end;


for J:=N-Ot downto 1+Ot do


begin


Inc(L);


A[N-Ot, J]:=Arr[L];


end;


for I:=N-1-Ot downto 2+Ot do


begin


Inc(L);


A[I, 1+Ot]:=Arr[L];


end;


Увеличиваем значение отступа.


Inc(Ot);


end;


Процедура циклического сдвига массива.


procedure TurnArray(var V: Vector; NN: Integer; Rev: Integer);


var


Buf: Integer;


I, J: Integer;


Begin


for J:=1 to Rev do


begin


Сохраняем значение элемента V[NN] в Buf, а затем сдвигаем элементы массива на 1 позицию.


Buf:=V[NN];


for I:=NN downto 2 do


V[I]:=V[I-1];


V[1]:=Buf;


end;


end;


3 Задание №3

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


3.1 Блок-схема программы











3.2 Работа программы

Begin


Выводим на экран меню, представленное на рисунке 2.



Рисунок 2 – главное меню третьей программы.


menu;


Задаем три переменных, которые будут отвечать за информацию о вводе имени для трех файлов. И еще одну, которая будет отвечать за работу программы.


pf:=false;


vf:=false;


tf:=false;


cont:=true;


В будущем нам понадобится еще 2 переменных, flag1 и flag1, которые будут отвечать за наличие информации в файлах.


flag1:=false;


flag2:=false;


while cont do


begin


writeln;


write('Vvedite komandu: ');


Считываем команду и запускаем одну из процедур.


readln(command);


case command of


'0': cont:=false;


'1': begin


write('Vvedite imja pervogo faila: ');


readln(p);


Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.


if check1(p)=true then


begin


pf:=true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'2': begin


write('Vvedite imja vtorogo faila: ');


readln(v);


Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.


if check1(v)=true then


begin;


vf:=true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'3': begin


write('Vvedite imja tretego faila: ');


readln(t);


Запускаем проверку правильности ввода имени файла, и если она проходит, то флаг ввода принимает значение True. Иначе будет выведено сообщение о неправильном вводе.


if check1(t)=true then


begin


tf:=true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'4': begin


Если все три имени файла введены верно, то запускается ряд процедур по составлению третьего файла.


if (pf=true)and(vf=true)and(tf=true) then


begin


filepr;


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


chmax;


Если оба файлы не пустые, то программа приступает к образованием слов и записи их в третий файл.


if check2=false then


begin


Ставим цикл до минимального числа строк.


for l:=1 to m do


begin


slv;


obrslov(slova1,slova2,k1,k2,slova,k);


for g:=1 to k do


begin


write(third,slova[g]);


if g<k then write(third,' ');


end;


Здесь осуществляется переход на следующую строчку.


writeln(third,'');


end;


Выбираем в каком из файлов больше строк и переписываем оставшиеся без изменений.


if m1<>m2 then


begin


if m1>m2 then for L:=m to m1 do


begin


readln(first,S1);


writeln(third,S1);


end


else


for L:=m to m2 do


begin


readln(second,S2);


Writeln(third,S2);


end;


end;


closing;


writeln('Operacia zavershena');


end


else


Если первые два файла не прошли проверку, то программа скажет, какой именно из файлов пустой.


begin


if flag1=true then writeln('Pervii fail pustoi');


if flag2=true then writeln('Vtoroi fail pustoi');


end;


end


else


begin


Если файл не прошел первую проверку, то программа скажет, имя какого из файлов введено неверно или совсем не было введено.


if pf=false then writeln('Ne vvedeno imja pervogo faila');


if vf=false then writeln('Ne vvedeno imja vtorogo faila');


if tf=false then writeln('Ne vvedeno imja tretego faila');


end;


end;


else


writeln('Neizvestnaya komanda');


end;


end;


end.


Процедура правильности проверки ввода имени файлов.


function check1(x:string):boolean;


begin


В данном случае проверяется пустой ввод, и имя файла, начинающееся с пробела.


if length(x)>0 then begin


if x[1]<>' ' then


check1:=true;


end;


end;


Процедура привязки и открытия файлов.


procedure filepr;


begin


assign(first,p);


assign(second,v);


assign(third,t);


reset(first);


reset(second);


rewrite(third);


end;


Процедура проверки количества строк в файлах.


procedure chmax;


begin


Сбрасываем счетчик строк.


m1:=0;


m2:=0;


И пока не конец файла перебираем строки и прибавляем по единице к счетчику.


while not eof(first) do


begin


readln(first,S1);


m1:=m1+1;


end;


Пока не конец файла перебираем строки и прибавляем по единице к счетчику.


while not eof(second) do


Begin


readln(second,S2);


m2:=m2+1;


end;


И присваиваем минимальное значение для переменной m.


if m1<m2 then m:=m1 else m:=m2;


Заново закрываем и открываем файлы.


close(first);


reset(first);


close(second);


reset(second);


end;


Процедура разбития строки на слова и перемещение их в массив.


Procedure slv;


var


i,j:integer;


begin


Считываем первую строчку из обоих файлов и добавляем пробел вначале и в конце строки.


Readln(first,S1);


readln(second,S2);


S1:=' '+S1+' ';


S2:=' '+S2+' ';


Сбрасываем счетчик количества слов.


k1:=0;


k2:=0;


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


for i:=1 to length(S1) do


begin


if s1[i]=' ' then


begin


for j:=i+1 to length(s1) do


if s1[i+1]<>' ' then


if s1[j]=' ' then begin


k1:=k1+1;


slova1[k1]:=copy(s1,i+1,j-i-1);


break;


end;


end;


end;


for i:=1 to length(S2) do


begin


if s2[i]=' ' then


begin


for j:=i+1 to length(s2) do


if s2[i+1]<>' ' then


if s2[j]=' ' then begin


k2:=k2+1;


slova2[k2]:=copy(s2,i+1,j-i-1);


break;


end;


end;


end;


end;


Процедура отсортировки слов.


procedure obrslov(a,b:arr;na,nb:integer; var c:arr; var nc:integer);


var i,j,k:integer;


begin


nc:=0;


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


for i:=1 to na do


begin


k:=0;


for j:=1 to nb do


if a[i]=b[j] then k:=1;


if k=0 then


begin


nc:=nc+1;


c[nc]:=a[i];


end;


end;


for i:=1 to nb do


begin


k:=0;


for j:=1 to na do


if b[i]=a[j] then k:=1;


if k=0 then


begin


nc:=nc+1;


c[nc]:=b[i];


end;


end;


end;


Функция проверки файлов на информацию.


function check2:boolean;


begin


В данному случае мы смотри, не находится ли конец файла на первом месте, и если хоть один файл пустой, то функции присваивается значение False.


if eof(first)=true then flag1:=true else flag1:=false;


if eof(second)=true then flag2:=true else flag2:=false;


if (flag1=false)and(flag2=false) then check2:=false else check2:=true;


end;


Процедура закрытия всех файлов.


procedure closing;


begin


close(first);


close(second);


close(third);


end;


4 Задание №4.

На экране построить семейство кривых (Гипоциклоида), заданных функцией:


X=A∙cos(t)+D∙cos(A∙t); [0<=t<=2∙pi]


X=A∙sin(t)+D∙sin(A∙t);


Группа параметров A,D для построения семейства дана в текстовом файле.


4.1 Работа программы

Begin


Присваиваем начальное значение t, и флаг работы программы.


t:=0;


menu;


cont:=true;


while cont do


begin


Вводим команду в появившееся меню, показанное на рисунке 3.



Рисунок 3 – меню программы 4.


Writeln('Vvedite komady: ');


Readln(command);


case command of


'0':cont:=false;


'1':


begin


writeln;


Вводится имя файла. Имя проходит проверку, если проверка успешна, то из него читаются два значения (А и D) и файл сразу же закрывается.


writeln('Vvedite imja faila: ');


Readln(name);


if check1 = true then begin


namef:=true;


read(fileg,a);


read(fileg,d);


close(fileg);


end else namef:=false;


end;


'2':


Begin


Если из файла успешно считали информацию, программа переходит к построению графика, а именно:


-Очистака окна.


-Изменению разрешения.


-Построению графика.


-Завершению выполнения программы.


if namef=false then


writeln('Ne Vvedeno imja faila')


else


begin


clearwindow;


SetWindowSize(800,600);


mnoj;


graf;


cont:=false;


end;


end;


end;


end;


Следующая функция не дает изменять график до функции ReDraw.


lockdrawing;


OnResize же позволяет делать определенные процедуры при изменение размера окна.


OnResize:=resize;


end.


Функция У


function Yfunc(i: real): real;


begin


result:=A*sin(i)-D*sin(A*t);


end;


Функция Х


function Xfunc(i:real):real;


begin


Xfunc:=A*cos(i)+D*cos(A*i);


end;


Процедура нахождения максимального значения функции, а заодно и множителя.


procedure mnoj;


begin


t:=0;


Задаем цикл и ищем максимальное значение.


while t <= 2*pi do


begin


xx:=trunc(Xfunc(t));


ifabs(xx)> maxx then maxx:=abs(xx);


yy:=trunc(Yfunc(t));


if abs(yy)> maxy then maxy:=abs(yy);


Здесь изменяем точность поиска.


t:=t+0.001;


end;


После чего ищем коэффициент координат. Он зависит от нескольких переменных: ширина, высота, и максимальной координаты.


if WindowWidth<WindowHeight then


if maxy>maxx then k:=(WindowHeight/2)/maxy else k:=(windowWidth/2)/maxx else


If maxx>maxy then k:=(windowheight/2)/maxx else k:=(windowWidth/2)/maxy;


end;


Функция проверки файла на правильность ввода имени и на нахождения в нем данных.


function check1:boolean;


begin


Проверка длинны имени файла.


if length(name)>0 then


begin


assign(fileg, name);


reset(fileg);


if eof(fileg)=false then check1:= true else check1:=false;


end;


end;


Процедура построения графика.


procedure graf;


begin


Уменьшаем наш коэффициент, чтобы уместились обозначения системы координат.


k:=k-k*0.1;


Далее чертим ровно по центру оси Х и У. Стрелочки, показывающее направление. Все данные берутся в зависимости от размера экрана, для удобства просмотра как при маленьком, так и при большом разрешение.


moveto(1, windowHeight div 2);


lineto(WindowWidth, WindowHeight div 2);


moveto(WindowWidth div 2, 1);


lineto(WindowWidth div 2, WindowHeight);


moveto(trunc((WindowWidth div 2)*0.98),trunc(0.04*WindowHeight));


Lineto((Windowwidth div 2),1);


lineto(trunc((windowWidth div 2)*1.02),trunc(0.04*windowHeight));


moveto(trunc(windowwidth*0.96),trunc(0.98*(windowheight div 2)));


lineto(windowwidth,windowheight div 2);


lineto(trunc(windowwidth*0.96),trunc(1.02*(windowheight div 2)));


T:=0;


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


xx:=(WindowWidth div 2)+trunc(k*Xfunc(t));


yy:=(WindowHeight div 2)+trunc(k*Yfunc(t));


moveto(xx,yy);


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


while t<=2*pi do


begin


xx:=(WindowWidth div 2)+trunc(k*Xfunc(t));


yy:=(WindowHeight div 2)+trunc(k*Yfunc(t));


lineto(xx,yy);


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


t:=t+0.001;


end;


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


If WindowWidth>400 then


If Windowheight>200 then


begin


textout(trunc(1.05*(windowWidth div 2)),trunc(0.01*(WindowHeight )),'Y');


Textout(trunc(0.95*WindowWidth),trunc((WindowHeight div 2)*1.05),'X');


end;


end;


Процедура перечерчивания графика при смене разрешения.


procedure resize;


begin


mnoj;


ClearWindow;


graf;


redraw;


lockdrawing;


end;


5 Задание №5

Написать программу, которая формирует файл записей данной структуры:


Type Vladelez=Record


Familia: String;


Adress:String;


Avto:lnteger;


Nomer:Integer;


End;


и определяет: -количество автомобилей каждой марки;


-владельца самого старого автомобиля;


-фамилии владельцев и номера автомобилей данной марки.


5.1 Блок-схема программы



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;


6 Заключение.

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


7 Приложения А

Код программы 1


program slova1;


uses crt;


type


Stroka250=string[250];


Slovo=string[20];


function Copy1(S: Stroka250; Start, Len: Integer):Stroka250;


var


Rez: Stroka250;


L: Integer;


I, J: Integer;


begin


L:=byte(S[0]);


if (L<Start) then


Rez[0]:=char(0)


else


begin


if (Start+Len-1)>L then


Len:=L-Start+1;


J:=Start;


for I:=1 to Len do


begin


Rez[I]:=S[J];


Inc(J);


end;


Rez[0]:=char(Len);


end;


Copy1:=Rez;


end;


function isletter(C: Char): Boolean;


begin


if ((C>='A') and (C<='Z')) or ((C>='a') and (C<='z')) then


isletter:=True


else


isletter:=False;


end;


function alforder(Sl: Slovo; var Count: Byte): Boolean;


var


I, L: Byte;


F: Boolean;


Buf: Char;


begin


L:=Length(Sl);


Count:=0;


for I:=1 to L do


begin


if (isletter(Sl[I])) then


Inc(Count);


if (Sl[I]>='A') and (Sl[I]<='Z') then


Sl[I]:=char(byte(Sl[I])+32);


end;


{esli v slove net bukv}


if Count=0 then


alforder:=False


else


if Count=1 then


alforder:=True


else


begin


F:=True;


While F do


begin


F:=False;


for I:=1 to L-1 do


if (Not isletter(Sl[I])) And (isletter(Sl[I+1])) then


begin


F:=True;


Buf:=Sl[I];


Sl[I]:=Sl[I+1];


Sl[I+1]:=Buf;


end;


end;


F:=true;


for I:=1 to Count-1 do


if Sl[I]>Sl[I+1] then


begin


F:=False;


break;


end;


alforder:=F;


end;


end;


procedure alfslovo(S: Stroka250);


var


F: boolean;


Len: Byte;


I: Byte;


Counter: Byte;


FSlovo, Buf: Slovo;


Index, L: Byte;


MaxCol: Byte;


begin


Len:=Length(S);


if S[Len]<>' ' then


begin


S:=S+' ';


Inc(Len);


end;


F:=False;


MaxCol:=0;


for I:=1 to Len do


if S[I]<>' ' then


begin


if F=False then


begin


F:=True;


Index:=I;


L:=1;


end


else


Inc(L);


end


else


if F=True then


begin


F:=False;


Buf:=Copy1(S, Index, L);


Buf[0]:=char(L);


if alforder(Buf, Counter) then


begin


if Counter>MaxCol then


begin


FSlovo:=Copy1(S, Index, L);


FSlovo[0]:=char(L);


MaxCol:=Counter;


end;


end;


end;


if MaxCol=0 then


writeln('Net podhodyaschi slov v texte')


else


writeln(FSlovo, ' kol-vo bukv: ', MaxCol);


end;


function simmetr(S: Slovo):boolean;


var


L, I, R: Byte;


F: Boolean;


begin


L:=Length(S);


R:=L div 2;


F:=True;


for I:=1 to R do


if S[I]<>S[L-I+1] then


begin


F:=False;


break;


end;


simmetr:=F;


end;


procedure colsimmslovo(S: Stroka250);


var


F: boolean;


Len: Byte;


I: Byte;


Counter: Byte;


Buf: Slovo;


Index, L: Byte;


MaxCol: Byte;


begin


Len:=Length(S);


if S[Len]<>' ' then


begin


S:=S+' ';


Inc(Len);


end;


F:=False;


Counter:=0;


writeln('Spisok simmetrichnyh slov iz bolshe chem 2 znaka:');


for I:=1 to Len do


if S[I]<>' ' then


begin


if F=False then


begin


F:=True;


Index:=I;


L:=1;


end


else


Inc(L);


end


else


if F=True then


begin


F:=False;


if L>2 then


begin


Buf:=Copy(S, Index, L);


Buf[0]:=char(L);


if simmetr(Buf) then


begin


Inc(Counter);


writeln(Buf);


end;


end;


end;


writeln('Kol-vo naidennyh slov: ', Counter);


end;


procedure menu;


begin


writeln;


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln('+ Vvod texta --> 1 +');


writeln('+ Slovo s max. kol.bukv v alf. poryadke --> 2 +');


writeln('+ Simmetrichnye slova --> 3 +');


writeln('+ Vyvod texta --> 4 +');


writeln('+ +');


writeln('+ Konec --> 0 +');


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln;


end;


var


Txt: Stroka250;


Vvod, Cont: Boolean;


Rem: Char;


begin


Vvod:=False;


Cont:=True;


while Cont do


begin


clrscr;


menu;


write('Vvedite komandu: ');


readln(Rem);


case Rem of


'0': Cont:=False;


'1': begin


writeln('Text:');


readln(Txt);


Vvod:=True;


end;


'2': begin


if Not Vvod then


writeln('Ne vveden text')


else


alfslovo(Txt);


end;


'3': begin


if Not Vvod then


writeln('Ne vveden text')


else


colsimmslovo(Txt);


end;


'4': begin


if Not Vvod then


writeln('Ne vveden text')


else


writeln(Txt);


end


else


writeln('Neizvestnaya komanda');


end;


if Cont then


begin


write('Nagmite ENTER dlya vvoda sleduyuschei komandy... ');


readln;


end


else


clrscr;


end;


end.


8 Приложение Б

Код программы 2


program massiv1;


uses crt;


type


Matrix=array[1..20,1..20] of Integer;


type


Vector=array[1..80] of Integer;


procedure TurnArray(var V: Vector; NN: Integer; Rev: Integer);


var


Buf: Integer;


I, J: Integer;


begin


for J:=1 to Rev do


begin


Buf:=V[NN];


for I:=NN downto 2 do


V[I]:=V[I-1];


V[1]:=Buf;


end;


end;


procedure TurnMatrix(var A: Matrix; N: Integer);


var


Arr: Vector;


I, J, K, Ot, L: Integer;


R: Integer;


Revers: Integer;


Buf1, Buf2: Integer;


begin


R:=N div 2;


Ot:=0;


for K:=1 to R do


begin


L:=0;


for J:=1+Ot to N-Ot do


begin


Inc(L);


Arr[L]:=A[1+Ot, J];


end;


for I:=2+Ot to N-1-Ot do


begin


Inc(L);


Arr[L]:=A[I, N-Ot];


end;


for J:=N-Ot downto 1+Ot do


begin


Inc(L);


Arr[L]:=A[N-Ot, J];


end;


for I:=N-1-Ot downto 2+Ot do


begin


Inc(L);


Arr[L]:=A[I, 1+Ot];


end;


Revers:=N-2*Ot-1;


TurnArray(Arr, L, Revers);


L:=0;


for J:=1+Ot to N-Ot do


begin


Inc(L);


A[1+Ot, J]:=Arr[L];


end;


for I:=2+Ot to N-1-Ot do


begin


Inc(L);


A[I, N-Ot]:=Arr[L];


end;


for J:=N-Ot downto 1+Ot do


begin


Inc(L);


A[N-Ot, J]:=Arr[L];


end;


for I:=N-1-Ot downto 2+Ot do


begin


Inc(L);


A[I, 1+Ot]:=Arr[L];


end;


Inc(Ot);


end;


end;


procedure FormMatrix(var A: Matrix; N, M: Integer);


var


I, J: Integer;


D: Integer;


R: Integer;


begin


randomize;


for I:=1 to N do


for J:=1 to M do


begin


A[I,J]:=random(100);


if (random(1000) mod 2)=0 then


A[I,J]:=0-A[I,J];


end;


end;


procedure PrintMatrix(var A: Matrix; N, M: Integer);


var


I, J: Integer;


begin


for I:=1 to N do


begin


for J:=1 to M do


write(A[I,J]:4);


writeln;


end;


end;


var


Matr: Matrix;


N: Integer;


begin


clrscr;


repeat


write('Razmer matricy (12..20): ');


readln(N);


until (N>=12) and (N<=20);


FormMatrix(Matr, N, N);


writeln('Sformirovana matrica:');


PrintMatrix(Matr, N, N);


TurnMatrix(Matr, N);


writeln('Matrica posle povorota');


PrintMatrix(Matr, N, N); readln;


end.


9 Приложение В

Код программы 3


program textfile;


uses


crt;


type


arr = array [1..83] of string;


var


slova1, slova2, slova: arr;


m, m1, m2, k1, k2, k, l, g: integer;


first, second, third: text;


command: char;


p, v, t, S1, S2: string;


pf, vf, tf, cont, flag1, flag2: boolean;


function check2: boolean;


begin


if eof(first) = true then flag1 := true else flag1 := false;


if eof(second) = true then flag2 := true else flag2 := false;


if (flag1 = false) and (flag2 = false) then check2 := false else check2 := true;


end;


procedure closing;


begin


close(first);


close(second);


close(third);


end;


procedure obrslov(a, b: arr; na, nb: integer; var c: arr; var nc: integer);


var


i, j, k: integer;


begin


nc := 0;


for i := 1 to na do


begin


k := 0;


for j := 1 to nb do


if a[i] = b[j] then k := 1;


if k = 0 then


begin


nc := nc + 1;


c[nc] := a[i];


end;


end;


for i := 1 to nb do


begin


k := 0;


for j := 1 to na do


if b[i] = a[j] then k := 1;


if k = 0 then


begin


nc := nc + 1;


c[nc] := b[i];


end;


end;


end;


procedure slv;


var


i, j: integer;


begin


Readln(first, S1);


readln(second, S2);


S1 := ' ' + S1 + ' ';


S2 := ' ' + S2 + ' ';


k1 := 0;


k2 := 0;


for i := 1 to length(S1) do


begin


if s1[i] = ' ' then


begin


for j := i + 1 to length(s1) do


if s1[i + 1] <> ' ' then


if s1[j] = ' ' then begin


k1 := k1 + 1;


slova1[k1] := copy(s1, i + 1, j - i - 1);


break;


end;


end;


end;


for i := 1 to length(S2) do


begin


if s2[i] = ' ' then


begin


for j := i + 1 to length(s2) do


if s2[i + 1] <> ' ' then


if s2[j] = ' ' then begin


k2 := k2 + 1;


slova2[k2] := copy(s2, i + 1, j - i - 1);


break;


end;


end;


end;


end;


procedure chmax;


begin


m1 := 0;


m2 := 0;


while not eof(first) do


begin


readln(first, S1);


m1 := m1 + 1;


end;


while not eof(second) do


begin


readln(second, S2);


m2 := m2 + 1;


end;


if m1 < m2 then m := m1 else m := m2;


close(first);


reset(first);


close(second);


reset(second);


end;


procedure filepr;


begin


assign(first, p);


assign(second, v);


assign(third, t);


reset(first);


reset(second);


rewrite(third);


end;


function check1(x: string): boolean;


begin


if length(x) > 0 then begin


if x[1] <> ' ' then


check1 := true;


end;


end;


procedure menu;


begin


writeln;


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln('+ Vvod imeni pervogo faila --> 1 +');


writeln('+ Vvod imeni vtorogo faila --> 2 +');


writeln('+ Vvod imeni tretiego faila --> 3 +');


writeln('+ Preobrazovat tretii fail --> 4 +');


writeln('+ +');


writeln('+ Konec --> 0 +');


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln;


end;


begin


menu;


pf := false;


vf := false;


tf := false;


cont := true;


flag1 := false;


flag2 := false;


while cont do


begin


writeln;


write('Vvedite komandu: ');


readln(command);


case command of


'0': cont := false;


'1':


begin


write('Vvedite imja pervogo faila: ');


readln(p);


if check1(p) = true then


begin


pf := true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'2':


begin


write('Vvedite imja vtorogo faila: ');


readln(v);


if check1(v) = true then


begin;


vf := true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'3':


begin


write('Vvedite imja tretego faila: ');


readln(t);


if check1(t) = true then


begin


tf := true;


clrscr;


menu;


end


else


begin


clrscr;


menu;


writeln('Error input');


end;


end;


'4':


begin


if (pf = true) and (vf = true) and (tf = true) then


begin


filepr;


chmax;


if check2 = false then


begin


for l := 1 to m do


begin


slv;


obrslov(slova1, slova2, k1, k2, slova, k);


for g := 1 to k do


begin


write(third, slova[g]);


if g < k then write(third, ' ');


end;


writeln(third, '');


end;


if m1 <> m2 then


begin


if m1 > m2 then for L := m to m1 do


begin


readln(first, S1);


writeln(third, S1);


end


else


for L := m to m2 do


begin


readln(second, S2);


Writeln(third, S2);


end;


end;


closing;


writeln('Operacia zavershena');


end


else


begin


if flag1 = true then writeln('Pervii fail pustoi');


if flag2 = true then writeln('Vtoroi fail pustoi');


end;


end


else


begin


if pf = false then writeln('Ne vvedeno imja pervogo faila');


if vf = false then writeln('Ne vvedeno imja vtorogo faila');


if tf = false then writeln('Ne vvedeno imja tretego faila');


end;


end;


else


writeln( 'Neizvestnaya komanda');


end;


end;


end.


10 Приложение Г

Код программы 4


program grafik;


uses


graphabc;


var


xx, yy, a, d, maxy, maxx: integer;


t, k: real;


fileg: text;


cont, namef: boolean;


command: char;


name: string;


function Yfunc(i: real): real;


begin


result := A * sin(i) - D * sin(A * t);


end;


function Xfunc(i: real): real;


begin


result := A * cos(i) + D * cos(A * i);


end;


procedure mnoj;


begin


t := 0;


while t <= 2 * pi do


begin


xx := trunc(Xfunc(t));


if abs(xx) > maxx then maxx := abs(xx);


yy := trunc(Yfunc(t));


if abs(yy) > maxy then maxy := abs(yy);


t := t + 0.001;


end;


if WindowWidth < WindowHeight then


if maxy > maxx then k := (WindowHeight / 2) / maxy else k := (windowWidth / 2) / maxx else


if maxx > maxy then k := (windowheight / 2) / maxx else k := (windowWidth / 2) / maxy;


end;


procedure graf;


begin


k := k - k * 0.1;


moveto(1, windowHeight div 2);


lineto(WindowWidth, WindowHeight div 2);


moveto(WindowWidth div 2, 1);


lineto(WindowWidth div 2, WindowHeight);


moveto(trunc((WindowWidth div 2) * 0.98), trunc(0.04 * WindowHeight));


Lineto((Windowwidth div 2), 1);


lineto(trunc((windowWidth div 2) * 1.02), trunc(0.04 * windowHeight));


moveto(trunc(windowwidth * 0.96), trunc(0.98 * (windowheight div 2)));


lineto(windowwidth, windowheight div 2);


lineto(trunc(windowwidth * 0.96), trunc(1.02 * (windowheight div 2)));


T := 0;


xx := (WindowWidth div 2) + trunc(k * Xfunc(t));


yy := (WindowHeight div 2) + trunc(k * Yfunc(t));


moveto(xx, yy);


while t <= 2 * pi do


begin


xx := (WindowWidth div 2) + trunc(k * Xfunc(t));


yy := (WindowHeight div 2) + trunc(k * Yfunc(t));


lineto(xx, yy);


t := t + 0.0001;


end;


if WindowWidth > 400 then


if Windowheight > 200 then


begin


textout(trunc(1.05 * (windowWidth div 2)), trunc(0.01 * (WindowHeight )), 'Y');


Textout(trunc(0.95 * WindowWidth), trunc((WindowHeight div 2) * 1.05), 'X');


end;


end;


function check1: boolean;


begin


if length(name) > 0 then


begin


assign(fileg, name);


reset(fileg);


if eof(fileg) = false then check1 := true else check1 := false;


end;


end;


procedure menu;


begin


writeln;


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln('+ Vvod imeni faila s parametrami --> 1 +');


writeln('+ Porstroenie grafika --> 2 +');


writeln('+ Vihod --> 0 +');


writeln('++++++++++++++++++++++++++++++++++++++++++++++++');


writeln;


end;


procedure resize;


begin


mnoj;


ClearWindow;


graf;


redraw;


lockdrawing;


end;


begin;


t := 0;


menu;


cont := true;


while cont do


begin


Writeln('Vvedite komady: ');


Readln(command);


case command of


'0': cont := false;


'1':


begin


writeln;


writeln('Vvedite imja faila: ');


Readln(name);


if check1 = true then begin


namef := true;


read(fileg, a);


read(fileg, d);


close(fileg);


end else namef := false;


end;


'2':


begin


if namef = false then


writeln('Ne Vvedeno imja faila')


else


begin


clearwindow;


SetWindowSize(800, 600);


mnoj;


graf;


cont := false;


end;


end;


end;


end;


lockdrawing;


OnResize := resize;


end.


11 Приложение Д

Код программы 5


program zapisi;


uses


crt;


type


vladelez = record


Familia: string;


Adress: string;


Avto: string;


Nomer: string;


Vypusk: integer;


end;


mas2 = array [1..200] of boolean;


mas = array [1..200] of vladelez;


var


command: char;


cont, fzap, dzap: boolean;


avtovl: mas;


n: integer;


i: integer;


ch: mas2;


marki: set of string;


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 := 1;


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


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;


procedure menu;


begin


writeln;


Writeln('+++++++++++++++++++++++++++++++++++++++++++++++++++++');


writeln('+ Ykazat kolichestvo zapisei ->1 +');


writeln('+ Izmenit vse zapisi ->2 +');


writeln('+ Izmenit odny zapis ->3 +');


writeln('+ Kolichestvo avtomobilei kazdoi marki ->4 +');


writeln('+ Vladelec samogo starogo avtomobila ->5 +');


writeln('+ Familii vladelcev i nomera avto dannoi marki ->6 +');


Writeln('+ +');


writeln('+ Konec ->0 +');


Writeln('+++++++++++++++++++++++++++++++++++++++++++++++++++++');


writeln;


end;


begin


for i := 1 to 200 do


ch[i] := false;


clrscr;


menu;


cont := true;


fzap := false;


while cont do


begin


write('Vvedite komandu: ');


readln(command);


case command of


'0': cont := false;


'1':


begin


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


change(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.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Работа с текстовыми строками, двумерными массивами, файловыми структурами данных

Слов:7221
Символов:70176
Размер:137.06 Кб.