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