Oppure

Loading
07/01/07 10:50
gismo
Salve a tutti..
ho un problema nel compilare un mio piccolo programma che esegue la simulazione di un circuito RLC..ma nn è questo il problema..
sta di fatto che i risultati della compilazione devo essere scritti nn solo a video ma bensì anche su un file di testo..con la funzione ofstream..
purtroppo quando vado a compilare (con Visual Studio) sono innumerevoli gli errori sintattici che mi si presentano..
vi prego aiutatemi..ho uno spasmotico bisogno di questo programma funzionante, per motivi scolastici..
vi lascio il sorgenti documentato il più possibile

/*Questo è un programma che dati in input dei valori
sviluppi una simulazione del Modello di un circuito RLC.
I risulatati della simulazione, dipendenti da una costante di tempo,
devono essere stampati a video e contemporaneamente devono essere memorizzati
su un file di testo specifico predefinito.
I valori di output da visualizzare sono quelli specificati nel testo dell'esercizio*/

#include <fstream.h>
#include <iostream.h>
#include <math.h>
#include <stdio.h>
#include <stdafx.h>
using namespace std;


int main()
{
    //dichiarazione varibili
double Vc=0, dVc=0.0005, I=0, dI=0.005, C=0.0005;
    int t=0, VI=10, R=0, L=0, Vin=0;
    {//inizio della ofstream
        ofstream out("file.txt",ios::app); //giochino del file, ios::app serve per mantenere il file aperto e continuare a scriverci sopra
            if (!out); //if di finezza (chiamala finezza!!)
         {    cout<<"Il file in scrittura non e aperto"<<endl;
            return -1;
         }
         {//inizio richiesta dati input
    
                    cout<<"Inserisci il valore della Vin.. "<<endl;
                    cin>> Vin;
                    cout<<"Inserisci il valore della R.. "<<endl;
                    cin>> Vin;
                    cout<<"Inserisci il valore della L.. "<<endl;
                    cin>> Vin;
                    //cout<<"Inserisci il valore della C.. "<<endl; //Qui non so se deve essere costante o no
                    //cin>> C;
                    }
    
     cout<<"Tempo\t Vin\t Vc\t Ic\t"<<endl; //devono essere scritti una volta sola
     out<<"Tempo\t Vin\t Vc\t Ic\t"<<endl;
     for (t=0; t<=31; t++){ //per far vedere il progresso dei risultati delle espressioni ad ogni incremento della t (costante di tempo)
                             //poichè ogni risultato in output deve essere scritto e incolonnato una volta nel file e allo stesso modo a video
         Vc+=dVc;             //inizio delle espressioni
         I+=dI;
     dVc=(1/C)*I*t;
     VI=L*dI/t;
     dI=Vin-(R*I)-(Vc/L*t);
    

    printf(t"\t"Vin"\t"Vc"\t"I"\t\n";); //inserimento e tabulazione dati a schermo
    out<<t"\t"Vin"\t"Vc"\t"I"\t"<<endl; //inserimento e tabulazione dati sul file
    out.close();}
}
    printf("================================================";);
    return 0; //questo return nn so se va bene, ma nn è qui il problema..
}


accetto ogni tipo di critica o correzione
grazie mille

gismo
gismo@email.it:k:
aaa
07/01/07 13:57
netarrow
#include <fstream.h> 
#include <iostream.h> 
#include <math.h> 
#include <stdio.h> 
#include <stdafx.h> 
using namespace std; 



il namespace std lo devi usare coi nuovi header del C++, basta molto semplicemente seguire questa regola:

Gli header SOLO del C++ (tipo iostream.h) vanno senza estensione, e gli header che erano originari del C (stdio.h) vanno anch'essi senza estensione e con una c in testa, quindi cstdio

quindi fai così:

#include <fstream>
#include <iostream>
#include <cmath>
#include <cstdio>
// #include <stdafx.h> questo lo mette VS
// ma non mi pare di serva, spesso mi dava
// errori usarlo, infatti lo toglievo sempre
using namespace std;

cmq lo proverò per vedere se c'è magari altro
aaa
07/01/07 14:55
netarrow
Ho trovato altri errori, alcuni non di sintassi, e che quindi facevano compilare ma dopo davano errori gravi a run-time, ad esempio il ; dopo l'if faceva sempre andare in errore il controllo sull'avvenuta apertura del file, cmq così mi compila e mi formatta il tutto, PERO', c'è un però, mi da un NaN sulle variabili vc ed lc, Nan starebbe per Not a number, insomma un errore di calcolo; però non conoscendo il problema che devi risolvere non saprei come sistemare, ho provato un pò a cambiare tipi di dato ma cmq resta nan(per intenderci, divisione per 0, radice di un numero negativo ecc...)

edit:
No niente, ho trovato, quando leggi le variabili leggi solo Vin quindi restano a 0 alcune inoltre la variabile t nel ciclo parte da 0, e poi dividi con quella, così va:

#include <fstream> 
#include <iostream> 
#include <cmath>  
#include <iomanip>
 
using namespace std; 
 
 
int main() 
{ 
 //dichiarazione varibili 
 double Vc=0, dVc=0.0005, I=0, dI=0.005, C=0.0005; 
 int VI=10, R=0, L=0, Vin=0; 
 
 ofstream out("file.txt", ios::app);  
 if ( !out ) { 
cout<<"Il file non esiste"<< endl;
 return -1; 
 } 
 {//inizio richiesta dati input 
 
 cout<<"Inserisci il valore della Vin.. "<<endl; 
 cin>> Vin; 
 cout<<"Inserisci il valore della R.. "<<endl; 
 cin>> R; 
 cout<<"Inserisci il valore della L.. "<<endl; 
 cin>> L; 
 //cout<<"Inserisci il valore della C.. "<<endl; //Qui non so se deve essere costante o no 
 //cin>> C; 
 } 

 cout << setw(2) << "Tempo" << setw(8) << "Vin" << setw(15) << "Vc" << setw(15) << "lc" << endl;
 out << setw(2) << "Tempo" << setw(8) << "Vin" << setw(15) << "Vc" << setw(15) << "lc" << endl; 
 for (int t=1; t<=31; t++) { //per far vedere il progresso dei risultati delle espressioni ad ogni incremento della t (costante di tempo) 
 //poichè ogni risultato in output deve essere scritto e incolonnato una volta nel file e allo stesso modo a video 
 Vc+=dVc; //inizio delle espressioni 
 I+=dI; 
 dVc=(1.0/C)*I*t; 
 VI= (int) (L*dI/t); 
 dI=Vin-(R*I)-(Vc/L*t);  

 cout << setw(3) << t << setw(10) << right << Vin << setw(15) << right << Vc << setw(15) << I << endl; //inserimento e tabulazione dati a schermo 
 out << setw(3) << t << setw(10) << right << Vin << setw(15) << right << Vc << setw(15) << I << endl; 
 }
  
 printf("============================================================\n");
 out << "============================================================" << endl;
 out.close(); 
 return 0; //questo return nn so se va bene, ma nn è qui il problema.. 
}  

Ultima modifica effettuata da netarrow 07/01/07 15:32
aaa
07/01/07 15:37
netarrow
Questo è un esempio di output con questi dati:
23, 45, 67

N.B il forum non rispetta la formattazione, nella console e nel file verrà tutto incolonnato tranquillo,

Tempo     Vin             Vc             lc
  1        23         0.0005          0.005
  2        23        10.0005          22.78
  3        23          91130       -979.618
  4        23   -5.78658e+06        39045.8
  5        23    3.06579e+08   -1.37252e+06
  6        23   -1.34186e+10     3.7512e+07
  7        23    4.36725e+11   -4.48856e+08
  8        23   -5.84726e+12   -2.58783e+10
  9        23     -4.199e+14    1.83683e+12
 10        23     3.2643e+16   -2.44159e+13
 11        23   -4.55674e+17   -3.79779e+15
 12        23    -8.4007e+19    2.41915e+17
 13        23    5.72195e+21    4.40178e+18
 14        23    1.20168e+23   -1.30391e+21
 15        23   -3.63892e+25    3.22621e+22
 16        23    9.31475e+26    6.72731e+24
 17        23    2.16205e+29   -5.18443e+26
 18        23   -1.74109e+31   -3.20466e+28
 19        23   -1.17109e+33    6.08759e+30
 20        23    2.30157e+35    6.42451e+31
 21        23    2.79996e+36   -7.15305e+34
 22        23   -3.00148e+39    2.26974e+36
 23        23    9.68672e+40    8.85692e+38
 24        23    4.08387e+43   -7.22234e+40
 25        23   -3.42588e+45    -1.1451e+43
 26        23   -5.75974e+47    1.78216e+45
 27        23    9.20962e+49    1.45097e+47
 28        23    7.92736e+51   -4.34977e+49
 29        23   -2.42794e+54   -1.39903e+51
 30        23   -8.35715e+55    1.11246e+54
 31        23    6.66639e+58   -1.15281e+55

con

1, 2, 3

Tempo     Vin             Vc             lc
  1         1         0.0005          0.005
  2         1        10.0005       0.994833
  3         1        3989.33       -6.66183
  4         1       -35981.7       -3981.67
  5         1   -3.18894e+07        51958.2
  6         1    4.87693e+08     5.3097e+07
  7         1    6.37651e+11   -1.02848e+09
  8         1   -1.37611e+13   -1.48682e+12
  9         1    -2.3803e+16    3.81831e+13
 10         1    6.63493e+17    7.13707e+16
 11         1    1.42808e+21   -2.28301e+18
 12         1   -4.87982e+22     -5.234e+21
 13         1   -1.25665e+26    2.00427e+23
 14         1    5.08544e+27    5.44347e+26
 15         1    1.52468e+31   -2.42764e+28
 16         1   -7.13045e+32   -7.62097e+31
 17         1   -2.43942e+36    3.87911e+33
 18         1     1.2945e+38    1.38195e+37
 19         1    4.97632e+41   -7.90522e+38
 20         1   -2.95422e+43   -3.15088e+42
 21         1   -1.26065e+47    2.00099e+44
 22         1    8.27809e+48    8.82254e+47
 23         1    3.88274e+52   -6.15883e+49
 24         1   -2.79423e+54   -2.97615e+53
 25         1   -1.42883e+58    2.26515e+55
 26         1    1.11829e+60    1.19047e+59
 27         1    6.19155e+63   -9.81085e+60
 28         1   -5.23595e+65   -5.57142e+64
 29         1   -3.12052e+69     4.9426e+66
 30         1     2.8355e+71      3.016e+70
 31         1    1.80989e+75   -2.86566e+72


nel file verranno mano a mano inserite tutte le iterazioni fatte dalle varie esecuzioni del programma, separate da un
============================


Ora non so dirti se l'elaborazione è giusta, ma almeno è formattato(ripeto, nel periodo in cui sto scrivendo il forum non fa testo!), e sei stato fortunato che stavo facendo per conto mio la formattazione degli stream e i file in C++, così ho fatto per benino tutto :rotfl: ;)
Ultima modifica effettuata da netarrow 07/01/07 15:41
aaa
07/01/07 17:18
gismo
nn so davvero come ringraziarti..
ho solo un'ultima domanda da farti..
perchè ogni volta che compilo mi da questa dicitura..
c:\programmi\microsoft visual studio\myprojects\rlc buono\rlc.cpp(50) : fatal error C1010: unexpected end of file while looking for precompiled header directive
il bello è che la riga 50 nn esiste..

fammi sapere appena puoi..
grazie mille
aaa
07/01/07 19:27
netarrow
prova a rimettere StdAfx.h, sennò compila con un compilatore che rispetta lo standard ANSI/ISO come il gcc(devcpp su windows), sennò prova solo a creare un file .cpp e a buttarci dentro il codice, senza creare un progetto.

sennò nell'msdn danno questa soluzione:
msdn2.microsoft.com/en-us/library/…

io cmq ho compilato con gcc 3.4.6
Ultima modifica effettuata da netarrow 07/01/07 19:30
aaa