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
stellacometa
nessun consiglio per il mio programma?

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

a parte il fatto di mettere i<=n al posto di i mi sembra che la ricerca avvenga solo sulla diagonale principale dell amatrice e non su tutti gli elementi.

stellacometa
Esatto!! Me ne sono accorta adesso anche io...L'ho modificato così:

const m=2;
const n=2;
type matrice = array[1..n,1..m] of char;
var mat : matrice;
var i,j,c,r: integer;
var ele: char;
var flag,prima: 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);

flag:=false;
prima:=false;
for i:=1 to n do
for j:=1 to m do
begin
if mat[i,j]=ele then
if prima=false then
begin
flag:=true;
r:=i;
c:=j;
prima:=true;
end;
end;

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

readln
end.

Aggiungenfìdo anche un pezzettino che mi permette di memorizzare solo la prima occorrenza dell'elemento che cerco...Sembra andare bene!

codino75
premetto che non ho guardato bene il nuovo codice, pero' mi viene un dubbio:
anche nella versione precedente, dove c'era solo la variabile booleana 'flag') di fatto la ricerca terminava appena trovata la prima occorrenza.
non vedo quindi la necessita' di aggiungere anche un'altra variabile booleana.
alex

stellacometa
si però quello di prima era un ciclo in cui appena trovava l'elemento uguale terminava, essendo un while.. Questo invece essendo un ciclo for andrebbe ad aggiornare le varibili di riga e colonna (c, r) ogni qual volta trova l'elemento uguale, quindi darebbe l'ultima occorrenza dell'elemento e non la prima..

stellacometa
Adesso mi trovo alle prese con questo programma: data una matrice 16x16, calcolare la somma delle sue cornici e scriverne il risultato su di un vettore..

Io ho fatto così ma lo vorrei ottimizzare però, per renderlo più generale:

Program eser;
const m=16;
const n=16;
type matrice= array[1..m,1..n] of integer;
var mat: matrice;
var somma: array[1..4] of integer;
var i,j,i1: integer;

begin
randomize;
for i:=1 to m do
for j:=1 to n do
mat[i,j]:=random (50);

i1:=1;
for i:=1 to 1 do
for j:=1 to n do
somma[i1]:=somma[i1]+mat[i,j];

i1:=2;
for j:=1 to 1 do
for i:=1 to m do
somma [i1]:=somma[i1]+mat[i,j];

i1:=3;
for j:=n to n do
for i:=1 to m do
somma [i1]:= somma[i1]+mat[i,j];

i1:=4;
for i:=m to m do
for j:=1 to n do
somma [i1]:=somma[i1]+mat[i,j];

for i1:=1 to 4 do
writeln (somma[i1],'');
readln
end.

che mi consigliate?

stellacometa
wow grazie mille!! Io l'avevo corretto usando il for.. Grazie..Invece che mi consigliate per l'ultimo programma che ho postato?

stellacometa
Giusto!!! Così viene molto meglio!!!

lorven

 
   i1 := 1;
   for j := 1 to n do
      somma[i1] := somma[i1] + mat[1,j];
   i1:=2;
   for i := 1 to m do
      somma [i1] := somma[i1] + mat[i,1];
   i1:=3;
   for i := 1 to m do
      somma [i1] := somma[i1] + mat[i,n];
   i1:=4;
   for j := 1 to n do
      somma [i1] := somma[i1] + mat[m,j];


Ancor più semplicemente:
  
   for j := 1 to n do
       somma[1] := somma[1] + mat[1,j];
   for i := 1 to m do
        somma [2] := somma[2] + mat[i,1];
   for i := 1 to m do
       somma [3] := somma[3] + mat[i,n];
   for j := 1 to n do
        somma [4] := somma[4] + mat[m,j];

e, naturalmente, andrebbe anche prima inizializzato il vettore somma!

:-)

stellacometa
sono in crisi..orrori dopo orrori..

program consec;

const n= 10;
type
vettore = array[1..n] of char;
var
V:vettore;
i,k:integer;

begin

for i:= 1 to n do
begin
writeln('immetti il carattere');
readln(V);
end;

k:=0; //aumentare di 1 k per ogni valore consecutivo uguale
i:=1;
repeat
if (V= V[i+1]) then
begin
k:=k+1;
if k=4 then
writeln(' ci sono 4 elementi consecutivi uguali');
end
else
k:=0;
i:=i+1;
until (k=4) or (i>n);

if k< 3 then
writeln(' non ci sono 4 elementi consecutivi uguali');
readln;
end.

Devo stabilire se in un vettore di caratteri vi sono almeno 4 elementi consecutivi uguali..Ma non so più riprendermi...HELP

lorven
Un algoritmo possibile può essere il seguente.
;-)

codino75
se ti interessa ti propongo un programma un po' complicato per smazzarti definitivamente con le matrici...
ma forse e' meglio se c arrivi per gradi...
sum diabolicus!!!!!!

freddofede
"codino75":

se ti interessa ti propongo un programma un po' complicato per smazzarti definitivamente con le matrici...
sum diabolicus!!!!!!


$LDL^{T}$? :-D

[quote]cmq, il vero divertimento lo avrai quando programmerai in assembler.
Non vedo l'ora!!! Twisted Evil[/quote]

Mi sa che t'ha da passare sta voglia :D ...

codino75
risolvere in modo automatico il crucipuzzle, che e' un gioco di questo tipo:
http://www.nienteperniente.it/en_04_giu ... online.asp
dove le parole possono trovarsi nascoste in verticale, in orizzontale e in diagonale, e per ciascuna di queste modalita' in entrambi i versi (alto-basso e viceversa, e analogamente per quelle in orizzontale ed in diagonale).
buon divertimento (in verita' non e' per niente divertente ma da' abbastanza soddisfazione quando finito).
p.s.: non chiedo di risolvere completamente il gioco, ma di trovare, data una matrice di caratteri ed una parola in input, se la parola compare nella matrice (secondo le regole viste prima) e, se si', dove ed in che direzione e verso.
lo feci anni fa e ci misi un bel po'....
alessandro

stellacometa
Ragazzi..Vi ringrazio ma mi lascio il problema di codino da risolvere fra qualche settimana perchè mi hanno assegnato un progetto per queste vacanze che mi sta facendo uscire pazza..in pratica dovrei programmare la dama... O_o

codino75
"stellacometa2003":
Ragazzi..Vi ringrazio ma mi lascio il problema di codino da risolvere fra qualche settimana perchè mi hanno assegnato un progetto per queste vacanze che mi sta facendo uscire pazza..in pratica dovrei programmare la dama... O_o


ok.
aspettiamo impazienti la prima versione:
dama_1.0.pas
auguri!

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