uses crt; var a,b,r,x,y,N,z:real; begin clrscr; Write ('Vvedite kol-vo probnyh tochek '); readln(N); writeln('Vvedite radius okuzhnosti'); readln ®; writeln ('Vvedite krainuyuy x pryam.'); readln(a); writeln ('Vvedite krainuyuy y pryam.'); readln(b); z:=1; while z<=N DO BEGIN z:=z+1; Writeln ('Vvedite x i y'); readln(x,y); END; writeln; repeat begin z:=z+1; if (x<0) and (x>(-a)) and (y<0) and (sqrt(sqr(x)+sqr(y))<=r) then writeln (x:2:2,' ',y:2:2,' ','Popapla') else if (x>0) and (x<a) and (y>0) and (sqrt(sqr(x)+sqr(y))>=r) then writeln (x:2:2,' ',y:2:2,' ','Ne popala') else writeln (x:2:2,' ',y:2:2,' ','Ne popala'); end; UNTIL z=N; readkey; end.
Второй цикл выполняется только для одной пары x и y. Что неправильно?
Lapp
15.04.2011 11:27
Цитата(Eduard @ 15.04.2011 7:35)
uses crt; var a,b,r,x,y,N,z:real; begin clrscr; Write ('Vvedite kol-vo probnyh tochek '); readln(N); writeln('Vvedite radius okuzhnosti'); readln ®; writeln ('Vvedite krainuyuy x pryam.'); readln(a); writeln ('Vvedite krainuyuy y pryam.'); readln(b); z:=1; while z<=N DO BEGIN z:=z+1; Writeln ('Vvedite x i y'); readln(x,y); END; writeln; repeat begin z:=z+1; if (x<0) and (x>(-a)) and (y<0) and (sqrt(sqr(x)+sqr(y))<=r) then writeln (x:2:2,' ',y:2:2,' ','Popapla') else if (x>0) and (x<a) and (y>0) and (sqrt(sqr(x)+sqr(y))>=r) then writeln (x:2:2,' ',y:2:2,' ','Ne popala') else writeln (x:2:2,' ',y:2:2,' ','Ne popala'); end; UNTIL z=N; readkey; end.
Второй цикл выполняется только для одной пары x и y. Что неправильно?
Вставь z:= 0; перед repeat
Добавлено через 3 мин. Постой, постой... А где у тебя вообще массив?.. Ты вводишь x и y и сразу (при вводе сдедующей точки) затираешь их. Заведи массив точек. Ну, или выполняй проверку прямо при вводе (тогда не нужен второй цикл, все делай в одном).
Eduard
15.04.2011 11:32
Мне надо, чтобы обязательно было два цикла: while и repeat. А массивы мы еще не проходили.
Lapp
15.04.2011 11:45
Цитата(Eduard @ 15.04.2011 8:32)
Мне надо, чтобы обязательно было два цикла: while и repeat. А массивы мы еще не проходили.
ммм.. Я так подозреваю, что вы и файлы не проходили. Да? Тогда - к Господу Богу. Я не волшебник. Я не умею ходить двумя ногами в одной штанине )). Без массивов (или файлов) в двух циклах эта задача (в том виде, как ты ее представил, то есть с произвольным N) не решается. Баста.
hint: пройди массивы сам ))
Eduard
15.04.2011 11:46
У меня через час пара начнется. Это нереально пройти. Помогите, пожалуйста, очень надо сдать эту программу.
Lapp
15.04.2011 11:49
Цитата(Eduard @ 15.04.2011 8:46)
Помогите, пожалуйста, очень надо сдать эту программу.
Я же сказал: без массивов не решается. Дашь миллион баксов? Все равно не решу. НЕ РЕШАЕТСЯ
Eduard
15.04.2011 11:51
Хотя бы с массивами, пожалуйста. Я не очень понимаю Паскаль над программой 3 дня сидел, с циклами разбирался.
Lapp
15.04.2011 11:58
Цитата(Eduard @ 15.04.2011 8:51)
Хотя бы с массивами, пожалуйста. Я не очень понимаю Паскаль над программой 3 дня сидел, с циклами разбирался.
Хорошо, если сам делал - помогу. С массивами, конечно )). Я вставлю массивы.
Но у тебя там что-то странное.. Что такое a и b? и зачем r? Дай полное условие, желательно с рисунком.
Eduard
15.04.2011 12:06
Программа должна определять попадает ли точка в закрашенную область, результатаы вывести в вдие таблицы. Она в ней должна быть возможность выполняться много раз, не перезапускаясь, это я вообще не понял. Обязательно должны быть условный оператор, цикл с предусловием и постусловием.
Lapp
15.04.2011 12:09
Вот, я вставил массивы (x и y) параметр цикла заменил на целую переменную (i) также, подправил границы циклов
Но у тебя там с логикой швах. Неясно, зачем весь этот наворот:
if (x[i]>0) and (x[i]<a) and (y[i]>0) and (sqrt(sqr(x[i])+sqr(y[i]))>=r) then writeln (x[i]:2 :2,' ',y[i]:2 :2,' ','Ne popala') else writeln (x[i]:2 :2,' ',y[i]:2 :2,' ','Ne popala');
- если в обоих случаях выводится одно и то же..
const m = 100; var a,b,r,N: real; i: integer; x,y: array [1..m] of real; begin Write ('Vvedite kol-vo probnyh tochek (ne boljshe ',m,'): '); readln(N); writeln('Vvedite radius okuzhnosti'); readln ®; writeln ('Vvedite krainuyuy x pryam.'); readln(a); writeln ('Vvedite krainuyuy y pryam.'); readln(b); i:= 0; while i<N DO BEGIN i:= i+1; Writeln ('Vvedite x i y'); readln(x[i],y[i]); END; writeln; i:= 0; repeat i:= i+1; if (x[i]<0) and (x[i]>-a) and (y[i]<0) and (sqrt(sqr(x[i])+sqr(y[i]))<=r) then writeln (x[i]:2 :2,' ',y[i]:2 :2,' ','Popapla') else if (x[i]>0) and (x[i]<a) and (y[i]>0) and (sqrt(sqr(x[i])+sqr(y[i]))>=r) then writeln (x[i]:2 :2,' ',y[i] 2,' ','Ne popala') else writeln (x[i]:2 :2,' ',y[i]:2 :2,' ','Ne popala'); UNTIL i=N; readln; end.
Добавлено через 2 мин.
Цитата(Eduard @ 15.04.2011 9:06)
в ней должна быть возможность выполняться много раз, не перезапускаясь, это я вообще не понял
Ааа... ну, так бы и сказал!! млин.. тогда, конечно, массивы не нужны..
ты бы лучше пришел сюда РАНЬШЕ, тогда, когда тебе было что-то НЕПОНЯТНО, и спросил бы.. а не за час до сдачи..
Eduard
15.04.2011 12:12
Огромное вам спасибо!
Lapp
15.04.2011 12:13
Цитата(Eduard @ 15.04.2011 9:12)
Огромное вам спасибо!
Пожалуйста, конечно, но это не то, что тебе надо..
Lapp
15.04.2011 12:34
Вот тебе решение:
uses CRT;
var a,b,r,x,y,z: real; c: char; begin writeln('Vvedite radius okuzhnosti'); readln ®; writeln ('Vvedite krainuyuy x pryam.'); readln(a); writeln ('Vvedite krainuyuy y pryam.'); readln(b); repeat Write ('Vvedite x i y: '); readln(x,y); z:= sqrt(sqr(x)+sqr(y)); if (-a<=x) and (x<=0) and (-b<=y) and (y<=0) and (z<=r) or (0<=x) and (x<=a) and (0<=y) and (y<=b) and (z>=r) then writeln (x:2:2,' ',y:2:2,' ','Popapla') else writeln (x:2:2,' ',y:2:2,' ','Ne popala'); write('Prodolzhitj? (y/n) '); c:= #0; while not (c in ['Y','N']) do c:= UpCase(ReadKey); WriteLn UNTIL c='N'; WriteLn('Good bye!') end.
Разберись с ним. И приходи сюда раньше, чем за час до сдачи. Тогда будет толк
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.