Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2017, 23:49   #1
Jeka14
 
Регистрация: 21.11.2017
Сообщений: 9
По умолчанию Помогите исправить программу пожалуйста - Pascal - работа с записями - оценки учеников по предметам

Код:
type
  zap = record
    fio: string[40];
    Otmetka: array[1..5] of Byte;
    end;
  zap2 = record
    absolut: integer;
    kacestvo: integer;
  end;
var
  s: array[1..20] of zap;
  v: array[1..20] of zap2;
  i, n: integer;
 predmet:array[1..5] of string[15];
begin
  begin
  write ('Введите предметы');
  for i:= 1 to 5 do 
  begin 
  write('введите предмет');
  read(predmet[i]);
  end;
  write('Введите количество строк - ');
  readln(n);
  for i := 1 to n do 
  begin
    write('ФИО - ');
    repeat
      readln(s[i].fio);
      if (length(s[i].fio) > 32) then writeln('ФИО должно быть не больше 32 символов!');
    until not (length(s[i].fio) > 32);
        write('Предмет - ');
      readln(s[i].Otmetka);
     for j:= 1 to 5 do
    begin
    repeat
    write('введите оценку по предмету',predmet[j]);
      readln(s[i].Otmetka[j]);
      if not ((s[i].Otmetka = '1') or (s[i].Otmetka = '2')or (s[i].Otmetka = '3')or (s[i].Otmetka = '4')or (s[i].Otmetka = '5')) then
      writeln('1,2,3,4 или 5');
    until((s[i].Otmetka = '1') or (s[i].Otmetka = '2')or (s[i].Otmetka = '3')or (s[i].Otmetka = '4')or (s[i].Otmetka = '5'));
  end;
  writeln('┌───────────────────────────────────┬─────────────────────────────┐');
  writeln('│                                   │      Оценка по предмету     │');
  writeln('│             ФИО студента          ├─────┬─────┬─────┬─────┬─────┤');            
  writeln('│                                   │  1  │  2  │  3  │  4  │  5  │');
  writeln('├──┬────────────────────────────────┼─────┼─────┼─────┼─────┼─────┤');
  for i := 1 to n do 
  begin
    writeln('│',s[i].nomer:3 , ' │ ', s[i].fio:32, ' │ ', s[i].Otmetka:6, ' │');
    writeln('├──┼────────────────────────────────┼─────┼─────┼─────┼─────┼─────┤');
  end;
  writeln('└──┴────────────────────────────────┴─────┴─────┴─────┴─────┴─────┘');
    write('Введите Предмет - ');
  repeat
      readln(s[i].predmet);
      if (length(s[i].predmet) > 32) then writeln('Наименование предмета  должно быть не больше 32 символов!');
    until not (length(s[i].predmet) > 32);
    writeln('┌───────────────────────────────────┬─────────────────────────────┐');
  writeln('│                                   │        Успеваемость %       │');
  writeln('│        Наименование предмета      ├──────────────┬──────────────┤');
  writeln('│                                   │  абсолютная  │ качественная │');
  writeln('├──┬────────────────────────────────┼──────────────┼──────────────┤');
  for i := 1 to n do 
  begin
  s[i].nomer:= k;
    v[i].absolut:= ((s[i].Otmetka>=3)/k)*100;
    v[i].kacestvo: = ((s[i].Otmetka>=4)/k)*100;
    writeln('│', 1 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 2 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 3 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 4 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 5 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
  end;
  writeln('└──┴────────────────────────────────┴──────────────┴───────────────┘');
end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 22.11.2017 в 09:50.
Jeka14 вне форума Ответить с цитированием
Старый 22.11.2017, 10:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

последнюю часть (там где вычисляется успеваемость) я не понял и не сделал.

остальное как-то так выглядит:
Код:
type
  zap = record
    fio: string[40];
    Otmetka: array[1..5] of Byte;
    end;
  zap2 = record
    absolut: integer;
    kacestvo: integer;
  end;
var
  s: array[1..20] of zap;
  v: array[1..20] of zap2;
  i, j, n: integer;
  predmet:array[1..5] of string[15];
begin
  write ('Введите названия предметов');
  for i:= 1 to 5 do
  begin
    write('введите ',i,'-й предмет: ');
    readLn(predmet[i]);
  end;
  write('Введите количество строк - ');
  readln(n);
  for i := 1 to n do
  begin
    write('ФИО - ');
    repeat
      readln(s[i].fio);
      if (length(s[i].fio) > 32) then writeln('ФИО должно быть не больше 32 символов!');
      if (length(s[i].fio) < 1) then writeln('ФИО должно быть не пустой!');
    until (length(s[i].fio)>=1) and  (length(s[i].fio) <= 32);
    for j:= 1 to 5 do
    begin
      repeat
      write('введите оценку ',s[i].fio,' по предмету ',predmet[j],' ');
      readln(s[i].Otmetka[j]);
      if not ((s[i].Otmetka[j] >= 1) and (s[i].Otmetka[j] <= 5))
         then writeln('Ошибка. Оценка должна быть 1,2,3,4 или 5');
      until (s[i].Otmetka[j] >= 1) and (s[i].Otmetka[j] <= 5);
    end;
  end;
  writeln('┌───────────────────────────────────┬─────────────────────────────┐');
  writeln('│                                   │      Оценка по предмету     │');
  writeln('│             ФИО студента          ├─────┬─────┬─────┬─────┬─────┤');
  writeln('│                                   │  1  │  2  │  3  │  4  │  5  │');
  writeln('├──┬────────────────────────────────┼─────┼─────┼─────┼─────┼─────┤');
  for i := 1 to n do
  begin
    write('│',i:2 , '│', s[i].fio:32, '│');
    for j:=1 to 5 do Write( ' ',s[i].Otmetka[j]:3, ' │');
    WriteLn;
    writeln('├──┼────────────────────────────────┼─────┼─────┼─────┼─────┼─────┤');
  end;
  writeln('└──┴────────────────────────────────┴─────┴─────┴─────┴─────┴─────┘');
(*  write('Введите Предмет - ');
  repeat
      readln(s[i].predmet);
      if (length(s[i].predmet) > 32) then writeln('Наименование предмета  должно быть не больше 32 символов!');
    until not (length(s[i].predmet) > 32);
*)
  writeln('┌───────────────────────────────────┬─────────────────────────────┐');
  writeln('│                                   │        Успеваемость %       │');
  writeln('│        Наименование предмета      ├──────────────┬──────────────┤');
  writeln('│                                   │  абсолютная  │ качественная │');
  writeln('├──┬────────────────────────────────┼──────────────┼──────────────┤');
  for j:=1 to 5 do begin
    writeln('│', j:2 , '│', predmet[j]:32, '│ ', 0:12, ' │ ', 0:12, ' │');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
  end;
(*  for i := 1 to n do
  begin
    v[i].absolut:= ((s[i].Otmetka>=3)/k)*100;
    v[i].kacestvo: = ((s[i].Otmetka>=4)/k)*100;
    writeln('│', 1 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 2 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 3 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 4 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
    writeln('│', 5 , '│', v[i].predmet:32, ' │ ', v[i].absolut, ' │ ', v[i].kacestvo, '┤');
  end;
*)
  writeln('└──┴────────────────────────────────┴──────────────┴──────────────┘');
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.11.2017, 23:22   #3
Jeka14
 
Регистрация: 21.11.2017
Сообщений: 9
По умолчанию

Там нужно подсчитать абсолютную успеваемость и качественную,в процентах
(абсолютная это 3,4,5 а качественная это 4,5)
Jeka14 вне форума Ответить с цитированием
Старый 23.11.2017, 10:03   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Jeka14 Посмотреть сообщение
Там нужно подсчитать абсолютную успеваемость и качественную,в процентах
(абсолютная это 3,4,5 а качественная это 4,5)
и как она считается?
допустим, у нас есть 4 учеников, у каждого 5 оценок (по пяти предметам).
успеваемость считается по каждому предмету отдельно?
приведите формулы для расчёта успеваемости в процентах.
(проценты - это всегда отношение, дробь. В данном случае это отношение чего к чему?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2017, 19:31   #5
Jeka14
 
Регистрация: 21.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и как она считается?
допустим, у нас есть 4 учеников, у каждого 5 оценок (по пяти предметам).
успеваемость считается по каждому предмету отдельно?
приведите формулы для расчёта успеваемости в процентах.
(проценты - это всегда отношение, дробь. В данном случае это отношение чего к чему?)
Абсолютная успеваемость = (кол-во "5", "4" и "3") / кол-во студентов * 100%
Качественная успеваемость = (кол-во "5" и "4") / кол-во студентов * 100%
Вот я ни как не могу сделать
Jeka14 вне форума Ответить с цитированием
Старый 23.11.2017, 21:32   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Jeka14 Посмотреть сообщение
Абсолютная успеваемость = (кол-во "5", "4" и "3") / кол-во студентов * 100%
Качественная успеваемость = (кол-во "5" и "4") / кол-во студентов * 100%
понятно.
ну, типа так:
Код:
var UspevAbs, UspevKach : real;
.....

  for j:=1 to 5 do begin
    UspevAbs := 0.0; UspevKach := 0.0;
    for i := 1 to n do begin
      if (s[i].Otmetka[j]=3) or (s[i].Otmetka[j]=4) 
          or (s[i].Otmetka[j]=5) then UspevAbs := UspevAbs + 1;
      if (s[i].Otmetka[j]=4) or (s[i].Otmetka[j]=5) then UspevKach := UspevKach + 1;
    end;
    UspevAbs := UspevAbs * 100 / n;
    UspevKach := UspevKach  * 100 / n;
    writeln('│', j:2 , '│', predmet[j]:32, '│ ', UspevAbs:12:1, ' │ ', UspevKach:12:1, ' │');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.11.2017, 21:58   #7
Jeka14
 
Регистрация: 21.11.2017
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
понятно.
ну, типа так:
Код:
var UspevAbs, UspevKach : real;
.....

  for j:=1 to 5 do begin
    UspevAbs := 0.0; UspevKach := 0.0;
    for i := 1 to n do begin
      if (s[i].Otmetka[j]=3) or (s[i].Otmetka[j]=4) 
          or (s[i].Otmetka[j]=5) then UspevAbs := UspevAbs + 1;
      if (s[i].Otmetka[j]=4) or (s[i].Otmetka[j]=5) then UspevKach := UspevKach + 1;
    end;
    UspevAbs := UspevAbs * 100 / n;
    UspevKach := UspevKach  * 100 / n;
    writeln('│', j:2 , '│', predmet[j]:32, '│ ', UspevAbs:12:1, ' │ ', UspevKach:12:1, ' │');
    writeln('├──┼────────────────────────────────┼──────────────┼──────────────┤');
  end;
Спасибо большое,а можешь еще с одной программой помочь,нужно получить скалярное произведение матрицы 4Х4

for i:=1 to 4 do
begin
write('Скалярное произведение ',i,' строки и столбца=');
s:=0;
for j:=1 to 4 do
s:=s+x[i,j]*x[j,i];
writeln(s);
end;
но это не правильно
как то через переприсваивание
Jeka14 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно дописать программу - работа с записями на языке Pascal Yakup Помощь студентам 12 16.11.2017 19:39
Данные, описывающие учеников некоторой школы которые содержат: фамилия, класс, оценки по любым пяти предметам - PascalABC.NET Andrit Помощь студентам 0 07.06.2017 10:25
Данные, описывающие учеников некоторой школы которые содержат: фамилия, класс, оценки по любым пяти предметам - PascalABC.NET Andrit Помощь студентам 1 02.06.2017 09:28
Сформировать оценки учеников. toliabest Общие вопросы C/C++ 6 10.05.2010 01:00
Пожалуйста помогите исправить программу!!! J@GU@R Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 12.12.2009 22:59