annuncio

Comprimi
Ancora nessun annuncio.

MCD col C :D

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • 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è?

  • #2
    Originariamente inviato da innet Visualizza il messaggio
    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


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

      Commenta


      • #4
        Originariamente inviato da innet Visualizza il messaggio
        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


        • #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


          • #6
            Originariamente inviato da innet Visualizza il messaggio
            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


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

              Commenta


              • #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, 23:26.

                Commenta


                • #9
                  Originariamente inviato da innet Visualizza il messaggio
                  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


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

                    Amdir

                    Commenta


                    • #11
                      Originariamente inviato da innet Visualizza il messaggio
                      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 Visualizza il messaggio
                      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


                      • #12
                        ahahahah il goto

                        Commenta


                        • #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


                          • #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


                            • #15
                              asd spaghetti code, ok ok grazie mille

                              Commenta

                              Sto operando...
                              X