MCD col C :D

Comprimi
X
 
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi
  • innet
    Friend Member
    • Sep 2006
    • 2358

    #1

    MCD col C :D

    #include <stdio.h>

    int main()
    {
    int A, B;

    printf ("Valore di A: ");
    scanf ("%d", &A);
    printf ("Valore di B: ");
    scanf ("%d", &B);

    THEGAME:

    if ( B == 0)
    printf ("Il MCD di A e B è: %d", A);

    else {
    A = B;
    B = A%B;
    goto THEGAME;
    }

    return (0);
    }

    con A=10 B=11
    mi dice "Il MCD di A e B è:11"

    con A=20 B=39
    mi dice "Il MCD di A e B è:39"

    praticamente mi da sempre il valore iniziale che ho dato a B D: perchè?
  • thedeerhunter
    Fragrant Darkness
    • Jul 2008
    • 8646

    #2
    Originariamente inviato da innet
    THEGAME:

    if ( B == 0)
    printf ("Il MCD di A e B è: %d", A);

    else {
    A = B;
    B = A%B;
    goto THEGAME;
    }
    Quest'algoritmo va in loop, non capisco come fai a vedere che valori ti caccia fuori.

    a=2 b=4
    else-> a=4; b=16;
    b!=0
    else-> a=16; b=256;
    e via dicendo.
    [Amdir]Firma Irregolare[/Amdir]

    Commenta

    • innet
      Friend Member
      • Sep 2006
      • 2358

      #3
      A%B è il resto della divisione A/B

      Commenta

      • thedeerhunter
        Fragrant Darkness
        • Jul 2008
        • 8646

        #4
        Originariamente inviato da innet
        A%B è il resto della divisione A/B
        Sono un po arrugginito, in ogni caso sulla documentazione dice che è multiplicative http://www.cplusplus.com/doc/tutorial/operators/
        [Amdir]Firma Irregolare[/Amdir]

        Commenta

        • innet
          Friend Member
          • Sep 2006
          • 2358

          #5
          dice

          a = 11 % 3;
          the variable a will contain the value 2, since 2 is the remainder from dividing 11 between 3.

          e fin qui lo sapevo >.> ma non capisco dove sia il problema nel codice

          Commenta

          • thedeerhunter
            Fragrant Darkness
            • Jul 2008
            • 8646

            #6
            Originariamente inviato da innet
            praticamente mi da sempre il valore iniziale che ho dato a B D: perchè?
            Penso di aver capito, non ti da il valore iniziale di B, ti da A, il problema è che quando fai l'assegnazione A=B e poi fai B=A%B ti ritrovi sempre 1 col resto di 0, poichè dividi B per se stesso in pratica, e ovviamente un numero diviso se stesso ti da sempre 1 con resto di 0.

            a=2 b=4
            a=b
            b=4/4=1 resto 0

            a=4
            [Amdir]Firma Irregolare[/Amdir]

            Commenta

            • procariote
              BANNED
              • Nov 2010
              • 198

              #7
              perchè dovresti rivederti la definizione algebrica di MCD.

              Commenta

              • innet
                Friend Member
                • Sep 2006
                • 2358

                #8
                Ah ma che idiota che sono, ok allora creo una funzione per le assegnazioni e faccio una ricorsione grazie mille

                ps: procariote hai presente euclide? :V
                Ultima modifica di innet; 12-12-2010, 21:26.

                Commenta

                • procariote
                  BANNED
                  • Nov 2010
                  • 198

                  #9
                  Originariamente inviato da innet
                  Ah ma che idiota che sono, ok allora creo una funzione per le assegnazioni e faccio una ricorsione grazie mille

                  ps: procariote hai presente euclide? :V
                  si che ce l'ho presente, credo che sia tu a non averlo chiarissimo, così come non hai chiara la programmazione in c.

                  Commenta

                  • Amdir
                    BANNED
                    • Dec 2005
                    • 13375

                    #10
                    Mado' i goto in c? Ma siamo pazzi?

                    Amdir

                    Commenta

                    • Pretzerg
                      Cool Member
                      • Jul 2009
                      • 546

                      #11
                      Originariamente inviato da innet
                      A = B;
                      B = A%B;
                      Cambia questo con:
                      codice:
                      C = A;
                      A = B;
                      B = C%B;
                      e dichiara anche C come int e funziona. Ma fai un piacere a tutti noi: usa un while! Non si può vedere un goto in C! >_<

                      Originariamente inviato da procariote
                      si che ce l'ho presente, credo che sia tu a non averlo chiarissimo, così come non hai chiara la programmazione in c.
                      Sulla programmazione potresti anche aver ragione, ma l'algoritmo è pressoché corretto (sistemando come sopra la questione della variabile temporanea che si è dimenticato di usare). L'errore è banale, ma l'idea è quella giusta.
                      I fix non entrano mai operativi prima che ci sia stato un crash o un riavvio del server.
                      I fix non entrano mai operativi prima che ci sia stato un crash o un riavvio del server.
                      I fix non entrano mai operativi prima che ci sia stato un crash o un riavvio del server.
                      I fix non entrano mai operativi prima che ci sia stato un crash o un riavvio del server.
                      I fix non entrano mai operativi prima che ci sia stato un crash o un riavvio del server.

                      Quindi, prima che mi chiediate di nuovo perché il problema non è stato ancora risolto, assicuratevi che il server sia andato down almeno una volta da allora. Grazie.

                      Commenta

                      • Nightcrawler
                        BANNED
                        • May 2010
                        • 392

                        #12
                        ahahahah il goto

                        Commenta

                        • innet
                          Friend Member
                          • Sep 2006
                          • 2358

                          #13
                          scusate se in un mese non sono ancora diventato un genio del C, no davvero eh, scusate :V beoti...

                          grazie comunque per la soluzione ma l'avevo già trovata, non mi ero accorto del A = B seguito dal B = A%B

                          PS: che ha il goto che non va? Invece di sparare m3rdate a destra e a manca spiegate :V

                          Commenta

                          • thedeerhunter
                            Fragrant Darkness
                            • Jul 2008
                            • 8646

                            #14
                            E' un costrutto superato e poco efficiente, immaginati programmi lunghi e modulari con i goto, sai che casino, nella programmazione corrente non si usa.
                            [Amdir]Firma Irregolare[/Amdir]

                            Commenta

                            • innet
                              Friend Member
                              • Sep 2006
                              • 2358

                              #15
                              asd spaghetti code, ok ok grazie mille

                              Commenta

                              Sto operando...