Calcolare area, circonfernza e diamentro cerchio

di il
19 risposte

Calcolare area, circonfernza e diamentro cerchio

Salve a tutti, dato che è il mio primo post ne approfitto per salutare ancora tutti. Sono alle primissime armi con il C e mi sono imbatutto in un programma che mi chiede di calcolare l'area, la circonferenza e il diametro di un cerchio dato il raggio che deve essere un intero. Il problema è che mi fornisce a video il valori dell'area e della circonferenza nella forma x,000000 senza visualizzare mai le cifre decimali, ma solo zeri.
int main()
{
double PI;
int diametro;
double circonferenza;
double area;
int raggio;
PI=3,14159;

    printf("inserire il raggio: ");
    scanf("%d", &raggio);
    printf("\ndiametro: %d", diametro=2*raggio);
    printf("\ncirconferenza: %f", circonferenza=2*PI*(double)raggio);
    printf("\narea: %f", area=PI*(double)raggio*(double)raggio);
    return 0;
Io ho provato a usare degli operatori di cast per risolvere il problema, ma niente...così come ho provato non va. Il fatto è che non ho capito molto bene come usare questi operatori in questo programma. Qualcuno potrebbe darmi una mano?
Un saluto,
Francesco.

19 Risposte

  • Re: Calcolare area, circonfernza e diamentro cerchio

    
    PI=3,14159;
    
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Credo che non tu non debba usare la virgola per il pi greco ma il punto, io poi sono inesperto quanto te XD magari ci sn altri errori non ho visto ho solo seguito la dritta di ixamit
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Ciao printf,
    Scrivere '3,14' è un trabocchetto del C che devi conoscere.

    Se scrivi:
    
    a = (3,14);
    b = (2,10,20);
    
    in 'a' troverai 14 e in 'b' 20.

    La virgola è un operatore del C che ti permette di valutare espressioni in sequenza, quella che alla fine viene assegnata è solo l' ultima, Ha senso usarlo solo quando le espressioni hanno effetto collaterali, ad esempio:
    
    b = 0;
    a = (b++, d = 4, b + d);
    
    in 'a' troverai 5;
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Che intendi con effetti collaterali?

    Quindi mettendo le virgole esegue operazioni in sequenza?

    b=0;
    a=(0++--->1,d=4, 4+1)
    a=5?

    ho capito bn?
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Ciao zazi77,
    Una espresione produce un risultato che poi puoi assegnare a una variabile oppure testare in un 'if', ad esempio 3 + 5 produce 8 e 'a + b' produce la somma dei valori contenuti in a è b. Oltre a produrre un risultato una espressione può avere effetti collaterali ovvero può alterare il valore di qualche variabile, as esempio 'a + b++' restituisce la somma di 'a' e 'b' e inoltre incrementa il valore di b.
    Una espressione inoltre può contenere una chiamata a funzione ad es '3 + MyFunc(5)', quindi la valutazione di questa espressione può avere come effetto collaterale la scrittura sullo schermo o la formattazione del computer.

    In C non è obbligatorio assegare o testare una espressione, se uno vuole può scrivere:
    
    3;
    
    Non serve a niente ma è corretto, l' espressione (composta da un solo termine) viene valutata e il risultato buttato via.

    per quanto riguarda l' operatore virgola hai capito giusto:
    
    b = 0;
    a = (b++, d = 4, b + d);
    

    - viene valutata prima l' espressione b++, il suo risultato (0) viene buttato ma ha come effetto quello di incrementare 'b'
    - viene poi valutata 'd = 4' il suo risultato (4) viene buttato ma ha come effetto quello di assegnare 'd'
    - viene valutata 'b + d' e il suo risultato (5) viene assegnato ad 'a'.

    Corrisponde a:
    
    b = 0;
    b++;
    d = 4;
    a = b + d;
    
  • Re: Calcolare area, circonfernza e diamentro cerchio

    E adesso ti propongo un giochino:
    
    int a, b;
    a = 5,3;
    b = (5,3);
    
    Mi devi spiegare perchè 'a' vale 5 e 'b' vale 3.
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Vi ringrazio per le risposte
    Per il gochino, provo a rispondere per vedere se ho capito. b vale tre perchè ad essa viene assegnato prima il valore 5 e dopo il valore3 e quindi rimane 3. per a ci penso ancora un attimo...
    grazie ancora a tutti....
  • Re: Calcolare area, circonfernza e diamentro cerchio

    printf ha scritto:


    b vale tre perchè ad essa viene assegnato prima il valore 5 e dopo il valore3
    Sbagliato!
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Una sottile differenza tra separatore ed operatore.
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Ok allora vediamo un po scrivere a=5,3; e come scrivere
    a=5; 
    a=3; 
    quindi in memoria viene assegnato ad a il valore 5.

    Nel caso di b(5,3) invece per una regola precisa del c viene assegnato l'ultimo valore quindi 3

    è così?
  • Re: Calcolare area, circonfernza e diamentro cerchio

    O meglio il 5 viene valutato ma poi viene buttato
  • Re: Calcolare area, circonfernza e diamentro cerchio

     int main()
        {
        double PI;
        int diametro;
        double circonferenza;
        double area;
        int raggio;
        PI=3,14159;// devi indicare il tipo esempio float pi=3.14159 puoi anche usare double
            printf("inserire il raggio: ");
            scanf("%d", &raggio);
    // i calcoli ti conviene farli fuori dalle printf perchè cosi il listato sarà più chiaro sia per te che per quelli che ti vogliono aiutare.
    // diametro=2*raggio
    // circonferenza=2*(pi*r)
    // area=pi*(raggio *raggio) oppure area =pi*pow(raggio)
            printf("\ndiametro: %d", diametro=2*raggio);
            printf("\ncirconferenza: %f", circonferenza=2*PI*(double)raggio);
            printf("\narea: %f", area=PI*(double)raggio*(double)raggio);
            return 0;
  • Re: Calcolare area, circonfernza e diamentro cerchio

    zazi77 ha scritto:


    ok allora vediamo un po scrivere a=5,3; e come scrivere
    
    a=5; 
    a=3;
    
    Sbagliato! .

    zazi77 ha scritto:


    Nel caso di b=(5,3) invece per una regola precisa del c viene assegnato l'ultimo valore quindi 3
    o meglio il 5 viene valutato ma poi viene buttato
    Benino! , qui non ha detto cose sbagliate, però per vincere il premio devi dire la regola precisa e far capire dove è la differenza tra i due assegnamenti:
    
    a = 5,3;
    b = (5,3);
    
    se come dici 'per una regola precisa del c viene assegnato l'ultimo valore quindi 3' perchè 'a' vale 5?

    Dai, ancora uno sforzo e poi vinci una birretta!
  • Re: Calcolare area, circonfernza e diamentro cerchio

    Ehm ok cerco di seguire la dritta di Ixamit.

    Allora per cosa differiscono le due espressioni?

    per le parentesi.

    Quindi è probabile che a seconda della presenza o meno di queste la virgola assuma un particolare significato.


    Nel caso a= 5,3; la virgola fa da separatore ossia è solo un modo di più compatto per scrivere istruzioni in sequenza.
    ad es posso scrivere int i=0,j=0,k=0; o
    int i=0;
    int j=0;
    int k=0;
    
    o nel nostro caso
    int a=5;
    int a=3;
    nel caso invece di (,) ossia b=(5,3) la virgola fa da operatore ossia legge da sinistra a destra ma assegna (operatore) a b solo l'ultimo valore, quello più a destra.

    anche se per il primo caso mi sembra di aver ripetuto la stessa cosa che ho detto prima,e tu mi dici che è sbagliato, quindi magari nel caso di a=5,3; essendo la virgola separatore ,viene immagazzinato in memoria il primo valore che incontra e gli altri vengono ignorati
Devi accedere o registrarti per scrivere nel forum
19 risposte