07.06.2010, 22:26 | #1 (permalink) |
Member
Регистрация: 08.04.2010
Сообщений: 38
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите, PASCAL.
В программе вводится количество групп ,имя группы,кол-во 5,4,3,2 и считается средний балл! диаграмма должна отражать процент качества в группах (5,0 это 100%) и размер стобиков должен быть разный(т.е если два столбика то они широкие, а если 10 поменьше чтобы входили на ось Х).Очень надеюсь на помощь! З.Ы Модерам пожалуйства извините за повтор темы! |
07.06.2010, 22:26 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
В этом деле главное не торопится, а по лучше ознакомится с проблемой Помогите написать программу на PASCAL Помогите решить задачки в Pascal Помогите в написании программы в Pascal Помогите найти ошибку, Pascal abc |
07.06.2010, 23:16 | #2 (permalink) |
一步一步地会到目的
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
|
А повтор темы чем-то оправдан?
Для вывода такой диаграммы придется воспользоваться модулем Graph - откройте справку, там все должно быть расписано. Ширину столбика определяете как ширину экрана, разделенную на количество групп (для красоты и читаемости надо будет учесть отступы). Больше помочь ничем не могу, не знаком с этим модулем |
08.06.2010, 12:03 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну вот:
Код:
Uses Graph, CRT; Type Group=Record Name:String; Marks:ARRAY[2..5] of Byte; End; var Gr:Array[1..25] of Group; Mmed:Array[1..25] of Real; N:Byte; S:String; i,j:Integer; Sum1,Sum2:Real; Width, BarWidth, BarHight,X:WORD; begin Write('Enter number of groups (<26) '); ReadLn(N); For i:=1 to N do With Gr[i] do begin WriteLn('Group name (max 8 symbols; only Latin letters and figures!):'); ReadLn(Name); For j:=2 to 5 do begin Write('Number of "',j,'" marks '); ReadLn(Marks[j]); end; WriteLn; end; For i:=1 to N do begin Sum1:=0; Sum2:=0; With Gr[i] do For j:=2 to 5 do begin Sum1:=Sum1+Marks[j]*j; Sum2:=Sum2+Marks[j]; end; Mmed[i]:=Sum1/Sum2; end; InitGraph( ){Здесь Вам нужно задать параметры процедуры самостоятельно, под Ваш компьютер}; ClearDevice; SetColor(Cyan); SetLineStyle(SolidLn,0,ThickWidth); Rectangle(30, 10, 640, 410); SetLineStyle(SolidLn,0,NormWidth); SetTextStyle(DefaultFont, HorizDir,1); SetTextJustify(RightText, CenterText); OutTextXY(26, 10, '100'); OutTextXY(26, 410, '0'); For i:=1 to 9 do begin Str(i*10,S); OutTextXY(26, 410-i*40, S); Line(30,410-i*40,640,410-i*40); end; Width:=600 div N; BarWidth:=Width-10; SetTextStyle(DefaultFont, VertDir,1); SetTextJustify(CenterText, TopText); For i:=1 to N do begin OutTextXY(30+(i-1)*Width+10+(BarWidth div 2), 414, Gr[i].Name); Line(30+(i-1)*Width+10+(BarWidth div 2), 410, 30+(i-1)*Width+10+(BarWidth div 2), 10); end; SetFillStyle(SolidFill,Red); For i:=1 to N do begin X:=30+(i-1)*Width+10+(BarWidth div 2); BarHight:=ROUND(400/5*Mmed[i]); Bar(X-(BarWidth div 2),409, X+(BarWidth div 2), 411-BarHight); end; ReadKey; CloseGraph; end. |
08.06.2010, 16:35 | #5 (permalink) |
Member
Регистрация: 08.04.2010
Сообщений: 38
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо огромное !!!!!вы немножко больше поработали я программу саму написал давно она легкая а вот с диаграммой никак было!Который раз выручаете ..Спасибо не дадите пропасть!!))))
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.06.2010, 20:31 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Сейчас пришло в голову - наверное, есть неточность. В условии сказано, что 100% соответствует средний балл 5.0. Но что соответствует 0%? Я считал, что 0.0, а вероятно правильнее считать 2.0. Сможете сами исправить?
P.S. На всякий случай - в таком варианте следует 6-ю снизу строку заменить на Код:
BarHight:=ROUND(400/3*(Mmed[i]-2)); |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|