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

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

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

 
 Ответить  Открыть новую тему 
> Цикл Repeat, Не получается вставить цикл в конкретную программу
garry_m
сообщение 30.12.2005 20:53
Сообщение #1


Новичок
*

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

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


Помогите pls вставить цикл следующего типа в программу:
Цикл:

repeat
{$I-}
write('...'); readln(...);
{$I+}
ok:=(ioresult=0); val(s,k,err);
ok:=ok and (err=0);
if not ok then writeln('...');
until ok;



Программа:
uses crt;
var
x,y,z:real;
c:real;
ans:char;
begin clrscr; repeat clrscr;

writeln('Raschet znachenija functii.');
writeln('');
write('Vvedite X -> '); readln(x);
write('Vvedite Y -> '); readln(y);
write('Vvedite Z -> '); readln(z);
writeln('');
writeln('Raschitaem znachenije functii.');

C:=ln(sqr(2*x+5*y)*(22*x+401*y)/(5*sqr(x)+8*y+9*z));
writeln('');
write('Znachenije functii ravno: ',C:8:4); readln;
writeln('');
writeln('Do you want to repeat?');
ans:=readkey;
until UpCase(ans) = 'N';

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.12.2005 21:48
Сообщение #2


Гость






Цикл в программу вставляется обычно не просто так, а для чего-то... Вот если ты объяснишь, для чего тебе понадобился такой цикл, мы подскажем, как его добавить...
 К началу страницы 
+ Ответить 
garry_m
сообщение 30.12.2005 22:01
Сообщение #3


Новичок
*

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

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


Ну этот же цикл для проверки на правильность ввода 3 переменных. Собственно его и требуется вставить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 30.12.2005 22:14
Сообщение #4


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


Код
uses crt;
var
x,y,z:real;
c:real;
ans:char;
s:string;
begin clrscr; repeat clrscr;

writeln('Raschet znachenija functii.');
writeln('');
repeat
{$I-}
write('Vvedite X -> '); readln(s);
{$I+}
ok:=(ioresult=0); val(s,x,err);
ok:=ok and (err=0);
if not ok then writeln('Error!');
until ok;

repeat
{$I-}
write('Vvedite Y -> '); readln(s);
{$I+}
ok:=(ioresult=0); val(y,k,err);
ok:=ok and (err=0);
if not ok then writeln('Error!');
until ok;

repeat
{$I-}
write('Vvedite Z -> '); readln(s);
{$I+}
ok:=(ioresult=0); val(s,z,err);
ok:=ok and (err=0);
if not ok then writeln('Error!');
until ok;


writeln('');
writeln('Raschitaem znachenije functii.');

C:=ln(sqr(2*x+5*y)*(22*x+401*y)/(5*sqr(x)+8*y+9*z));
writeln('');
write('Znachenije functii ravno: ',C:8:4); readln;
writeln('');
writeln('Do you want to repeat?');
ans:=readkey;
until UpCase(ans) = 'N';

end.

вроде этого - на компиляторе не проверял!

Сообщение отредактировано: GoodWind - 30.12.2005 22:15


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.12.2005 22:18
Сообщение #5


Гость






Чтобы не раздувать программу - оформляй ввод переменной как отдельную функцию и вызывай ее 3 раза (для каждой переменной)... Что-то такого типа:
Function GetVar(minRange, maxRange: Real): Real;
Begin
{ Здесь используй свой Repeat ... Until }
GetVar := ...
End;

Var
x, y, z: Real;
Begin { основная программа }
x := GetVar(0, 20);
y := GetVar(10, 20); { Значения minRange/maxRange могут быть и другими }
z := GetVar(0, 5);
...
End.
 К началу страницы 
+ Ответить 
garry_m
сообщение 31.12.2005 14:08
Сообщение #6


Новичок
*

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

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


Помогите plz применить это к моей программе, чтобы я смог разобраться во всем...
Я вчера парился в редакторе - не выходит!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 1.01.2006 15:25
Сообщение #7


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


garry_m, а пост №4 ты смотрел ? dry.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
garry_m
сообщение 1.01.2006 18:51
Сообщение #8


Новичок
*

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

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


GoodWind, спасибо большое!
Но я хочу научиться применять цикл, который написал volvo. Т. к. а если мы скажем будем вводить 25 значений переменных, то мы будем 25 раз писать процедуру для проверки на правильность ввода?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 1.01.2006 19:22
Сообщение #9


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


тогда обясню - свой цикл (модифицированный конечно) оформляешь в функцию, которую применяешь вместо readln.
Код

function GetRealA(min,max:real;mess:string;):real;
var s:string;
      err:integer;
      t:real;
      ok:boolean;
begin
ok:=false;
repeat
write(mess); readln(s);
val(s,t,err);
ok:=(err<>0) and (t>=min) and (t<=max);
if not ok  then writeln('Error!');
until ok;
GetRealA:=t;
end;

теперь можешь использовать эту фуенкцию в своей программе:
Код

uses crt;
var
x,y,z:real;
c:real;
ans:char;
begin clrscr; repeat clrscr;

writeln('Raschet znachenija functii.');
writeln('');
x:=getRealA({мин значение},{макс значение},'Введите Х: ');
y:=getRealA({мин значение},{макс значение},'Введите Y: ');
x:=getRealA({мин значение},{макс значение},'Введите Z: ');
writeln('');
writeln('Raschitaem znachenije functii.');

C:=ln(sqr(2*x+5*y)*(22*x+401*y)/(5*sqr(x)+8*y+9*z));
writeln('');
write('Znachenije functii ravno: ',C:8:4); readln;
writeln('');
writeln('Do you want to repeat?');
ans:=readkey;
until UpCase(ans) = 'N';

end.


примерно так... unsure.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 21.07.2025 10:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"