Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
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


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Kodak PIXPRO AZ653: la fotocamera bridge...
Monitor da gaming: Samsung si conferma l...
The Duskbloods potrebbe arrivare a fine ...
Il miglior pesce d'aprile del mondo Linu...
Monopattini elettrici a 62 km/h fermati ...
OpenAI porta la modalità vocale d...
Mercedes-Benz introduce lo steer-by-wire...
Hacker agli Uffizi, il museo smentisce: ...
Nvidia mostra il futuro della grafica co...
Windows 11, scattano gli aggiornamenti f...
TIM lancia l'offerta di Pasqua: Giga ill...
Prime foto reali per OPPO Find X9 Ultra:...
Il leak di Claude Code diventa un'esca: ...
Netflix, batosta in Italia: aumenti ille...
UFO e complotti: chi si cela dietro la n...
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:07.


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