6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
1

Записи и графика (столбцовая диаграмма)

17.04.2009, 22:19. Показов 1347. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток Есть задача, которая выводит успеваемость студентов:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Program Lab14_10;
uses CRT;
const MaxNumberOfStudents=99;
type TStudent=record
             Name:string[25];
             Mark:2..5;
     end;
     TListOfStudents=record
                     Items:array[1..MaxNumberOfStudents] of TStudent;
                     Count:byte;
     end;
     TJournal=record
              Group:string[6];
              Students:TListOfStudents;
     end;
type ArrayMarks=array[1..4] of byte;
 
Procedure InputStudent(var s:TStudent);
begin
  write(' ‘в㤥*в: ');
  readln(s.Name);
  write('   ЋжҐ*Є*: ');
  readln(s.Mark);
end;
 
Procedure InputListOfStudents(var j:TListOfStudents);
var i:byte;
begin
  write('‚ўҐ¤ЁвҐ зЁб«® бв㤥*в®ў: ');
  readln(j.Count);
  writeln('‘ЇЁб®Є бв㤥*в®ў Ё ®жҐ*®Є:');
  for i:=1 to j.Count do
    begin
      write('ь',i );
      InputStudent(j.Items[i]);
    end;
  clrscr;
end;
 
Procedure InputJournal(var j:TJournal);
begin
  write('Ќ®¬Ґа ЈагЇЇл: ');
  readln(j.Group);
  InputListOfStudents(j.Students);
end;
 
Procedure OutputRegister(mark:byte; Magazine:TJournal);
var i:byte;
begin
  writeln(' Ќ®¬Ґа ЈагЇЇл - ',Magazine.Group);
  writeln('ЋжҐ*Є* бв㤥*в* -  (',mark,'):');
  for i:=1 to Magazine.Students.Count do
    if Magazine.Students.Items[i].Mark=mark then
      writeln(Magazine.Students.Items[i].name);
  readln;
end;
 
Procedure Diagramma (Magazine:TJournal; var sm:ArrayMarks);
var i,j:byte;
begin
  for i:=1 to Magazine.Students.Count do
    if Magazine.Students.Items[i].Mark=2 then
      sm[1]:=sm[1]+1
    else if Magazine.Students.Items[i].Mark=3 then
      sm[2]:=sm[2]+1
    else if Magazine.Students.Items[i].Mark=4 then
      sm[3]:=sm[3]+1
    else if Magazine.Students.Items[i].Mark=5 then
      sm[4]:=sm[4]+1;
    for i:=1 to 4 do
      begin
        textcolor(i);
         write('Kolichestvo ',i+1,'   ');
         for j:=1 to sm[i]*2 do
           write(#178);
         write('  ',sm[i]);
         writeln;
      end;
  readln;
end;
 
var j:TJournal;
    sm:ArrayMarks;
begin
  clrscr;
  InputJournal(j);
  OutputRegister(5,j);
  OutputRegister(4,j);
  OutputRegister(3,j);
  OutputRegister(2,j);
  Diagramma(j,sm);
end.
Проблема в следующем: как переделать вывод диаграммы так, чтобы она выводила столбцовую диаграмму успеваемости??? Именно по столбцам!!!

Добавлено через 2 часа 16 минут 17 секунд
Помогите

Добавлено через 1 час 51 минуту 24 секунды
Сейчас я посидел и покодил, и вот что я получил:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Program KKR4_10;
uses CRT,Graph;
const MaxNumberOfStudents=99;
type TStudent=record
             Name:string[25];
             Mark:2..5;
     end;
     TListOfStudents=record
                     Items:array[1..MaxNumberOfStudents] of TStudent;
                     Count:integer;
     end;
     TJournal=record
              Group:string[6];
              Students:TListOfStudents;
     end;
type ArrayMarks=array[1..4] of integer;
 
Procedure InputStudent(var s:TStudent);
begin
  write(' Ученик: ');
  readln(s.Name);
  write('   Оценка: ');
  readln(s.Mark);
end;
 
Procedure InputListOfStudents(var j:TListOfStudents);
var i:integer;
begin
  write('Введите число учеников: ');
  readln(j.Count);
  writeln('Список учеников и оценок:');
  for i:=1 to j.Count do
    begin
      write('№',i );
      InputStudent(j.Items[i]);
    end;
  clrscr;
end;
 
Procedure InputJournal(var j:TJournal);
begin
  write('Класс: ');
  readln(j.Group);
  InputListOfStudents(j.Students);
end;
 
Procedure OutputRegister(mark:byte; Magazine:TJournal);
var i:integer;
begin
  writeln(' Класс - ',Magazine.Group);
  writeln('Оценка ученика -  (',mark,'):');
  for i:=1 to Magazine.Students.Count do
    if Magazine.Students.Items[i].Mark=mark then
      writeln(Magazine.Students.Items[i].name);
  readln;
end;
 
{Procedure Diagramma (Magazine:TJournal; var sm:ArrayMarks);
var i,j:byte;
begin
  for i:=1 to Magazine.Students.Count do
    if Magazine.Students.Items[i].Mark=2 then
      sm[1]:=sm[1]+1
    else if Magazine.Students.Items[i].Mark=3 then
      sm[2]:=sm[2]+1
    else if Magazine.Students.Items[i].Mark=4 then
      sm[3]:=sm[3]+1
    else if Magazine.Students.Items[i].Mark=5 then
      sm[4]:=sm[4]+1;
    for i:=1 to 4 do
      begin
        textcolor(i);
         write('Kolichestvo ',i+1,'   ');
         for j:=1 to sm[i]*2 do
           write(#178);
         write('  ',sm[i]);
         writeln;
      end;
  readln;
end;}
 
Function CountCoordinateForY(sm:ArrayMarks):integer;
var i,y:integer;
begin
  Y:=sm[i];
  CountCoordinateForY:=200/Y;
end;
 
Procedure Diagramma(Magazine:Tjournal; sm:ArrayMarks);
var driver,mode,Err:integer;
var i,y1:integer;
begin
  clrscr;
  driver:=detect;
  InitGraph(driver,mode,'C:\BGI');
  Err:=GraphResult;
  if Err<>grOK then
    writeln('Ошибка при инициализации графического режима')
  else
    begin
      SetViewPort(0,0,200,300,ClipOff);
      for i:=1 to Magazine.Students.Count do
        if Magazine.Students.Items[i].Mark=2 then
          sm[1]:=sm[1]+1
        else if Magazine.Students.Items[i].Mark=3 then
            sm[2]:=sm[2]+1
        else if Magazine.Students.Items[i].Mark=4 then
          sm[3]:=sm[3]+1
        else if Magazine.Students.Items[i].Mark=5 then
          sm[4]:=sm[4]+1;
      Rectangle(CountCoordinateForY(sm[1]),0,0,75);{2}
      Rectangle(CountCoordinateForY(sm[2]),75,0,150);{3}
      Rectangle(CountCoordinateForY(sm[3]),150,0,225);{4}
      Rectangle(CountCoordinateForY(sm[4]),225,0,300);{5}
    end;
end;
 
var j:TJournal;
    sm:ArrayMarks;
begin
  clrscr;
  InputJournal(j);
  OutputRegister(5,j);
  OutputRegister(4,j);
  OutputRegister(3,j);
  OutputRegister(2,j);
  Diagramma(j,sm);
  readln;
end.
TypeMismatch в функции определения координат... Не знаю дальше, что делать, помогите плиз!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2009, 22:19
Ответы с готовыми решениями:

Столбцовая диаграмма
Помогите написать программу с использованием процедур и функций компьютерной графики из модуля...

столбцовая диаграмма
даны учащиеся на 5 на 4 и на 3 кол-во вводим сами....нужно построить столбцовую диаграмму при этом...

Chart - диаграмма: изменить точность делений графика, установить центр графика в (0,0)
Создал диаграмму (все прекрасно считается точки расставляются), но есть проблемыЖ 1. В случае...

Столбцовая перестановка, частотный анализ
Нужно выполнить следующее: Расшифровать фразу, зашифрованную столбцовой перестановкой. ...

6
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
18.04.2009, 12:18 2
Function CountCoordinateForY(sm:ArrayMarks):integer;
Целый тип.
CountCoordinateForY:=200/Y;
Вещественный.
Нужно
CountCoordinateForY:=round(200/Y);
0
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
18.04.2009, 15:19  [ТС] 3
Исправил, и теперь TypeMismatch в вызове функции:
Pascal
1
2
3
4
Rectangle(CountCoordinateForY(sm[1]),0,0,75);{2}
      Rectangle(CountCoordinateForY(sm[2]),75,0,150);{3}
      Rectangle(CountCoordinateForY(sm[3]),150,0,225);{4}
      Rectangle(CountCoordinateForY(sm[4]),225,0,300);{5}
Здесь что надо сделать???
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
18.04.2009, 16:56 4
Pascal
1
Function CountCoordinateForY(sm:ArrayMarks):integer;
Здесь параметр массив.
А здесь
Pascal
1
Rectangle(CountCoordinateForY(sm[4]),225,0,300);
целое число.
Надо например так.
Объявление.
Pascal
1
2
3
4
5
6
Function CountCoordinateForY(sm:ArrayMarks;i:integer):integer;
var y:integer;
begin
  Y:=sm[i];
  CountCoordinateForY:=200/Y;
end;
Вызов.
Pascal
1
Rectangle(CountCoordinateForY(sm;4),225,0,300);
1
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
18.04.2009, 20:10  [ТС] 5
А вот ещё вопрос - а как столбиками то вывести???
0
Почетный модератор
64291 / 47589 / 32740
Регистрация: 18.05.2008
Сообщений: 115,181
18.04.2009, 20:17 6
Рисуете 4 прямоугольника с одинаковой нижней ординатой. Верхнюю ординату определяете как нижняя минус количество оценок, умноженное на коэффициент, подберете эмпирически. Естественно прямоугольники одной ширины, которая меньше самой маленькой высоты.
1
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
18.04.2009, 20:22  [ТС] 7
да, да, спасибо, я правда уже перерисовал)))

Добавлено через 2 минуты 57 секунд
Хм, ваш способ проще, чем у меня)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2009, 20:22
Помогаю со студенческими работами здесь

Столбцовая перестановка, частотный анализ
Нужно выполнить следующее: Расшифровать фразу, зашифрованную столбцовой перестановкой. ...

Построение графика в полярных координатах "Диаграмма направленности"
ребят, помогите пожалуйста построить график диаграммы направленности цилиндрической спиральной...

Векторная диаграмма токов и топографическая диаграмма напряжений
Имея вот такие параметры мне нужно построить векторную и диаграмму токов и топологическую диаграмму...

Обьявить тип записи, выделить память динамически для этой записи и в одно из полей записи стрин
И вывести оценку в поле шоу мэсседж


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru