Определить число встречающихся имен - Pascal

Узнай цену своей работы

Формулировка задачи:

Дан список группы в 10 человек в виде ФАМИЛИЯ ИМЯ ОТЧЕСТВО 20 символов 10 симв. 15 симв. Данные в одной строке отделяются друг от друга пробелами. Определить число встречающихся имен и напечатать в виде: Сергей - 2 Петр - 1 и т.д. выполнить с использованием: 1.Двумерных символьных массивов, текстовых файлов и без процедур; 2.С массивами STRING, процедурами и текстовыми файлами; 3.С массивами RECORD, процедурами, текстовыми и типизированными файлами и процедурами. Типизированный файл формируется в этой же программе из текстового , а затем из него происходит чтение . 4.С модулями (варианты 2или 3 переделываются на модульный); 5.С однонаправленными линейными списками (каждая строка исходного текстового файла рассматривается как элемент списка), процедурами и текстовыми файлами; 6.С рекурсией (любой из вариантов 2-4 переделывается на рекурсивный, поскольку везде в них есть циклы , которые можно всегда выполнить как рекурсивные процедуры). Прошу помочь хотя бы с каким-нибудь из вариантов задания dan.inp.txt

Решение задачи: «Определить число встречающихся имен»

textual
Листинг программы
  1. const n=10;
  2. type dan=record
  3.          surname:string[20];
  4.          name:string[10];
  5.          midle_name:string[15];
  6.          end;
  7.       tfile=file of dan;
  8.       imena=record
  9.             name:string[10];
  10.             kol:byte;
  11.             end;
  12.       mas=array[1..n] of imena;
  13. procedure  readfile(var f:text;var g:tfile);
  14. var d:dan;
  15.     s:string;
  16. begin
  17. assign(f,'dan.inp.txt');//файл в папке с программой
  18. reset(f);
  19. assign(g,'dan.out');
  20. rewrite(g);
  21. while not eof(f) do
  22.  begin
  23.   readln(f,s);
  24.   d.surname:=copy(s,1,pos(' ',s)-1);
  25.   delete(s,1,21);
  26.   d.name:=copy(s,1,pos(' ',s)-1);
  27.   delete(s,1,11);
  28.   d.midle_name:=s;
  29.   writeln(d.surname,' ',d.name,' ',d.midle_name);
  30.   write(g,d);
  31.  end;
  32. close(f);
  33. close(g);
  34. end;
  35. procedure kol_name(var g:tfile;var a:mas;var m:byte);
  36. var i,j,k:byte;
  37.     d:dan;
  38. begin
  39. reset(g);
  40. m:=0;
  41. for i:=0 to filesize(g)-1 do
  42.  begin
  43.   read(g,d);
  44.   if i=0 then
  45.    begin
  46.     m:=1;
  47.     a[m].name:=d.name;
  48.     a[m].kol:=1;
  49.    end
  50.   else
  51.    begin
  52.     k:=0;
  53.     j:=1;
  54.     while(j<=m)and(k=0) do
  55.     if a[j].name=d.name then k:=1
  56.     else inc(j);
  57.     if k=0 then
  58.      begin
  59.       inc(m);
  60.       a[m].name:=d.name;
  61.       a[m].kol:=1;
  62.      end
  63.     else inc(a[j].kol);
  64.    end;
  65.  end;
  66. close(g);
  67. writeln('Встречаемость имен');
  68. for i:=1 to m do
  69. writeln(a[i].name,' - ',a[i].kol);
  70. end;
  71. var f:text;
  72.     g:tfile;
  73.     a:mas;
  74.     m:byte;
  75. begin
  76. readfile(f,g);
  77. kol_name(g,a,m);
  78. end.

Объяснение кода листинга программы

  1. const n=10; - объявляется константа n со значением 10.
  2. type dan=record ... end; - создается тип запись (record) с полями: surname (фамилия), name (имя), midle_name (отчество).
  3. tfile=file of dan; - создается тип файлу (file) с записями типа dan.
  4. imena=record ... end; - создается тип запись imena с полями: name (имя), kol (количество).
  5. mas=array[1..n] of imena; - создается массив mas, содержащий n элементов типа imena.
  6. procedure readfile(var f:text; var g:tfile); - объявляется процедура readfile, которая открывает файл для чтения dan.inp.txt, считывает данные и записывает их в файл dan.out.
  7. procedure kol_name(var g:tfile; var a:mas; var m:byte); - объявляется процедура kol_name, которая считает количество упоминаний каждого имени в файле.
  8. var f:text; g:tfile; a:mas; m:byte; - объявляются переменные f (текстовый файл), g (файл dan.out), a (массив для хранения упоминаний имен), m (количество уникальных имен).
  9. begin readfile(f,g); kol_name(g,a,m); end. - вызывается процедура readfile для чтения файла и процедура kol_name для подсчета упоминаний имен.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы