23.12.2010, 11:27 | #1 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Поправить прогу с графическим режимом
Я думаю, Программу нужно оформить в виде процедуры, но не знаю как точно. помогите пожалуйста. Код:
Текст программы. program treug; uses Graph,crt; const god:array[1..6] of string=('Milk(max)','Milr(cred)','white(max)','white(cred)','black(max)', 'black(cred)'); cen:array[1..6] of real=(200,180,200,100,200,50); var GrDrv:integer; {Графический драйвер} GrMode:integer; {Графический режим} GrErr:integer; {Графическая ошибка} f:text; s:string; i,j,gd,gm,x0,y0,w:integer; mx,h:real; k:char; begin gd:=0; w:=25; {ширина столбцов} x0:=50; {левый край диагоаммы} y0:=420; {нижний край} mx:=cen[1]; clrscr; assign(f,'G:\tabl2.txt'); reset(f); writeln(' TABLICA SHOKOLADA'); writeln; while not eof(f) do begin readln(f,s); writeln(s); end; close(f); writeln; writeln('please double press ENTER to continue...'); K:=readkey; if(readkey=#13) then begin initgraph(gd,gm,''); for i:=1 to 6 do if cen[i]>mx then mx:=cen[i]; {находим максимум} h:=(y0-40)/mx; {масштаб по вертикали} for i:=1 to 6 do begin setcolor(i+1);{цвет} Setfillstyle(i+1,i+1); {стиль заполнения} {рисуем параллелепипеды с заданной шириной, шагом и высотой соответственно значению цен} Bar3d(x0+4*w*(i-1),y0-round(cen[i]*h),x0+w*(4*i-2),y0,15,topon); outtextXY(x0+4*w*(i-1),y0+20,god[i]); {выводим по низу наименования} str(cen[i]:5:2,s);{преобразуем цены в строку} outtextXY(x0+4*w*(i-1)+w,y0-round(cen[i]*h)-20,s); {выводим цену выше столбика} end; readln end else writeln('error, restart application.'); end. 200 180 milk 200 100 white 200 50 black |
23.12.2010, 11:27 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Скорее всего в схожих темах вы найдете много полезной информации Проблема со спящим режимом Помогите поправить код Проблема со спящим режимом Поправить программу. Иначе отчислят. Проблемы со спящим режимом. |
24.12.2010, 23:17 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Хелен, а как насчет того, чтобы сформулировать задачу, которую решает программа? Или полагаете, что нам ужас до чего интересно восстанавливать задание по листингу?
|
24.12.2010, 23:38 | #3 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Извиняюсь.. как-то не подумала.
Написать задачу, которая выводит на экран трехмерную столбиковую диаграмму, представляющую максимальную и среднюю норму прибыли при реализации различных сортов шоколада. Исходные данные сформировать в текстовом файле самостоятельно. |
25.12.2010, 19:19 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
В общем, отладил я Вашу программу. Теперь она может "переваривать" до 6 сортов шоколада. Изменен вывод текстовой информации - он сделан вертикальным, иначе легенды столбиков начнут при увеличении количества сортов налезать друг на друга. Вот: Код:
program treug; uses Graph,crt; Const N_sorts_max=6; var GrDrv:integer; {Графический драйвер} GrMode:integer; {Графический режим} GrErr:integer; {Графическая ошибка} f:text; N_sorts:Byte; name:array[1..N_sorts_max] of string; cen_max,cen_cred:array[1..N_sorts_max] of Word; s:string; i,j,gd,gm,x0,y0,w:integer; mx,h:real; k:char; begin gd:=0; clrscr; assign(f,'G:\tabl2.txt'); reset(f); writeln(' TABLICA SHOKOLADA'); writeln; N_sorts:=0; while not eof(f) do begin Inc(N_sorts); readln(f,name[N_sorts]); writeln(name[N_sorts]); readln(f,cen_max[N_sorts]); readln(f,cen_cred[N_sorts]); end; close(f); w:=75 div N_sorts; {ширина столбцов} x0:=50; {левый край диаграммы} y0:=420; {нижний край} mx:=cen_max[1]; writeln; writeln('please double press ENTER to continue...'); K:=readkey; if(readkey=#13) then begin initgraph(gd,gm,''); for i:=1 to N_sorts do if cen_max[i]>mx then mx:=cen_max[i]; {находим максимум} h:=(y0-40)/mx; {масштаб по вертикали} SetTextStyle(DefaultFont,VertDir,1); SetTextJustify(RightText,BottomText); for i:=1 to N_sorts do begin setcolor(i+1);{цвет} Setfillstyle(i+1,i+1); {стиль заполнения} {рисуем параллелепипеды с заданной шириной, шагом и высотой соответственно значению цен} Bar3d(x0+8*w*(i-1),y0-round(cen_max[i]*h),x0+w*(8*i-6),y0,15,topon); str(cen_max[i],s);{преобразуем цены в строку} outtextXY(x0+8*w*(i-1)-2,y0,name[i]+'_max '+s); {выводим} Bar3d(x0+4*w*(2*i-1),y0-round(cen_cred[i]*h),x0+w*(8*i-2),y0,15,topon); str(cen_cred[i],s);{преобразуем цены в строку} outtextXY(x0+4*w*(2*i-1)-2,y0,name[i]+'_cred '+s); {выводим } end; readln; end else writeln('error, restart application.'); end. Код:
Milk 200 180 White 200 100 Black 200 50 Rose 180 70 Blue 220 100 |
|
25.12.2010, 22:53 | #5 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Большое спасибо!! Буду учится на своих ошибках.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|