Консультация № 176300
26.01.2010, 00:31
0.00 руб.
0 11 2
С помощью рекурси,запрограммируйте
1.У=(х^n)-10.

2.Дан квадрат который задан координат своих вершин. Составить программу вычисления периметра

Обсуждение

Неизвестный
26.01.2010, 07:34
общий
Есть ли ограничения на n? Особенно важен знак
Неизвестный
26.01.2010, 07:47
общий
Boriss:
нeт,любоe можно.
Неизвестный
26.01.2010, 11:22
общий
n - целое?
Неизвестный
26.01.2010, 11:40
общий
Максим Юрьевич:
кaнeчно
Неизвестный
26.01.2010, 12:15
общий
Слушай, а зачем тут рекурсия?
Неизвестный
26.01.2010, 13:11
общий
Boriss:
просто тeму проходим..попросилa с помощью eё
Неизвестный
26.01.2010, 14:20
общий
Так тут в одну команду,
y := exp(n*ln(x)) - 10;
Если x > 0
Неизвестный
26.01.2010, 14:21
общий
Может формула другая, например, вот если б
tg(y) = x^n - 10
давно
Академик
320937
2216
26.01.2010, 14:38
общий
26.01.2010, 15:56
это ответ
Здравствуйте, pascalnew. Ответ на Ваш первый вопрос. Используются 2 функции.
1. Рекурсивная MyPow(x,n)
2. y(x,n)=MyPow(x,n)-10.
x^n не определено, если x=0 и n<=0. Сравнение с нулем заменено сравнением модуля с очень маленьким положительным числом
Текст в приложении. Turbo Pascal 7


Приложение:
program p176300;
{ У=(х^n)-10. }
var
x: real;
epsilon: real;
n: integer;
function MyPow(x: real; n: integer): real;
begin
if n=0 then
MyPow := 1
else if n>0 then
MyPow := x*MyPow(x,n-1)
else
MyPow := MyPow(x,n+1)/x;
end; { MyPow }

function y(x: real; n: integer): real;
begin
y:= MyPow(x,n)-10;
end; { y }

begin
epsilon := 0.0001;
write('x=');
readln(x);
write('n=');
readln(n);
write('Результаты расчета');
if (abs(x)<epsilon) and (n<=0) then
writeln('ошибка, результат неопределен')
else
writeln('y=', y(x,n):0:4);
readln;
end.
Неизвестный
26.01.2010, 14:45
общий
pascalnew:
Добрый день! В ответе неверно считается отрицательная степень. Внес исправления
Код:
program p176300;
{ У=(х^n)-10. }
var
x: real;
epsilon: real;
n: integer;
function MyPow(x: real; n: integer): real;
begin
if n=0 then
MyPow := 1
else if n>0 then
MyPow := x*MyPow(x,n-1)
else
MyPow := MyPow(x,n+1)/x;
end; { MyPow }

function y(x: real; n: integer): real;
begin
y:= MyPow(x,n)-10;
end; { y }

begin
epsilon := 0.0001;
write('x=');
readln(x);
write('n=');
readln(n);
write('Результаты расчета');
if (abs(x)<epsilon) and (n<=0) then
writeln('ошибка, результат неопределен')
else
writeln('y=', y(x,n):0:4);
readln;
end.

Неизвестный
26.01.2010, 15:52
общий
это ответ
Здравствуйте, pascalnew.

В Вашем вопросе две существенно разных задачи. В приложении приведено решение второй — вычисление периметра. Программа вычисляет периметр четырехугольника, координаты вершин которого вводятся с клавиатуры (направление обхода вершин безразлично). Для квадрата достаточно было бы вычислить длину одной стороны и умножить на 4. Но надо было бы добавить проверку, что введенный четырехугольник — действительно квадрат. Такие тонкости в условии не оговариваются, поэтому я ограничился вычислением периметра четырехугольника.

Программа проверена в Borland Pascal 7.0.
При наличии вопросов или необходимости уточнений, обращайтесь в мини-форум.

Успехов!

Приложение:
{ вычисление периметра четырехугольника }
program _176300;
type
t_point = record
x, y: real;
end;
t_quadangle = array [1..4] of t_point;

function perimeter( var q: t_quadangle ) : real;
var
i, j : integer;
dx, dy, p : real;
begin
p := 0;
for i := 1 to 4 do begin
if i = 4 then j := 1 else j := i+1;
dx := q[j].x - q[i].x;
dy := q[j].y - q[i].y;
p := p + sqrt( dx*dx + dy*dy );
end;
perimeter := p;
end;

var q : t_quadangle;
i : integer;
begin
writeln( 'Введите пары координат (x,y) для каждой вершины через пробел:' );
for i := 1 to 4 do begin
write( 'Вершина[', i, '] = ' );
with q[i] do
readln( x, y );
end;
writeln( 'Периметр = ', perimeter( q ));
end.
Форма ответа