Помощь - Поиск - Пользователи - Календарь
Полная версия: безопасный ввод
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
HeX
Поиогите найти ошибку в функции!!!Пожалуйста!!!
Условие: Организовать типизированный файл, содержащий сведения об адресах и телефонах сотруд-ников предприятия: ФИО, адрес (улица, дом, квартира). Напишите встроенную подпрограмму-функцию для организации безопасного ввода номеров телефонов – целое шестизначное число. Определите сколько сотрудников не имеют телефонов.

Решение:
program QQQ;
type
pred=record
Tel:byte;
adress:string;
FIO:string;

end;
var
Sved:pred;
Fsved: file of pred;
Msved:array[1..50] of pred;
i,j,a,NOTEL,N_zap:integer;
k:boolean;

function Nomer(tel:byte):boolean;
var t:byte;
begin
nomer:=False;
if tel=0
then
nomer:=true
else
if (tel>99999) and (tel<1000000)
then
nomer:=true
else
writeln('nepravilniy vvod nomera!!!');
end;

procedure File_WRITE;
begin
Writeln('Vvedite kolichestvo zapisei');
readln(N_zap);
assign(Fsved,'sved.dat');
rewrite(Fsved);
for i:=1 to N_zap do
begin
with sved do
begin
repeat
begin
Writeln('Vvedite nomer telefona esli nomer otsytstvyet vvedite 0');
readln(tel);
k:=nomer(tel);
end;
until k;
Writeln('Vvedite FIO');
readln(FIO);
Writeln('Vvedite adress');
readln(adress);
end;
write(Fsved,sved);
end;
close(fsved);
end;

begin
File_WRITE;
assign(Fsved,'sved.dat');
reset(Fsved);
NOTEL:=0;
While not eof(Fsved) do
begin
with sved do
begin
read(Fsved,sved);
if tel=0 then
NOTEL:=NOTEL+1;
end;
end;
{close(Fsved);}
Seek(Fsved,0);
Writeln('FIO ','Adres ','Telefon ');
While not eof(Fsved) do
begin
read(Fsved,sved);
begin
with sved do
begin
Writeln(FIO,' ',adress,' ',tel);
end;
end;
end;
close(Fsved);
writeln('Rabotnikov bez telefona:',NOTEl);
readln;
end.


М
тегами пользуемся
Altair

Altair
Цитата
ФИО, адрес (улица, дом, квартира). Напишите встроенную подпрограмму-функцию для организации безопасного ввода номеров телефонов – целое шестизначное число.

longint
прогу не проверял
HeX
не у меня в функции условие почему то не срабатывает
volvo
HeX, тебе же сказали почему. Byte, который ты используешь не может хранить такие большие значения (Byte хранит только 0 .. 255). Измени функцию, чтобы она использовала LongInt (от -2 млрд. до +2 млрд.). А еще лучше - переписать функцию вот так:

function Nomer(tel: longint):boolean;
var T:Boolean;
begin
T := ((tel=0) or ((tel>99999) and (tel < 1000000)));
If not T then writeln('nepravilniy vvod nomera!!!');
nomer := T;
end;


Ну, и естественно придется в описании типа Pred тоже изменить тип с Byte на LongInt
Altair
во первых безопасный ввод скорее всего ввод числа, с защитой от ввода символов...
во вторых условие с такими параметрами неприменимо к типу byte, я уже сказал это

p.s. volvo ответил раньше.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.