|
|
|
![]() |
|
Strumenti |
![]() |
#1 | ||
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
[C++]Scrittura su file AIUTO PROBLEMA ESAME... è facile...
Ciao ragazzi... sto diventando matto... sto ***** di prof ci ha penalizzato a tutti perchè non abbiamo seguito i suoi corsi, e ci ha messo l'input/output su file quando la cosa non doveva entrare nell'esame...
Dunque il programma mi fa inserire gli elementi di una matrice, e me li stampa su un file.txt in formato CSV, e dopo ogni riga va a capo, e fin qui tutto ok. Ora devo creare un sottoprogramma che leggendo gli elementi dal file mi crea un vettore che ha per elementila somma dei numeri ricavati da ciascuna riga del file, non ci riesco. ogni aiuto è apprezzatissimo... lo scritto ormai è andato... ora vorrei che funzionasse per l'orale... Programma completo, corretto ore 12.38
Il problema è qui Codice:
void calcola_vettore_somma (int V[]) { void calcola_vettore_somma (int V[]) { int n; int temp; ifstream in; in.open ("elementi_matrice.txt", ios::in); in>>n; while(in>>temp) { cout<<temp; for (int i=0; i<n; i++) V[i]=temp+V[i]; } in.close(); } Ultima modifica di Rageh : 19-09-2007 alle 11:35. |
||
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
for (int i=0; i<n; i++)
somma+=V[i]; |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
Cosa mi cambia così?
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
su somma addizioni il valore diV(i)
somma=0 v(0)=3 v(1)=5 v(2)=2 somma=somma+v(0) = 3 somma=somma+v(1) = 8 somma=somma+v(2) = 10 print somma = 10 edit: naturalmente se i tuoi calcoli sono giusti... e questo non mi và di verificarlo. "...ottenere la somma degli elementi..." Ultima modifica di okay : 19-09-2007 alle 10:13. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
No aspetta okay... il problema non è questo
il problema è che devo prendere un numero alla volta da un file txt... Sommare tutti quelli che si trovano su una stessa riga... e costruire un vettore che ha per elementi le varie somme... come faccio ad usare il costrutto getline... ifstream... mi serve capire questo... la somma la so fare.... soprattutto perchè i numeri sono CSV............ GRAZIE MILLE A TUTTI |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Codice:
void calcola_vettore_somma (int V[]) ... in.getline(V[i],256,','); ... ![]() le uniche 2 getline hanno char* come primo parametro ... Codice:
istream& getline( char* buffer, streamsize num ); istream& getline( char* buffer, streamsize num, char delim ); EDIT: forse ho capito, hai sbagliato alla getline, devi mettere Codice:
in.getline(temp,256,',');
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve Ultima modifica di trallallero : 19-09-2007 alle 10:25. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
Hai detto proprio la parola giusta... inventando
![]() alla fin fine... come faccio a prendere un numero alla volta da una riga,soprattutto quando fra un numero e l'altro c'è una "Virgola"... e a fine riga andare a capo? |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
e come è fatto il file testo elementi_matrice.txt scrivi come è fatto il txt da leggere |
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
subito!! se io inserisco come riga/colonna 3 e come numeri 1 2 3 4 5 6 7 8 9...
mi crea: 3 1, 2, 3 4, 5, 6 7, 8, 9 e fin qui ci siamo, perchè sono CSV poi... mi dovrebbe restituire il vettore: V = (6,20,24) ma niente! Ultima modifica di Rageh : 19-09-2007 alle 10:34. |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Ma vedo un po di errori: Codice:
in.getline(V[i],256,','); Codice:
in.getline(temp,256,','); Codice:
V[i] += temp; Codice:
V[i] += atoi(temp); Codice:
in.getline(temp); Codice:
in.getline(temp, 256); Questio non sono errori logici, quelli non li ho cercati ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
lascia stare il getline...
usa semplicemente l'operatore >> che si ferma ad ogni spazio ed ignora le virgole. |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
Ho corretto quella parte con quegli orrendi getline
(il prof ci ha dato string come libreria quindi ci ha tratto in inganno) void calcola_vettore_somma (int V[]) { int n; int i = 0; int temp; ifstream in; in.open ("elementi_matrice.txt", ios::in); in>>n; while (i<n) { V[i] = 0; for (int j=0; j<n; j++) { in>>temp; V[i] += temp; } } in.close(); } void output (int V[], int n) { system ("cls"); cout<<"("; for (int i=0; i<n; i++) cout<<V[i]<<", "; cout<<")"; } il programma si blocca. |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
while (i<n) ... se non incrementi i la vedo difficile uscire dal ciclo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
Avevo dimenticato i++ nel ciclo while,
comunque mi dà dei valori sbagliati... Codice:
void calcola_vettore_somma (int V[]) { int n; int i = 0; int temp; ifstream in; in.open ("elementi_matrice.txt", ios::in); in>>n; while (i<n) { V[i] = 0; for (int j=0; j<n; j++) { in>>temp; V[i] = temp + V[i]; } i++; } in.close(); Ultima modifica di Rageh : 19-09-2007 alle 11:29. |
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Aug 2006
Messaggi: 42
|
PROBLEMA RISOLTO!!!!
Codice:
for (int i=0; i<n; i++) { V[i] = 0; for (int j=0; j<n-1; j++) { in.getline(temp,100,','); V[i]+=atoi(temp); } in.getline(temp,100); V[i]+=atoi(temp); } in.close(); } Grazie a tutti. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:58.