Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Последовательность

Автор: Merlin 7.04.2006 2:57

Задание :

Найти наименьший номер n последовательности, для которого выполняется условие
| an – an-1| < e. Заданная последовательность an = 2 + 1/ an-1 , a1 = 2. Вывести на экран этот номер и все элементы ai, где i =1, 2, …, n, если e = 10*(-3), т.е. (В степени)
----------------------------------------
У меня есть прога в Паскале , теперь её надо перевести на С, вот только не получается , помогите пожалуйста.


Program z;
Var
a,a_next:real;
n:integer;
const
eps=0.001;
begin
a_next:=2;
n:=1;
repeat
a:=a_next;
a_next:=2+1/a;
if abs(a_next-a)>eps then begin
writeln('a[',n:2,']=',a:10:5);
inc(n);
end;
until abs(a_next-a)<eps;
writeln('n=',n);
readln;
end.



А вот она же на С, только в мойм корявом исполнении :

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main()
{
float a, a_next;
int n;
a_next=2;
n=1;
const eps=0.001;
do
{ a=a_next;
a_next=2+1/a;
if (abs(a_next-a) > eps)

cout<<"a['," << n<<",']=, " << a <<endl;
n++;

}
while (abs(a_next-a) <eps);
cout<<"n="<<n<<endl;
getche();
}

Автор: volvo 7.04.2006 3:26

1. С чего ты взял, что тебе надо пользоваться abs ? Это для целых...
2. В конструкции do { ... } while условие - не "обратное", как в Repeat ... Until , а "прямое"
3. Не забывай приводить результаты к вещественному типу: С не делает этого автоматически...

4. (не обязательно, но ты же начал делать программу на С++, а не я) - чтобы программа соответствовала Стандарту, функция main должна возвращать значение типа int ...

#include <conio.h>
#include <iostream.h>
#include <math.h>

int main() {
float a, a_next = 2.0;

int n = 1;
const float eps = 0.001;

do {
a = a_next;
a_next = 2 + 1.0 / a;
if(fabs(a_next - a) > eps)
cout << "a[" << n++ <<"]= " << a << endl;

}
while(fabs(a_next - a) > eps);

cout << "n=" << n << endl;
getche();

return 0;
}