Ciclo while

di il
4 risposte

Ciclo while

Ciao a tutti,
vi chiedo gentilmente il vostro aiuto su un codice.
Il codice che sto cercando di scrivere, legge un file di testo ("prova.txt") formato da due colonne. Consideriamo solo la prima colonna.
Molte righe della prima colonna sono sempre uguali, ed io vorrei associare per tutte queste righe il valore "86400". Man mano che le righe scendono, il valore della riga cambia, e a queste nuove righe io dovrei associare il valore precedente (cioè 86400) + 86400 (quindi 86400+86400 = 172800) e cosi via.. (172800+86400=259200).
Il programma mi funziona solo per le prime due serie di righe, poi dalla terza serie di riga con valori diversi non fa più quello che dovrebbe fare.
Qualcuno sa dirmi dove sbaglio?

#include <fstream>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>


using namespace std;



const char *input_filename = "prova.txt";
const char *output_filename = "output.txt";

int main()
{
	std::ifstream cluster_input(input_filename);
	if (!cluster_input)
	{
		std::cerr << "Errore nell'apertura del file di input\n";
		return 1;
	}
	std::ofstream cluster_output(output_filename);
	if (!cluster_output)
	{
		std::cerr << "Errore nella creazione del file di output\n";
		return 2;
	}


             
 
double giuliano, RMS;
int fisso = 86400;
int data = 2456373;
int NUOVOgiuliano;

int evento; 
 



while (cluster_input >> giuliano>> RMS)
	{
       

       evento=fisso;

           if (giuliano==data) {NUOVOgiuliano=evento;
                  cluster_output <<fixed<<setprecision(0)<<NUOVOgiuliano<<"  "<<setprecision(3)<<RMS<<endl;}
                         
                   

           if(giuliano!=data)  {NUOVOgiuliano = evento + fisso;

               cluster_output <<fixed<<setprecision(0)<<NUOVOgiuliano<<"  "<<setprecision(3)<<RMS<<endl;}
            
         NUOVOgiuliano=evento;
        


       }
     
   

 
cluster_input.close();
cluster_output.close();

cout<<" OK !!!!! "<<endl;
return 0;

}


non riesco allegare il file prova.txt, lo srivo qui di seguito:

2456373 0.399
2456373 0.399
2456373 0.399
2456373 0.399
2456373 0.399
2456373 0.400
2456374 0.400
2456374 1.013
2456374 0.402
2456374 0.400
2456375 0.399
2456375 0.397
2456375 0.397
2456375 0.397
2456375 0.397
2456375 0.397
2456375 0.397
2456376 0.397
2456376 0.397
2456376 0.397
2456376 0.397
2456376 0.397
2456376 0.397
2456376 0.397
2456377 0.397
2456377 0.397
2456377 0.397
2456377 0.397
2456377 0.397
2456377 0.397
2456377 0.397

4 Risposte

  • Re: Ciclo while

    Direi che il codice è un po' confuso ... più semplicemente
    
    	double val, dnew, dlast, RMS;
    	int fix=86400;
    	dlast = 2456373;
    	
    	val=fix;
    	while (cluster_input >> dnew >> RMS)
    	{
    		if(dnew!=dlast)
    		{
    				val+=fix;
    				dlast=dnew;
    		}
    
    		cluster_output <<fixed<<setprecision(0)<<val<<"  "<<setprecision(3)<<RMS<<endl;
    	}
    
  • Re: Ciclo while

    Grazie mille. Funziona perfettamente.
    Potresti anche dirmi dove sbagliavo io, così magari imparo qualcosa.
    Grazie....
  • Re: Ciclo while

    Il valore più grande che raggiungevi con il codice era

    evento + fisso

    e non accumulavi il valore fisso dopo il secondo giro.

    Il fatto che ci fossero due cout comunque, era fonte di confusione.
  • Re: Ciclo while

    Ok, grazie per la spiegazione.
Devi accedere o registrarti per scrivere nel forum
4 risposte