Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - dati input in un programma c++
Forum - C/C++ - dati input in un programma c++

Avatar
Erica (Normal User)
Newbie


Messaggi: 5
Iscritto: 23/11/2012

Segnala al moderatore
Postato alle 21:25
Sabato, 15/12/2012
Ciao a tutti!
Facendo esperienze di fisica in laboratorio, mi sono imbattuta in un piccolo problemino tecnico: il cronometro misurava due oscillazioni, anzicchè una sola!
Nessun problema mi son detta lì per lì, ma quando ho visto che i dati "sballati" non erano uno, due o tre, ma 230, i problemini sono insorti eccome.
Avevo pensato a come dividere i singoli periodi attraverso un programma. Mi sono accorta, però che non sono in grado di mettere i dati di input, se questi sono provenienti da un file di testo!
Quello che vorrei domandare è: sapete dirmi come si fa a mettere all'interno di un programma dei file txt come serie di dati?
Vi ringrazio in anticipo!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6367
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:04
Sabato, 15/12/2012
I dati si leggono dal file usando i comandi per

aprirlo
leggerli
chiuderlo

Se vuoi cominciare dal C, usa la

fopen

per aprire il file, la

fscanf

per leggere i tuoi dati (in un ciclo) e

fclose

per chiudere il file.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Erica (Normal User)
Newbie


Messaggi: 5
Iscritto: 23/11/2012

Segnala al moderatore
Postato alle 22:35
Sabato, 15/12/2012
Dunque dovrei fare così?

#include <cmath>
#include <iostream>
int main ()
graffa aperta

for (i=1; i<213 ; i++)    \\213 sono le righe del testo, ognuna delle quali ha il dato!
aperta graffa
   cout << (double) fscanf [ i ] \2 << endl;
chiusa graffa
chiuda graffa
return 0;
chiusa graffa

Perdonami, ma sono davvero imbranata ed anche la cosa più semplice mi sembra la più complessa!

Ultima modifica effettuata da Erica il 15/12/2012 alle 22:35
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:59
Sabato, 15/12/2012
Quello che non riesco a capire e' perche' usare il C++... dal tuo codice sembra che sei agli inizi, per questi programmi e' piu' semplice usare un linguaggio di scripting come Python, Perl oppure Ruby.



Il mio blog: https://piero.dev
PM Quote
Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 15:43
Domenica, 16/12/2012
L'impostazione è giusta....ma solo quella....
Anzitutto quando si adopera la libreria fstream, bisogna specificare una variabile (fstream) che indichi il file su cui si vuol operare.
Poi l'utilizzo di fscanf non è corretto. So che è contro le regole del forum ma ti scrivo il programma completo, dato che sarebbe molto più problematico spiegarti tutto da capo:
Codice sorgente - presumibilmente Delphi

  1. #include <iostream>
  2. #include <fstream>   //Permette di lavorare con i file
  3. using namespace std;     //Va inserita nei programmi in c++
  4. int main()
  5. {         //Si fanno: aperta= Alt+123     chiusa=Alt+125
  6.        fstream f;     //La variabile f sarà il nostro riferimento del file di INPUT.
  7.        //Non so come si chiama il tuo file con i numeri, lo chiameremo 'File_1'
  8.        f.open ("File_1.txt", ios::in);   //Apre il file 'file_1' in modalità sola lettura  (a patto che sia nella stessa
  9.        //cartella dell'eseguibile).
  10.        fstream g;   //La variabile g sarà il nostro rifrimento per il file di output.
  11.        g.open ("File_output", ios::out|ios::app);   //Apre il file di output in modalità scrittura.
  12.        /*******ED ORA IL CICLO:*/
  13.         double numero;     //Sarà la variabile che useremo per dimezzare i valori:
  14.        for (int i=0; i<=213; i++)
  15.        {
  16.                f>>numero;    //Numero assume il valore dell' i-esimo numero nel file input
  17.                 numero =numero/2;    //Ne dimezzo il valore
  18.                g<<numero<<endl;  //Ne scrvo il valore nel file nelll'output.
  19.         }
  20.         /*ORA CHE ABBIAMO FINITO, CHIUDIAMO I FILE E FINE.*/
  21.         f.close();
  22.         g.close();
  23.         return 0;
  24. }


Ultima modifica effettuata da Dany il 16/12/2012 alle 15:44
PM Quote
Avatar
Erica (Normal User)
Newbie


Messaggi: 5
Iscritto: 23/11/2012

Segnala al moderatore
Postato alle 15:25
Mercoledì, 19/12/2012
In questi giorni ho preso i biblioteca un bel "librone" sul C++ ed ho iniziato a studiarmelo per ben benino!
Proprio ieri ho capito come fare (o almeno penso). In realta' sono riuscita ad ottenere quel che volevo in maniera diversa da quella che mi avete dato. Trascrivo qui il programma che ho fatto per vedere se almeno l'impostazione e' giusta (dovrebbe esserlo perche' il cout e' corretto).

//questo e' il programma che mi stampa i dati di un testo!

#include <iostream>  //libreria necessaria per il funzionamento di input ed output  
int main()
{
using namespace std;

const int n = 5;       // dichiaro una variabile qualsiasi (che diventera' il numero totale di righe
double dato[n];     //dichiaro la variabile input

for (int i=0; i<n; i++) {  //inizio del ciclio che legge ogni singola riga del testo input
     cin >> dato[ i ];
     cout << dato[ i ] << endl; }  //lo faccio solo per verifica

return 0;
}



Pertanto se voglio dividere per 2, mi basta dichiarare prima del for un
double divisione[ n ];
e nel ciclo for un altro
double divisione[ i ];
in seguito alla dichiarazione, sempre nel ciclo dichiaro divisione = 0.5*dato e lo stampo.

Ultima modifica effettuata da Erica il 19/12/2012 alle 15:26
PM Quote