Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal->C] Вычисление математических формул


Автор: Scorpio 10.5.2007, 15:54
Такая просьба:

Мне нужно решить задачу на С:

"Пусть v{1} = v{2} = 0; v{3} = 1.5;

v{i} = (i+1 / i*i + 1)(v{i-1}) – v{i-2} * v{i-3}, i = 4, 5, ...

Дано натуральное n (n >= 4). Получить v{n}. "

v{i} - это v с индексом i.

У меня есть решение задачи на Паскале:

Код
var
y:array[1..100] of real;
n,i,z: integer;
fout:text;
fin:text;
begin
write ('1.File or 2.Keyboard');
readln (z);
assign (fout,'92.dat');
assign (fin,'92.txt');
reset (fout);
rewrite (fin);
if z=1 then
readln (fout,n);
if z=2 then
begin
write('Input N=');
read (n);
end;
y[1]:=0;
y[2]:=0;
y[3]:=1.5;
for i:=4 to n do
y[i]:=((i+1)/(i*i+1))*y[i-1]-y[i-2]*y[i-3];
write ('y[',n,']=',y[n]);
write (fin,'y[',n,']=',y[n]);
close (fin);
close (fout);
end.


Помогите, пожалуйста, решить задачу или перевести этот код в Си.

Спасибо!


Автор: dizzy1984 11.5.2007, 07:08
Код

#include <stdio.h>

int main()
{
    double y[100];
    int n, i;
    char z;
    FILE *fout, *fin;
    printf("1. File or 2.Keyboard");
    z = getc(stdin);
    fout = fopen("92.dat", "rt");
    fin  = fopen("92.txt", "w+t");
    if (z == '1')
    {
        fscanf(fout, "%d", &n);
    }
    if (z == '2')
    {
        printf("Input N=");
        scanf("%d", &n);
        fflush(stdin);
    }
    y[0] = y[1] = 0;
    y[2] = 1.5;
    for (i=3; i<n; i++)
    {
        double I = i;
        y[i] = ((I+1 )/(I*I+1))*y[I-1]-y[I-2]*y[I-3];
    }
    printf("y[%d]=%d", n, y[n-1]);
    fprintf(fin, "y[%d]=%d", n, y[n-1]);
    fclose(fin);
    fclose(fout);
}

Не проверял, могут быть ошибки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)