Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Program liczący układy równań różniczkowych - problemy

#1
[C++] Program liczący układy równań różniczkowych - problemy
Witam, mam do napisania na zajęcia program liczący równania różniczkowe metodą numeryczną. I mam problemy, najpewniej związane z tym że przez 4-5 miesiący nie miałem zbytniej styczności z C++. Naskrobałem program z podziałem na funkcje lecz wyskakiwały mi błędy z którymi nie jestem w stanie dojśc o co chodzi? Więc wywaliłem cały program do maina i się skompilował, ale nie się wykrzacza w środku wpisywania danych. Nie wiem co można z tym zrobić??? Używam Code:Blocksa

wersja z podziałem na funkcje :
Kod:
#include <iostream>

using namespace std;

struct SSystem {
                    int n;
                    int m;
                    double **kx;
                    double **ku;
};
struct SParems {
                int steps;
                double Tp;
};


void wpisz_wsp(SSystem rownanie)
{// wpisuje wspó³czynniki
    cout << "podaj liczbê równañ, a potem liczbê wymuszeñ" << endl;
    cin >> rownanie.n >> rownanie.m;
    cout<<"podaj wspó³czynniki przy x" << endl;
    for (int i=0; i < rownanie.n; i++)
    {
        for (int j=0; j < rownanie.n; j++)
            cin >> rownanie.kx[i][j];
    }
    cout<<"podaj wspó³czynniki przy u" << endl;
    for (int i=0; i < rownanie.n; i++)
    {
        for (int j=0; j < rownanie.m; j++)
        cin >> rownanie.ku[i][j];
    }
}


void wpisz_wym(double **u, SSystem rownanie, SParems rownanie1)
{
    cout << "podaj wartoœci wymuszeñ w konkretnych krokach" << endl;
    for (int i=0; i < rownanie1.steps; i++)
    {
        for (int j = 0; j < rownanie.m; j++)
            cin >> u[i][j];
    }
}

double calc (SSystem rownanie, SParems rownanie1)
{

    double *dx = new double[rownanie.n];
    double *x = new double[rownanie.n];

    for (int i=0; i<rownanie.n; i++)
        x[i] = 0; // warunek poczatkowy t=0 -> x=0
    double **u = new double *[rownanie1.steps];
    for (int i = 0 ; i < rownanie1.steps ; i++)
        u[i]=new double [rownanie.m];

    for (int k=0;k<rownanie1.steps;k++){
        for (int i=0;i<rownanie.n;i++)
        {
            for (int j=0;j<rownanie.n;j++)
            {
                dx[i]+=rownanie.kx[i][j]*x[rownanie.n-1-j];
            }
            for (int l=0;l<rownanie.m;l++){
                dx[i]+=rownanie.ku[i][l]*u[k][rownanie.m-1-l];}
            x[i]+=dx[i]*rownanie1.Tp;
            cout << x[i] << " ";
        }
        cout<<"/n";
    }
};

int main()
{
//SSystem rownanie;
SSystem rownanie_wspolczynniki;
SParems rownanie_krok_calkowania;
wpisz_wsp(rownanie_wspolczynniki);
cout << "Podaj krok calkowania: " << endl;
cin >> rownanie_krok_calkowania.steps;
rownanie_krok_calkowania.Tp = 10/rownanie_krok_calkowania.steps;
wpisz_wym(double **u, rownanie_wspolczynniki, rownanie_krok_calkowania);
double calc ( rownanie_wspolczynniki,  rownanie_krok_calkowania);
return 0;
}



i wywala takie błędy:
C:\Users\User\Desktop\C++\mojegazdy.cpp||In function 'int main()'Ysz
C:\Users\User\Desktop\C++\mojegazdy.cpp|83|error: expected primary-expression before 'double'|
C:\Users\User\Desktop\C++\mojegazdy.cpp|84|error: initializer expression list treated as compound expression|
C:\Users\User\Desktop\C++\mojegazdy.cpp|84|error: cannot convert 'SParems' to 'double' in initialization|
||=== Build finished: 3 errors, 0 warnings ===|




a teraz wszytko w mainie :
Kod:
#include <iostream>

struct SSystem {
                    int n;
                    int m;
                    double **kx;
                    double **ku;};

struct SParems {
                int steps;
                double Tp;

};

int main()
{

SSystem rownanie_wspolczynniki;

SParems rownanie_krok_calkowania;

std::cout<<"podaj liczbe rownan, a potem liczbe wymuszen"<<std::endl;
std::cin>>rownanie_wspolczynniki.n>>rownanie_wspolczynniki.m;

double **kx=new double *[rownanie_wspolczynniki.n];
for (int i=0;i<rownanie_wspolczynniki.n;i++)
kx[i]=new double [rownanie_wspolczynniki.n];

double **ku=new double *[rownanie_wspolczynniki.n];
for (int i=0;i<rownanie_wspolczynniki.n;i++)
ku[i]=new double [rownanie_wspolczynniki.m];


std::cout<<"podaj wspolczynniki przy x"<<std::endl;
for (int i=0;i<rownanie_wspolczynniki.n;i++){
    for (int j=0;j<rownanie_wspolczynniki.n;j++)
    std::cin>>rownanie_wspolczynniki.kx[i][j];
   std::cout<<"mamo ratuj"<<std::endl;
}
std::cout<<"podaj wspolczynniki przy u"<<std::endl;
for (int i=0;i<rownanie_wspolczynniki.n;i++){
    for (int j=0;j<rownanie_wspolczynniki.m;j++)
    std::cin>>rownanie_wspolczynniki.ku[i][j];
}

    std::cin>> rownanie_krok_calkowania.steps;

     rownanie_krok_calkowania.Tp=10/ rownanie_krok_calkowania.steps;

double **u=new double *[rownanie_krok_calkowania.steps];
for (int i=0;i<rownanie_krok_calkowania.steps;i++)
u[i]=new double [rownanie_wspolczynniki.m];

std::cout<<"podaj wartosci wymuszeń w konkretnych krokach"<<std::endl;
for (int i=0;i<rownanie_krok_calkowania.steps;i++){
    for (int j=0;j<rownanie_wspolczynniki.m;j++)
    std::cin>>u[i][j];}

double *x= new double[rownanie_wspolczynniki.n];

for (int i=0;i<rownanie_wspolczynniki.n;i++)
x[i]=0; // warunek pocz¹tkowy t=0 -> x=0

double *dx=new double[rownanie_wspolczynniki.n];


for (int k=0;k<rownanie_krok_calkowania.steps;k++){


                            for (int i=0;i<rownanie_wspolczynniki.n;i++){
                                                   for (int j=0;j<rownanie_wspolczynniki.n;j++){
                                                                            dx[i]+=rownanie_wspolczynniki.kx[i][j]*x[rownanie_wspolczynniki.n-1-j];}
                                                    for (int l=0;l<rownanie_wspolczynniki.m;l++){
                                                                            dx[i]+=rownanie_wspolczynniki.ku[i][l]*u[k][rownanie_wspolczynniki.m-1-l];}
                                                  x[i]+=dx[i]*rownanie_krok_calkowania.Tp;
                                                  std::cout<<x[i]<<" ";
                            }
                            std::cout<<"/n";
};

delete []x;
delete []dx;

for (int i=0;i<rownanie_krok_calkowania.steps;i++)
delete []u[i];
delete []u;

for (int i=0;i<rownanie_wspolczynniki.n;i++)
delete []kx[i];
delete []kx;

for (int i=0;i<rownanie_wspolczynniki.n;i++)
delete []ku[i];
delete []ku;
    return 0;
}


Z góry dziękuje za pomoc.
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: [C++] Program liczący układy równań różniczkowych - problemy
Witam,
1. w funkcji wpisz_wsp przekaż parametr rownanie przez referencję
Kod:
void wpisz_wsp(SSystem& rownanie)
{
...
}
2. w funkcji calc nie zwalniasz pamięci przydzielonej na tablicę
3. w main() krok całkowania zawsze będzie liczbą całkowitą (dzielenie dwóch liczb całkowitych), dlatego musisz zmienić na
Kod:
rownanie_krok_calkowania.Tp = 10.0/rownanie_krok_calkowania.steps;

4.
Kod:
wpisz_wym(double **u, rownanie_wspolczynniki, rownanie_krok_calkowania);
nie możesz w funkcji zadeklarować wskaźnika - powinieneś gdzieś wcześniej przydzielić pamięć na tablicę i wtedy przekazać do funkcji

5.
Kod:
double calc ( rownanie_wspolczynniki,  rownanie_krok_calkowania);
Tutaj należy usunąć słowo double

Trochę straszny bałagan w tym kodzie jest, więc to nie wszystkie błędy.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
c++ równania różniczkoweprogram+liczący+równania+różniczkowe+w+c++programy liczące w c++równania różniczkowe c++

Podobne wątki ([C++] Program liczący układy równań różniczkowych - problemy)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Program liczący liczby pierwsze Mersenne'a raistin 2 10344 12.03.2018, 12:51
Ostatni post: Szachista
  Program w C, problemy ze wskaźnikami. Dregorio 1 1901 22.04.2013, 14:05
Ostatni post: Szachista
  dev c++, program liczący okres drgań wahadła, problem z zakresem robi 3 2265 07.02.2013, 20:21
Ostatni post: Szachista

Skocz do:


Wybrane wątki ([C++] Program liczący układy równań różniczkowych - problemy)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 1016 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 3526 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 2243 06.11.2019 23:04
Ostatni post: mysza2323
  Programy w C ~Anonim 1 2671 22.10.2019 17:48
Ostatni post: Szachista
  Książki do nauki C# olek23 14 10437 17.10.2019 13:06
Ostatni post: Ajgor
  Wyświetlanie informacji z bazy danych na stronie www PitPlay 1 3729 16.09.2019 11:18
Ostatni post: Ajgor
  Błąd przy uruchamianiu programu w Java z wiersza poleceń Physicist 3 2563 30.08.2019 14:16
Ostatni post: Physicist
  Python z wiersza poleceń Physicist 15 12442 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 5621 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 4410 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 6154 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 5962 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 5920 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 7860 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 3527 28.04.2019 15:20
Ostatni post: sylwiaa1