Funkcja z parametrem tablicy oraz wypisanie z funkcji innej tablicy do main

0

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;
}

2
infinitix napisał(a):

Z tego co wiem to te zmienne nie są widoczne na zewnątrz funkcji.
to chyba zle wiesz, bo wyglada na to ze sa widoczne.
slyszales o tym ze programisci licza od zera? tutaj sobie sprytnie wychodzisz poza zakres:

double dy[2];

dy[2] = (r4yy[4] - r2yy[2]) / l2;

pracujesz jako analityk finansowy moze? kod na to ewidentnie wskazuje, wspolczuje czytelnikom ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1