Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/23: Рейтинг темы: голосов - 23, средняя оценка - 4.74
9 / 9 / 1
Регистрация: 04.03.2010
Сообщений: 48
1

Программа, которая будет выводить фамилии и имена учеников, набравших максимальную сумму баллов, а также колличество таких учеников.

14.04.2010, 12:19. Просмотров 4635. Ответов 8
Метки нет (Все метки)

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
uses crt;
var
 surname:string[15];
 name:string[10];
 a1,a2,a3,a4:array[1..5] of integer;
 k,i,n,max:integer;
 sum:array[1..60];
begin
clrscr;
max:=0;
write('Колличество учеников= ');read(n);
for i:= 1 to n do begin
 read(surname[i],name[i],a1[i],a2[i],a3[i],a4[i])
 sum[i]:=a1[i]+a2[i]+a3[i]+a4[i]
  if sum[i]>max then max:=sum[i];
                      end;
 for i:= 1 to n do
 sum[i]=max then inc(k);{С этого момента я не знаю как делать, помогите пожалуйста}
 if sum[i]>=max then writeln(surname[i],' ',name[i],' ', a1[i]:2,a2[i]:2,a3[i]:2,a4[i]:2);
writeln;
end;
writeln(k);
readkey
end.
На вход программы подаются сведения о результатах сдачи экзаменов учащимися 9-ых классов некоторой школы. Известно, что общее колличество учеников не превосходит 60.
В первой строке вводится колличество учеников, сдавших экзамены N. Далее следуют N строк, имеющих следующий формат:<Фамилия> <Имя> <Баллы>.
Здесь <Фамилия> - строка, состоящая не более чем из 15 символов;
<Имя> - строка, состоящая не более чем из 10 символов;
<Баллы> - строка, содержащая четыре целых числа, разделенных пробелом, соответствующих баллам, полученным учениками на экзаменах по каждому предмету.
При этом <Фамилия> и <Имя>,<Имя> и <Баллы> разделены одним пробелом.

Примеры входных строк: Соловьева Марина 5 3 3 4
Яковлев Максим 4 5 5 4
Написать программу, которая будет выводить фамилии и имена учеников, набравших максимальную сумму баллов, а также колличество таких учеников.

Добавлено через 1 час 11 минут
Puporev, посмотрите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2010, 12:19
Ответы с готовыми решениями:

Сформируйте массив из лучших учеников школы, т.е. из учеников, не имеющих отметок ниже 4 и по сумме баллов, не уступающих другим ученикам.
1. Сведения об ученике состоят из имени, фамилии, названия класса(год обучения и буквы),оценок за...

Вывести на экран фамилии и имена трех лучших по среднему баллу учеников
задача 1 Во входном файле meteo.dat 365 строк, которые содержат информацию о среднесуточной...

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

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

8
Модератор
61219 / 45887 / 31672
Регистрация: 18.05.2008
Сообщений: 110,507
14.04.2010, 13:05 2
Думаю что имеется ввиду ввод из текстового файла, типа такого
Код
10
Соловьева Марина 5 3 3 4
Яковлев Максим 4 5 5 4
Пушкин Михаил 5 5 5 5
Зверев Павел 5 5 5 5
Лунев Олег 5 5 5 5
Перова Маша 4 5 3 4
Горина Света 4 4 4 4
Трунова Лена 3 4 4 4
Лунин Игорь 4 5 4 4
Панина Наталья 5 5 5 5
Программа.
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
uses crt;
const nmax=60;
type uch=record{тип запись}
         fam:string[15];{фамилия}
         nam:string[10];{имя}
         ocn:array[1..4] of byte;{массив оценок}
         bal:byte;{сумма баллов}
         end;
procedure Convert(var a:string);{перевод русских букв из кодировки файла 
                                 в кодировку программы из ANSI-ASCII}
var i:integer;
begin
for i:=1 to length(a) do
if ord(a[i]) in [192..239] then a[i]:=chr(ord(a[i])-64)
else if ord(a[i]) in [240..255] then a[i]:=chr(ord(a[i])-16)
else if ord(a[i])=168 then a[i]:=chr(ord(240))
else if ord(a[i])=184 then a[i]:=chr(ord(241));
end;
var f:text;
    u:array[1..nmax] of uch;{массив записей}
    x:uch;{переменная-буфер для сортировки}
    n,i,j:byte;
    name,s:string;
 
begin
clrscr;
write('Имя файла для чтения: ');
readln(name);
name:=name+'.txt';
assign(f,name);
{$I-} reset(f);  {$I+}
if IOResult <> 0 then
 begin
  writeLn('Не могу открыть файл ',name);
  writeLn('Работа программы завершена. Нажмите ENTER');
  readln;
  exit;
 end;
read(f,n);{читаем число в первой строке}
readln(f,s);{пропускаем строку}
for i:=1 to n do{по количеству}
 begin
  readln(f,s);{читаем остальные строки}
  Convert(s);{конвертируем}
  u[i].fam:=copy(s,1,pos(' ',s)-1);{до первого пробела фамилия}
  delete(s,1,pos(' ',s));{удаляем с пробелом}
  u[i].nam:=copy(s,1,pos(' ',s)-1);{до нового первого пробела имя}
  delete(s,1,pos(' ',s));{удаляем}
  u[i].ocn[1]:=ord(s[1])-48;{на нечетных номерах оценки, берем их код за минусом 48, 
                             '2'=50-48=2, '5'=53-48=5}
  u[i].ocn[2]:=ord(s[3])-48;
  u[i].ocn[3]:=ord(s[5])-48;
  u[i].ocn[4]:=ord(s[7])-48;
  u[i].bal:=0;{считаем сумму баллов}
  for j:=1 to 4 do
  u[i].bal:=u[i].bal+ u[i].ocn[j];
 end;
close(f);
for i:=1 to n-1 do{сортируем массив обменом}
for j:=i+1 to n do
if u[i].bal<u[j].bal then{по убыванию суммы баллов}
 begin
  x:=u[i];
  u[i]:=u[j];
  u[j]:=x;
 end;
writeln('Максимальный балл имеют:');
i:=1;
while u[i].bal=u[1].bal do{пока сумма= первому}
 begin
  i:=i+1;{считаем}
  writeln(u[i].fam,' ',u[i].nam);{выводим}
 end;
writeln;
write('Количество таких учеников=',i-1);{последний номер лишний}
readln
end.
1
9 / 9 / 1
Регистрация: 04.03.2010
Сообщений: 48
14.04.2010, 13:28  [ТС] 3
Мы procedure еще не проходили))) Но думаю сейчас пройду)))


Поясни пожалуйста, что она делает...


А переменная uch как я понял ... в нее входят все те данные, которые свойственны каждому ученику...так?

то есть первый ученик будет uch[1] и тэдэ, а в нее будут входить нужные данные, да?

Добавлено через 1 минуту
Это задание из ЕГЭ...оно мне сильно не надо, но я стараюсь перед экзаменами разобрать как можно больше задач... мне кажется ( по условию) что данные надо вводить в среде BP а не в текстовом файле, как подумали Вы.

Добавлено через 1 минуту
спасибо! Думаю тут похожее решение, но не это. Для одинадцатиклассника(обычного) это слишком мудрено.

Добавлено через 2 минуты
И кстати, мою программу можно доработать, чтобы она работала корректно?
0
Модератор
61219 / 45887 / 31672
Регистрация: 18.05.2008
Сообщений: 110,507
14.04.2010, 13:30 4
Maugly.jungle, Но тип record вы проходили? Если нет, то нужно создать 2 строковых линейных массива и один 2х мерный массив [1..n,1..4] для оценок. Но это геморой.
Если вводить строку с клавиатуры, ко процедура конвертации не нужна, а парсинг строки будет точно также как и из файла.

Добавлено через 49 секунд
И кстати, мою программу можно доработать, чтобы она работала корректно?
Наверное можно, а может и нет, я в ней ковыряться не буду.
0
9 / 9 / 1
Регистрация: 04.03.2010
Сообщений: 48
14.04.2010, 13:31  [ТС] 5
нет, рекорд еще не проходили)

Добавлено через 41 секунду
блин, руки пачкать не охото?)
0
Модератор
61219 / 45887 / 31672
Регистрация: 18.05.2008
Сообщений: 110,507
14.04.2010, 13:52 6
Ты не хами, пацан. Не дорос еще.
Вот без записей и ввод с клавы. А твоя программа настолько тупая, что ее нет смысла править.
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
uses crt;
const nmax=60;
var fm:array[1..nmax] of string[15];
    im:array[1..nmax] of string[10];
    oc:array[1..nmax,1..5] of byte;
    n,i,j:byte;
    s:string;
    xf:string[15];
    xi:string[10];
    xb:byte;
begin
clrscr;
repeat
write('Количество учеников до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Введите данные об учениках одной строкой вида Фамилия Имя оц1 оц2 оц3 оц4');
for i:=1 to n do
 begin
  readln(s);
  fm[i]:=copy(s,1,pos(' ',s)-1);
  delete(s,1,pos(' ',s));
  im[i]:=copy(s,1,pos(' ',s)-1);
  delete(s,1,pos(' ',s));
  oc[i,1]:=ord(s[1])-48;
  oc[i,2]:=ord(s[3])-48;
  oc[i,3]:=ord(s[5])-48;
  oc[i,4]:=ord(s[7])-48;
  oc[i,5]:=0;
  for j:=1 to 4 do
  oc[i,5]:=oc[i,5]+ oc[i,j];
 end;
for i:=1 to n-1 do
for j:=i+1 to n do
if oc[i,5]<oc[j,5] then
 begin
  xb:=oc[i,5];
  oc[i,5]:=oc[j,5];
  oc[j,5]:=xb;
  xf:=fm[i];
  fm[i]:=fm[j];
  fm[j]:=xf;
  xi:=im[i];
  im[i]:=im[j];
  im[j]:=xi;
 end;
writeln('Максимальный балл имеют:');
i:=1;
while oc[i,5]=oc[1,5] do
 begin
  i:=i+1;
  writeln(fm[i],' ',im[i]);
 end;
writeln;
write('Количество таких учеников=',i-1);
readln
end.
1
9 / 9 / 1
Регистрация: 04.03.2010
Сообщений: 48
14.04.2010, 15:11  [ТС] 7
Я не пацан, и я не хамил. Мой вопрос не был хамством.

Я имел ввиду то, что мою программу не хотите копать так как в ней толкового ничего нету!
0
Модератор
61219 / 45887 / 31672
Регистрация: 18.05.2008
Сообщений: 110,507
14.04.2010, 15:13 8
блин, руки пачкать не охото?)
Если это по Вашему не хамство, то молчу.
0
9 / 9 / 1
Регистрация: 04.03.2010
Сообщений: 48
14.04.2010, 15:15  [ТС] 9
Цитата Сообщение от Puporev Посмотреть сообщение
я в ней ковыряться не буду.
Цитата Сообщение от Puporev Посмотреть сообщение
руки пачкать не охото?)
как написали, так и ответил) а "блин" - это огорчение я выразил.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2010, 15:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Дан вес и рост учеников. Выведите на экран фамилии учеников, которые ниже 160см и весом меньше 60кг
Подскажите как можно решить данную задачу: Дан вес и рост учеников. Выведите на экран фамилии...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.