Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 5
1

Выяснить в каких классах насчитывается более 35 учащихся

13.06.2016, 22:38. Показов 1324. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы.Выяснить в каких классах насчитывается более 35 учащихся.
Как я понял нужно создать файл , внести в него информацию и потом считать и выяснить в каких из классов насчитывается более 35 учащихся.
Собственно что я и сделал:
Создание файла
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
Type
KOMP=Record
 fam:string[10];
 classn:byte;
 classb:char;
end;
var
fp:file of KOMP;
A:KOMP;
i,n:integer;
begin
Assign(fp,'Data.bta');
Rewrite(fp);
write ('Введите кол-во записей: ');
Readln (N);
for i:=1 to N do begin
Write ('Введите фамилию и имя ');
Readln (A.fam);
write ('Введите номер класса ');
Readln (A.classn);
write ('Введите букву класса ');
Readln (A.classb);
write (fp,A);
end;
close(fp);
End.
Считывание
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
Type
KOMP=Record
 fam:string[10];
 classn:byte;
 classb:char;
end;
var
   i :byte;
   A :KOMP;
   fp : file of KOMP;
   m : array [1..11] of integer;
begin
   assign(fp,'Data.bta');
   reset(fp); 
   for i :=1 to 11 do m[i] := 0;
   while not eof  (fp) do
   begin
      read(fp,A);
      inc(m[A.classn]);
   end;
   close(fp);
   for i:= 1 to 11 do
      if m[i] > 35 then writeln (i);
   readln;
end.
Но выдается ошибка времени выполнения , что делать ?
Так же , похоже , 2 программа не правильная
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2016, 22:38
Ответы с готовыми решениями:

Выяснить, в каких классах насчитывается более 25 учащихся
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в...

Выяснить, в каких классах насчитывается 35 учащихся
3)Сведения об ученике состоят из его имени и фамилии и наименование класса (года обучения и буквы),...

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

Вычислить в каких классах начисливается более 25 учащихся
Сведение об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в...

9
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
13.06.2016, 23:44 2
попробуй вывести номера классов на экран, возможно, что ты вбил номер класса ноль или больше 11.
Pascal
1
2
3
4
5
6
7
ну и такие классы можешь выбрасывать:
while not eof  (fp) do
  begin
      read(fp,A);
      if (A.classn>0) and (A.classn<=11) then
           inc(m[A.classn]);
   end;
только это тебя не спасёт.
тут алгоритм посложнее городить придётся - тебе же не только номер класса нужен,
но и буква (сколько там школьников в 1"A", сколько школьников - в 1"Б" и т.д.)
0
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 5
14.06.2016, 16:42  [ТС] 3
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы.Выяснить в каких классах насчитывается более 35 учащихся.
Как я понял нужно создать файл , внести в него информацию и потом считать и выяснить в каких из классов насчитывается более 35 учащихся.
Собственно что я и сделал:
Создание файла

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
Type
KOMP=Record
 fam:string[10];
 classn:byte;
 classb:char;
end;
var
fp:file of KOMP;
A:KOMP;
i,n:integer;
begin
Assign(fp,'Data.bta');
Rewrite(fp);
write ('Введите кол-во записей: ');
Readln (N);
for i:=1 to N do begin
Write ('Введите фамилию и имя ');
Readln (A.fam);
write ('Введите номер класса ');
Readln (A.classn);
write ('Введите букву класса ');
Readln (A.classb);
write (fp,A);
end;
close(fp);
End.
Считывание
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
Type
KOMP=Record
 fam:string[10];
 classn:byte;
 classb:char;
end;
var
   i :byte;
   A :KOMP;
   fp : file of KOMP;
   m : array [1..11] of integer;
begin
   assign(fp,'Data.bta');
   reset(fp); 
   for i :=1 to 11 do m[i] := 0;
   while not eof  (fp) do
   begin
      read(fp,A);
      inc(m[A.classn]);
   end;
   close(fp);
   for i:= 1 to 11 do
      if m[i] > 35 then writeln (i);
   readln;
end.
Но выдается ошибка времени выполнения , что делать ?
Так же , похоже , 2 программа не правильная
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.06.2016, 00:27 4
https://www.cyberforum.ru/post9268843.html
0
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 5
15.06.2016, 00:39  [ТС] 5
Посложнее у меня вряд ли получится сгородить , мне этот то с трудом дался , очень мало материала по типизированным файлам , не мог бы ты помочь с этим ?
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.06.2016, 00:55 6
не, не сегодня, уже поздно.
а вообще, у тебя с типизированным файлом, вроде бы, всё в порядке.
описан файл верно
Pascal
1
fp : file of KOMP;
писать в него надо Write(fp, A);
читать из него — Read(fp, A);

что же касается буковок в названии класса.
я простого решения не вижу. а сложное сейчас писать некогда.
если бы ограничить буквы класса, только, скажем, символами "A" "Б" "В" "Г" "Д" "Е" "Ж" ... "Я"

тогда можно замутить что-то вроде:
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
Type
KOMP=Record
 fam:string[10];
 classn:byte;
 classb:char;
end;
var
   i :byte;
   A :KOMP;
   fp : file of KOMP;
   m  : array [1..11,'A'..'Я'] of integer;
   ch : char;
begin
   assign(fp,'Data.bta');
   rewrite(fp);
   A.fam := 'Sidor'; A.classn:=2; A.classb:='Б';
   write(fp,A);
   A.fam := 'Ivanov'; A.classn:=2; A.classb:='А';
   write(fp,A);
   A.fam := 'Sidor3'; A.classn:=2; A.classb:='Б';
   write(fp,A);
   A.fam := 'Sidor4'; A.classn:=2; A.classb:='Б';
   write(fp,A);
   close(fp);
   reset(fp);
   for i :=1 to 11 do
     for ch:='А' to 'Я' do m[i, ch] := 0;
   while not eof  (fp) do
   begin
      read(fp,A);
      if (A.classn in [1..11]) and (A.classb in ['A'..'Я']) then
          inc(m[A.classn, A.classb]);
   end;
   close(fp);
   for i:= 1 to 11 do
     for ch:='А' to 'Я' do
        if m[i,ch] > 2 {тут поставь 35} then writeln ('В классе ',i,ch,' учеников: ',m[i,ch]);
   readln;
end.
0
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 5
15.06.2016, 15:58  [ТС] 7
А если мы будем сами вводить учеников , получится такая же реализация ?
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
15.06.2016, 22:12 8
да.

только при вводе (в своей программе номер 1) ты проверяй, чтобы classn был от 1 до 11
а classb был прописной буквой in ['A'..'Я']
иначе этот ученик будет при подсчёте проигнорирован.
0
0 / 0 / 0
Регистрация: 13.06.2016
Сообщений: 5
17.06.2016, 14:06  [ТС] 9
Разделил программу на две (ввод данных и вывод где больше учеников) , но теперь при запуске 2 проси ничего не происходит, в чем может быть проблема?
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
17.06.2016, 23:05 10
дай взглянуть на сами программы и на тот файл, который ты создал в первой программе - Data.bta.
можешь запаковать файл в архив и архив сюда прикрепить
0
17.06.2016, 23:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2016, 23:05
Помогаю со студенческими работами здесь

Выяснить имеются ли однофамильцы в каких-либо параллельных классах
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы) в...

Выяснить, есть ли однофамильцы в каких-либо параллельных классах
3)Сведения об ученике состоят из его имени, фамилии и названия класса(Года обучения и буквы), в...

Выяснить, имеются ли однофамильцы в каких либо параллельных классах
Здравствуйте, где ошибка помогите найти голова разламывается Условия задачи: Сведения об ученике...

Выяснить, имеются ли однофамильцы в каких либо параллельных классах
Доброго времени суток! Условия задачи: Сведения об ученике состоят из его имени и фамилии и...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru