Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43

Сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы

19.02.2016, 16:17. Показов 4666. Ответов 20

Студворк — интернет-сервис помощи студентам
Помогите найти ошибку в моей программе. Не нужно писать свою программу.

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



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
program c4;
Var Saf:Array[1..100] Of Integer;
Var FI: Array[1..100] of String;
Var p2p,i,min1,min2,min3,n:Integer;
Var s: String;
begin
Writeln('Введите количество учащихся...');
Read(N);
Writeln ('Введите строку, содержащую сведения о сдаче экзамена');
For i:=1 to N do begin
Readln(s);
p2p:=PosEx(' ',s,pos(' ',s)+1);{позиция второго пробела в строке}
FI[i]:=Copy(s,1,p2p-1);{заполняем массив Фамилией и именем каждой строки}
Delete(s,1,p2p);{удаляем из исходной строки ФИ с пробелом}
SAF[i]:=(StrToInt(copy(s,1,1))+StrToInt(Copy(s,3,1))+StrToInt(copy(s,5,1)))div 3;
{заполянем массив средними значениями трех оценок}
end;
min1:=20;min2:=20;min3:=20; {находим третье минимальное среднее значение}
For i:=1 to N do begin
If Saf[i]< min1 then begin
min3:=min2;
min2:=min1;
min1:=Saf[i];
end
else If Saf[i]<min2 then begin
min3:=min2;
min2:=Saf[i];
end
else If Saf[i]<min3 then min3:=Saf[i];
end;
For i:=1 to N do {выводим всех учеников, у которых среднее значение баллов 
меньше или равно третьему минимальному значению}
   If Saf[i]<=min3 then writeln (Fi[i]);
   end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2016, 16:17
Ответы с готовыми решениями:

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

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

Записи: в алфавитном порядке вывести на экран фамилии и имена абитуриентов, не допущенных к сдаче экзаменов
Решите задачу и напишите пожалуйста объяснение.... 1. В некотором вузе абитуриенты проходят предварительное тестирование, по...

20
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 17:33
фишки .Net можно использовать в сдаче ЕГЭ?
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 17:47  [ТС]
Joy,
укажите используемую версию языка программирования
Ну а как же нельзя? Сказано на любом языке программирования ведь!
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 17:55
min1:=20;min2:=20;min3:=20; {находим третье минимальное среднее значение} откуда такие значения взялись?

Добавлено через 4 минуты
хотя тут не суть важно, мне не понятно, почему
1. средний балл - целое число, хотя тоже не суть
2. почему вы ищете каждое минимальное значение строго меньше уже найденного минимального значения. условия разрешают равенства ведь
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 17:58  [ТС]
Joy, это начальное значение, которое заведомо превышает возможную сумму трех оценок.
А сортировка такая, дабы программа была эффективной, т.е. всего за один проход по массиву отыскивается третье минимальное значение
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 17:58
я бы через массив записей решал. фио и средний бал, потом отсортировал по возрастанию и первых неуспевающих напечатал
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 18:01  [ТС]
Joy, весь трабл в том, что такая программа считалась бы неэффективной, потому что при сортировке массива сложность алгоритма увеличивается в квадрате.
А на ЕГЭ за это снимают баллы.
тут каждый прогон важен
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 18:34
если средний бал подразумевается целой величиной - завести 5 массивов - и на этапе ввода сортировать по среднему баллу 1 - в первый, 2- во второй...5-в пятый и печатать всех из самых минимальных чтобы не менее 3 чел было. всего 1 проход, в вашем случае 3 прохода
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 18:54  [ТС]
Joy, при сортировки у меня используется всего ОДИН проход по массиву. А условий 3!!
за что снимают баллы?
неэффективность алгоритма:
1) используется алгоритм, имеющий сложность O(N)^2 , когда есть алгоритм сложности O(N)
2) используется несколько проходов по массиву, когда достаточно одного
3) лишний расход памяти ( используются дополнительные массивы или размер массива определен неверно)
4) используются операции с вещественными числами, когда можно все решить в целых числах
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
min1:=20;min2:=20;min3:=20; {находим третье минимальное среднее значение}
For i:=1 to N do begin
If Saf[i]< min1 then begin
min3:=min2;
min2:=min1;
min1:=Saf[i];
end
else If Saf[i]<min2 then begin
min3:=min2;
min2:=Saf[i];
end
else If Saf[i]<min3 then min3:=Saf[i];
end;
Добавлено через 4 минуты
Joy, Я считаю, что ни одно задание ЕГЭ С части не может подразумевать использование АЖ от пяти массивов!
Опять же, как эту программу сделать есть много способов, и , действительно, ее можно сделать по разному.
Но на экзамене требуется сделать как можно понятнее, короче, проще и чтобы был задействован минимальный обьём памяти. То есть использовать Byte, где это возможно за место Integer...
0
8 / 8 / 4
Регистрация: 14.02.2016
Сообщений: 53
19.02.2016, 19:04
Я бы решал типами.

Добавлено через 2 минуты
+ думаю, что ср.балл - число real.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 19:06
У вас 3 прохода 1-чтение массива, 2 поиск минимальных трех, 3- печать неуспевающих
0
Платежеспособный зверь
 Аватар для кот Бегемот
8966 / 4389 / 1655
Регистрация: 28.10.2009
Сообщений: 11,647
19.02.2016, 19:08
1. Задача разобрана на сайте К.Полякова, где приведена правильная программа на Паскале (с использованием записей) и указание на вариант с массивами.
Кликните здесь для просмотра всего текста
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
const LIM = 100;
var Info: array[1..LIM] of record
      name: string;
      sum: integer;
     end;
 i, k, N, mark, min1, min2, min3: integer;
  c: char;
begin
readln(N);
  { ввод исходных данных }
for i:=1 to N do begin
 Info[i].name := ''; 
 for k:=1 to 2 do
  repeat
   read(c);
   Info[i].name := Info[i].name + c;
  until c = ' ';
 Info[i].sum := 0; 
 for k:=1 to 3 do begin
  read(mark);
  Info[i].sum := Info[i].sum + mark;
 end;
 readln;
end;
  { поиск трех минимальных }
min1 := 20; min2 := 20; min3 := 20;
for i:=1 to N do begin
 if Info[i].sum <min1 then begin 
  min3 := min2; min2 := min1; 
  min1 := Info[i].sum; 
 end
 else if Info[i].sum <min2 then begin 
   min3 := min2;
   min2 := Info[i].sum; 
  end
  else if Info[i].sum <min3 then 
     min3 := Info[i].sum;
end;
  { вывод результата }
for i:=1 to N do
 if Info[i].sum <= min3 then
   writeln(Info[i].name); 
end.

2. Сегодня такой тип задач не актуален. Такие задачи были в ЕГЭ лет 6-7 назад.
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 19:15  [ТС]
кот Бегемот, Мне интересно, где я смог допустить ошибку...
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 19:28
в приведенном правильном примере просто сложили 3 отметки и искали минимальные значения
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 19:39  [ТС]
Joy, ок, уберем div
Вы правы... что это я... ведь нас интересует не сам средний результат учеников, а ФИ учеников с худшими результатами.
Но все равно- программа не работает.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 19:53
строка 8 - readln(n); поставьте
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 20:05  [ТС]
Joy, все равно
Program4.pas(15) : Ошибка времени выполнения: Входная строка имела неверный формат.
Хотя это тоже ошибка была и вы ее нашли)
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 20:19
у меня все нормально
наверное количество пробелов больше одного между словами и оценками
0
 Аватар для Кудинович
1 / 1 / 0
Регистрация: 10.02.2016
Сообщений: 43
19.02.2016, 20:43  [ТС]
Joy, мистика какая-то... с вами возможно связаться по скайпу или по тим виверу?)
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
19.02.2016, 20:56
Форум то чем не устраивает?

Добавлено через 1 минуту
Приложите входные данные, или я или кто-то другой проверит и отпишется. Я только уже завтра.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2016, 20:56
Помогаю со студенческими работами здесь

Класс - ученик средней школы, шаблон класса
Помогите справиться с этой задачей пожалуйста! Создать шаблон заданного класса. Определить конструкторы, деструкторы, перегруженную...

Создать файл, содержащий сведения о сдаче студентами сессии
Структура записи: индекс группы, фамилия студента, оценки по пяти экзаменам, признак участия в общественной работе: «1» — активное участие,...

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

Создать файл, содержащий сведения о сдаче студентами сесси
А можеш эту задачку посмотрет ьоже с файлами?:. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: индекс...

Сформировать массив, содержащий сведения о сдаче студентами сессии
натолкните на раздумия.. Сформировать массив, содержащий сведения о сдаче студентами сессии. Структурный тип содержит поля: индекс...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru