Нужно вывести из типизированного ф-ла однофамильцев. Типизированный файл состоит из типа запись.
Например: при запросе фамилии Петрова выводились все стоки с фамилиями Петрова и Петров.
или при запросе : Петров выводились и Петров и Петрова.
Как можно сделать проверку на подстановку или отброс окончаний?
Всем заранее спасибо!
procedure print_usl;
begin
reset(F);
if (filesize(F) <> 0) then
begin
repeat
clrscr;
Writeln('Введите ФИО студента ');
readln(Str_v);
{cp:=copy()}
Chek_DL_SL(Str_v, 15);
Chek_FIO(Str_v);
if f1 = false then
write(' ');
until (f1 = true) and (f2=true);
str_v:=str_v;
K:=0;
While not EoF (F) do begin
read(F,S);
IF str_v[length(str_v)]= 'а' then
begin
s.fio_stud:=copy(str_v, 1, length(str_v)-1);
end else
begin
s.fio_stud:=str_v;
print_shapka;
k:=1;
writeln;
Write( #179);
Write( S.FIO_Stud:16);
Write( #179);
Write( S.Stip:9);
Write( #179);
Write( S.FIO_mum:14);
Write( #179);
Write( S.zp_mum:8);
Write( #179);
Write( S.FIO_ot:14);
Write( #179);
Write( S.zp_ot:8);
Write( #179);
writeln;
end;
end;
if k=0 then writeln('Студентов с фамилией ',str_v, ' не найдено' );
readkey;
clrscr;
close(F);
Osh;
end
else
begin
clrscr;
Writeln('Файл пуст. Записи не найдены');
close(F);
osh;
readkey;
clrscr;
end;
end;
Ну вот и сделай так:
IF str_v[length(str_v)]= 'а' then
test_fio:=copy(str_v, 1, length(str_v)-1);
else
test_fio:=str_v;
if (F.FIO_Stud = test_fio) or (F.FIO_Stud = test_fio + 'a') then(Можно было бы искать через if pos(F.FIO_Stud, test_fio) > 0 then, но будут ложные срабатывания: "Петров" и "Петровский" будут считаться похожими, а это не так).
begin
Inc(k);
end;
Не получилось. Или я не понял куда подставить это
Вот весь проект.. Конечно сложно там во всем наверное будет быстро разобраться.. Но может получится.
Эта процедура в модуле под названием PECHAT а запуск происходит через MENU
Прикрепленные файлы
PR2.zip ( 103.81 килобайт )
Кол-во скачиваний: 229
Я имел в виду что-то типа:
{Процедура печати по условию}Извини, но разбираться, где ты там описываешь все переменные (и почему переменные не описываются как можно ближе к месту использования - это первое условие для написания менее глючной программы, а ты все норовишь затолкать их в другой модуль, ибо в этом же я подобных переменных не обнаружил) мне лень, да и не хочется. Неинтересно это, я тебе указывал уже на ошибки, ты В ТОЧНОСТИ их повторяешь. Как об стену горох. На фиг мне, спрашивается, опять тут расписывать на десяток страниц, КАК НАДО, если ты делаешь КАК ПОПАЛО???
procedure print_usl;
var test_fio : string;
begin
reset(F);
if (filesize(F) <> 0) then
begin
repeat
// Мне все равно ,что у тебя происходит в Chek_DL_SL и Chek_FIO, я исхожу из предположения
// что после ввода и проверок в str_v находится фамилия студента, которого надо найти в базе
clrscr;
Writeln('Введите ФИО студента ');
readln(Str_v);
Chek_DL_SL(Str_v, 15);
Chek_FIO(Str_v);
if f1 = false then
write(' ');
until (f1 = true) and (f2=true);
// Вот от этой фамилии отсекаешь 'a', если она там есть
if str_v[length(str_v)]= 'а' then
test_fio:=copy(str_v, 1, length(str_v)-1)
else
test_fio:=str_v;
K:=0;
reset(F);
print_shapka; // Выводишь ДО ЦИКЛА шапку
while not EoF (F) do
begin
read(F,S); // а потом в цикле сравниваешь текущую фамилию с test_fio и test_fio + 'a'
if (S.FIO_Stud = test_fio) or (S.FIO_Stud = test_fio + 'а') then
begin
k:=1;
writeln;
Write( #179);
Write( S.FIO_Stud:16);
Write( #179);
Write( S.Stip:9);
Write( #179);
Write( S.FIO_mum:14);
Write( #179);
Write( S.zp_mum:8);
Write( #179);
Write( S.FIO_ot:14);
Write( #179);
Write( S.zp_ot:8);
Write( #179);
writeln;
end;
end;
close(F);
Osh;
if k=0 then
writeln('Студентов с фамилией ',str_v, ' не найдено' );
readkey;
clrscr;
end
else
begin
clrscr;
Writeln('Файл пуст. Записи не найдены');
close(F);
osh;
readkey;
clrscr;
end;
end;
Увы делалось как было написано в задании....
Все в программе хорошо, но проверяет то только на фамилию
Если в файле фамилии без инициалов то все прекрасно! А вот с инициалами ничего не находит....
"Это что, задание так требует, чтобы в файле Redakt.pas было больше 600 строк? "
Нет задание требует редактирование в виде меню а как по другому его организовывать не знаю.. Да и уже некогда, еще диаграмму нужно делать...
Как-то реально вывести гистограмму (столбиковую диаграмму) допустим сколько студентов получают стипендию до 980 ру. и сколько больше 1000 например?
And I thuohgt I was the sensible one. Thanks for setting me straight.