Funzione per trovare il valore intermedio tra 3 numeri

di il
2 risposte

Funzione per trovare il valore intermedio tra 3 numeri

Ciao a tutti! Mi sono imbattuto in questo esercizio e non riesco a far funzionare la parte di codice relativa alla terza richiesta:
Si scriva una funzione che verifica se tre valori possono essere la misura dei lati di un triangolo. Si ricorda che in un triangolo la somma dei due lati più corti è sempre maggiore del lato più lungo. A questo scopo si definiscano:
  • una funzione che trova il massimo di tre numeri (fatto)
    una funzione che trova il minimo di tre numeri (fatto)
    una funzione che trova il valore intermedio di tre numeri (manca)
    una funzione che riceve tre valori e verifica se questi possono essere misure dei lati di un triangolo.
L'ultima richiesta sono in grado di portarla a termine (anche senza il valore intermedio), il problema riguarda esclusivamente la terza richiesta. La parte di codice che mi crea degli errori in fase di compilazione è proprio quella della funzione che dovrebbe trovare il valore intermedio. Sapete aiutarmi? Vi ringrazio
Qui il mio codice:
#include <stdio.h>
#include <stdlib.h>

double max(double a, double b, double c) {

	double max;

	if(a > b && a > c) {
		max = a;
	}
	if(b > a && b > c) {
		max = b;
	}
	if(c > a && c > b) {
		max = c;
	} 	
	return max;
}

double min(double a, double b, double c) {

	double min;
	
	if(a < b && a < c) {
		min = a;
	}
	if(b < a && b < c) {
		min = b;
	}
	if(c < a && c < b) {
		min = c;
	}
	return min;
}

double mid(double a, double b, double c) {

	double max = max(a, b, c);
	double min = min(a, b, c);
	double mid;
	
	if(a < max(a, b, c) && a > min(a, b, c)) {
		mid = a;
	}
	if(b < max(a, b, c) && b > min(a, b, c)) {
		mid = b;
	}
	if(c < max(a, b, c) && c > min) {
		mid = c;
	}	
	return mid;
}

int main(int argc, char *argv[]) {

	double a, b, c, max, min, med;
	
	a = atof(argv[1]);
	b = atof(argv[2]);
	c = atof(argv[3]);
	
	max = max(a, b, c);
	min = min(a, b, c);
	mid = mid(a, b, c);
	
	printf("Il MAX e' %f\n", max);
	printf("Il min e' %f\n", min);
	printf("Il Med e' %f\n", mid);
	
	return 0;
}

2 Risposte

  • Re: Funzione per trovare il valore intermedio tra 3 numeri

    Ecco una versione che funziona.
    - sii un po' meno generoso con l'utilizzo di parole riservate, per es 'min' e 'max'
    - double max = max(a, b, c); non puo' funzionare!
    - prova anche con argomenti parzialmente uguali, tipo 12, 12, 15
    - compila il tuo code prima di pubblicarlo qui; il tuo compiler ti darà messaggi importanti.
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    #pragma warn(disable:2216)   	// retval never used
    #pragma warn(disable:2118)    	// para not referenced
    #pragma comment(linker, "/subsystem:console" )
    
    double min_la_tua (double a, double b, double c) {
    
           double _min;	// Local '_min' is potentially used without being initialized
           
           if(a < b && a < c) {
              _min = a;
           }
           if(b < a && b < c) {
              _min = b;
           }
           if(c < a && c < b) {
              _min = c;
           }
           return _min;
        }
    
    double max (double a, double b, double c) {
           double _max = a;
           if (b > _max) _max = b;
           if (c > _max) _max = c;
           return _max;
    }
    
    double min (double a, double b, double c) {
           double _min = a;
           if (b < _min) _min = b;
           if (c < _min) _min = c;
           return _min;
    }
    
    double mid(double a, double b, double c) {
           double _max = max(a, b, c);
           double _min = min(a, b, c);
           double _mid = c;
    
           if (a < _max && a > _min) _mid = a;
           if (b < _max && b > _min) _mid = b;
           // non necessario: if (c < _max && c > _min) _mid = c;
           return _mid;
    }
    
    int main(int argc, char *argv[]) {
           double a, b, c, max_, min_, mid_;
           
           a = atof(argv[1]);
           b = atof(argv[2]);
           c = atof(argv[3]);
           
           max_ = max(a, b, c);
           min_ = min(a, b, c);
           mid_ = mid(a, b, c);
           
           printf("Il MAX e' %f\n", max_);
           printf("Il min e' %f\n", min_);
           printf("Il Med e' %f\n", mid_);
           _getch();      
           return 0;
    }
    
  • Re: Funzione per trovare il valore intermedio tra 3 numeri

    Ti ringrazio molto!!!
Devi accedere o registrarti per scrivere nel forum
2 risposte