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

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

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

 
 Ответить  Открыть новую тему 
> Цикл Repeat, Помогите вставить цикл...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

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


Привет всем!
Вот допустим есть такая программка:
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.


НО! Этот цикл работает, но не является так сказать корректным. Давайте попробуем ввести значение переменной: "gdggdg 12" (вводить естественно без кавычек). И посмотрим что нам выдаст программа... Все начинает глючить! Как раз таки на этом я и прокололся на уроке программирования.

Так вот я обращаюсь к вам за помощью: как можно по-другому решить вопрос с проверкой на правильность ввода? Я все перерыл - не знаю как... Надеюсь на вашу отзывчивость!

Сообщение отредактировано: garry_m -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Попробуй "свалить" это:
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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

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


Ну и это свалить можно...
Попробуй ввести значение переменной скажем "32769"...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ну, так я тебе тогда любое свалю... lol.gif Хочешь - определи 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;


Развлекайся...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской

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


Спасиба!
Теперь программа работает понадежнее!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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