Помощь - Поиск - Пользователи - Календарь
Полная версия: безопасный ввод
Форум «Всё о Паскале» > 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 ответил раньше.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.