IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Оператор Case и поиск в записи
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +


Помогите организовать поиск через case


procedure findfio;
var
maska: string;
flag: boolean;
countrec: integer;
begin
name_of_file;
assign(f, file_name);
{$I-}
reset(f);
{$I+}
if IOresult = 0 then
begin
write('Vvedite familii dlya poiska: ');
readln(maska);
flag:=false;
countrec:=0;
while (not Eof(f)) do
begin
read(f,rec);
with rec do
if pos(maska,fio) <> 0 then \\Как организовать через case чтобы заместо fio было year и address
begin
flag:=true;
inc(countrec);
writeln(' Fio ',fio:5,' Vozrast',year:5,'Address',home:5,'Group',group:5);
end;
end;
if flag then
begin
writeln(' Chislo zapisei s imenem : ',maska,'=',countrec);
end
else
writeln(' Fail ne soderzhit familii',maska);
close(f);
end
else
writeln('File ',+file_name+' is not');
end;




Хотел сначала case оператор of
1:s:='fio';
2:s:='Year'
3:s:='Address'

s-строка

а потом сделать сравнение if pos(maska,s) но так не работает а 3 процедуры слишком код громоздкий получается
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Покажи описание типа-структуры (Rec), что там у тебя за параметры присутствуют? В принципе, можно поиграться с вариантной записью...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской
Реальное имя: Лёха

Репутация: -  0  +



Program lib;
uses crt;
type Books=record
number:integer;
fio:string;
group:string;
home:string;
year:integer;
end;

var
rec:books;



Вот оно!



 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Сделай так:

type
Books = record
number:integer;
year:integer;
case boolean of
false: (
fio: string;
group: string;
home: string
);
true: (
st: array[1 .. 3] of string
);
end;

Тогда обращение Rec.fio будет полностью эквивалентно обращению Rec.st[1], и т.д. со всеми строками; и можно будет сделать и вот так:
for i := 1 to 3 begin
if pos(maska, st[i]) then ...
end;
, и просто обращаться по индексу к любому из полей fio, group, home ...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.09.2020 7:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name