[C++] Esercizio con I/O da file

lucia88
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?
//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
vict85
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.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.