Разработка форматов хранения программ. Структурирование

Министерство Образования и Науки Украины

Государственный Университет Информатики

и Искусственного Интелекта













		Кафедра программного обеспечения интеллектуальных систем

















Лабораторная работа №2

по дисциплине: Основы алгоритмизации и программирования

на тему: «Разработка форматов хранение программ. Структурирование.»

















		Выполнил студент

	группы ПО-07д 

	Канатников Дмитрий

		Проверил	







		

	

	

	2007год

		
План

	Титульный лист

	План

	Задание

	Описание блоков

	Описание подпрограмм

	Листинг программы

	Тестовые примеры


Пункт №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 Текстовые примеры программ.



Первый вариант работы программы.





Вариант второй.