Help C++

di il
4 risposte

Help C++

Qualcuno sa trovare l'errore o gli errori in questo programma e eventualmente correggerlo?

grazie mille

/*Si scriva un programma che, assegnato in ingresso, da tastiera, il riempimento n
ed i valori di un vettore V di numeri reali, calcoli il massimo max dei valori memorizzati nel vettore V
e costruisca quindi un nuovo vettore diff in cui siano memorizzate le differenze tra il valore di max
ed ogni valore di V. Stampi quindi il valore max, il vettore diff ed il valore maxdif del massimo contenuto
nel vettore diff. Il programma deve essere articolato in funzioni.
Esempio
INPUT:
V = 2.1 4.2 1.3 3.2 7.1 6.3
OUTPUT:
Il massimo fra i valori del vettore V e': 7.1
Il vettore delle differenze e':
5 2.9 5.8 3.9 0 0.8
La massima differenza e': 5.8 */

#include <iostream>
#include <stdlib.h>

using namespace std;

//Dichiarazioni
int const MAX_ELEM = 50;
typedef float vett [MAX_ELEM];

//Prototipi
void leggi (int,vett);
float ricerca_max (int,vett);
void differenza (int,vett,float);
float differenza_max (int,vett);
void stampa (int,float,vett,float);

//Main
int main () {
int n;
vett v;
float massimo;
vett diff;
float diffmax;

leggi (n,v);
massimo = ricerca_max (n,v);
differenza(n,v,massimo);
diffmax=differenza_max(n,diff);
stampa(n,massimo,diff,diffmax);
system("PAUSE");
return 0;
}

// Funzione leggi
void leggi ( int n,vett v ) {
int i;
cout << "Inserire il riempimento del vettore di massimo "<<MAX_ELEM<< "elementi";
cin >> n;
for (i=0;i<n;i++) {
cout << "Inserire l'elemento di posto "<< i+1<< " ";
cin >> v;
}
}
// Funzione ricerca massimo
float ricerca_massimo (int n,vett v) {
int i;
float max = v[0];
for (i=1;i<n;i++) {
if ( v> max)
max= v;
}
return max;
}

// Funzione vettore differenze
void differenza (int n,vett v,float massimo) {
int i;
vett diff;
for (i=0;i<n;i++) {
diff= massimo - v;
}
}
// Funzione ricerca massima differenza
float differenza_max ( int n,vett diff) {
int i;
float diffmax = diff[0];
for (i=1;i<n;i++) {
if (diff > diffmax)
diffmax=diff;
}
return diffmax;
}
// Funzione stampa
void stampa (int n,float massimo,vett diff,float diffmax) {
int i;
cout << "Il massimo tra i valori inseriti è "<< massimo <<" ";
for (i=0;i<n;i++) {
cout << "Il vettore delle differenze è" ;
cout << diff;
}
cout << "La massima differenza è";
cout << diffmax;
}

4 Risposte

  • Re: Help C++

    Errori in cosa? quali sono gli errori?
  • Re: Help C++

    Ciao, probabilmente c'era un errore tra i passaggi di parametri. Anche se non capisco perchè hai incasinato così un sorgente che è molto banale, senza offesa assolutamente! Non sono riuscito a correggere il tuo sorgente per colpa della scrittura molto confusa, sarebbe stato meglio usare i tag 'code'. Comunque, ho realizzato questo sorgente funzionante:
    
    #include <iostream>
    using namespace std;
    
    int main () {
    	float vett[100], vett2[100], max, maxdiff;
    	int i, N;
    	// Input
    	cout <<"Quanti elementi vuoi inserire? (Max 100):"<<endl;
    	cin >> N;
    	for (i=0;i<N;i++) {
    		cout <<"Inserisci il numero di posizione "<<i+1<<endl;
    		cin >> vett[i];
    	}
    	// Massimo
    	max=0;
    	for (i=0;i<N;i++) {
    		if (max<vett[i])
    			max=vett[i];
    	}
    	// Differenza con vettore
    	for (i=0;i<N;i++) {
    		vett2[i]=max-vett[i];
    	}
    	// Massima differenza
    	maxdiff=0;
    	for (i=0;i<N;i++) {
    		if (maxdiff<vett2[i]) 
    			maxdiff=vett2[i];
    	}
    	// Output
    	cout <<"Il massimo valore è: "<<max<<endl;
    	cout <<"Il vettore dopo la differenza è: "<<endl;
    	for (i=0;i<N;i++) {
    		cout <<vett2[i]<<" ";
    	}
    	cout <<endl;
    	cout <<"La differenza massima è: "<<maxdiff<<endl;
    	system ("pause");
    	return 0;
    }
    
    Spero di esserti stato utile, ciao!
  • Re: Help C++

    Piccola correzione del codice di mauro:
     // Massimo
       max=0;
       for (i=0;i<N;i++) {
          if (max<vett[i])
             max=vett[i];
       }

    direi di assegnare a max il valore di vett[0] e poi nel for i=1perchè altrimenti nel caso in cui i numeri siano tutti negativi l'algoritmo non va anche qui:
     maxdiff=0;
       for (i=0;i<N;i++) {
          if (maxdiff<vett2[i]) 
             maxdiff=vett2[i];
       }
    maxdiff=vett2[0];
    e poi nel for i=1;

  • Re: Help C++

    Ottima correzione, molto gentile!
Devi accedere o registrarti per scrivere nel forum
4 risposte