Forum » Programiranje » [C++] file I/O
[C++] file I/O
JohnnyB ::
Pozdravljeni
Za vajo moram narediti program, ki prebere števila (elipsoidne koordinate) iz vhodne datoteke, izračuna druga števila (kartezične koordinate) in rezultate zapiše zapiše v izhodno datoteko.
Nalogo znam sprogramirati kot razred, ki obdela (prebere, izračuna in zapiše) le en primer naloge. Problem se pojavi, ker je zahtevana možnost, da imamo v vhodni datoteki zaporedoma zapisane podatke za več primerov naloge.
Ali mi lahko nekdo pomaga napisati zanke, ki bi prebrale več primerov naloge, jih izračunale in zapisale zaporedoma v izhodno datoteko?
Main
Izvedba razreda
Hvala
Za vajo moram narediti program, ki prebere števila (elipsoidne koordinate) iz vhodne datoteke, izračuna druga števila (kartezične koordinate) in rezultate zapiše zapiše v izhodno datoteko.
Nalogo znam sprogramirati kot razred, ki obdela (prebere, izračuna in zapiše) le en primer naloge. Problem se pojavi, ker je zahtevana možnost, da imamo v vhodni datoteki zaporedoma zapisane podatke za več primerov naloge.
Ali mi lahko nekdo pomaga napisati zanke, ki bi prebrale več primerov naloge, jih izračunale in zapisale zaporedoma v izhodno datoteko?
Main
#include "pretvorbaPaketno.h" int main() { // Primer programiranih podatkov. int fi_st,fi_min; float fi_sek; int lambda_st,lambda_min; float lambda_sek; float h; ifstream vhod; // vhodna datoteka ofstream izhod; // izhodna datoteka char dat[32]; // Odpri datoteke. // cout << "PAKETNO:" << endl << endl; cout << "Vnesi ime vhodne datoteke:"; cin >> dat; vhod.open( dat ); cout << "Vnesi ime izhodne datoteke:"; cin >> dat; izhod.open( dat ); if( !vhod || !izhod) { // Če datotek ni, ali naprave ne delujejo. cout << endl << "Datotek ni!" << endl; char znak; cout << endl << "Pritisni poljubno tipko za konec programa..."; cin >> znak; return 1; } // Predmet demoPaketno predstavlja pretvorbaPogovorno nalogo, pri // kateri so podatki napisani v vhodni datoteki. pretvorbaPaketno demoPaketno; if(demoPaketno.preberiPodatke(vhod)) { demoPaketno.izpisiRezultat(izhod,3); } else { cout << endl << "Neuspesno branje iz datoteke!" << endl; } char znak; cout << endl << "Pritisni poljubno tipko za konec programa..."; cin >> znak; return 0; }
Izvedba razreda
#include "pretvorbaPaketno.h" pretvorbaPaketno::pretvorbaPaketno() { a=6377397.155; b=6356078.96281819; PI=3.141592654; } pretvorbaPaketno::pretvorbaPaketno(int nfi_st,int nfi_min,float nfi_sek,int nlambda_st,int nlambda_min,float nlambda_sek,float nh) { a=6377397.155; b=6356078.96281819; PI=3.141592654; fi_st=nfi_st; fi_min=nfi_min; fi_sek=nfi_sek; lambda_st=nlambda_st; lambda_min=nlambda_min; lambda_sek=nlambda_sek; h=nh; } bool pretvorbaPaketno::preberiPodatke(ifstream& vhod) { vhod >> fi_st >> fi_min >> fi_sek; if( !vhod ) return false; vhod >> lambda_st >> lambda_min >> lambda_sek; if( !vhod ) return false; vhod >> h; if( !vhod ) return false; return true; // Ob uspehu vrni true. } void pretvorbaPaketno::elipsoidneVkartezicne() { double e; double N; double fi,lambda; fi=(fi_st+fi_min/60.0+fi_sek/3600.0)*PI/180.0; lambda=(lambda_st+lambda_min/60.0+lambda_sek/3600.0)*PI/180.0; e=sqrt(a*a-b*b)/a; N=a/sqrt(1.0-e*e*sin(fi)); x=(N+h)*cos(fi)*cos(lambda); y=(N+h)*cos(fi)*sin(lambda); z=(b*b/a/a*N+h)*sin(fi); } void pretvorbaPaketno::izpisiRezultat(ofstream& izhod, int ndec) { elipsoidneVkartezicne(); izhod.setf( ios::fixed ); // Zahtevamo normalni izpis realnih vrednosti. izhod.precision(ndec); // Zahtevamo izpis na "ndec" decimalk. izhod << "Pretvorba elipsoidnih koordinat v kartezicne: " << endl << endl; izhod << "Elipsoidne koordinate:" << endl; izhod << "fi=" << fi_st << "st " << fi_min << "min " << fi_sek << "sek" << endl; izhod << "lambda=" << lambda_st << "st " << lambda_min << "min " << lambda_sek << "sek" << endl; izhod << "h=" << h << "m" << endl << endl; izhod << "Kartezicne koordinate:" << endl; izhod << "x=" << x << "m" << endl; izhod << "y=" << y << "m" << endl; izhod << "z=" << z << "m" << endl; }
Hvala
'FireSTORM' ::
v datoteki imaš takole:
nekaj lala hopsasa 0,6464 19 wfefwrhwth
torej vmes po presledkih ločeno?
treba je sparsat vhodne podatke
prebereš vrstico in jo parsaš kaj gre kam
drugo vrstico spet parsaš
in tako dokler ne prideš do konca
nekaj lala hopsasa 0,6464 19 wfefwrhwth
torej vmes po presledkih ločeno?
treba je sparsat vhodne podatke
prebereš vrstico in jo parsaš kaj gre kam
drugo vrstico spet parsaš
in tako dokler ne prideš do konca
Those penguins.... They sure aint normal....
JohnnyB ::
V datoteki imam koordinate ločene s presledki
5 5 5.555 5 5 5.555 5.555
6 6 6.666 6 6 6.666 6.666
7 7 7.777 7 7 7.777 7.777
Tole sem popravil - while zanka prebere vsako vrstico posebej (7 števil) dokler ne pride do konca datoteke.
Kako pa naj zdaj naredim zanko, da bo za vsako prebrano vrstico dopisala rezultat v izhodno datoteko. Zaenkrat mi izračuna samo zadnjo vrstico.
5 5 5.555 5 5 5.555 5.555
6 6 6.666 6 6 6.666 6.666
7 7 7.777 7 7 7.777 7.777
Tole sem popravil - while zanka prebere vsako vrstico posebej (7 števil) dokler ne pride do konca datoteke.
bool pretvorbaPaketno::preberiPodatke(ifstream& vhod) { while ( !vhod.eof() ) { vhod >> fi_st >> fi_min >> fi_sek >> lambda_st >> lambda_min >> lambda_sek >> h; if( !vhod ) return false; } return true; // Ob uspehu vrni true. }
Kako pa naj zdaj naredim zanko, da bo za vsako prebrano vrstico dopisala rezultat v izhodno datoteko. Zaenkrat mi izračuna samo zadnjo vrstico.
'FireSTORM' ::
Zato ker ti samo bereš bereš in bereš in vedno ko prebereš novo vrstico prepišeš staro v spremenljivkah, moraš vrstico prebrat jo sprocesirat, in zapisat v drug file.
Razen če uporabljaš seznam pointerjev(nisem prebral celotne tvoje kode).
Razen če uporabljaš seznam pointerjev(nisem prebral celotne tvoje kode).
Those penguins.... They sure aint normal....
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Python - pomoč!Oddelek: Programiranje | 1201 (1037) | lknix |
» | Java ObjektiOddelek: Programiranje | 2249 (1943) | Mavrik |
» | programiranje COddelek: Programiranje | 2429 (2291) | bozjak |
» | algoritem za pretvorbo koordinatOddelek: Programiranje | 3350 (3177) | Monster |
» | [C++][Naloga_polja]MIN in MAX polja, izpis za x.100 stevilOddelek: Programiranje | 2940 (2751) | snow |