Ciclo for e assegnazione valori

di il
13 risposte

Ciclo for e assegnazione valori

Salve a tutti, riscrivo qui perchè più di una volta, anche per domande relativamente stupide da parte mia, mi avete sempre aiutato molto.
Questa apperentemente semplice funzione dovrebbe assegnare dei valori a un array bidimensionale. Il coefficiente per me importante è a_p perchè in una funzione che scriverò dopo sarà usato come denominatore, per cui è importante sia diverso da zero. Per verificare che valori mi assegna il codice ho posto a quel coefficente dei valori fissi ma per i=0 da j=1 tale valore risulta zero. Perchè?
Grazie mille
il codice è qui di seguito e può essere tranquillamente compilato
#include <stdio.h>
#include <math.h>
#include  <fstream>
#include <iostream>
using namespace std;
 double dt=1, delta=0.1, T_s=5;
 double T_i=8,x_1=0.5,y_1=0.4,y_2=0.7,x_3=1.1,y_3=0.8;
double rho_1=1500,cp_1=775,k_1=170,rho_2=1600,cp_2=770,k_2=140,rho_3=1900,cp_3=810,k_3=200,rho_4=2500,cp_4=930,k_4=140;
 double T_iso=23, Q=60, T_g=33, h_g=9;
const int Ny=80, Nx=110, Nt=10000;
const int Nx_1=50, Ny_1=40, Nx_2=60, Ny_2=70;
const double dx=x_3/(Nx-1), dy=y_3/(Ny-1);


void Coefficients (double k[Nx][Ny], double k_e[Nx][Ny],double k_w[Nx][Ny],double k_n[Nx][Ny],double k_s[Nx][Ny],
				  double rho[Nx][Ny],double cp[Nx][Ny],double est[Nx][Ny],double west[Nx][Ny],double north[Nx][Ny],
				  double south[Nx][Ny], double inf_vol[Nx][Ny], double a_e[Nx][Ny],double a_w[Nx][Ny],double a_n[Nx][Ny],double a_s[Nx][Ny],double b[Nx][Ny],double a_p[Nx][Ny],
				  double T_ant[200][200],double Tvar)
                  {
	
	double Q_unif;
	///internal nodes
    for (int i=1;i<Nx-1;i++){   
							for (int j=1;j<Ny-1;j++){												
													a_e[i][j]=est[i][j]*k_e[i][j]/dx;
													a_w[i][j]=west[i][j]*k_w[i][j]/dx;
													a_n[i][j]=north[i][j]*k_n[i][j]/dy;
													a_s[i][j]=south[i][j]*k_s[i][j]/dy;
													a_p[i][j]=5.;
													b[i][j]=24.;
                                                   							
							                    }
                          }
                int p; int z;      
   for ( z=0;z<Nx;z++){         //bottom
                            a_p[z][0]=73;
							a_e[z][0]=0;
							a_w[z][0]=0;
							a_n[z][0]=0;
							a_s[z][0]=0;
						                           
							b[z][0]=28;
                            
                            
	                  }
                      
	for (int j=1;j<Ny;j++){         //left
							
							a_e[0][j]=0.;
							a_w[0][j]=0.;
							a_n[0][j]=0.;
							a_s[0][j]=0.;
							a_p[0][j]=8.;
							b[0][j]=28.;
                    	}
	
	
	for (int j=1;j<Ny;j++){			//right
							a_e[Nx][j]=0.;
							a_w[Nx][j]=0.;
							a_n[Nx][j]=0.;
							a_s[Nx][j]=0.;
							a_p[Nx][j]=1.;
							b[Nx][j]=25.;
                    	}
	
	for (int i=1;i<Nx-1;i++){         //top
						
							a_e[i][Ny]=0.;
							a_w[i][Ny]=0.;
							a_n[i][Ny]=0.;
							a_s[i][Ny]=0.;
							a_p[i][Ny]=1.;
							b[i][Ny]=25.;
                            
							
										}
                                        
										
	for (int i=0;i<5;i++){
                        for (int j=0;j<5;j++){
                    			    
                    			
                                           // cout<<"valore di i "<<i<<" "<<endl;
                                          //  cout<<"valore di j "<<j<<" "<<endl;
 	                       				cout<<"ae:"<<a_e[i][j]<<" aw:"<<a_w[i][j]<<" an:"<<a_n[i][j]<<" as:"<<a_s[i][j]<<" ap:"<<a_p[i][j]<<" b:"<<b[i][j]<<endl;
 	                                   	}
	                   }
	
}

int main()
{
    double k[Nx][Ny],k_e[Nx][Ny],k_w[Nx][Ny],k_n[Nx][Ny],k_s[Nx][Ny],rho[Nx][Ny],cp[Nx][Ny];
	double x[Nx][Ny],y[Nx][Ny],inf_vol[Nx][Ny],est[Nx][Ny],west[Nx][Ny],north[Nx][Ny],south[Nx][Ny];
	double a_e[Nx][Ny],a_w[Nx][Ny],a_n[Nx][Ny],a_s[Nx][Ny],a_p[Nx][Ny],b[Nx][Ny];
	double T[Nx][Ny],T_cal[Nx][Ny],T_ant[200][200];
	double Tvar, t;
	int i,j;
	int l;
	
	for(l=0;l<5;l++)
	{
	Coefficients(k,k_e,k_w,k_n,k_s,rho,cp,est,west,north,south,inf_vol,a_e,a_w,a_n,a_s,b,a_p,T_ant,Tvar);
}

getchar();
getchar();
return 0;
}

13 Risposte

  • Re: Ciclo for e assegnazione valori

    Hai troppi dati nello stack.

    Sposta gli array prima del main
    
    double k[Nx][Ny],k_e[Nx][Ny],k_w[Nx][Ny],k_n[Nx][Ny],k_s[Nx][Ny],rho[Nx][Ny],cp[Nx][Ny];
    double x[Nx][Ny],y[Nx][Ny],inf_vol[Nx][Ny],est[Nx][Ny],west[Nx][Ny],north[Nx][Ny],south[Nx][Ny];
    double a_e[Nx][Ny],a_w[Nx][Ny],a_n[Nx][Ny],a_s[Nx][Ny],a_p[Nx][Ny],b[Nx][Ny];
    double T[Nx][Ny],T_cal[Nx][Ny],T_ant[200][200];
    
    int main()
    {
    
    oppure li allochi dinamicamente.
  • Re: Ciclo for e assegnazione valori

    Identica storia: dopo il primo valore di ap diverso da zero ne ho 4 nulli, e non capisco perchè
  • Re: Ciclo for e assegnazione valori

    NON devi usare Nx e Ny come indici perché non esistono. Al loro posto devi usare Nx-1 e Ny-1
  • Re: Ciclo for e assegnazione valori

    Si, scusate. Il codice serve per assegnarmi dei valori a ogni elemento dell'array. L'array a_p[j] è importante che sia sempre diverso da zero poichè mi serve poi come denominatore di una frazione. nei cicli for scritti ho assegnato sempre dei valori costanti interi, tuttavia quando eseguo il cout e visualizzo i valori ottengo che per i=0 a j=1,2,3,4 i valori di tale coefficiente è 0. In realtà l'altra cosa strana è che in corrispondenza degli stessi valori di i e j il coefficiente b è 1, anch'esso valore errato che però corrisponde al valore assegnato a a_p. Spero di essere stata non troppo confusionaria. Grazie mille
  • Re: Ciclo for e assegnazione valori

    Vedi risposta precedente aggiornata ...

    Comunque occhio perché gli indici delle matrici in C vanno da 0 a n-1 e non da 1 a n
  • Re: Ciclo for e assegnazione valori

    Si ho avuto qualche problema con gli indici in precedenza perchè devo assegnare valori diversi ai punti interni e a ogni lato del perimetro del mio spazio diviso lungo x Nx volte e lungo y Ny volte però la versione del programma scritta mi sembra corretta a livello di indici, dovrei scrivere ogni valore senza sovrascrivere altri e senza tralasciare nessun punto
  • Re: Ciclo for e assegnazione valori

    NO, non è corretta. Non puoi usare gli indici Nx e Ny ... non sono stato chiaro?
  • Re: Ciclo for e assegnazione valori

    Ok scusa, grazie
  • Re: Ciclo for e assegnazione valori

    Prego, ma hai risolto? Hai corretto ?
  • Re: Ciclo for e assegnazione valori

    Ora è diverso da zero, continuo ad avere problemi con il codice completo ma sarà in altre funzioni. Grazie dell'aiuto e mi spiace non aver capito subito che dovevo fare, anche se sarò tonta ma non capisco perchè Nx o Ny non esistono. Grazie ancora
  • Re: Ciclo for e assegnazione valori

    No, forse mi sono spiegato male io, pensavo che per te fosse chiaro che un array del tipo

    x[n][m]

    mette a disposizione gli elementi

    x[0][0] ... x[n-1][m-1]

    quindi non potrai mai scrivere

    x[n][..] = ...

    oppure

    x[..][m] = ...

    a meno di non "sporcare" i dati nell'array (nel migliore dei casi)
  • Re: Ciclo for e assegnazione valori

    Si, sicuramente hai ragione tu anche perchè così il codice non fa i "capricci"....solo pensavo che se il mio for va da i=0 fino a i<Nx era come dire da a[0] ad a [Nx-1]
  • Re: Ciclo for e assegnazione valori

    Ed è esatto, solo che tu in un ciclo for utilizzi l'indice Nx e Ny
Devi accedere o registrarti per scrivere nel forum
13 risposte