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

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
Re: programma c per il MCD
Inviato: venerdì 30 maggio 2014, 12:34
da ixamit
E' identico

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!

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!

l'ho messo solo perché era ancora più esplicito
Si, ho capito
volevo solo far notare che e' identico anche nella definizione dei nomi delle variabili

Re: programma c per il MCD
Inviato: venerdì 30 maggio 2014, 12:52
da 1001001
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