Помогите пожалуйста програму на паскале записать на с++

Тема в разделе "Общие вопросы по С и С++", создана пользователем quickdeath, 14 дек 2010.

  1. quickdeath

    quickdeath Гость

    Код (Text):
    TYPE VEC=ARRAY [0..100] OF REAL;
    VAR N:INTEGER; A,B,H,S:REAL; X,F,C:VEC;
    FUNCTION Y(X:REAL):REAL
    BEGIN Y:=SIN(X) END;
    PROCEDURE TAB(N:INTEGER;A,H:REAL; FUNCTION Y:REAL;VAR X,F:VEC);
    VAR I:INTEGER;
    BEGIN
    FOR I:=0 TO N DO BEGIN X[I]:=A+I*H; F[I]:=Y(X[I]) END
    END;
    PROCEDURE CS(N:INTEGER; VAR X,F,C:VEC);
    VAR I,J,M:INTEGER; A,B,R:REAL; K:VEC;
    BEGIN K[1]:=0.0; C[1]:=0.0;
    FOR I:=2 TO N DO BEGIN J:=I-1; M:=J-1;
    A:=X[I]-X[J]; B:=[J]-X[M]; R:=2*(A+B)- B*C[J]; C[I]:=A/R;
    K[I]:=(3.0*((F[I]-F[J])/A-(F[J]-F[M])/B)-B*K[J])/R
    END;
    C[N]:=K[N];
    FOR I:=N-1 DOWNTO 2 DO C[I]:=K[I]-C[I]*C[I+1]
    END;
    PROCEDURE SSP(N:INTEGER; H:REAL;VAR F,C:VEC; VAR S:REAL);
    VAR I:INTEGER; R:REAL;
    BEGIN S:=(F[0]+F[N])/2; R:=0.0;
    FOR I:=1 TO N-1 DO BEGIN S:=S+F[I]; R:=R+C[I+1] END;
    S:=(S-R*H*H/6.0)*H
    END;
    BEGIN
    REPEAT WRITE('N,A,B?'); REALN(N,A,B);; H:=(B-A)/N;
    TAB(N,A,H,Y,X,F); CS(H,X,F,C); SSP(N,H,F,C,S);
    WRITELN('S=',S)
    UNTIL FALSE
    END.
     
  2. AlexanderClubLife

    AlexanderClubLife Гость

    У тебя масив Риал, а можеш точнее сказать? В С++ десятичные дроби разные бывают: бывают с 2мя цифрами после запятой, бывают больше...
    вместо begin, end пиши {,} переменные обьявляються немного по-другому:вместо VAR I:INTEGER; пиши
    int i
    цыкл FOR I:=0 TO N DO записывается так for(i=0;i<=n;i++)
     
  3. ierofant

    ierofant Гость

    Лучше бы ты сказал, что должна программа делать. Я вот вообще уже очень плохо помню паскаль.
     
  4. quickdeath

    quickdeath Гость

    мне не так важно сколько цыфр после запятой.. я просто паскаль вообще не учил...
     
  5. AlexanderClubLife

    AlexanderClubLife Гость

    аааа! ну из того, что я знаю в Пасале - то всю эту прогу перевести не смогу! Могу кусочками написать!
    Просто в паскале real может быть double, float в Си
     
  6. ierofant

    ierofant Гость

    Попроси кого-нибудь из Pascal Team объяснить, что программа делает. А мы потом напишем её на С++.
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Этой ф-ции нет, похоже (что-то стандартного такого в паскале не припомню...):
    А тут, скорее всего READLN - считывание переменных, т.е. cin >>
     
  8. ierofant

    ierofant Гость

    OKEN ,
    TAB судя по всему процедура, такая же как CS и SPP, описание которой нам не потрудились предоставить.

    quickdeath ,
    Ты, наверно, первую строчку в программе забыл.
    PROCEDURE TAB(....
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    наверно, как-то так в паскале, где Y:Funct (мб, Var и не надо) - функциональный тип
    function(x:real):real;
    Думаю, вместо real в с++ можно double поюзать.
    Код (Delphi):
    PROCEDURE TAB(N:INTEGER; A,H:REAL; Var Y:Funct; VAR X,F:VEC);
    VAR I:INTEGER; BEGIN FOR I:=0 TO N DO BEGIN X[I]:=A+I*H; F[I]:=Y(X[I]) END END;
    основная программа зациклена - ввод параметров и вычисления:
    Код (Delphi):
    BEGIN REPEAT WRITE('N,A,B?'); REALN(N,A,B);; H:=(B-A)/N; TAB(N,A,H,Y,X,F); CS(H,X,F,C); SSP(N,H,F,C,S); WRITELN('S=',S) UNTIL FALSE END.
    какие-то вычисления =) TAB - табулирование, т.е. вычисляет ф-цию Y(X) на интервале A,B, разбитом на N отрезков с шагом H.
    A,B, и N вводятся в основной программе, вычисляется шаг H, вызывается TAB, а потом считаются в CS массивы каких-то коэффициентов, и в SPP - какая-то S, которая и выводится на экран.
     
  10. ierofant

    ierofant Гость

    quickdeath , ты что поиздеваться решил :) ?? Что это за псевдо-вычисления?

    Я перевёл код на C++, не стал на отдельные функции разносить, и так меня эти непонятные вычисления достали

    Код (C++):
    #include <iostream>

    typedef double (*Func)(double); // это тип для Y в твоей проге

    int main ()
    {
    int n;
    double a, b;
    std::cout << "Введите n", std::cin >> n;
    std::cout << "Введите a", std::cin >> a;
    std::cout << "Введите b", std::cin >> b;

    double h = (a - b) / 2, x [n], f [n];

    Func func = &y;  // функция Y; в твоей проге она тоже неизвестно откуда берётся, вот и у меня также

    for (int i = 0; i < n; i++)
    {
    x [i] = a + i * h;
    f [i] = (*func) (x [i]);
    }

    double k [n], c [n];
    k [0] = 0;
    c [0] = 0;

    for (int i = 1; i < n; i++)
    {
    a = x [i] - x [i - 1];
    b = x [i - 1] - x [i - 2];

    double r = 2 * (a + b) - b * c [i - 1];
    c [i] = a / r;
    k [i] = (3 * ((f [i] - f [i - 1]) / a - (f [i - 1] - f [i - 2]) - b * k [i- 1] / r //это строка у тебя незакрыта
    }
    c [n - 1] = k [n - 1];
    for (int i = n - 2; i > 1; i--) c [i] = k [i] - c [i] * c [i + 1];

    double s = (f [0] + f [n - 1]) / 2, r = 0;
    for (int i = 0; i < n - 1; i++)
    {
    s = s + f [i];
    r = r + c [i + 1];
    }
    s = (s - r * h * h / 6) * h  // эта строка у тебя так же незакрыта

    std::cout << "S = "<< s << std::endl;

    return 0;
    }
     
  11. quickdeath

    quickdeath Гость

    спасибо, за росписаный код, дальше я думаю сам запишу, мне главное было понять, что делают функции...
    ВСЕМ ОГРОМНОЕ СПАСИБО
     
  12. quickdeath

    quickdeath Гость

    Извените пожалуйста.. я не весь текст программы загрузил, посмотрите если не сложно отредактированый текст......
     
  13. ierofant

    ierofant Гость

    Посмотрел, глаза бы мои его не видели... :)
    Там где у меня строка:
    Код (C++):
    Func func = &y;
    Измени на:
    Код (C++):
    Func func = &std::sin;
    И не забудь сделать:
    Код (C++):
    #include <cmath>
     
  14. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    А тут так и не поправили - 4 скобки открыли, 3 закрыли =)
     
  15. quickdeath

    quickdeath Гость

    K:=(3.0*((F-F[J])/A-(F[J]-F[M])/B)-B*K[J])/R
     
  16. ierofant

    ierofant Гость

    Лучше-то не стало. Где закрывающая скобка, для самой первой скобочки?

    Добавлено: Виноват, теперь заметил. Как же она спряталась...
     
Загрузка...
Похожие Темы - Помогите пожалуйста програму
  1. limbra
    Ответов:
    3
    Просмотров:
    68
  2. uxbmw3w
    Ответов:
    0
    Просмотров:
    89
  3. GREED
    Ответов:
    1
    Просмотров:
    545
  4. Рая
    Ответов:
    3
    Просмотров:
    791
  5. sonia2000
    Ответов:
    0
    Просмотров:
    965

Поделиться этой страницей