Witam,
Chciałbym aby moja funkcja 'dydt(t, y, dy);' uruchamiana z tymi parametrami obliczała moje u1 oraz tablicę dy[]. A następnie, aby zmienna u1 i zapełniona liczbami tablica dy[] była widoczna na zewnątrz funkcji, gdzie na podstawie tych zmiennych wykonywane są obliczenia.
Z tego co wiem to te zmienne nie są widoczne na zewnątrz funkcji.
Z góry dziękuję za pomoc.
// zadanie_09.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "conio.h"
#include "fstream"
#include "iostream"
#include "math.h"
#include "iomanip"
#include "stdio.h"
#include "cmath"
using namespace std;
//Zmiennne
double k1[3], k2[3], k3[3];
double y[4] = { 0.0,0.0,0.0,0.0 }; // c1=y[0] c2=y[1] i2=y[2] i3=y[3] i4=y[4]
double dy[2]; // dy[0]=dc1, dy[1]=dc2, dy[2]=di2
double u1;
double yo[3] = { 0,0,0 };
int petla = 0;
//Stałe
double g = 314.159265359;
double n1 = 0.00022;
double n2 = 0.00017;
double l2 = 3.3;
int r1= 84;
int r2 = 35;
int r3 = 16;
int r4 = 69;
double r13 = r4*(r1 + r3) / r3 + r1;
double b = (r1 + r3) / r3; //zmienna b w y[4]
double t0 = 0;
double t = 0.0;
double h = 0.02 / 400;
//Funkcja GOTOWA
double dydt(double tt, double yy[], double dy[])
{
u1 = 300 * sin(g*tt);
dy[0] = (yy[2] +yy[3] + yy[4]) / yy[0]; //dc1
dy[1] = (yy[2] + yy[4]) / yy[1]; //dc2
dy[2] = (r4*yy[4] - r2*yy[2]) / l2; //di2
return dy[2];
}
int main()
{
do
{
//----------------------------------------------------
//k1
t = t0;
petla++;
dydt(t, y, dy);
//gdzie to umiescic?
y[3] = (u1 + r4*y[4]) / r3; //i3 u1=uc2
//cout << "u1= " << dy[1] << endl;
y[4] = (u1 - r1*y[2] - u1 - b*u1) / r13; //i4 u1=uc1 / uc2
for (int i = 0; i < 3; i++)
{
k1[i] = h*dy[i];
//cout << k1 << endl;
}
dydt(t, y ,dy);
//----------------------------------------------------
//k2
t = t0 + h / 3;
for (int i = 0; i < 3; i++)
{
y[i] = yo[i] + k1[i] / 3;
}
dydt(t, y, dy);
for (int i = 0; i < 3; i++)
{
k2[i] = h*dy[i];
}
//----------------------------------------------------
//k3
t = t0 + 2 * h / 3; //???? t
for (int i = 0; i < 3; i++)
{
y[i] = yo[i] + 2 * k2[i] / 3;
}
dydt(t, y, dy);
//----------------------------------------------------
//----------------------------------------------------
//Obliczanie y[i]
for (int i= 0; i < 3; i++)
{
y[i] = yo[i] + (k1[i] + 3 * k3[i]) / 4;
}
//Wypisanie co 10
if(petla % 10 == 0)
{
cout << t0 << "\t";
for (int i = 0; i < 3; i++)
{
cout << y[i] << "\t";
}
cout << endl;
}
//Przypianie y[i] do y0[i]
for (int i = 0; i < 3; i++)
{
yo[i] = y[i];
}
t0 += h;
} while (t0 < 0.2);
cout << "KONIEC" << endl;
_getch();
return 0;
}