p align="left">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');
Страницы: 1, 2, 3, 4, 5
|