Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [C] min e max tra 3 num pt2

    Allora ho questa funzione in un file chiamato func.c:
    codice:
    int min (int a, int b, int c)
    {
    int min;
    
    /* DETERMINAZIONE DEL MINIMO */
    	if (a<b) if (a<c){
    	   min = a;} 
    	else if (b<a) if (b<c){
    	   min = b;}
    	else if (c<a) if(c<b){
    	   min = c;}
    return min;
    }
    Poi ho il programma chiamante:
    codice:
    #include <stdio.h>
    #include "func.c"
    
    main()
    {
        int Min;
          
        Min = min(2, 3, 8);
        
        printf("Min: %d\n", Min);
    }
    In questo caso la funzione và bene e mi restituisce

    Min: 2

    ma purtroppo funziona solo se il minimo è a.
    ovvero se la sequenza è:
    2, 3, 8 -> restituisce 2
    ma se è:
    4, 2, 8 -> restituisce 0
    e anche se è:
    5, 6, 2 -> restituisce 0.

    Perchè? Dove sbaglio??

  2. #2
    Fai così:

    main.cpp
    #include <stdio.h>
    #include "funz.h"

    void main() {

    int Nmin = 0;

    Nmin = min(21,34,42);
    printf("Il numero + piccolo è: %d\n", Nmin);

    }
    funz.h

    #include <stdio.h>

    int min(int, int, int);

    int min(int a, int b, int c) {
    if(a<b && b<c) {
    return a;
    }
    else if(b<a && a<c) {
    return b;
    }
    else if(c<b && b<a) {
    return c;
    }
    return -1;
    }
    Bye
    Conquista la folla, e conquisterai la libertà (Proximus - Il gladiatore)
    Il riferimento italiano per i Fans di Final Fantasy
    Scandalos member of APE

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: [C] min e max tra 3 num pt2

    Originariamente inviato da Metallica
    codice:
    int min (int a, int b, int c)
    {
    int min;
    
    /* DETERMINAZIONE DEL MINIMO */
    	if (a<b) if (a<c){
    	   min = a;} 
    	else if (b<a) if (b<c){
    	   min = b;}
    	else if (c<a) if(c<b){
    	   min = c;}
    return min;
    }
    Perchè? Dove sbaglio??
    Dovresti imparare ad indentare un po' meglio il codice, in questo modo ti accorgeresti che stai sbagliando a scrivere il codice (ecco cosa si intende per BASI DELL'INFORMATICA...).

    Questo è il tuo codice meglio indentato:
    codice:
    if (a<b) 
       if (a<c){
          min = a;
       }else 
          if (b<a)
             if (b<c){
                min = b;
             }else
                if (c<a)
                   if(c<b){
                      min = c;
                   }
    Ecco, invece, quello che avresti dovuto scrivere tu:
    codice:
    if (a<b) && (a<c) min = a;
    else {
       if (b<a) && (b<c) min = b;
       else min = c;
    }
    Molto più compatto, molto più leggibile, molto più corretto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Molto più pignolo!!!! :gren: :gren: :tongue:
    Ciao ciao :adhone:

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da sapore di mare
    Molto più pignolo!!!! :gren: :gren: :tongue:
    Ciao ciao :adhone:
    Beh... più che pignolo direi che una buona indentazione, in questo caso, fa la differenza fra un codice CORRETTO e uno SBAGLIATO. :gren:


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    a me aveva detto un ragazzo che non si poteva usare if (COND && COND2) ma if (cond) if (cond)

    non era colpa dell'indentazione

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: Re: [C] min e max tra 3 num pt2

    Originariamente inviato da LeleFT
    codice:
    if (a<b) && (a<c) min = a;
    else {
       if (b<a) && (b<c) min = b;
       else min = c;
    }
    Ciao.

    Ebbene sì! Mancano delle parentesi:
    codice:
    if ((a<b) && (a<c)) min = a;
    else {
       if ((b<a) && (b<c)) min = b;
       else min = c;
    }
    Proviamo a risolverlo senza l'uso dei connettivi logici:
    codice:
    if (a<b) {
       if (a<c) min = a;
       else min = c;
    } else {
       if (b<c) min = b;
       else min = c;
    }
    Ecco il risultato. Nettamente differente da ciò che avevi scritto tu.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8

    asdasd

    ghgh lele vedo che vai deciso! massì spakkali >>> :metallica

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    No... non vado deciso. Ho solo messo in evidenza che a volte l'indentazione di un programma semplifica notevolmente la vita sia al programmatore che redige il codice, sia a chi, poi, lo deve rivedere. Certi errori, come si vede bene, vengono facilmente risolti dall'indentazione stessa, che mette sullo stesso piano tutte le condizioni che sono allo stesso livello logico di esecuzione.

    Siccome penso che in questo forum (come in altri) la regola sia "cercare di aiutare gli altri al meglio, non limitandosi al caso specifico, ma, possibilmente, facendo capire il procedimento con cui vengono risolti i casi particolari, per poterli estendere al caso generale", cerco anch'io di fare la mia parte (visto che ho avuto modo, anch'io come molti, di imparare delle cosucce nuove, leggendo le discussioni poste da altri).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Scusate se mi intrometto, vorrei solo dire che Lele ha perfettamente ragione, una buona identazione aiuta a tenere sott'occhio il flusso logico del programma, cosa molto utile in lunghe catene di if.

    Non è una questione di gusti, infatti nell caso specifico, non solo il codice risulta poco leggibile, ma è anche sbagliato.

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.