Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 23
1

Файл record: Сведения об ученике состоят из его фамилии, имени и названии класса, в котором он учится

21.04.2013, 07:37. Показов 4916. Ответов 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
type anketa=record
fam:string[20];
name:string[20];
klass:string[3];
ltcl:'а'..'я';
end;
var 
   s:anketa;
   f: file of anketa;
   n,i:byte;
begin 
   assign(f,'s.pas'); 
   rewrite(f);
   write('введите количество учеников n=');
   readln(n);
   for i:=1 to n do begin
   with s do begin
   write(i, '-я фамилия ');
   readln(fam);
   write('имя ');
   readln(name);
   write('класс ');
   readln(klass);
   end;
   write(F, s) end;
   writeln('Формирование файлов закончено');
   close(f);
   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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
type anketa=record
fam:string[20];
name:string[20];
klass:byte;
ltcl:'а'..'я';
end;
var
s:anketa;
f:file of anketa;
k,n,i,j:byte;
a:array[1..100] of anketa;
begin 
   assign(f,'s.pas'); reset(f);
   writeln('вывод информации об учениках');
   writeln(' n ! фамилия ! имя ');
   n:=0;
   while not eof(f) do begin
     n:=n+1;
     with s do begin
     writeln(n, '!', fam, '!', name, '!', klass:2, ' ',ltcl:1);
     end;
      end;
       close(f);
       reset(f);
       k:=0;
       writeln('Поиск учеников, у которых совпадают имена и фамилии');
       while not eof(f) do begin
       read(f,s);
       for i:=1 to n-1 do
       for j:=i+1 to n do
       if (a[i].fam=a[j].fam)and(a[i].name=a[j].name) 
       then begin writeln('фамилия',s.fam);
       k:=k+1;
       end;
        end;
 if k=0 then writeln('учеников, у которых совпадают имена и фамилии, в школе нет')
 else writeln('в школе', k,' учеников, у которых совпадают имена и фамилии');
 close(f);
 end.
подскажите,пожалуйста,что не так?

Добавлено через 1 час 26 минут
Почему-то выводит бесконечные символы

Добавлено через 9 часов 40 минут
Возможно как-нибудь без массива сделать?
Не могу понять, как условие поиска записать
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2013, 07:37
Ответы с готовыми решениями:

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

Сведения об ученике состоят из его имени и фамилии, названия класса (года обучения и буквы), в котором он учится, оценок
Сведения об ученике состоят из его имени и фамилии, названия класса (года обучения и буквы), в...

Файл типа record: сведения об учениках состоят из имени, фамилии и класса, в котором он учиться
сведенья об учениках состоят из имени, фамилии и класса, в котором он учиться. задано файл, который...

Записи. Сведения об ученике состоят из его имени и фамилии, названия класса
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в...

5
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 23
21.04.2013, 10:07  [ТС] 2
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
type anketa=record
fam:string[20];
name:string[20];
klass:byte;
lt_cl:'а'..'я';
end;
var
s:anketa;
f:file of anketa;
k,n,i,j:byte;
begin 
   assign(f,'s.pas'); reset(f);
   writeln('вывод информации об учениках');
   writeln(' n ! фамилия ! имя ! класс');
   n:=0;
   read(f,s);
   while not eof(f) do begin
     n:=n+1;
     
     with s do begin
     writeln(n, '!', fam, '!', name, '!', klass:3);
     end;
      end;
       close(f);
       reset(f);
       k:=0;
       writeln('Поиск учеников, у которых совпадают имена и фамилии');
       while not eof(f) do begin
       read(f,s);
       k:=k+1;
       end;
 if k=0 then writeln('учеников, у которых совпадают имена и фамилии, в школе нет')
 else writeln('в школе', k,' учеников, у которых совпадают имена и фамилии');
 writeln('------------------------------------------------------');
 close(f);
 end.
В файл выводит, а поиск не получается
0
Миниатюры
Файл record: Сведения об ученике состоят из его фамилии, имени и названии класса, в котором он учится   Файл record: Сведения об ученике состоят из его фамилии, имени и названии класса, в котором он учится  
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 23
21.04.2013, 15:51  [ТС] 3
Выводит только первого ученика бесконечное количество раз.
Подскажите, пожалуйста, как сделать вывод из файла
0
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 23
11.05.2013, 20:43  [ТС] 4
В любом случае выводит, что учеников с одинаковыми именами и фамилиями нет, в чем ошибка?
похожее задание здесь Записи. Найти двух учащихся школы, у которых совпадают имя и фамилия

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
Type anketa=record
    name,fam:string[20];
    klass:string[3];
    end;
var
   s:anketa;
   f:file of anketa;
   a,b:array[1..15] of anketa;
   n,m:byte;
   i,j,k,l:integer;
   
Begin
     assign(f,'s.pas'); reset(f);
   writeln('вывод информации об учениках');
   writeln('ученики, у которых совпадают имена и фамилии');
   writeln('№  | фамилия | имя | класс');
   read(f,s);
   n:=0;
   for j:=i+1 to n do 
   if (a[i].fam=a[j].fam) and (a[i].name=a[j].name) then 
   begin if l=1 then 
     begin
     b[l].fam:=a[j].fam;
     b[l].name:=a[j].name;
     l:=l+1;
     end;
     k:=1;
     while k<>0 do begin
     if (a[j].fam=b[k].fam) and (a[j].name=b[k].name) then
     begin
     m:=m+1;
     end;
     if m=0 then begin
     b[l].fam:=a[j].fam;
     b[l].name:=a[j].name;
     l:=l+1;
     end;
     end;
     with s do begin
   writeln(n, '|', fam, '|', name, '|', klass);
     end;
       close(f);
       reset(f);
       m:=0;
       while not eof(f) do begin
       read(f,s);
       writeln('фамилия',s.fam);
       m:=m+1;
       end;
        end;
 if m=0 then writeln('учеников, у которых совпадают имена и фамилии, в школе нет')
 else writeln('в школе', m,' учеников, у которых совпадают имена и фамилии');
 close(f);
 end.
Добавлено через 7 часов 33 минуты
Помогите, пожалуйста, ничего не получается
0
70 / 48 / 27
Регистрация: 30.08.2012
Сообщений: 134
11.05.2013, 23:38 5
Вот что у меня получилось:

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
type anketa=record
 fam:string[20];
 name:string[20];
 klass:string[3];
end;
var f:file of anketa;
 s:anketa;
 n,i:byte;
begin
 assign(f,'class.db');
 rewrite(f);
 write('Введите количество учеников: ');
 readln(n);
 for i:=1 to n do begin
  with s do begin
   write(i, '-я фамилия: ');
   readln(fam);
   write('Имя: ');
   readln(name);
   write('Класс: ');
   readln(klass);
  end;
  write(f,s)
 end;
 writeln('Формирование файлов закончено');
 close(f);
end.
2) Сама программа:
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
type anketa=record
 fam:string[20];
 name:string[20];
 klass:string[3];
end;
var f:file of anketa;
 s:anketa;
 k,n,i,j:byte;
 a:array[1..100] of anketa;
 b:array[1..100] of boolean;
begin
 writeln('-------------------------------------------------------------------');
 writeln('Вывод всей информации об учениках:');
 writeln('  n |   фамилия  |     имя    | класс');
 assign(f,'class.db');
 reset(f);
 while not eof(f) do begin
  inc(n); read(f,a[n]);
  writeln(n:3,' | ',a[n].fam:10,' | ',a[n].name:10,' | ',a[n].klass)
 end;
 close(f);
 writeln;
 writeln('Вывод информации об учениках с совпадающими именами и фамилиями:');
 for i:=1 to n do for j:=i+1 to n do if(a[i].fam=a[j].fam)and(a[i].name=a[j].name)
  then begin b[i]:=true; b[j]:=true end;
 writeln(' n  |   фамилия   |   имя   |   класс');
 for i:=1 to n do if b[i] then begin inc(k);
  writeln(i:3,' | ',a[i].fam:10,' | ',a[i].name:10,' | ',a[i].klass) end;
 writeln;
 if k=0 then writeln('Учеников, у которых совпадают имена и фамилии, в школе нет')
 else writeln('В школе ',k,' учеников, у которых совпадают имена и фамилии');
 writeln('-------------------------------------------------------------------');
 end.
2
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 18
29.09.2013, 19:41 6
А можете такую же только: Выяснить, в каких классах учится наибольшее количество учащихся?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2013, 19:41

Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о не
Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий...

Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан типизированный файл f, содержащий сведения
Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан типизированный файл f,...

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

Сведения об автомобиле состоят из его марки, номера и фамилии владельца
1. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий...


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

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

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