Prendere un dato in input ed usarlo in più sub-routine

di il
15 risposte

Prendere un dato in input ed usarlo in più sub-routine

Buonasera !
In un programma in linguaggio C, ho una sub-routine ed un programma principale.
qui il codice:

#include <stdio.h>
#include <math.h>
float TassoSem(float)
{	// FORMULA PER IL CALCOLO DEL TASSO D'INTERESSE DA
	// TASSO ANNUO A TASSO SEMESTRALE
	float a, b;
	printf("\n\n scrivi il tasso annuo in forma decimale :  ");
	scanf("%f", &a);
	b=(pow(1+a,0.5)-1)*100;
	return(b);
}
int main()
{
	float y;
	printf("\n\n tasso semestrale  : %2.5f ", TassoSem(y));
}
Nella sub-routine chiamata TassoSem, acquisisco il dato "tasso annuo" e poi uso la funzione per calcolare il tasso semestrale.
Poi nel MAIN ottengo la stampa del risultato.
Se volessi aggiungere un'altra sub-routine, tipo TassoQuad (per il passaggio da tasso annuo a tasso quadrimestrale), per evitare di inserire in questa sub-routine le istruzioni per ottenere il tasso annuo, sarebbe possibile acquisire in cima al programma la variabile tasso annuo, e poi richiamarla nelle due sub-routine ?

15 Risposte

  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Acquisisci il valore nel main e passa la variabili a tutte le funzioni che vuoi.
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Ma quella y a cosa ti serve?
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    oregon ha scritto:


    Acquisisci il valore nel main e passa la variabili a tutte le funzioni che vuoi.
    Sto provando con questo codice:
    
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    float tassoSem(float n1)
    {
    	float b, x;
    	n1 = x;
    	b = (pow((1 + n1), 0.5)-1)*100;
    	return(b);
    }
    float tassoQuad(float n1)
    {
    	float b, x;
    	n1 = x;
    	b = (pow((1 + n1), 0.33333333)-1)*100;
    	return(b);
    }
    int main()
    {
    	float x, y;
    	printf("\n Scrivi il tasso di interesse in forma decimale :  ");
    	scanf("%.4f", &x);	
    	printf("\n Il tasso Semestrale e' pari ad :  %2.4f per cento", tassoSem(y));
    	printf("\n\n Il tasso Quadrimestrale e' pari ad :  %2.4f per cento", tassoQuad(y));
    }
    
    Non mi calcola il tasso semestrale e quadrimestrale.
    C'è un errore da qualche parte.
    Come si risolve ?
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Come si risolve ?
    Se hai un debugger esegui step a step. Se non hai un debugger piazzi delle printf() per monitorare i cambiamenti delle variabili, es.
    float tassoSem(float n1)
    {
       float b, x;
       printf("tassoSem() n1=%f\n",n1);
       printf("x=%f\n",x);
       n1 = x;
       printf("n1=%f\n",n1);
       b = (pow((1 + n1), 0.5)-1)*100;
       printf("b=%f\n",b);
       return(b);
    }
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    1) Esegui l'input su x e poi passi y alle funzioni ? Che senso ha ?

    2) Che senso ha la linea n1 = x; ?

    Utilizzi un libro per studiare il C o vai a caso?
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Ho iniziato da poco. Abbiate pazienza !!
    Se avete un buon libro da consigliare, dite pure.

    Comunque, l'input viene dato nel MAIN, poi questo input viene usato nelle sub-routine, per poi ritornare nel MAIN come output.
    Il risultato che ho a video è zero per i due tassi. Eppure la formula è corretta.
    Quello che non va è il collegamento tra input ed elaborazione nelle sub.
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Secondo te queste righe cosa fanno?
    tassoSem(y)
    tassoQuad(y)
    n1 = x;
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Ho modificato il printf dell'output in questo modo:
    
    	printf("\n\n  Il tasso Semestrale e' pari ad :  %2.4f per cento", tassoSem(x));
    	printf("\n\n  Il tasso Quadrimestrale e' pari ad :  %2.4f per cento", tassoQuad(x));
    
    ed ho tolto n1 = x;

    comunque il risultato è zero.
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    ?
    scanf("%.4f", &x); 
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Va bene la pazienza ma tu devi studiare da un libro, uno qualsiasi, non puoi sperare di imparare a programmare in C per magia!

    Quale codice usi adesso? Non si capisce più...
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Il codice attuale è:
    
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    double tassoSem(double);
    double tassoQuad(double);
    
    int main()
    {
       double x;
       printf("\n Scrivi il tasso di interesse in forma decimale :  ");
       scanf("%.4d", &x);
       
       printf("\n\n  Il tasso Semestrale e' pari ad :  %2.4d per cento", tassoSem(x));
       printf("\n\n  Il tasso Quadrimestrale e' pari ad :  %2.4d per cento", tassoQuad(x));
    }
    double tassoSem(double n1)
    {
       double s=0;
       s = pow((1 + n1), (0.5))-1;
       return(s*100);
    }
    double tassoQuad(double n1)
    {
       double q=0;
       q = pow((1 + n1), (0.3333333))-1;
       return(q*100);
    }
    
    Ho cambiato il tipo da float a double. Stesso risultato negativo.
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    Documentati meglio sulla scanf
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    ... e anche la printf.

    In pratica, se la specifica % all'interno di scanf e printf non è corretta, hai quei problemi ...
  • Re: Prendere un dato in input ed usarlo in più sub-routine

    E alla fine, l'errore stupido ma non troppo è stato eliminato.
    Il codice qui sotto funziona egregiamente.
    
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    double tassoSem(double);
    double tassoQuad(double);
    int main()
    {
       double x;
       printf("\n Scrivi il tasso d'interesse annuo in forma decimale:  ");
       scanf("%lf",&x);
       
       printf("\n\n  Il tasso Semestrale e' pari ad :  %lf per cento", tassoSem(x));
       printf("\n\n  Il tasso Quadrimestrale e' pari ad :  %lf per cento", tassoQuad(x));
    }
    double tassoSem(double n1)
    {
       double s=0;
       s = pow((1+n1), (0.5))-1;
       return(s*100);
    }
    double tassoQuad(double n1)
    {
       double q=0;
       q = pow((1 + n1), (0.3333333))-1;
       return(q*100);
    }
    
    Ringrazio tutti dell'aiuto.
    Saluti.
Devi accedere o registrarti per scrivere nel forum
15 risposte