Форум «Всё о Паскале» _ Задачи _ Задача с циклом FOR
Автор: mr.voland 16.12.2007 20:04
Не могу не как решить задачу через while сделал, а надо через for. Сама задача звучит так
Код
Около стены наклонно стоит палка длинной x метров. Один ее конец находится на растоянии y метров от стены. Определить значения угла между палкой и полом для значений y, изменяющегося от 2 до 3 метров с шагом h.
Искал поиском, нашел такую же задачу, но тема закрыта и задача не решена. Если надо то могу выложить свое решение через while, но думаю оно мало поможет. Заранее благодарен.
Автор: Client 16.12.2007 20:08
покажи как с WHILE'ом сделал, там подправим.
Автор: mr.voland 16.12.2007 20:13
Код
program lab6_v4; uses CRT; var x,h:real; a,y:real; arccos:real; Begin CLRSCR; write ('Введите длину палки '); read(x); write ('Введите шаг'); read(h); y:=2; while y<=3 do begin arccos:=arctan(sqrt(1-sqr(y/x))/(y/x)); writeln('Значение угла',arccos:8:2,' при y=',y); y:=y+h; end; repeat Until KeyPressed; end.
p.s. Есть мысль что через for надо делать по формуле n:=(3-2)/h+1 h-Это шаг и тогда получается что for i:=1 to n do А вот какого типа должны быть переменные?
Автор: Client 16.12.2007 20:24
если шаг больше 0.1, то можно так:
for i:=20 to 30 do bein arccos:=arctan(sqrt(1-sqr(y/x))/(y/x)); writeln('Значение угла',arccos:8:2,' при y=',y); y:=y+i*h end;
Автор: andriano 16.12.2007 20:34
Client, что-то мне кажется, y := i*h;
Автор: Client 16.12.2007 20:46
uses crt; var y,sd,x,h:real; i:integer; begin clrscr; y:=2; writeln('Введите х'); readln(x); write(' Введите шаг'); readln(h); while y<=3 do begin sd:=arctan((1-sqr(y/x))*(y/x)); writeln(' ugol = ',sd:0:5); y:=y+h end; writeln; writeln; y:=2; for i:=0 to 10 do begin y:=i*h+2; if y<=3 then begin sd:=arctan((1-sqr(y/x))*(y/x)); writeln(' ugol = ',sd:0:5) end end; readkey end.
Для сравнения привел 2 цикла
Автор: volvo 16.12.2007 20:46
Цитата
если шаг больше 0.1
А если 0.09 - тогда что?
Неужели нельзя сделать общий случай?
const start_y = 2; finish_y = 3; var i, step: integer; ... write ('Введите длину палки '); readln(x); write ('Введите шаг '); readln(h);
step := trunc((finish_y - start_y) / h); for i := 0 to step do begin y := start_y + i * h; arccos:=arctan(sqrt(1-sqr(y/x))/(y/x)); writeln('Значение угла', arccos:8:2, ' при y=', y); end;