На вход программе подаются сведения об учениках

На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников которое не меньше 10, но не превосходит 100, каждая из следующих строк имеет следующий формат:

где – строка, состоящая не более чем из 20 символов, – строка, состоящая не более чем из 15 символов, – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. и , а также и разделены одним пробелом. Пример входной строки:

Иванов Петр 4 5 3

Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.

Показать разбор
(допускаются иные формулировки ответа, не искажающие его смысла)

Программа верно читает входные данные, запоминая фамилии, имена и сумму баллов в массиве записей (или в нескольких массивах), сразу или за дополнительный просмотр подсчитывая три худших по величине суммы баллов (так как количество экзаменов у всех учеников одинаковое, лучший средний балл соответствует лучшей сумме баллов). Затем за дополнительный просмотр этого массива распечатывается информация о тех учениках, которые набрали в сумме баллов не больше третьей по величине суммы. Баллы начисляются только за программу, которая решает задачу хотя бы для частного случая (например, все ученики набрали различный средний балл).

Задание 5 | ЕГЭ по информатике | ДЕМО-2023

Пример правильной программы

var p:array[1..100] of record name:string; sum:integer; end; c:char; i,j,N,s1,s2,s3,m:integer; begin readln(N); for i:=1 to N do begin p[i].name:=»; repeat read(c); p[i].name:=p[i].name+c until c=’ ‘; repeat read(c); p[i].

name:=p[i].name+c until c=’ ‘; p[i].sum:=0; for j:=1 to 3 do begin read(m); p[i].sum:=p[i].sum+m end; readln; end; s1:=20; s2:=20; s3:=20; for i:=1 to N do begin if p[i].sumthen begin s3:=s2; s2:=s1; s1:=p[i].sum end else if p[i].sumthen begin s3:=s2; s2:=p[i].sum end else if p[i].sumthen s3:=p[i].sum; end; for i:=1 to N do if p[i].sumthen writeln(p[i].

name); end.
Критерии оценки

4 балла Программа работает верно, т.е. корректно выделяет из входных данных оценки, ищет три худших суммы баллов и распечатывает учеников, набравших эти суммы. Допускается наличие в тексте программы одной синтаксической ошибки.

Читайте также:
Содержание и структура программ по литературному чтению

3 балла Программа работает в целом верно, но содержит по крайней мере две из следующих неточностей (нерациональностей): сохраняются не суммы баллов (средние баллы), а сами баллы, и суммы перевычисляются несколько раз заново; явно вычисляются средние баллы, что приводит к сравнению вещественных чисел; при нахождении трех минимальных значений элементы массива переставляются местами; при печати сравнения производятся с каждым из трех минимальных элементов. Допускается наличие от одной до трех синтаксических ошибок: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных.

Задание 5 | ЕГЭ по информатике | ДЕМО-2022

2 балла Программа работает в целом верно, но выводит только трех худших учеников, даже если кто-то еще сдал экзамены так же. Возможно, в реализации алгоритма содержатся 1–2 ошибки (используется знак “ ”, “or” вместо “and” и т.п.). Возможно, некорректно организовано считывание входных данных. Допускается наличие до пяти синтаксических ошибок: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных.

1 балл Программа неверно работает при некоторых входных данных и, возможно, содержит ошибку в алгоритме поиска трех минимальных элементов. Допускается до 4 различных ошибок в ходе решения задачи, в том числе описанных в критериях присвоения двух баллов. Допускается наличие от одной до семи синтаксических ошибок: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных.

Источник: yandex.ru

На вход программе подаются сведения об учениках

Добрый день.
Помогите, пожалуйста с задачей:

«На вод программе подаются сведения о сдаче экзаменов учениками некоторой школы. В первой строке сообщается кол-во учеников N [10-100]. Каждая из следующих N строк имеет следующий формат: . Где — строка, состоящая максимум из 20 символов, — строка состоящая максимум из 15 символов, — 3 целых числа, разделенных пробелом. Требуется написать программу, выводящую на экран фамилии и имена учеников, сдавших экзамены либо на 4, либо на 5.»

Вот, что получилось у меня:

program e; uses crt; var i,n :integer; LastName :array [1..90] of string[20]; FirstName :array [1..90] of string[15]; M1,M2,M3 :array [1..90] of integer; begin readln(n); if n in [10..100] then begin for i:=1 to n do readln(LastName[i],FirstName[i],M1[i],M2[i],M3[i]); for i:=1 to n do begin if (((M1[i]=4) or (M1[i]=5)) and ((M2[i]=4) or (M2[i]=5)) and ((M3[i]=4) or (M3[i]=5))) then writeln(LastName[i],’ ‘,FirstName[i]); end; end; end.
Есть еще второй вариант через case, но там тот же косяк — после ввода третьей строки «ошибка ввода».

Читайте также:
Что такое пролонгированные программы

Источник: www.programmersforum.ru

infoegehelp.ru

На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат: <Фамилия> , где <Фамилия>– строка, состоящая не более чем из 20 символов, – строка, состоящая не более чем из 15 символов, – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия>и , а также и разделены одним пробелом. Пример входной строки:

Иванов Петр 4 5 4

Требуется написать программу, которая будет выводить на экран фамилии и имена трех лучших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех лучших, то следует вывести и их фамилии и имена. Требуемые имена и фамилии можно выводить в произвольном порядке.

Решение:

Алгоритм программы следующий:

  • Считываем записи, сохраняя фамилию, имя и сумму баллов в массиве записей (или в двух массивах).
  • Определяем 3 самых высоких суммарных балла при просматре массива записей (или массивов). Средний балл не считаем, т.к. число экзаменов у школьников одинаково.
  • При следующем просмотре массивов выводим фамилию и имена учеников, чей суммарный балл ≥ 3-ей по величине суммы.

Пример работы алгоритма.

Пусть на вход подается 10 записей, сумма баллов в которых равны:

  1. 15
  2. 14
  3. 13
  4. 9
  5. 12
  6. 9
  7. 9
  8. 15
  9. 8
  10. 12
  1. max1= 15
  2. max2= 15
  3. max3= 14
  • 15
  • 14
  • 15

Программа написана на языках:

  • Паскаль (среда разработки Turbo Pascal 7.0),
  • Бейсик (среда разработки Quick Basic 4.5),
  • Алгоритмический язык (среда разработки Кумир 1.9.0).
  • Си (среда разработки Borland C++ 3.1),

Чтобы прочесть комментарии к программе, наведите мышью на соответствующую строку. Строки, снабженные комментарием, выделены фиолетовым цветом.

Напротив названия языка программирования в скобках содержатся ссылки на скачку исходников и ехе (исполняемых файлов).

Паскаль (исходник+exe-файл)Бейсик (исходник)Алгоритмический язык (исходник)Си (исходник+exe-файл)
var
mas_fi:array[1..100] of record
fi:string;
sum:integer;
end;
c:char;
i,j,N,max1,max2,max3,mark:integer;
begin
readln(N);
for i:=1 to N do
begin
mas_fi[i].fi:=»;
repeat
read(c);
mas_fi[i].fi:=mas_fi[i].fi+c
until c=’ ‘;
repeat
read(c);
mas_fi[i].fi:=mas_fi[i].fi+c
until c=’ ‘;
mas_fi[i].sum:=0;
for j:=1 to 3 do
begin
read(mark);
mas_fi[i].sum:=mas_fi[i].sum+mark
end;
readln;
end;
max1:=0;
max2:=0;
max3:=0;
for i:=1 to N do
begin
if mas_fi[i].sum>max1 then
begin
max3:=max2;
max2:=max1;
max1:=mas_fi[i].sum
end
else
if mas_fi[i].sum>max2 then
begin
max3:=max2;
max2:=mas_fi[i].sum
end
else
if mas_fi[i].sum>max3
then max3:=mas_fi[i].sum;
end;
write(char(13)+char(10));
for i:=1 to N do
if mas_fi[i].sum>=max3
then writeln(mas_fi[i].fi);
readln
end.
DIM i, j, N, max1,max2,max3, sum(100) AS INTEGER
DIM str AS STRING
DIM masfi(100) AS STRING
INPUT N
FOR i=1 TO N
LINE INPUT str
c$=MID$(str,1,1)
j=1
WHILE NOT (c$=» «)
j=j+1
c$=MID$(str,j,1)
WEND
j=j+1
c$=MID$(str,j,1)
WHILE NOT (c$=» «)
j=j+1
c$=MID$(str,j,1)
WEND
masfi(i)=MID$(str,1,j)
sum(i)=ASC(MID$(str,j+1,1))-ASC(«0»)
sum(i)=sum(i)+(ASC(MID$(str,j+3,1))-ASC(«0»))
sum(i)=sum(i)+(ASC(MID$(str,j+5,1))-ASC(«0»))
NEXT i
max1=0: max2=0: max3=0
FOR i=1 TO N
IF sum(i)>max1 THEN
max3=max2: max2=max1
max1=sum(i)
ELSE
IF sum(i)>max2 THEN
max3=max2: max2=sum(i)
ELSE
IF sum(i)>max3 THEN max3=sum(i)
END IF
END IF
NEXT i
PRINT
FOR i=1 TO N
IF sum(i)>=max3 THEN PRINT masfi(i)
NEXT i
END
алг
нач
цел i,j,N,max1,max2,max3,mark
сим c
лит str
литтаб mas_fi[1:100]
целтаб sum[1:100]
ввод N
нц для i от 1 до N
ввод str
j:=1
нц
c:=str[j]
j:=j+1
кц при c=» »
нц
c:=str[j]
j:=j+1
кц при c=» »
mas_fi[i]:=str[1:j-2]
mark:=код(str[j])-код(«0»)
mark:=mark+(код(str[j+2])-код(«0»))
mark:=mark+(код(str[j+4])-код(«0»))
sum[i]:=mark
кц
max1:=0
max2:=0
max3:=0
нц для i от 1 до N
если sum[i]>max1
то
max3:=max2
max2:=max1
max1:=sum[i]
иначе
если sum[i]>max2
то
max3:=max2
max2:=sum[i]
иначе
если sum[i]>max3
то max3:=sum[i]
все
все
все
кц
вывод нс
нц для i от 1 до N
если sum[i]>=max3
то вывод mas_fi[i],нс
все
кц
кон
#include
#include
#include
void main()
char mas_fi[100][36];
char str1[21],str2[16],fi[37];
int sum[100];
int N,i,j,max1,max2,max3,mark1,mark2,mark3;
scanf(«%d»,
for(i=0;i
mark2,
strcpy(fi,str1);
strcat(fi,» «);
strcat(fi,str2);
j=0;
while(fi[j]!=’’) mas_fi[i][j]=fi[j];
j++;
>
mas_fi[i][j]=’’;
sum[i]=mark1+mark2+mark3;
>
max1=0;
max2=0;
max3=0;
for(i=0;i max1) max3=max2;
max2=max1;
max1=sum[i];
>
else
if(sum[i]>max2) max3=max2;
max2=sum[i];
>
else if(sum[i]>max3) max3=sum[i];
>
printf(«n»);
for(i=0;i =max3) for(j=0;mas_fi[i][j]!=’’;j++)
printf(«%c»,mas_fi[i][j]);
printf(«n»);
>
>
getch();
>
Читайте также:
Программа для создания модели Warcraft

Работа программы на этих языках:

Задача С4 ЕГЭ по информатике 2007 выполнение программы на Паскале, Бейсике и Си

Выполнение программы в Кумире

На рисунках видно, что в результате работы программы было выбрано 3 записи. Максимальный средний балл у 2-х школьников: Иванова Артема и Белова Олега, он равен (5+5+5)3=5 баллов. Еще один школьник, Петров Андрей, набрал (4+5+5)/3=4,67 баллов.

Источник: infoegehelp.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru