Pagina 1 di 2

programma c per il MCD[RISOLTO]

Inviato: venerdì 30 maggio 2014, 11:34
da fenics
Salve ragazzi, ho fatto questo compito da presentare alla classe che calcola in C il MCD tra 2 numeri. Aiutatemi a fare bella figura per favore :popopo:
Il programma da me implementato è il seguente, ed effettivamente sembra che porta, anche se c'è qualcosa che non mi convince.

Codice: Seleziona tutto

#include<stdio.h>

int main()
{
    int x, y, MCD, c=0;

    printf("Inserisci il primo numero\n");
    scanf("%d", &x);
    printf("Inserisci il secondo numero\n");
    scanf("%d", &y);

    if(x%y==0)
    {
        MCD=x;
    }
    else if(y%x==0)
    {
        MCD=y;
    }
    printf("%d", MCD);
        return 0;
}
potete provarlo se volete.

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 11:39
da 1001001
Ciao!
Non ho capito quale sia la tua domanda, ma

Codice: Seleziona tutto

mattia@replicant:Scrivania$ gcc mcd.c -o mcd
mattia@replicant:Scrivania$ ./mcd 
Inserisci il primo numero
12
Inserisci il secondo numero
16
mcd = 0
direi che c'è qualcosa che non va ;)

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 11:51
da fenics
a me porta 2 e non 0

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 11:58
da 1001001
Che è comunque sbagliato, visto che dovrebbe essere 4 :)

Il motivo della differenza fra il mio risultato e il tuo è che usi la variabile MCD senza averla inizializzata, quindi non sai che valore ha finché non gliene assegni uno (e nel caso di 16 e 12 non entra mai nè nell'if nè nell'else, quindi a MCD non viene mai dato un valore) anche se lo standard prevederebbe che il compilatore inizializzi a 0 di default gli int dichiarati nel main

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:01
da fenics
giusto, e allora?? secondo il modello di euclide??

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:04
da 1001001
Sì, quello è uno degli algoritmi più usati, perché è facile e veloce...ma il tuo codice non usa l'algoritmo di Euclide :) quello che hai scritto controlla semplicemente se uno dei due numeri è divisore dell'altro

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:08
da fenics
aspetta aspetta, ci sono quasi, lo sto facendo, poi dimmi dove ho sbagliato

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:15
da fenics
no, non ce la faccio a risolvere con il metodo di euclide, ditemi voi come si fa

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:25
da 1001001
Cosa vuol dire che non ce la fai? Quali sono i problemi che incontri?

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:26
da ixamit

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:26
da fenics
non so quale sia il metodo di euclide, ho visto su internet e ho capito qual'è il petodo con carta e penna. Ma non so metterlo in scrittura come cdice

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:30
da 1001001
Oltre al link di ixamit, guarda anche qua: http://en.wikipedia.org/wiki/Euclidean_ ... mentations

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:34
da ixamit

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:36
da fenics
Che vuol dire a=|a|, b=|b|

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:41
da 1001001
E meno male, se no ci sarebbe un problema! :D l'ho messo solo perché era ancora più esplicito :)

fenics ha scritto:Che vuol dire a=|a|, b=|b|
Di prendere i valori assoluti dei due numeri. Il massimo comun divisore è lo stesso sia che tu prenda a e b, che |a| e |b| (e anche |a| e b oppure a e |b|), ma l'algoritmo funziona solo se entrambi i numeri sono positivi

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:49
da ixamit
1001001 ha scritto: E meno male, se no ci sarebbe un problema! :D l'ho messo solo perché era ancora più esplicito :)
Si, ho capito :D
volevo solo far notare che e' identico anche nella definizione dei nomi delle variabili
:ciao:

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:52
da 1001001
ixamit [url=http://forum.ubuntu-it.org/viewtopic.php?p=4591146#p4591146][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Si, ho capito :D
volevo solo far notare che e' identico anche nella definizione dei nomi delle variabili
:ciao:
Ah ok, avevo capito male, scusami :)

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 12:56
da fenics
quindi questa parte del codice va bene??

Codice: Seleziona tutto

#include<stdio.h>

int main()
{
    int x, y, t, MCD;

    printf("Inserisci il primo numero\n");
    scanf("%d", &x);
    printf("Inserisci il secondo numero\n");
    scanf("%d", &y);

        if(x>y)
        {
            while(y=!0)
            {
                t=y;
                y=x mod y;
                x=t;
            }
            MCD(x,y)=x;
        }
}
a me da un errore su questa riga y=x mod y; dice expeted ; before mod. Anche se non vedo l'errore

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 13:05
da 1001001
Il modulo in C si fa con "%", non "mod". Il simbolo di diverso è "!=" non "=!". MCD (x,y) non ha senso, MCD è una variabile

Re: programma c per il MCD

Inviato: venerdì 30 maggio 2014, 13:17
da fenics
boh ho fatto esattamente come riportato nel link che avete postato cioè così, ma mi da questa volta l'erruroe su function

Codice: Seleziona tutto

#include<stdio.h>

int main()
{
    int x, y, t, MCD;

    printf("Inserisci il primo numero\n");
    scanf("%d", &x);
    printf("Inserisci il secondo numero\n");
    scanf("%d", &y);

    function gcd(x, y)
    while (x!=y)
        t:=y;
        y:=x%y;
        x:=t;
        return y
}
mi chiedevo se non è meglio che mi postate il codice con i relativi commenti così che io possa studiare su quello