Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

di il
77 risposte

77 Risposte - Pagina 3

  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Allora ho svolto cosi anche questa parte:
    nelle chiamate delle funzioni ( e ti copio solo questa parte per comprendere meglio )
    ho inserito questo:
    if ( n3=0) {
    double media3= vettmedia3(n3,vett3);
    cout<<"la media del vettore 3e'= "<<media3<<endl;}
    else
    cout<<"il vettore V3 e' vuoto";
    Quindi nelle chiamate delle funzioni ho:

    //Chiamate delle funzioni
    cout<<"Riempimento vettore 1 \n";
    input (n1, vett1);
    cout<<"Riempimento vettore 2 \n";
    input (n2, vett2);
    cout<<"Il vettore V1="<<endl;
    output(n1,vett1);
    cout<<"\n";
    cout<<"Il vettore V2="<<endl;
    output(n2,vett2);
    double media= vettmedia(n1,vett1);
    cout<<"la media del vettore 1e'= "<<media<<endl;
    vett_nuovo(n1,n2,vett1,vett2,n3,vett3);
    cout<<"il vettore3 risultante e'=\n";
    output(n3,vett3);
    if ( n3=0) {
    double media3= vettmedia3(n3,vett3);
    cout<<"la media del vettore 3e'= "<<media3<<endl;}
    else
    cout<<"il vettore V3 e' vuoto";
    cout<<"\n\n";
    system("PAUSE");
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Sorry if (n3!=0)....
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ti ho fatto un pò di modifiche. Impara a creare delle funzioni generiche che possono essere usate più volte in qualsiasi parte del programma. Studia il codice che ti ho messo e se c'è qualcosa che non capisci chiedi pure.
    
    #include<iostream>
    #include <cstdlib>
    
    using namespace std;
    
    //Prototipi delle funzioni
    void input (int &n,float vett[]);
    float vettmedia(int n,float vett[]);
    void vett_nuovo(float media,int n2, float vett2[],int &n3,float vett3[]);
    void output(int n,float vett[]);
    //Si scriva un programma che copi in un nuovo vettore V3 i valori contenuti in V2
    // che risultano minori della media dei valori presenti in V1
    
    
    int main() {
    	int n1;
    	int n2;
    	int n3;
    	float vett1[100];
    	float vett2[100];
    	float vett3[100];
    	//Chiamate delle funzioni
    	cout<<"Riempimento vettore 1 \n";
    	input (n1, vett1);
    	cout<<"Riempimento vettore 2 \n";
    	input (n2, vett2);
    	cout<<"Il vettore V1="<<endl;
    	output(n1,vett1);
    	cout<<"\n";
    	cout<<"Il vettore V2="<<endl;
    	output(n2,vett2);
    	float media= vettmedia(n1,vett1);
    	cout<<"la media del vettore 1 e'= "<<media<<endl;
    	vett_nuovo(media,n2,vett2,n3,vett3);
    	cout<<"il vettore3 risultante e'=\n";
    	output(n3,vett3);
    	float media3= vettmedia(n3,vett3);
    	if(media3 != 0)
    		cout<<"la media del vettore 3e'= "<<media3<<endl;
    	else
    		cout<<"Vettore 3 vuoto.La media non puo' essere calcolata"<<endl;
    
    	cout<<"\n\n";
    
    	system("PAUSE");
    	return 0;
    }
    void input(int&n,float vett[]) {
    
    
    	cin>>n;
    	cout<<"\n";
    	cout<<"Assegna "<<n<<" elementi del vettore \n";
    
    	for (int i=0;i<n;i++)
    		cin>>vett[i];
    
    }
    
    float vettmedia(int n,float vett[]){
    
    	if(n == 0)
    		return 0;
    
    	float media=0;
    	for (int i=0;i<n;i++) 
    	{
    		media+=vett[i];
    	}
    	
    	media=media/n;
    	return media;
    }
    
    void vett_nuovo(float media,int n2, float vett2[],int &n3,float vett3[]){
    	n3=0;
    	for (int i=0;i<n2;i++)
    	{
    		if(vett2[i] < media)
    		{
    			vett3[n3]=vett2[i];
    			n3++;
    		}
    	}
    }
    
    void output (int n, float vett[]){
    
    	for (int i=0;i<n;i++)
    		cout<<" "<<vett[i];
    	cout<<"\n";
    
    }
    
    
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ok,
    ho trascritto sul quaderno il programma da te eseguito in maniera brillante e il programma che ho eseguito io.
    Adesso sto effettuando la verifica e la prima cosa che riscontro è l'eliminazione della funzione DOUBLE vettmedia3.
    Mi pongo una prima domanda: ma per il calcolo della media io ho sempre usato Double...e adesso?
    Poi nella funzione float media ( int n,float vett[]
    hai inserito IF(N==0)
    RETURN 0;
    cioè mi rende vuoto il vettore media? giusto?

    Il procedimento da te inserito per il resto mi risulta in questo momento corretto e chiaro.
    Però vorrei sapere una curiosità.
    Se volessi inserire sulla stessa riga gli elementi del vettore V1 e V2...come si potrebbe fare?
    non mi stancherò di ringraziarti per la disponibilità...
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ho visto sul libro in relazione alla variabile Double
    gestisce numeri reali di grandi dimensioni.
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Poi vedevo questa chiamata della librearia che all'univ il prof non ci ha fatto mai usare:
    #include <cstdlib>
    ho provato a cancellare la c e scrivere come usualmente faccio<stdlib.h> e funziona ugualmente il programma...è la stessa cosa?
    e inoltre ho inserito double al posto di float e il programma funziona.
    Da un punto di vista teorico ho compreso la differenza fra float e double ma come mai tu hai preferito inserire float e non double?
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    1.Differenza tra float e double


    come vedi float ha una risoluzione di 7 cifre mentre un double di 15. Per questo semplice esempio perche scomodare un double quando la precisione che vuoi ottenere non è così elevata.

    2. differenza tra cstdlib e stdlib.h

    il header cstdlib di C++ contiene l'implementazione del header stdlib.h del C. Siccome stai programmando in C++ il header corretto da usare è cstdlib e non stdlib.h (di al prof di aggiornarsi)
    Questo header lo includi nel tuo programma solo per la funzione system("pause") quando la stessa cosa lo puoi fare con cin.get() cmq non o voluto cambiare.

    3. codice della media
    
    
    float vettmedia(int n,float vett[]){
    
       if(n == 0)
          return 0;
    
       float media=0;
       for (int i=0;i<n;i++)
       {
          media+=vett[i];
       }
       
       media=media/n;
       return media;
    }
    
    cosa succede se n = 0 e non metti quel if iniziale? Il ciclo for non viene eseguito perche i non è minore di n e ti trovi con la prossima istruzione che manda in crash il programma con divisione per zero.
    media=media/n; (qui hai media = 0 e n = 0) 0/0 ma anche numero/0 in C/C++ da un eccezione di divisione per zero.

    4. Se volessi inserire sulla stessa riga gli elementi del vettore V1 e V2...come si potrebbe fare?

    Non ho capito la domanda.
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Bene,
    ho capito la spiegazione relativa ai miei quesiti....molto interessante.
    Ah si, intendevo che quando lancio il programma compare V1= e poi ritrovo a capo gli elementi inseriti di V1 e cosi via per V2 ecc....
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Intendi così?
    
    int main() {
       int n1;
       int n2;
       int n3;
       float vett1[100];
       float vett2[100];
       float vett3[100];
       //Chiamate delle funzioni
       cout<<"Riempimento vettore 1 \n";
       input (n1, vett1);
       cout<<"Il vettore V1="<<endl;
       output(n1,vett1);
    
       cout<<"Riempimento vettore 2 \n";
       input (n2, vett2);
       cout<<"\n";
       cout<<"Il vettore V2="<<endl;
       output(n2,vett2);
    
       float media= vettmedia(n1,vett1);
       cout<<"la media del vettore 1 e'= "<<media<<endl;
    
       vett_nuovo(media,n2,vett2,n3,vett3);
       cout<<"il vettore3 risultante e'=\n";
       output(n3,vett3);
       float media3= vettmedia(n3,vett3);
       if(media3 != 0)
          cout<<"la media del vettore 3e'= "<<media3<<endl;
       else
          cout<<"Vettore 3 vuoto.La media non puo' essere calcolata"<<endl;
    
       cout<<"\n\n";
    
       system("PAUSE");
       return 0;
    }
    
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ho riscritto....allora nel momento in cui faccio partire il programma
    compare V1=va a capo
    e poi inserisce gli elementi che si riferiscono all'output.
    se volevo inserire V1= e inserire gli elementi del vettore senza andare a capo....
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Intendi inserire gli elementi divisi da uno spazio? è un pò + complicato ma si può fare. Altrimenti fai un esempio concretto di inserimento così ci capiamo.
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ok forse è più semplice fare l'esempio
    allora quando eseguo il programma vorrei che comparisse
    inserisci n1= 4
    V1=1 2 3 4 (sulla stessa riga di V1=)
    inserisci n2=3
    V2=1 2 3(sulla stessa riga di V2=)
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Se l'inserimento lo fai col tasto invio non è possibile tornare indietro di riga. Se l'inserimento lo fai con lo spazio è possibile ma devi imparare un pò di + su C++, in particolare le stringhe e le stringstream. Esempio:
    
    cout << "inserisci n1 = ";
    cin >> n1;
    cout << "V1= ";
    string str;
    getline(cin,str);
    stringstream ss(str);
    int temp;
    int i = 0;
    while(ss >> temp && i < n1)
    {
       v1[i] = temp;
    }
    
    ecc....
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Comprendo...bhe in questo caso allora preferisco fermarmi qui e iniziare un nuovo esercizio...altrimenti rischio di saltare l'esame...
    se ho problemi nel nuovo esercizio posso contare sul tuo aiuto?
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Se riesco a risponderti ben volentieri.
Devi accedere o registrarti per scrivere nel forum
77 risposte