Visualizzazione dei risultati da 1 a 3 su 3

Discussione: C++ Dubbio!!!

  1. #1

    C++ Dubbio!!!

    Salve, per la risoluzione di questo esercizio in primis avevo dichiarato con un "int" la variabile valore, ma non compilava. Dopo cambiandola con un float ho risolto. Mi chiedo perchè è cosi essenziale qsta differenza?

    codice:
    #include <iostream>
    
    Siano assegnati in ingresso, da tastiera, un vettore di interi V1 
    ed il suo riempimento n1.
    Si scriva un programma che calcoli la media M degli elementi del vettore V1 
    e copi in un vettore V2 tutti gli elementi di V1 il cui valore è minore di M. 
    Si stampino quindi il vettore V1, la media M ed il vettore V2.
     
    
    #include <stdlib.h>
    using namespace std;
    
    void input (int v1[], int &n);
    void media (int v1[], float &valore, int n);
    void copia (int v1[], int v2[], float valore, int risultato, int n);
    void output(int v1[], int v2[], float valore, int risultato, int n);
    
    
    int main (){
        int n;
        int v1[100],v2[100];
        float valore=0;
        int risultato=0;
        
        
        input(v1,n);
        media(v1,valore,n);
        copia(v1,v2,valore,risultato,n);
        output(v1,v2,valore,risultato,n);
        
        system("pause");
        return 0;
    }
    
    void input (int v1[], int &n){
         cout<<"Inserie la grandezza di V1:\n";
         cin>>n;
         cout<<"Riempi V1\n";
         for(int i=0; i<n; i++){
                 cin>>v1[i];
                 }}
                 
    void media (int v1[], float &valore, int n){
         for(int i=0; i<n; i++){
                 valore= valore+v1[i];
                 }
                 valore= valore/n;
                 }
        
    void copia (int v1[], int v2[], float valore, int risultato, int n){//copio valori<M in v2
    bool esiste=false;
    for(int i=0; i<n; i++){
            if(v1[i]<valore){
                             v2[risultato]=v1[i];
                             risultato++;
                             esiste=true;
                             }}}
                 
    void output(int v1[], int v2[], float valore, int risultato, int n){
         cout << "il vettore di ingresso è:\n";
          for(int i =0; i < n; i++){
                  cout << v1[i]<<"\n";
                  }
         cout<<"Valore Media:\n";
         cout<<valore<<"\n";
         
         bool esiste;
         if(esiste){
         cout<<"Vettore V2:\n";
         for(int j=0; j<valore; j++){
                 cout<<v2[j]<<"\n";
                 }}
         else{
              bool esiste;
              cout<<"Nessun valore minore della Media.\n";
              }}

  2. #2
    Perché media accetta un riferimento ad un float per il parametro valore, per cui è obbligatorio che la variabile passata sia un float.
    Se fosse stato un parametro "normale" (che di fatto viene copiato) al momento della chiamata a funzione l'int sarebbe stato convertito in float al momento di copiarlo nel parametro e fine; con i parametri per riferimento questo non è possibile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Anche all' interno dei sottoprogrammi ho dovuto cambiare da int a float

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.