Здравствуйте.
Имеется следующая задача:
На вход программы подаются сведения о результатах соревнований по школьному многоборью. Многоборье состоит из соревнований по четырем видам спорта, участие в каждом из которых оценивается баллами от 0 до 10 (0 баллов получает ученик, не принимавший участия в соревнованиях по данному виду спорта). Победители определяются по наибольшей сумме набранных баллов. Известно, что общее количество участников соревнований не превосходит 100.
В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат:
Здесь – строка, состоящая не более чем из 20 символов; – строка, состоящая не более чем из 15 символов; — строка, содержащая четыре целых числа, разделенных пробелом, соответствующих баллам, полученным на соревнованиях по каждому из четырех видов спорта. При этом и , и разделены одним пробелом. Примеры входных строк:
Иванова Мария 5 8 6 3
Происхождение имен и фамилий | Окружающий мир 1 класс #6 | Инфоурок
Петров Сергей 9 9 5 7
Напишите программу, которая будет выводить на экран фамилии и имена трех лучших участников многоборья. Если среди остальных участников есть ученики, набравшие то же количество баллов, что и один из трех лучших, то их фамилии и имена также следует вывести. При этом имена и фамилии можно выводить в произвольном порядке.
. и мои наработки:
program q; uses crt; const m=100; type DB = record name:string; count:integer; end; var mas:array [1..m] of DB; i,j,max,max2,max3,n:integer; s:string; begin max:=-1; max2:=-1; max3:=-1; clrscr; write(‘Ââåäèòå N: ‘); readln(n); for i:=1 to n do begin readln(s); for j:=1 to length(s) do if ord(s[j]) in [48..57] then break else mas[i].name:=mas[i].name+s[j]; Delete(s,1,length(mas[i].name)); for j:=1 to length(s)-1 do if (ord(s[j]) in [48..57]) and (not ord(s[j-1]) in [48..57]) then if ord(s[j+1]) in [48..57] then mas[i].count:=mas[i].count+StrToInt(Copy(s,j,2)) else mas[i].count:=mas[i].count+StrToInt(s[j]); if mas[i].count>max then begin max3:=max2; max2:=max; max:=mas[i].count; end else if mas[i].count>max2 then begin max3:=max2; max2:=mas[i].count; end else if mas[i].count>max3 then max3:=mas[i].count; end; for i:=1 to n do if (mas[i].count=max) or (mas[i].count=max2) or (mas[i].count=max3) then writeln(mas[i].name); end.
Мне кажется ошибка находится где-то во вложенном цикле, так как в переменной mas[i].count всегда оказывается 0; никак не пойму в чем дело, подскажите, пожалуйста.
Источник: www.programmersforum.ru
Задача C4 (К. Поляков) — Turbo Pascal
Доброго времени суток. Решаю задачу, никак не могу понять, почему не работает. Алгоритм вроде-бы правильный. Не поможете?
4) На вход программы подаются фамилии и имена учеников. Известно, что общее количество учеников не превосходит 100. В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат: <Фамилия> Здесь <Фамилия>– строка, состоящая не более чем из 20 символов; – строка, состоящая не более чем из 15 символов. При этом <Фамилия>и разделены одним пробелом. Примеры входных строк: Иванова Мария Петров Сергей Требуется написать программу, которая формирует и печатает уникальный логин для каждого ученика по следующему правилу: если фамилия встречается первый раз, то логин – это данная фамилия, если фамилия встречается второй раз, то логин – это фамилия, в конец которой приписывается число 2 и т.д. Например, для входной последовательности Иванова Мария Петров Сергей Бойцова Екатерина Петров Иван Иванова Наташа будут сформированы следующие логины: Иванова Петров Бойцова Петров2 Иванова2
Начальник паспортного стола о смене имени или фамилии
Моё решение:
var mas:array[1..100] of record name:string[20]; kol:integer; end; i,k,n:integer; c:char; w:string; chfam:integer; exist:boolean; garbage:string; begin readln(n); chfam:=0; for i:=1 to n do begin w:=’ ‘; repeat if c <> ‘ ‘ then begin read(c); w:=w+c; end; until c = ‘ ‘; readln(garbage); exist:=false; if chfam<>0 then for k:=1 to chfam do if mas[k].name = w then begin mas[k].kol:=mas[k].kol+1; exist:=true; break; end; if exist then writeln(mas[k].name,mas[k].kol) else begin chfam:=chfam+1; mas[chfam].name:=w; mas[chfam].kol:=1; writeln(mas[chfam].name); end; end; readln; end.
Источник: studassistent.ru
Учитель информатики Булгаков Сергей
Образовательный блог в котором отражаются мои интересы как учителя.
Поиск по этому блогу
понедельник, 16 декабря 2019 г.
Пример решения задания С27_4 на Питоне
На вход программы подаются фамилии и имена учеников. Известно, что общее количество учеников не превосходит 100. В первой строке вводится количество учеников, принимавших участие в соревнованиях, N. Далее следуют N строк, имеющих следующий формат:
Здесь – строка, состоящая не более чем из 20 символов; – строка, состоящая не более чем из 15 символов. При этом и разделены одним пробелом. Примеры входных строк:
Иванова Мария
Петров Сергей
Требуется написать программу, которая формирует и печатает уникальный логин для каждого ученика по следующему правилу: если фамилия встречается первый раз, то логин – это данная фамилия, если фамилия встречается второй раз, то логин – это фамилия, в конец которой приписывается число 2 и т.д. Например, для входной последовательности
Источник: voprosy-ege.blogspot.com