Привет всем!
Вот допустим есть такая программка:
program z_1_7;
uses crt;
var
N,k:integer;
ans:char;
begin
clrscr;
repeat
write('VVEDITE NOMER DNJA V GODU -> '); readln(k);
N:=k mod 7;
case N of
1:writeln ('PONEDELNIK');
2:writeln ('VTORNIK');
3:writeln ('SREDA');
4:writeln ('CHETVERG');
5:writeln ('PJATNICA');
6:writeln ('SUBBOTA');
0:writeln ('VOSKRESENJE');
end;
writeln('do you want to repeat? (Y/N)');
ans:=readkey;
until UpCase(ans)='N';
end.
program z_1_7;
uses crt;
var
N,k:integer;
ok:boolean;
ans:char;
begin
clrscr;
repeat
repeat
{$I-}
write('VVEDITE NOMER DNJA V GODU -> '); readln(k);
{$I+}
ok:=(ioresult=0) and (k <= 365) and (k > 0);
if not ok then writeln('* * * ERROR! WRONG INPUT! PLEASE TRY AGAIN! * * *');
until ok;
N:=k mod 7;
case N of
1:writeln ('PONEDELNIK');
2:writeln ('VTORNIK');
3:writeln ('SREDA');
4:writeln ('CHETVERG');
5:writeln ('PJATNICA');
6:writeln ('SUBBOTA');
0:writeln ('VOSKRESENJE');
end;
writeln('do you want to repeat? (Y/N)');
ans:=readkey;
until UpCase(ans)='N';
end.
Попробуй "свалить" это:
uses crt;
var
N, k, err: integer;
ok: boolean;
ans: char;
s: string;
begin
clrscr;
repeat
repeat
{$I-}
write('VVEDITE NOMER DNJA V GODU -> '); readln(s);
{$I+}
ok := (ioresult = 0); val(s, k, err);
ok := ok and (err = 0) and ((k > 0) and (k <= 365));
if not ok then writeln('* * * ERROR! WRONG INPUT! PLEASE TRY AGAIN! * * *');
until ok;
N:=k mod 7;
case N of
1:writeln ('PONEDELNIK');
2:writeln ('VTORNIK');
3:writeln ('SREDA');
4:writeln ('CHETVERG');
5:writeln ('PJATNICA');
6:writeln ('SUBBOTA');
0:writeln ('VOSKRESENJE');
end;
writeln('do you want to repeat? (Y/N)');
ans:=readkey;
until UpCase(ans)='N';
end.
Ну и это свалить можно...
Попробуй ввести значение переменной скажем "32769"...
Ну, так я тебе тогда любое свалю... Хочешь - определи K как LongInt и введи "2147483649"... Все, ощибка... А почему? Потому как переполнение и все заново начинается... Запомни раз и навсегда: Не бывает программ, которые нельзя "свалить"... И если ты начинаешь написание вот такой программки с ТАКОЙ защиты от дурака, то ...
repeat
{$I-}
write('VVEDITE NOMER DNJA V GODU -> '); readln(s);
{$I+}
ok := (ioresult = 0); val(s, k, err);
ok := ok and (err = 0) and (length(s) < 4) and ((k > 0) and (k <= 365));
if not ok then writeln('* * * ERROR! WRONG INPUT! PLEASE TRY AGAIN! * * *');
until ok;
Спасиба!
Теперь программа работает понадежнее!