[C++] Esercizio con I/O da file
ciao a tutti,
devo scrivere un programma che:
legge da tastiera un intero positivo $n<=20$ e poi leggere da file due vettori u e v ad n componenti.
Calcolare il vettore somma $u+v$ e il prodotto scalare tra i due vettori e li stampa in un altro file.
Io ho provato ma vengono risultati non corretti... dove sbaglio?
devo scrivere un programma che:
legge da tastiera un intero positivo $n<=20$ e poi leggere da file due vettori u e v ad n componenti.
Calcolare il vettore somma $u+v$ e il prodotto scalare tra i due vettori e li stampa in un altro file.
Io ho provato ma vengono risultati non corretti... dove sbaglio?
//esercizio 33 //il prog legge da tastiera n minore/uguale di 20 e le n componenti //di due vettori u e v. calcola la somma e il prod scalare #include<stdio.h> #include<stdlib.h> #include<iostream> #include<time.h> using namespace std; main(){ double starttime,endtime,time; FILE* dati; FILE * stampa; starttime=clock(); int n; float u[20],v[20]; do{cout<<"\nDammi un numero( n<=20 ):n="; cin>>n; } while((n>20)||(n<=0)); dati=fopen("vettori","w+"); stampa=fopen("stampasomma","w+"); if(dati==NULL){ cout<<"Impossibile!Il programma terminera'"; exit(1); } for(int i=0;i<n;i++){ fscanf(dati,"%f"); } for(int i=0;i<n;i++){ fscanf(dati,"%f"); } cout<<"\nEcco le componenti del primo vettore:"<<endl<<endl; for(int i=0;i<n;i++) cout<<u[i]; cout<<"\nEcco le componenti del secondo vettore:"; for(int i=0;i<n;i++) cout<<v[i]; //calcolo la somma dei due vettori float somma=0; for(int i=0;i<n;i++) somma=somma+v[i]+u[i]; cout<<"Il risultato e':"<<somma; fprintf(stampa,"%f",somma); fprintf(dati,"%f",somma); //calcolo il prodotto float prodotto=0; for(int i=0;i<n;i++){ prodotto=prodotto+u[i]*v[i]; } cout<<"Il prodotto scalare tra i vettori e'"<<prodotto; fprintf(stampa,"%f",prodotto); fclose(dati); fclose(stampa); endtime=clock(); time=(endtime-starttime)/CLOCKS_PER_SEC; cout<<"\n\n\nIl tempo impiegato dal programma e'"<<time; return 0; }
Risposte
Al di là di alcune questioni stilistiche che non adoro ci sono degli errori.
Il primo è che leggi "vettori" in modalità scrittura estesa quando sarebbe meglio usare la modalità di lettura "r". Per stampa invece va bene la modalità "w+".
Il secondo è che leggi da dati ma non memorizzi ciò che leggi: fscanf ha 3 o più parametri!
Il terzo è che il vettore somma è un vettore w tale che w = u + v per ogni i.
Il primo è che leggi "vettori" in modalità scrittura estesa quando sarebbe meglio usare la modalità di lettura "r". Per stampa invece va bene la modalità "w+".
Il secondo è che leggi da dati ma non memorizzi ciò che leggi: fscanf ha 3 o più parametri!
Il terzo è che il vettore somma è un vettore w tale che w = u + v per ogni i.