Pascal ABC Тема Записи С клавиатуры вводится номер школы. Файл содержит сведения: фамилию, имя ученика, номер школы. Определить кол-во учеников в школе с заданным номером с клавиатуры

Ответы

Ответ дал: pacixor
0
Список учеников в файле data.txt(см. вложение)

//Pascal
type
  TPupils = record
    firstname, surname: string;
    schoolNumber: integer;
  end;

var
  f: text;
  s, buf: string;
  i, j, tmp: byte;
  num, countPupils: integer;
  A: array [1..200] of TPupils;
begin
  assign(f, 'data.txt');
  reset(f);
  j := 1;
  while not eof(f) do
  begin
    readln(f, buf);
    buf := buf + ' ';
    tmp := 1;

    for i := 1 to length(buf) do
    begin
      if pos(buf[i], ' ') = 0 then s := s + buf[i]
      else
      begin
        if length(s) > 0 then
        begin
        case tmp of
          1: begin  A[j].firstname := s; Inc(tmp); end;
          2: begin A[j].surname := s; Inc(tmp); end;
          3:
          begin
            Val(s, num, num);
            A[j].schoolNumber := num;
          end;
        end;
        //writeln(s);
        s := '';
        end;
      end;
    end;
    Inc(j);
  end;
  close(f);

  write('Введите № школы: ');
  readln(num);

  for i := 1 to 200 do
  begin
    if A[i].schoolNumber = num then
      //writeln(A[i].firstname, ' ', A[i].surname, ' ',
      //        A[i].schoolNumber);
      Inc(countPupils);
  end;
  writeln('Количество учеников в данной школе = ',
          countPupils);
end.
Приложения:
Ответ дал: dim10102806
0
Спасибо огромное, я понял, как сделать еще проще!!!
Ответ дал: vladmor
0
Считаем, что поля записи в текстовом файле разделены символом ";", тогда задачу можно решить так:

type

  Person = record

    fname: string;//Фамилия ученика

    lname: string;//Имя

    school: integer;//Номер щколы

  end;

 

var student: Person;

n,s,p:integer;

tmp:string;

fin:text;//Файловая переменная


begin

  assign(fin, 'students.txt');

  reset(fin);

  readln(n);//Получаем номер школы

  while not (eof(fin)) do 

  begin

    readln(fin, tmp);//Читаем строку из файла

    p:= Pos(';', tmp); 

    Delete(tmp, 1, p);//удаляем все до первого разделителя

    p:= Pos(';', tmp); 

    Delete(tmp, 1, p);//удаляем все до второго разделителя

    // в tmp остался номер школы

    student.school:=strtoint(tmp);

    if student.school=n then s+=1; 

  end;

  writeln(s);

end.

Приложения:
Ответ дал: dim10102806
0
Прдразумевалось, что поля в разных строках в текстовом файле
Ответ дал: vladmor
0
Из условия задачи это не видно. Тогда решение существенно упрощается. Не надо в строке искать разделители, а считываете каждую третью строку из файла и она будет содержать номер школы.
Ответ дал: dim10102806
0
Да
Вас заинтересует