Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Help


Автор: CsandeRR 12.4.2010, 20:48
Народ помоги пожалуйста... Ничего не понимаю.... вроде формула правильная взята из учебника... а пахать всёравно не хочет..... Р-К 2-го порядка это так же метод Хойна или Эйлера Коши... и ниодна из формул не работает(((( Может кто что подскажет, ато лабу скоро сдавать(( Ошибок не выдаёт.... всёремя выводит только начальные условия(
Код
#include "stdafx.h"

double y1,y2,h,Xmax,y1k,y2k,s;
double f1(double y1,double y2){
    return (-1000*y1+999*y2);
}
double f2(double y1,double y2){
    return (y1-2*y2);
}

int main()
{ 
    printf("The decision the ODE a method of Runge-Kutta\n");
    printf("Nam dano ODE 2-go pordka\n");
    printf("dy1/dx=-100y1+999y2\n");
    printf("dy2/dx=y1-2y2\n");
    printf("Vvedite Xmax\n");
    printf("Vvedite h\n");
    /*scanf_s("%f", &Xmax);*/
    scanf_s("%f %f",&Xmax, &h);
    y1k=10;
    y2k=20;
    for (double i=1; i<=10; i++) {

            /*y1=y1k+h*f1(y1k+(h/2)*f1(y1k,y2k),y2k+(h/2)*f2(y1k,y2k));*/
        y1=y1k+(h/2)*(f1(y1k,y2k)+f1(y1k+h*f1(y1k,y2k),y2k+h));

            y2=y2k+h*f2(y1k+(h/2)*f1(y1k,y2k),y2k+(h/2)*f2(y1k,y2k));

            s=i*h;
            y1k=y1;
            y2k=y2;
            printf("%f %f %f\n", s, y1, y2); 
    };

    _gettch();
return 0;
}



Модератор: не забываем пользоваться кнопочкой "Код"

Автор: EgorTheBlade 13.4.2010, 09:19
printf("dy1/dx=-100y1+999y2\n");
    printf("dy2/dx=y1-2y2\n") ети строки выводит? smile
P.s выравняйте код и почитайте литературу по с++ для новичкнов первые страниц 20 -станет легче.

Автор: CsandeRR 13.4.2010, 14:27
Не в этом дело.... Проблема уже решена... как показала практика сканф как то хренова считывает тип double... вводимые данные были поменены на float и всё заработало великолепноsmile

Автор: bsa 13.4.2010, 14:40
Цитата(CsandeRR @  13.4.2010,  14:27 Найти цитируемый пост)
как показала практика сканф как то хренова считывает тип double
нет. просто кто-то "хренова" читает документацию.
Цитата(man scanf)
       f      Matches  an  optionally  signed  floating-point number; the next
              pointer must be a pointer to float.
Цитата(man scanf)
       l      Indicates either that the conversion will be one of d, i, o,  u,
              x,  X,  or  n and the next pointer is a pointer to a long int or
              unsigned long int (rather than int), or that the conversion will
              be one of e, f, or g and the next pointer is a pointer to double
              (rather than float)
.  Specifying two l characters is  equivalent
              to L.  If used with %c or %s the corresponding parameter is con‐
              sidered as a pointer  to  a  wide  character  or  wide-character
              string respectively.



кстати, в твоем случае должен перестать корректно работать printf, так как его модификатор %f принимает именно double, а не float (зачем такое было сделано - х.з.).


M
bsa
CsandeRR, если ответ на вопрос получен, то пометь тему решенной

Автор: xvr 14.4.2010, 12:21
Цитата(bsa @  13.4.2010,  14:40 Найти цитируемый пост)
кстати, в твоем случае должен перестать корректно работать printf, так как его модификатор %f принимает именно double, а не float
Не перестанет, т.к. при передаче через ellipsis (через ...) float преобразуется в double


Автор: bsa 14.4.2010, 12:30
Цитата(xvr @  14.4.2010,  12:21 Найти цитируемый пост)
при передаче через ellipsis (через ...) float преобразуется в double
как говорится, век живи - век учись...

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