Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Меню + графика Pascal

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Первый вопрос] >> Меню + графика Pascal
Имя
Сообщение << Старые топики   Новые топики >>
Меню + графика Pascal - 2011-05-30 19:22:35.766666   
Shpild

Сообщений: 1
Оценки: 0
Присоединился: 2011-05-30 19:10:49.673333
Исходные данные
Дано:
• динамический список, каждый элемент которого содержит данные для построения графических объектов;
• меню, содержащее следующие позиции: «Создать», «Сохранить», «Загрузить», «Просмотр», «Информация», «Выход».
Задание
При входе в программу появляется меню, содержащее следующие позиции: "Создать", "Загрузить", "Сохранить", "Просмотр", "Информация", "Выход". Тип меню - горизонтальное со строкой подсказки. В центре экрана должна быть выведена информация о варианте и авторе курсовой работы.
При выборе позиции "Создать" программа генерирует в памяти одно-связный список из N элементов, каждый элемент которого содержит данные для построения графических объектов. Количество объектов каждого типа, координаты, размеры, цвет выбираются случайно, но все объекты должны целиком помещаться на экране и быть видимыми (площадь объектов не должна быть нулевой). Красный цвет использовать запрещается.
После генерации списка в центре экрана появляется окно с сообщением о завершении формирования списка.
При выборе позиции "Сохранить" программа запрашивает имя файла и сохраняет в нем список графических объектов. При этом должна предусматриваться проверка наполненности списка. Если список пуст, программа должна выдавать соответствующее предупреждение и запрос на продолжение или прекращение операции сохранения.
При выборе позиции «Загрузить» программа загружает из файла, имя которого запрашивается, ранее сохраненный список. Если текущий список непустой, необходимо предусмотреть его сохранение в каком-либо файле или очистку (по выбору пользователя). Кроме того, должны быть предусмотрены проверки: перед загрузкой - действительно ли в данном файле находится ранее сохраненная информация о графических объектах, в процессе загрузки – корректности данных.
При выборе позиции "Просмотр" программа устанавливает графический режим и отображает на экране элементы списка. Фигуры изображаются не закрашенными (только контуры). Текущая (активная) фигура рисуется заштрихованной. При нажатии клавиш “+” и “-” должен осуществляться переход между элементами списка (активным становится соответствующий графический объект). При нажатии на кнопки навигации (   ) осуществляется соответствующее перемещение активной фигуры. Дополнительные функции выполняются при нажатии функциональных клавиш, указанных в табл. 4.
Нажатие клавиши ESC возвращает к основному меню программы.
При выборе позиции "Информация" программа запрашивает имя файла, в который затем записывает в табличной форме информацию о списке объектов.
При выборе позиции "Выход" программа запрашивает подтверждение на сохранение текущего списка, сохраняет список в указанном файле (если пользователь подтвердил сохранение), очищает динамическую память и заканчивает работу.


25-30 фигур,
Прямоугольники, окружности
F5 – вписать площадь в 10 наибольших по площади объектов
Shift-F5 – удалить из списка прямоугольники, целиком лежащие внутри окружности




Не могу сделать переключение между объектами + вписывание и удаление…

Заранее спасибо за помощь…




Program Kyrs; Uses crt,Graph; {Подключаем модуль CRT и Graph} type &nbsp;mass=^Phigur; {Указатель на элемент типа ^Phigur} &nbsp;Phigur=record &nbsp; &nbsp; &nbsp;{Phigur-запись} &nbsp; &nbsp; x1,x2,y1,y2,r,j,i,n:integer; &nbsp; &nbsp; {Переменные типа Integer в записи} &nbsp; &nbsp; next:mass; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {Указатель на следующий элемент динамического списка в записи} end; var int,i,j,n,p:integer; &nbsp; &nbsp; &nbsp;{Переменные типа Integer} &nbsp; nach,tek,tmp:mass; &nbsp;{Переменные типа Mass(Mass в Type)} &nbsp; Stroka,Str,Nazv:string; &nbsp;{Переменные типа String} &nbsp; c:char; {Переменные типа char} &nbsp; f:text; {Переменные типа text(текстовый документ)} {-----------------------------------------------------------------------------} procedure DisposeRec; {Удаление всего динамического списка} Begin &nbsp; tek:=nach; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{Указатель ставим на начало} &nbsp; while tek &lt;&gt; nil do &nbsp; &nbsp; &nbsp; {Пока tek не пустой повторяем} &nbsp; &nbsp; &nbsp;begin &nbsp; &nbsp; &nbsp; &nbsp; tmp:=tek^.Next; &nbsp; {В TMP записать 2 элемент} &nbsp; &nbsp; &nbsp; &nbsp; Dispose(tek); &nbsp; &nbsp; &nbsp; {Удалить 1 элемент} &nbsp; &nbsp; &nbsp; &nbsp; tek:=tmp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{Указатель ставим на 1 элемент(до этого был 2)} &nbsp; &nbsp; &nbsp;end; end; {-----------------------------------------------------------------------------} procedure OsnOkno; &nbsp; {Прорисовка основного окна} Begin &nbsp;textbackground(0); &nbsp; &nbsp; {Черный фон} &nbsp;window(1,1,80,26); &nbsp; &nbsp; {Окно такого размера} &nbsp;ClrScr; &nbsp;write(' &amp;#9556;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9559;'); &nbsp;write(' &amp;#9553; &nbsp; Создать &nbsp; &amp;#9553; &nbsp; Сохранить &nbsp; &amp;#9553; &nbsp; Загрузить &nbsp;&amp;#9553; &nbsp;Просмотр &amp;#9553; Информация &amp;#9553; Выход &amp;#9553;'); &nbsp;write(' &amp;#9562;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9552;&amp;#9565;'); &nbsp;gotoxy(26,6); &nbsp;writeln(' &nbsp; &nbsp; &nbsp; Курсовая работа &nbsp; &nbsp; &nbsp; '); &nbsp;gotoxy(26,7); &nbsp;writeln('Муслимова Эльдара Ривгатевича'); &nbsp;gotoxy(26,8); &nbsp;writeln(' &nbsp; &nbsp; &nbsp; &nbsp; вариант 4,5 &nbsp; &nbsp; &nbsp; &nbsp; '); end; {-----------------------------------------------------------------------------} Procedure menu(i_m:byte); &nbsp; {Прорисовка активного меню} Begin &nbsp;TextBackGround(0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{Черный фон} &nbsp;gotoxy(6,2); writeln('Создать'); {Закрашиваем фон менюшки черным} &nbsp;gotoxy(20,2); writeln('Сохранить'); {Чтобы закрасить преведущее активное окно} &nbsp;gotoxy(36,2); writeln('Загрузить'); &nbsp;gotoxy(50,2); writeln('Просмотр'); &nbsp;gotoxy(61,2); writeln('Информация'); &nbsp;gotoxy(74,2); writeln('Выход'); &nbsp;TextBackGround(5); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{Текст для активного окна фиолетовый} &nbsp;case i_m of &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{Если i_m} &nbsp; &nbsp; 1: begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{1 тогда} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(6,2); &nbsp; &nbsp; &nbsp; {Идем на эту координату} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Создать'); &nbsp; &nbsp; {Пишем Новый с фиолетовым фоном} &nbsp; &nbsp; &nbsp; &nbsp;end; &nbsp; &nbsp; 2: begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{2 тогда} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(20,2); &nbsp; &nbsp; &nbsp; {И т.д.} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Сохранить'); &nbsp; &nbsp; &nbsp; &nbsp;end; &nbsp; &nbsp; 3: begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(36,2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Загрузить'); &nbsp; &nbsp; &nbsp; &nbsp;end; &nbsp; &nbsp; 4: begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(50,2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Просмотр'); &nbsp; &nbsp; &nbsp; &nbsp;end; &nbsp; &nbsp; 5: begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(61,2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Информация'); &nbsp; &nbsp; &nbsp; &nbsp;end; &nbsp; &nbsp; 6:begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gotoxy(74,2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; write('Выход'); &nbsp; &nbsp; &nbsp; end; &nbsp;end; end; {-------------------------------------------------------------------------} Function klavish(i_m:byte):byte; &nbsp;{Меню-считывание клавиши} const &nbsp; &nbsp;right=#77; &nbsp; &nbsp;left=#75; &nbsp; &nbsp;enter=#13; Begin &nbsp;repeat &nbsp; &nbsp; c:=readkey; &nbsp; &nbsp; case c of &nbsp; &nbsp; &nbsp; right:if i_m=6 then i_m:=1 else inc(i_m); &nbsp; &nbsp; &nbsp; left :if i_m=1 then i_m:=6 else dec(i_m); &nbsp; &nbsp; &nbsp; enter:klavish:=i_m; &nbsp; &nbsp; &nbsp; end; &nbsp; &nbsp; menu(i_m); &nbsp;{После вcех вычислений идем прорисовывать} &nbsp;until c=enter; &nbsp;{Выходим из меню если нажат ENTER} end; {-------------------------------------------------------------------------} {11111111111111111111111111111111111111111111111111111111111111111111111111111} Procedure Vvod; &nbsp;{Выводит то что хранится в переменных Nazv и Stroka} Begin &nbsp;OsnOkno; &nbsp; &nbsp; &nbsp;{Прорисовываем основное окно} &nbsp;gotoxy(3,18); &nbsp;Write(Nazv); &nbsp;{Выводим то что храниться в переменной Nazv} &nbsp;gotoxy(3,20); &nbsp;Write(Stroka);{Выводим то что храниться в переменной Stroka} &nbsp;gotoxy(3,22);{Ставим курсор на координаты третей строчки где будет ввод} end; {111111111111111111111111111111111111111111111111111111111111111111111111111} procedure DinSpis; var i:integer; begin &nbsp;randomize; &nbsp;DisposeRec; &nbsp;tek:=nil; &nbsp;for i:=1 to n do begin &nbsp; &nbsp; new(Nach); &nbsp; &nbsp; Nach^.x1:=random(580)+20; &nbsp; &nbsp; Nach^.x2:=random(580)+20; &nbsp; &nbsp; Nach^.y1:=random(380)+30; &nbsp; &nbsp; Nach^.y2:=random(400)+20; &nbsp; &nbsp; Nach^.r:=random(30)+10; &nbsp; &nbsp; Nach^.j:=random(2); &nbsp; &nbsp; Nach^.next:=tek; &nbsp; &nbsp; tek:=Nach; &nbsp;end; end; Procedure soxranenie; begin &nbsp;Nazv:='Сохранение списка в указанный файл'; &nbsp;Stroka:='Введите путь куда будет сохранен файл'; &nbsp;Vvod; &nbsp;readln(Str); &nbsp;assign(f,Str); &nbsp;rewrite(f); &nbsp;if Nach=nil then &nbsp;begin &nbsp; &nbsp; Stroka:='Список пуст! Продолжить ? (y-да,n-нет)'; &nbsp; &nbsp; Vvod; &nbsp; &nbsp; c:=readkey; &nbsp; &nbsp; case c of &nbsp; &nbsp; #121: writeln(f,'Список пуст'); &nbsp; &nbsp; #110: exit; &nbsp; &nbsp; end; &nbsp;end; tek:=nach; repeat &nbsp;writeln(f,tek^.x1); &nbsp;writeln(f,tek^.x2); &nbsp;writeln(f,tek^.y1); &nbsp;writeln(f,tek^.y2); &nbsp;writeln(f,tek^.r); &nbsp;writeln(f,tek^.j); &nbsp;tek:=tek^.Next; until tek=nil; close(f); Stroka:='Файл записан'; Vvod; readkey; end; procedure zagruzit; begin &nbsp;if Nach&lt;&gt;nil then &nbsp;begin &nbsp; &nbsp; nazv:='Загрузка списка из файла'; &nbsp; &nbsp; Stroka:='Текуший список не пуст, сохранить?! (y-да,n-нет)'; &nbsp; &nbsp; vvod; &nbsp; &nbsp; c:=readkey; &nbsp; &nbsp; case c of &nbsp; &nbsp; #121: soxranenie; &nbsp; &nbsp; #110: &nbsp; &nbsp; end; &nbsp;end; &nbsp;DisposeRec; &nbsp;Stroka:='Введите путь файла'; &nbsp;Vvod; &nbsp;readln(Str); &nbsp;assign(f,Str); &nbsp;reset(f); &nbsp;new(Nach); &nbsp;tek:=Nach; &nbsp;repeat &nbsp; &nbsp;readln(f,tek^.x1); &nbsp; &nbsp;readln(f,tek^.x2); &nbsp; &nbsp;readln(f,tek^.y1); &nbsp; &nbsp;readln(f,tek^.y2); &nbsp; &nbsp;readln(f,tek^.r); &nbsp; &nbsp;readln(f,tek^.j); &nbsp; &nbsp;if (tek^.j&gt;=0) and (tek^.j&lt;2) then &nbsp; &nbsp;tek:=tek^.next else &nbsp; &nbsp;begin &nbsp; &nbsp; &nbsp;Stroka:='В файле некорректные данные'; &nbsp; &nbsp; &nbsp;Vvod; &nbsp; &nbsp; &nbsp;p:=1; &nbsp; &nbsp; &nbsp;exit; &nbsp; &nbsp;end; &nbsp;until eof; &nbsp;tek^.Next:=nil; &nbsp;close(f); &nbsp;if p=0 then &nbsp;begin &nbsp; &nbsp;Stroka:='Список загружен'; &nbsp; &nbsp;Vvod; &nbsp; &nbsp;readkey; &nbsp;end &nbsp;else zagruzit; end; procedure risovanie; begin tek:=Nach; repeat &nbsp;case tek^.j of &nbsp;0:Rectangle(tek^.x1,tek^.y1,tek^.x2,tek^.y2);{Прямоугольник} &nbsp;1:Circle(tek^.x1,tek^.y1,tek^.r); {Окружность} &nbsp;end; tek:=tek^.Next; until tek=nil; end; procedure prosmotr; const step=5; &nbsp; &nbsp; Instr='For remove press arrows, Exit - ESC'; var grDr,grMd:integer; begin grDr:=VGA; grMd:=2; InitGraph(grDr,grMd,'c:\BPASCAL'); Rectangle(50, 425, 600, 460); {рисование рамки } OutTextXY(120, 440, Instr); risovanie; {рисование всех объектов} repeat {цикл работы программы до прерывания по клавише ESC} &nbsp; &nbsp; c:=readkey; &nbsp; &nbsp; Case c of &nbsp; &nbsp; &nbsp; #75: if (Nach^.x1&gt;0) and (Nach^.x2&lt;640) then begin Nach^.x1:=Nach^.x1-Step; Nach^.x2:=Nach^.x2-Step; end; &nbsp; &nbsp; &nbsp; #77: if (Nach^.x1&gt;0) and (Nach^.x2&lt;640) then begin Nach^.x1:=Nach^.x1+Step; Nach^.x2:=Nach^.x2+Step; end; &nbsp; &nbsp; &nbsp; #72: if (Nach^.y1&gt;0) and (Nach^.y1&lt;480) then begin Nach^.y1:=Nach^.y1-Step; Nach^.y2:=Nach^.y2-Step; end; &nbsp; &nbsp; &nbsp; #80: if (Nach^.y2&gt;0) and (Nach^.y2&lt;480) then begin Nach^.y2:=Nach^.y2+Step; Nach^.y2:=Nach^.y2+Step; end; &nbsp; &nbsp; &nbsp; end; &nbsp; &nbsp; ClearViewPort; { очистка графического экрана } &nbsp; &nbsp; SetColor(LightGray); {восстановление рамки с надписью} &nbsp; &nbsp; Rectangle(50, 425, 600, 460); &nbsp; &nbsp; OutTextXY(120, 440, Instr); &nbsp; &nbsp; risovanie; {рисование всех объктов в текущих координатах} &nbsp; until c=#27; &nbsp; closegraph; OsnOkno; end; procedure inform; begin Nazv:='Сохранение информации о списке в табличной форме'; Stroka:='Введите путь куда будет сохранен файл'; Vvod; readln(str); assign(f,str); rewrite(f); writeln(f,'-----------------------------------------------------'); writeln(f,'| &nbsp;x1 &nbsp;| &nbsp;y1 &nbsp;| &nbsp;x2 &nbsp;| &nbsp;y2 &nbsp;| &nbsp;r &nbsp;| &nbsp; vid phiguri &nbsp; |'); writeln(f,'-----------------------------------------------------'); tek:=Nach; repeat &nbsp; if tek^.j=0 then &nbsp; begin &nbsp; &nbsp; writeln(f,'|',tek^.x1:6,'|',tek^.y1:6,'|',tek^.x2:6,'|',tek^.y2:6,'| &nbsp; &nbsp; &nbsp;|',' &nbsp;priamoygolnik &nbsp;|'); &nbsp; end; &nbsp; if tek^.j=1 then &nbsp; begin &nbsp; &nbsp; writeln(f,'|',tek^.x1:6,'|',tek^.y1:6,'| &nbsp; &nbsp; &nbsp;|',' &nbsp; &nbsp; &nbsp;|',tek^.r:6,'| &nbsp; &nbsp; okrugnost &nbsp; |'); &nbsp; end; &nbsp; tek:=tek^.next; until tek=nil; writeln(f,'----------------------------------------------------|'); close(f); Stroka:='Файл записан успешно.Нажмите любую клавишу для выхода в меню'; vvod; Readkey; end; begin clrscr; repeat &nbsp; OsnOkno; &nbsp; menu(i); &nbsp; i:=klavish(i); &nbsp; if i=1 then &nbsp; repeat &nbsp; &nbsp; Nazv:='Сколько фигур будет в списке?'; &nbsp; &nbsp; Stroka:='Введите число от 25 до 30'; &nbsp; &nbsp; Vvod; &nbsp; &nbsp; readln(n); &nbsp; &nbsp; if (n&gt;=25) and (n&lt;=30) then &nbsp; &nbsp; begin &nbsp; &nbsp; &nbsp; DinSpis; &nbsp; &nbsp; &nbsp; Nazv:='Список сформирован'; &nbsp; &nbsp; &nbsp; Stroka:='Нажмите любую клавишу для выхода в меню'; &nbsp; &nbsp; &nbsp; Vvod; &nbsp; &nbsp; &nbsp; readkey; &nbsp; &nbsp; &nbsp; p:=1; &nbsp; &nbsp; end &nbsp; &nbsp; else &nbsp; &nbsp; begin &nbsp; &nbsp; &nbsp; Stroka:='Ошибка ввода,попробуйте еще раз'; &nbsp; &nbsp; &nbsp; Vvod; &nbsp; &nbsp; &nbsp; readkey; &nbsp; &nbsp; &nbsp; p:=0; &nbsp; &nbsp; end; &nbsp; until p=1; &nbsp; if i=2 then soxranenie; &nbsp; if i=3 then zagruzit; &nbsp; if i=4 then prosmotr; &nbsp; if i=5 then inform; &nbsp; if i=6 then &nbsp; begin &nbsp; &nbsp; if Nach&lt;&gt;nil then &nbsp; &nbsp; begin &nbsp; &nbsp; &nbsp; Stroka:='Сохранить текущий список?! (y-да,n-нет)'; &nbsp; &nbsp; &nbsp; vvod; &nbsp; &nbsp; &nbsp; c:=readkey; &nbsp; &nbsp; &nbsp; case c of &nbsp; &nbsp; &nbsp; #121: begin soxranenie; DisposeRec; c:=#27; end; &nbsp; &nbsp; &nbsp; #110: begin DisposeRec; c:=#27; end; &nbsp; &nbsp; &nbsp; end; &nbsp; &nbsp; end &nbsp; &nbsp; else c:=#27; &nbsp; end; until c=#27; End.
Post #: 1
Страниц:  [1]
Все форумы >> [Первый вопрос] >> Меню + графика Pascal







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.