Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
2 / 2 / 1
Регистрация: 04.01.2013
Сообщений: 48

Подсчитать средний балл каждого студента, общий средний балл по каждому предмету

22.01.2013, 10:03. Показов 3660. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приложение под Windows должно подсчитывать средний балл каждого студента, общий средний балл по каждому предмету. Исходной информацией является: Фамилия и имя,оценки каждого студента по математике, вводному курсу информатики, программированию, компьютерным сетям. Фамилия и имя, оценки вводятся непосредственно в таблицу. Расчет производится непосредственно после каждого изменения в таблице.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2013, 10:03
Ответы с готовыми решениями:

Известны результаты сдачи трех экзаменов десятью студентами. Найти средний балл каждого студента и общий средний балл
Известны результаты сдачи трех экзаменов десятью студентами. Найти средний балл каждого студента и общий средний балл. Точность...

Средний балл каждого студента по каждому предмету
Пользователь последовательно вводит оценки студентов по предметам. Кол-во студентов и предметов непостоянное. На выходе хочет получить...

Найти средний балл каждого студента и общий средний балл
Известны результаты сдачи трех экзаменов десятью студентами. Найти средний балл каждого студента и общий средний балл. Точность...

2
314 / 273 / 272
Регистрация: 25.09.2011
Сообщений: 477
23.01.2013, 23:10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Инструкция к работе:
чтобы ввести фамилию или имя нужно вывести курсор на левое поле и нажать Enter
после ввода тоже нажать Enter. Можно корректировать - вывести на левое поле Del
Новое значение нельзя ввести , пока не будет заполнено имя и фамилия (можно пустыми оставить, но нажать дважды Enter) в предыдущем значении. Реализована прокрутка. Палочки в табличке сами .
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
uses TpCrt,TpWindow;
type
  Str18 = String[18]; Str13=String[13];
const
  bgColor = $07; stColor = $78; prColor = $2f;
  MaxP = 5;       { количество полей отображения в таблице }
  MaxPr = maxP-1; { количество предметов }
  MaxOc = 100;    { количество оценок по одному предмету }
  XTabl : array [0..MaxP] of byte = (1,20,35,50,65,80);
  NamePr : array [0..MaxPr] of str13 = (' фамилия имя ',' математика  ',
                           ' информатика ',' программир. ',' комп. сети  ');
type
  tOcArr = array[1..maxOc] of byte;
 
  tOcenki = object
    NPredm,Num,Line  : byte;
    Oc : tOcArr;
    SumOc : word;
    procedure Init(predmet : byte);
    procedure ViewOc(YUp : byte);
    function  AddOc(newOc : byte) : byte;
    procedure CalcSr(var Sum : word; var N : byte);
  end;
 
  tStudent = object
    fam,nam : str18;
    inp : byte;  { определитель для ввода фамилии и имени }
    Pr : array [1..MaxPr] of tOcenki;
    procedure Init;
    procedure ViewFio(YUp : byte);
    procedure SetChFio(NewCh : char);
    function  GetAllSr : real;
    procedure ViewStudent(YUp : byte);
    function  Createitem : boolean;
  end;
 
  pDyn = ^tDyn;
  tDyn = record
    pred,next : pDyn;
    St        : tStudent;
  end;
 
  Procedure Message(St : String);
  var MessWin : WindowPtr; L : Byte; W : Word;
  begin L := Length(St) div 2;
    if not MakeWindow(MessWin,39-L,13,41+L,15,True,True,False,$4e,$4f,$4f,'')
    then Writeln('ErrMake');
    if not DisplayWindow(MessWin) then Writeln('ErrDisp');
    HiddenCursor; FastWrite(St,14,40-L,$75); W:=ReadKeyWord;
    KillWindow(MessWin);
  end;
 
  {-------------- tOcenki ----------------}
 
  procedure tOcenki.Init(predmet : byte);
  var i : byte; begin for i:=1 to MaxOc do Oc[i]:=0;
    Num:=0; NPredm:=predmet; SumOc:=0; Line:=0; end;
 
  procedure tOcenki.ViewOc(YUp : byte); var i,k : byte; s : word;
  begin
    gotoXY(XTabl[NPredm],YUp); k:=0; s:=0;
    for i:=1 to Num do begin
      if whereX+2 > XTabl[NPredm+1] then begin
        inc(k); gotoXY(XTabl[NPredm],YUp+k);
        write('             '); gotoXY(XTabl[NPredm],YUp+k);
      end;
      write(Oc[i]:2); s:=s+Oc[i];
    end;
    if Num<>0 then begin
      gotoXY(XTabl[NPredm],YUp+k+1); write(' средняя ',s/num:0:2); end;
  end;
 
  function tOcenki.AddOc(newOc : byte): byte;
  begin inc(Num); Oc[Num]:=newOc;
    AddOc:=(Num-1) div ((XTabl[NPredm+1]-XTabl[NPredm]) div 2) +1;
  end;
 
  procedure tOcenki.CalcSr(var Sum : word; var N : byte); var i : byte;
  begin for i:=1 to Num do Sum:=Sum+Oc[i]; n:=n+num; end;
 
  {-------------- tStudent ----------------}
 
  procedure tStudent.Init; var i : byte;
  begin fam:=''; nam:=''; Inp:=0; for i:=1 to maxPr do Pr[i].Init(i); end;
 
  function tStudent.GetAllSr : real; var i,n : byte; s : word;
  begin n:=0; s:=0; for i:=1 to MaxPr do Pr[i].CalcSr(s,n);
    if n=0 then GetAllSr:=0 else GetAllSr:=s/n; end;
 
  procedure tStudent.ViewFio(YUp : byte);
  begin
    case inp of
      0: begin gotoXY(XTabl[0],YUp); write('            ');
               gotoXY(XTabl[0],YUp+1); write('              '); end;
      1: begin gotoXY(XTabl[0],YUp); write(fam); end;
      2: begin gotoXY(XTabl[0],YUp+1); write(nam); end;
      3: begin gotoXY(XTabl[0],YUp+2); write('Ср. балл: ',GetAllSr:0:2);
  gotoXY(XTabl[0],YUp); write(fam); gotoXY(XTabl[0],YUp+1); write(nam); end;
    end;
  end;
 
  procedure tStudent.ViewStudent(YUp : byte); var i : byte;
  begin ViewFio(YUp); for i:=1 to MaxPr do Pr[i].ViewOc(YUp); end;
 
  procedure tStudent.SetChFio(NewCh : char);
  begin
    if (Newch=#13) and (inp<3) then inc(inp);
    case inp of 0,3:; 1: fam:=fam+newch; 2: nam:=nam+newch; end;
    if NewCh=#8 then begin fam:=''; nam:=''; inp:=1; end;
  end;
 
  function  tStudent.Createitem : boolean; begin CreateItem:=inp=3; end;
 
  procedure ReWriteTable(start : pDyn; delta: byte; var NewY : byte);
  var i : byte; begin
    textattr:=bgColor; clrscr;
    for i:=0 to maxPr do begin gotoXY(XTabl[i],1); write(NamePr[i]); end;
    i:=2;
    while (Start<>nil) and (i<=25-delta) do begin
      Start^.St.ViewStudent(i); inc(i,delta); Start:=Start^.next; end;
    NewY:=2;
  end;
 
 
var
  Stud,Cur,CurUp : pDyn;
  Ch : char;
  Quit : boolean;
  Y,ml,SelPole,i : byte;
Begin
  textattr:=bgColor; clrscr;
  new(Stud); cur:=Stud; cur^.next:=nil; cur^.pred:=nil; Cur^.St.init;
  CurUp:=Cur;
  for i:=0 to maxPr do begin gotoXY(XTabl[i],1); write(NamePr[i]); end;
  quit:=false; SelPole:=0; ml:=3; y:=2; HiddenCursor;
  repeat
    for i:=1 to ml do begin
      ChangeAttribute(79,Y+i-1,1,stColor);
      ChangeAttribute(Xtabl[SelPole+1]-Xtabl[SelPole],Y+i-1,Xtabl[SelPole],prColor);
    end;
    ch:=ReadKey;
    for i:=1 to ml do ChangeAttribute(79,Y+i-1,1,bgColor);
    if ch=#0 then begin HiddenCursor;
      case ReadKey of
      { Left } #75 : if selPole=0 then SelPole:=maxPr else Dec(SelPole);
      { Right} #77 : if selPole=MaxPr then SelPole:=0 else Inc(SelPole);
      { Up}    #72 : if Cur^.pred<>nil then begin { если есть предыдущий }
                        Cur:=Cur^.pred;    {он становится текущим}
 { можно ли отобразить} if y < 2+ml then begin
                            ScrollWindowDown(1,2,80,25,ml);
                            Cur^.St.ViewStudent(y);
                         end
 { елси нет места-подвинуть экран, иначе сдвинуть курсор } else dec(y,ml);
                     end else message('  начало списка  ');
      { Down } #80 : if Cur^.St.CreateItem then begin { если данные введены }
                        if Cur^.next<>nil then begin    { если есть следуещее}
                          Cur:=Cur^.next;               { оно будет текущим }
                        end else begin { данные введены, нужен еще }
   { создаем новый }      New(Cur^.next); Cur^.Next^.pred:=cur;
   { и инниц. его }       cur:=cur^.next; cur^.next:=nil; cur^.St.Init;
                        end;
 { можно ли отобразить} if (y+ml)>(25-ml) then ScrollWindowUp(1,2,80,25,ml)
 { елси нет места-подвинуть экран, иначе сдвинуть курсор } else inc(y,ml);
                     end else message(' сначала что есть заполни ');
      { del  } #83 : if selPole=0 then begin
                        Cur^.St.SetChFio(ch);
                        Cur^.St.ViewFIO(y);
                      end;
      end;
    end else begin case Ch of
          '1'..'5' : if selPole<>0 then begin { если поле - предмет }
                        HiddenCursor;
  {добавляем оценку }   i:=Cur^.St.Pr[SelPole].AddOc(ord(ch)-48);
  { сменилас размерность}if i+1>ml then begin
  { перерисовываем все }  ml:=i+1; ReWriteTable(Cur,ml,y);
                        end;
                        Cur^.St.Pr[SelPole].ViewOc(y); Cur^.St.ViewFio(y);
                     end;
       #8,#13,' ','А'..'п','р'..'я' : if selPole=0 then begin { Del,Enter }
                        NormalCursor;
                        Cur^.St.SetChFio(ch); Cur^.St.ViewFio(y);
                     end;
      { Esc }  #27 : Quit:=true;
      end;
    end;
  until Quit;
  while Stud<>nil do begin cur:=Stud^.next;  dispose(Stud); Stud:=cur; end;
  NormalCursor; textattr:=bgColor; clrscr;
End.
Добавлено через 4 минуты
написано в TP7 под DosBox
1
2 / 2 / 1
Регистрация: 04.01.2013
Сообщений: 48
25.01.2013, 10:27  [ТС]
Спасибо дружище))) Я тоже написал только в Delphi)

Добавлено через 2 минуты
Delphi
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
unit Un_TABLE;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ExtCtrls, StdCtrls, Buttons;
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label1: TLabel;
    StringGrid1: TStringGrid;
    BitBtn3: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  n:byte;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  n:=0;
  with stringGrid1 do
  begin
    cells[0,0]:= 'Имя и фамилия';
    cells[1,0]:= 'Математический анализ';
    cells[2,0]:= 'Информатика';
    cells[3,0]:= 'Программирование';
    cells[4,0]:= 'Физика';
    cells[5,0]:= 'Средний балл';
    cells[0,1]:= 'Средний балл по предмету';
  end;
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var j:byte;
begin
  if edit1.text=''
   then showMessage('Введите фамилию и имя!')
   else
     begin
       stringGrid1.Enabled:=true;
       n:=n+1;
       with StringGrid1 do
       begin
         RowCount:= RowCount+1;
         for j:=0 to 5 do
           begin
             cells[j,RowCount-1]:=cells[j,RowCount-2];
             cells[j,RowCount-2]:='';
           end;
         cells[0,RowCount-2]:=Edit1.Text;
       end;
       edit1.Clear;
       if Form1.Height<400
        then Form1.Height:=Form1.Height+25;
     end;
   edit1.SetFocus;
end;
 
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var b, c:integer;
    j, k:byte;
    SumRow, SumCol: real;
begin
  with stringGrid1 do
    if (ARow<>RowCount-1) and (ACol<>ColCount-1) then
    begin
      if Value<>'' then
      begin
        val(value,b,c);
        if (c<>0) or (not (b in [1..5])) then
         cells[Acol,Arow]:='';
      end;
      SumRow:=0;
      k:=0;
      for j:=1 to 4 do
        if cells[j,Arow]<>'' then
         begin
           SumRow:=SumRow + StrToInt(cells[j,Arow]);
           inc(k);
         end;
      if k<>0 then SumRow:=SUmRow/k;
      cells[5,Arow]:=FormatFloat('##.##',SumRow);
      SumCol:=0;
      k:=0;
      for j:=1 to n do
        if cells[Acol,j]<>'' then
         begin
           SumCol:=SumCol + StrToInt(cells[Acol,j]);
           inc(k);
         end;
      if k<>0 then SumCol:=SumCol/k;
      cells[Acol,n+1]:=FormatFloat('##.##',SumCol);
    end;
 
end;
 
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if (Acol=StringGrid1.ColCount-1) or (Arow=StringGrid1.RowCount-1)
   then canselect:=false;
end;
 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2013, 10:27
Помогаю со студенческими работами здесь

Найти средний балл каждого студента и общий средний балл
Известны результаты сдачи трех экзаменов десятью студентами. Найти средний балл каждого студента и общий средний балл. Точность среднего...

Определите средний балл студентов группы по каждому предмету
Помогите пожалуйста написать программу с помощью процедуры или функции!!! Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая...

Вывести на экран матрицу ведомости, результаты подсчета и средний балл по каждому предмету
1. В классе 7 учащихся. Известны результаты экзаменов по 2 предметам. Составить программу вычисления количества учащихся, сдавших оба...

Подсчитать средний балл студента Х
Сформировать массив записей - успеваемость группы. Поля записи: фамилия студента, оценки по трем дисциплинам. Подсчитать средний балл...

Вывести на экран исходную матрицу-ведомость, результаты подсчета и средний балл по каждому предмету
В классе 7 учеников, известны результаты сдачи экзаменов по двум предметам. Составьте программу вычисления количества учащихся ,сдавших оба...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru