Главная Учебники - Разные Лекции (разные) - часть 33
|
Министерство Образования и Науки Украины Государственный Университет Информатики и Искусственного Интелекта Кафедра программного обеспечения интеллектуальных систем Лабораторная работа №2 по дисциплине: Основы алгоритмизации и программирования на тему: «Разработка форматов хранение программ. Структурирование.» Выполнил студент группы ПО-07д Канатников Дмитрий Проверил 2007год План 1. Титульный лист 2. План 3. Задание 4. Описание блоков 5. Описание подпрограмм 6. Листинг программы 7. Тестовые примеры Пункт №3 Задание.
Задание:
Лабораторной работы №2 по дисциплине: основы алгоритмизации и программирования.
Вариант №5
На плоскости задано множество точек. Из каждого квадранта взята точка максимально удаленная от начала координат. Проверить, будет ли параллелограммом четырехугольник построенный по выбранным из множества точкам. Пункт №4 Описание блоков.
Данная задача может быть разделена на 3 основных блока, а второй в свою очередь еще на 3 подблока. 1 – Ввод данных. Основная цель этого блока ввод данных для работы программы. Дополнительная цель вывод информации. В этом блоке есть два условие проверки вводимых данных. Первое условие проверки на количество точек. Второе на правильность ввода координат точек. в этой части программы возникает следующая ситуация программа не прохождение условия, присвоение переменным не подходящий тип, и при правильном вводе передача данных второму блоку. В этом блоке существует три подпрограммы. 2 – Основная часть программы. Цель данного блока это ответ на основной вопрос программы. Блок как выше было сказано, делится еще на 3 подблока. 2.1 – Проверка на наличие точек в каждом квадранте. Возможно, что в каком-то или каких-то четвертях нет точек вследствие программа выдает результат не наличия точек во всех квадрантах. 2.2 – В этом подблоке программы мы используем четыре переменных в которых будет храниться номер ячейки массива в которой находится наиболее удаленная точка от начала координат после поиска в каждой четверти соответственно переменные max1, max2, max3, max4. 2.3 – Это часть блока проверяет принадлежность четырех угольнику построенному по точкам наиболее удаленным от начала координат уникальных свойств параллелограмма (стороны попарно равны и параллельны) положительный или отрицательный результат присваивается функции otvet (логического типа). 3 – Вывод данных. В этом блоке завершающий этап программы выводятся точки выбранные в подблоке 2.2 и ответ на основной вопрос программы он же зависит от функции otvet, если функция имеет значение ИСТИНА то ответ положительный и если ЛОЖЬ то отрицательный. По окончание этого блока предлагается повторно использовать программу. На этом программа завершает свою работу. Пункт №5 Описание подпрограмм.
В этом пункте мы рассмотри все используемые процедуры и функции в программе их действия Созданные подпрограммы: Процедура max_kvan это процедура использующая аргумент А файл типа tochka (новый тип данных типа запись) каждый элемент файла имеет два поля Х и У вещественого типа. Процедура находит растояние от начала координат до заданной точки паралельно деля точки по квадрантам в конце программы аргументам b, c, d, e присваивается номер ячейки файла по которому потом можно обратится к файлу за координатами точки. В процедуре используется ключевое слово var перед аргументами процедуры что позволяет изменять эти аргумент в ходе процедуры. Процедура vivod выводит точки максимально удаленные от начала координат и ответ на вопрос задачи (для этого используется функция otvet которая будет описана ниже). Функция kvan_zapoln делает проверку на наличие точек в каждом квадранте аргументы файл с координатами точек. Функция логического типа соответственно сама функция показывает на наличие или отсутствия точек в квадрантах. Функция otvet функция логического типа проверяет условие существования четырехугольника построенного по выбранным из множества точкам как параллелограмма. Аргументы это координаты точек. Пункт № 6 Листинг программы.
program Laba_var_5 ; type tochka = record x,y: real; end; var s:array [1..100] of tochka; g,n:integer; t:tochka; istin:boolean; r:string; io:real; i,max1,max2,max3,max4:integer; procedure max_kvan(var b,c,d,e:integer; j,q:integer;var a:array of tochka); begin b:=0; d:=0; c:=0; e:=0; for j:=1 to q do begin if (a[j].x>0) and (a[j].y>0) then if sqrt(sqr(a[j].x)+sqr(a[j].y))>b then b:=j; if (a[j].x<0) and (a[j].y>0) then if sqrt(sqr(a[j].x)+sqr(a[j].y))>c then c:=j; if (a[j].x<0) and(a[j].y<0) then if sqrt(sqr(a[j].x)+sqr(a[j].y))>d then d:=j; if (a[j].x>0) and (a[j].y<0) then if sqrt(sqr(a[j].x)+sqr(a[j].y))>e then e:=j; end; end; function otvet(bx,by,cx,cy,dx,dy,ex,ey:real):boolean; begin if (bx-cx=ex-dx) and (cy-dy=by-ey) and (by-cy=ey-dy) and (cx-dx=bx-ex) then otvet:=true else otvet:=false; end; function kvan_zapol (a:array of tochka):boolean; var k1,k2,k3,k4:integer; begin k1:=0; k2:=0; k3:=0; k4:=0; for i:=1 to n do begin if (a[i].x>0) and (a[i].y>0) then k1:=K1+1; if (a[i].x<0) and (a[i].y>0) then k2:=K2+1; if (a[i].x<0) and (a[i].y<0) then k3:=K3+1; if (a[i].x>0) and (a[i].y<0) then k4:=K4+1; end; if (k1>0)and(k2>0)and(k3>0)and(k3>0)then kvan_zapol:=true else kvan_zapol:=false; end; procedure vivod (bx,by,cx,cy,dx,dy,ex,ey:real;a:array of tochka); begin writeln('Координаты точки 1 четверти[',bx:5:2,':',by:5:2,']'); writeln('Координаты точки 2 четверти[',cx:5:2,':',cy:5:2,']'); writeln('Координаты точки 3 четверти[',dx:5:2,':',dy:5:2,']'); writeln('Координаты точки 4 четверти[',ex:5:2,':',ey:5:2,']'); writeln('Паралеллограм состоящий из этих точек'); if otvet(a[max1].x,a[max1].y,a[max2].x,a[max2].y, a[max4].x,a[max4].y,a[max4].x,a[max4].y) then writeln('действительный') else writeln('Недействительный'); end; procedure info ; begin writeln('Здравствуйте вы используете программ для решения следующей задачи:'); writeln('На плоскости задано множество точек.'); writeln('Из каждого квадранта взята точка, максимально'); writeln('удаленная от начала координат. Проверить,'); writeln('будет ли параллелограммом четырехугольник'); writeln('построенный по выбранным из множества точкам.'); end; procedure kol_toch (var rio:real; var q:integer); begin {$i-} repeat writeln('Введите количество точек.'); readln(q); rio:=ioresult; if rio <> 0 then begin writeln('Ошибка ввода.После нажатия ENTER попробуйте еше раз.'); readln; end else if q<4 then writeln('Не достаточно точек. Введите значение заново.'); until (rio = 0) and (q>3) ; {$i-} end; procedure vvod_toch (q:integer; var rio:real; var a: array of tochka); begin {$i-} repeat for i:=1 to q do begin writeln('введите x[',i,']'); readln(a[i].x); writeln('введите y[',i,']'); readln(a[i].y); end; rio:=ioresult; if rio<>0 then begin writeln('Ошибка ввода. После нажатия ENTER попробуйте еше раз сначала.'); readln; end until rio = 0; {$i+} end; procedure povtor(var f:integer; rio:real); begin {$i-} repeat writeln('1-Да'); writeln('0-Нет'); readln(f); rio:=ioresult; if (rio<>0)or(f<>0)and(f<>1) then writeln('Ошибка ввода. Попробуйте еще раз.'); until (rio=0)and(f=0)or(rio=0)and(f=1); {$i+} end; begin repeat info; kol_toch(io,n); vvod_toch(n,io,s); kvan_zapol(s); if kvan_zapol(s) then begin max_kvan(max1,max2,max3,max4,i,n,s); vivod(s[max1].x,s[max1].y,s[max2].x,s[max2].y, s[max4].x,s[max4].y,s[max4].x,s[max4].y,s); end else begin writeln('Точки не во всех квадрантах. Воспользоваться программой еще раз'); end; povtor(g,io); until g=0 ; readln; end. Пункт № 7 Текстовые примеры программ. Первый вариант работы программы. Вариант второй.
| |||||