Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, PASCAL. (http://www.tehnari.ru/f41/t36796/)

darkdragon 07.06.2010 22:26

Помогите, PASCAL.
 
Срочно помогите сделать столбиковую диаграмму до среды...практику надо здать!
В программе вводится количество групп ,имя группы,кол-во 5,4,3,2 и считается средний балл!
диаграмма должна отражать процент качества в группах (5,0 это 100%) и размер стобиков должен быть разный(т.е если два столбика то они широкие, а если 10 поменьше чтобы входили на ось Х).Очень надеюсь на помощь!

З.Ы Модерам пожалуйства извините за повтор темы!

MrSTEP 07.06.2010 23:16

А повтор темы чем-то оправдан?

Для вывода такой диаграммы придется воспользоваться модулем Graph - откройте справку, там все должно быть расписано. Ширину столбика определяете как ширину экрана, разделенную на количество групп (для красоты и читаемости надо будет учесть отступы). Больше помочь ничем не могу, не знаком с этим модулем

Vladimir_S 08.06.2010 10:47

Ладно, сделаю, ждите.

Vladimir_S 08.06.2010 12:03

Вложений: 1
Ну вот:
Код:

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.

В итоге должно получиться нечто в таком роде:
Вложение 14557

darkdragon 08.06.2010 16:35

Спасибо огромное !!!!!вы немножко больше поработали я программу саму написал давно она легкая а вот с диаграммой никак было!Который раз выручаете ..Спасибо не дадите пропасть!!))))

Vladimir_S 08.06.2010 20:31

Сейчас пришло в голову - наверное, есть неточность. В условии сказано, что 100% соответствует средний балл 5.0. Но что соответствует 0%? Я считал, что 0.0, а вероятно правильнее считать 2.0. Сможете сами исправить?
P.S. На всякий случай - в таком варианте следует 6-ю снизу строку заменить на
Код:

BarHight:=ROUND(400/3*(Mmed[i]-2));


Часовой пояс GMT +4, время: 11:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.