Aiutino Pascal

stellacometa
Non riesco a risolvere questo problema:

Calcolare il MCD di due numeri a, b utilizzando l'algoritmo di Euclide..

Mi dareste una mano commentata??

Grazie in anticipo a tutti.. :wink:

Risposte
freddofede
Dai che è facile ;-) ... intanto scriviti passo-passo le operazioni che fai nell'applicare l'algoritmo manualmente... poi prova a pensare, per ognuno di questi passi, a come sarebbe possibile tradurlo nel linguaggio di programmazione.

Semmai riporta qua le tue elucubrazioni...

Sk_Anonymous
Esiste un metodo alternativo più semplice che permette di calcolare anche il mcm.
Ecco il codice:

program MCDmcm;
var a,b,a1,b1,x,y:integer;
begin
write('Primo nunero=');readln(a);a1:=a;
write('Secondo numero =');readln(b);b1:=b ;
if a=b then x:=a
else
repeat
if a>b then a:=a-b else b:=b-a;
until a=b ;
x:=b; y:=((a1*b1) div x);
writeln('MCD(',a1,',',b1,')','=',x);
writeln('mcm(',a1,',',b1,')','=',y);
readln;
end.


Ciao

freddofede
Sarebbe stato più utile ci fosse arrivata da sola, soprattutto visto il livello del problema.

Sk_Anonymous
Non ho suggerito la soluzione a Stellacometa ma piuttosto un altro metodo che può essere utile anche ad altri forumisti.
Scommetto che anche lore ha ora qualche argomento in più da utilizzare per il calcolo del MCD e del mcm.
Pur non avendone certo bisogno .O sì ? :D
Ciao

Jazz_lover
disegnati l'algoritmo con tutte le operazioni necessarie, se hai problemi chiedi pure :wink:

stellacometa
Sto provando a mettere in piedi questo programmino..lo so che è estramemente facile lore, ma forse ci sarà qualche errore...se continua a non funzionare lo posto qui così magari vediamo insieme gli errori..

stellacometa
A che ci siamo.. Ho da fare questo programma: "Scrivere un programma che, memorizzati in due vettori A e B della stessa lunghezza N valori interi, calcoli la somma incrociata degli elementi: a[1]+b[n], a[2]+b[n-1] ecc"

Io ho provato a fare così:

program Project;
const n=4;
type vettore= array[1..n] of integer;
var a, b, somma: vettore;
var i: integer;
begin
for i:=1 to n do
begin
writeln ('inserisci elemento del vettore');
readln (a);
end;
for i:=1 to n do
begin
writeln ('inserisci elemento del vettore');
readln (b);
end;
for i:=1 to n do
somma:= a+b[n-i+i];
for i:=1 to n do
writeln (somma, '');
readln
end.

Ho provato a fare la somma caricando per ogni vettore i numeri 1, 2, 3, 4; alla fine però quando mi stampa la somma ricevo in output 5, 6, 7, 8. Come mai? Cosa sbagliio?

kanon4
for i:=1 to n do
somma:= a+b[n-i+i];

credo dovrebbe essere

somma:=a+b[n-i+1]

stellacometa
Giààà...Ecco l'errore..Mille grazie frodo!

freddofede
"manlio":
Non ho suggerito la soluzione a Stellacometa ma piuttosto un altro metodo che può essere utile anche ad altri forumisti.
Scommetto che anche lore ha ora qualche argomento in più da utilizzare per il calcolo del MCD e del mcm.
Pur non avendone certo bisogno .O sì ? :D
Ciao


Io ho sempre bisogno di nuovi metodi, ancorché su problemi banali :-).
Comunque è sempre una soluzione, e penso sarebbe stato meglio postarla alla fine, anche se stellacometa ha abbastanza testa da non copiare.

Stellacometa: facile dipende ovviamente dal punto in cui sei. Intendevo nel senso che è bene imparare fin dall'inizio a risolvere questi problemi, per prendere subito la mano nella progettazione algoritmica.

stellacometa
lore non sai quanto pagherei per sapere com'è che sei così bravo in info... :-D
Cmq, ho provato a fare il programmino..ditemi se può andare:

Program Euclide;
var a, b, m: integer;

Procedure scambia (var s,t:integer);
var aus:integer;
begin
aus:=s;
s:=t;
t:=aus;
end;

function MCD (x,y:integer):integer;
var r:integer;
begin
if x scambia (x,y);
r:= x mod y;
while r<>0 do
begin
x:=y;
y:=r;
r:=x mod y;
end;
MCD:=y;
end;

begin
writeln ('inserisci il valore di A');
readln (a);
writeln ('inserisci il valore di B');
readln (b);
writeln ('il mcd fra',a,'e',b,'e''',MCD(a,b));
readln

end.

freddofede
lore non sai quanto pagherei per sapere com'è che sei così bravo in info...


Non pagare, perché non sono bravo come dici :).

Solo che mi sto laureando in informatica, e queste cose (in realtà un po più complesse) ce le danno come pane e companatico.

L'algoritmo comunque sembra andar bene.

stellacometa
Ok...allora siamo colleghi (a distanza), solo che io sono ancora al primo anno...

Grazie dell'aiuto!

freddofede
Ok...allora siamo colleghi (a distanza), solo che io sono ancora al primo anno...


Mi fa piacere :-) in bocca al lupo allora ;-) .

Comunque mi sembra strano vi facciano usare Pascal... ma è un corso di programmazione diciamo "teorico" o uno di laboratorio?

stellacometa
Entrambi...in aula studiamo il linguaggio e in laboratorio, tramite Delphi, mettiamo in pratica..Perche, tu che hai studiato al primo anno??

freddofede
"stellacometa2003":
Entrambi...in aula studiamo il linguaggio e in laboratorio, tramite Delphi, mettiamo in pratica..Perche, tu che hai studiato al primo anno??


Noi il PC lo abbiamo acceso solo il secondo semestre. Il primo seguimmo corsi a livello matematico, e un corso di programmazione teorico, con lo pseudocodice. E se vuoi saperlo, questa scelta non mi è disgarbata...

Più che altro, per quanto riguarda il tuo corso, mi sorprende ti facciano usare proprio Pascal invece di, che ne so, C, C++, o un Java un po semplificato... di solito il Pascal si usa alle superiori, mentre invece sarebbe meglio secondo me iniziaste all'uni con un qualcosa un po più al di sopra del semplice linguaggio di programmazione didattico (anche in vista dei corsi futuri)... non capisco perché questa scelta, insomma.

stellacometa
A chi lo dici..non sai quante assemble si sono tenute per modificare questo programma, eppure... Cmq, rieccomi con un programmino con qualche...ORRORE:

Program ricerca;

const m=2;
const n=2;
type matrice = array[1..n,1..m] of char;
var mat : matrice;
var i,j: integer;
var ele: char;
var flag: boolean;

begin
for i:=1 to n do
for j:=1 to m do
begin
writeln ('inserisci elemento della matrice di riga ',i,' e colonna ',j);
readln (mat[i,j]);
end;

writeln ('inserisci elemento da cercare');
readln (ele);

i:=0;
j:=0;
flag:=false;
while (i begin
i:=i+1;
j:=j+1;
if mat[i,j]=ele then
flag:=true;
end;

if flag then
writeln ('elemento presente in riga', i,'e colonna', j)
else
writeln ('elemento non presente');

readln
end.

Devo cercare in pratica in questa matrice se è presente un carattere..Però sembra piu un cumulo di errori piuttosto che un prgramma.. Una mano per la correzione?? :-)

stellacometa
ho provato a fare come dici tu ma non appena inserisco l'elemento da cerca e premo invio mi si chiude il programma..

codino75
OT:
cmq, il vero divertimento lo avrai quando programmerai in assembler.

stellacometa
"codino75":
OT:
cmq, il vero divertimento lo avrai quando programmerai in assembler.


Non vedo l'ora!!! :twisted:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.