Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla
Una ammiraglia elettrica, da sei o sette posti, con il comfort di viaggio come missione assoluta. Un'auto non per tutti, ma di cui ti innamori dopo pochi giorni, ecco com'è andata la nostra prova di lunga durata
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode
Hyper Mini LED con 2.304 zone, DisplayPort 2.1 e Dual Mode: 5K a 165 Hz oppure QHD a 330 Hz: LG propone un monitor da gioco ma dalla buona versatilità creativa, con prestazioni interessanti e un listino di 1.220 euro. Peccato l'alimentatore ingombrante
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-09-2007, 09:46   #1
Rageh
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
Spoiler:
Codice:
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

void input_matrice (int n);
void calcola_vettore_somma (int V[]);
void output (int V[], int n);

int main ()
{   int n, *V;
    cout<<"Inserire il riemp: ";cin>>n;

    V = new int [n];

    input_matrice(n);
    calcola_vettore_somma(V);

    output(V, n);
    
    system ("PAUSE");
    return 0;
}    




void input_matrice (int n)
{    
     int j = 0;
     int temp;
     
     ofstream out;
     out.open ("elementi_matrice.txt", ios::out);
     out<<n<<"\n";
     
     while (j<n)
     {     
           for (int i=0; i<n-1; i++)
           {
               cout<<"Inserire l'elemento della riga "<<j+1<<" colonna "<<i+1<<": ";
               cin>>temp;
               out<<temp<<", ";
           }
           
           cout<<"Inserire l'elemento della riga "<<j+1<<" colonna "<<n<<": ";
           cin>>temp;
           out<<temp<<"\n";
           j++;
     }
     out.close();
}

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

void output (int V[], int n)
{
     system ("cls");
     cout<<"(";
     for (int i=0; i<n-1; i++)
         cout<<V[i]<<", ";
         cout<<V[n]<<")";
}


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.
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 09:53   #2
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
for (int i=0; i<n; i++)
somma+=V[i];
okay è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:06   #3
Rageh
Member
 
Iscritto dal: Aug 2006
Messaggi: 42
Cosa mi cambia così?
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:11   #4
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Rageh Guarda i messaggi
Cosa mi cambia così?
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.
okay è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:20   #5
Rageh
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
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:22   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Codice:
void calcola_vettore_somma (int V[])
...
in.getline(V[i],256,',');
...
cosa ti stai inventando ?

le uniche 2 getline hanno char* come primo parametro ...
Codice:
istream& getline( char* buffer, streamsize num );
istream& getline( char* buffer, streamsize num, char delim );
non ho visto il resto


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.
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:25   #7
Rageh
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?
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:28   #8
okay
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 906
Quote:
Originariamente inviato da Rageh Guarda i messaggi
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

e come è fatto il file testo elementi_matrice.txt scrivi come è fatto il txt da leggere
okay è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:30   #9
Rageh
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.
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:33   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Rageh Guarda i messaggi
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?
io ultimamente sto lavorando in C e comunque non sono forte in STL del C++.
Ma vedo un po di errori:

Codice:
in.getline(V[i],256,',');
deve diventare
Codice:
in.getline(temp,256,',');
Codice:
V[i] += temp;
deve diventare
Codice:
V[i] += atoi(temp);
(ma qui usi C ? non e´ meglio string del C++? )

Codice:
in.getline(temp);
oltre a essere sbagliata (al limite
Codice:
in.getline(temp, 256);
) non capisco a cosa serva.

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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:37   #11
Furla
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.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:40   #12
Rageh
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.
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:48   #13
trallallero
Senior Member
 
L'Avatar di trallallero
 
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
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 10:53   #14
Rageh
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();
Mi legge sempre e solo il primo elemento e non gli altri!
Allegati
File Type: txt compito corretto.txt (1.7 KB, 2 visite)

Ultima modifica di Rageh : 19-09-2007 alle 11:29.
Rageh è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2007, 13:11   #15
Rageh
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.
Rageh è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e Dual Mode LG UltraGear evo GM9: 27 pollici, 5K, Mini LED e...
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
Ristrutturazione in casa EA: licenziamen...
Cloudflare avverte: gli umani rischiano ...
Amazon ha costruito un data center da 2 ...
Smartphone premium oltre i 600$: Apple d...
La RAM costa come nel 2007: 20 anni di r...
Huawei presenta MateBook Pro S: laptop u...
Pieghevoli, la svolta che tutti aspettav...
Sempre più manager tech sognano di molla...
IA agentica: Qwen3.8 Max davanti ai big ...
Trump deciso a bloccare l'eolico offshor...
TOP 12 offerte del weekend Amazon: i nuo...
Enhanced PSSR sarà attivo per imp...
Polti Vaporetto SV440 Double, la scopa a...
Smart TV a 129€ su Amazon: è un H...
Proseguono le operazioni di ripristino d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v