В прошлый раз я не разобрался в Вашей не очень читабельной программе и написал в п.2 глупости.
Вы не формулируете точно задание. Крайне желательно точно формулировать условие задачи и требования по её выполнению. Что нужно выполнить? Нужно вывести данные по всем имеющимся в файле однофамильцам? Тогда это можно сделать так.
Пусть число записей в файле не может превосходить MaxN (в программе надо предусмотреть проверку при вводе, иначе преподаватель может снизить оценку).
Заведем массив логических переменных flags. Будем считать, что номер элемента в массиве соответствует номеру записи в массиве записей stud. Первоначально присвоим элементам массива значения False. В двойном цикле будем присваивать элементам массива значение True, если совпадают фамилии. По завершению двойного цикла, напечатаем в однократном цикле поля тех записей массива stud, номерам которых в массиве flags соответствуют значения True.
Код:
uses crt;
const MaxN=100; {число записей в файле не может превосходить MaxN}
type
Student = record
fam: string[20];
name: string[20];
shifr:string[10];
end;
tsd = array[1..MaxN] of student;
var
stud: tsd;
f: text;
i,j,k,g,r: integer;
s: string;
flags: array[1..MaxN] of Boolean; {Заведем массив логических переменных flags}
begin
clrscr;
assign(f,'Lab21.txt');
rewrite(f);
repeat
writeln;
write('fam-'); readln(s); write(f,s:20);
write('name-'); readln(s); write(f,s:20);
write('shifr-'); readln(s); writeln(f,s:10);
writeln;
writeln('нажмите SPACE для выхода из ввода');
writeln('или нажмите любую клавишу для продолжения ввода');
writeln;
until readkey=#32;
i:=0;
reset(f);
while not Eof(f) do
begin
i:=i+1; {Тут должна быть добавл. проверка и выход с предупреждением !}
read(f,stud[i].fam);
read(f,stud[i].name);
readln(f,stud[i].shifr);
end;
for k:=1 to i do flags[k]:= False; {Первон. присв. элем. массива False}
for k:=1 to i do {В двойном цикле будем присваивать элем. массива}
for j:=1 to i do { значение True, если совпадают фамилии}
if k <> j then if stud[k].fam=stud[j].fam then flags[k]:= True;
{По завершению двойного цикла, напечатаем }
for k:=1 to i do { в однократном цикле поля тех записей массива stud,}
if flags[k] = true { номерам которых в массиве flags соотв. True }
then with stud[k] do
begin
writeln('Фамилия студента- ', fam);
writeln('Имя студента- ' , name);
writeln('Шифр группы- ' , shifr);
end;
readkey;
close(f);
End.
Но Вы программируете что-то другое. Посмотрите, как работает моя программа. Напишите, что и с какими условиями Вам надо сделать.