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

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

22.01.2013, 10:03. Показов 3662. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru