En aquest tema, explorarem com implementar algorismes en ALGOL. Aprendrem a traduir algorismes comuns en codi ALGOL, i veurem exemples pràctics que ens ajudaran a comprendre millor com treballar amb aquesta llengua de programació.
Objectius del Tema
- Comprendre la importància dels algorismes en la programació.
- Aprendre a implementar algorismes bàsics en ALGOL.
- Practicar la traducció d'algorismes a codi ALGOL.
- Resoldre problemes comuns utilitzant algorismes.
Contingut
- Què és un Algorisme?
- Algorismes de Cerca
- Cerca Lineal
- Cerca Binària
- Algorismes d'Ordenació
- Ordenació per Bombolla
- Ordenació per Inserció
- Algorismes de Divisió i Conquesta
- Quicksort
- Exercicis Pràctics
- Conclusió
Què és un Algorisme?
Un algorisme és una seqüència finita de passos ben definits que resolen un problema o completen una tasca. Els algorismes són fonamentals en la programació perquè proporcionen una manera estructurada de resoldre problemes.
Algorismes de Cerca
Cerca Lineal
La cerca lineal és un algorisme senzill que busca un element en una llista recorrent-la seqüencialment fins a trobar l'element desitjat o arribar al final de la llista.
Exemple de Cerca Lineal en ALGOL
begin
integer array A[1:10];
integer i, n, key, pos;
boolean found;
A := (3, 5, 7, 9, 11, 13, 15, 17, 19, 21);
n := 10;
key := 15;
found := false;
pos := 0;
for i := 1 step 1 until n do
if A[i] = key then
found := true;
pos := i;
exit;
fi;
od;
if found then
print("Element trobat a la posició: ", pos);
else
print("Element no trobat");
fi;
end;Explicació
- Declarem un array
Aamb 10 elements. - Inicialitzem
namb la longitud de l'array ikeyamb l'element que volem buscar. - Utilitzem un bucle
forper recórrer l'array. - Si trobem l'element, actualitzem
foundatruei guardem la posició. - Sortim del bucle amb
exiti imprimim el resultat.
Cerca Binària
La cerca binària és un algorisme eficient per buscar un element en una llista ordenada dividint repetidament la llista a la meitat.
Exemple de Cerca Binària en ALGOL
begin
integer array A[1:10];
integer low, high, mid, key;
boolean found;
A := (3, 5, 7, 9, 11, 13, 15, 17, 19, 21);
low := 1;
high := 10;
key := 15;
found := false;
while low <= high do
mid := (low + high) div 2;
if A[mid] = key then
found := true;
exit;
elif A[mid] < key then
low := mid + 1;
else
high := mid - 1;
fi;
od;
if found then
print("Element trobat a la posició: ", mid);
else
print("Element no trobat");
fi;
end;Explicació
- Declarem un array
Aamb 10 elements ordenats. - Inicialitzem
lowihighamb els extrems de l'array ikeyamb l'element que volem buscar. - Utilitzem un bucle
whileper dividir l'array a la meitat. - Si trobem l'element, actualitzem
foundatruei sortim del bucle. - Imprimim el resultat.
Algorismes d'Ordenació
Ordenació per Bombolla
L'ordenació per bombolla és un algorisme senzill que ordena una llista comparant i intercanviant elements adjacents repetidament.
Exemple d'Ordenació per Bombolla en ALGOL
begin
integer array A[1:10];
integer i, j, n, temp;
A := (21, 19, 17, 15, 13, 11, 9, 7, 5, 3);
n := 10;
for i := 1 step 1 until n-1 do
for j := 1 step 1 until n-i do
if A[j] > A[j+1] then
temp := A[j];
A[j] := A[j+1];
A[j+1] := temp;
fi;
od;
od;
print("Array ordenat: ", A);
end;Explicació
- Declarem un array
Aamb 10 elements desordenats. - Utilitzem dos bucles
forper comparar i intercanviar elements adjacents. - Imprimim l'array ordenat.
Ordenació per Inserció
L'ordenació per inserció és un algorisme que construeix l'array ordenat un element a la vegada, inserint cada nou element en la seva posició correcta.
Exemple d'Ordenació per Inserció en ALGOL
begin
integer array A[1:10];
integer i, j, n, key;
A := (21, 19, 17, 15, 13, 11, 9, 7, 5, 3);
n := 10;
for i := 2 step 1 until n do
key := A[i];
j := i - 1;
while j > 0 and A[j] > key do
A[j+1] := A[j];
j := j - 1;
od;
A[j+1] := key;
od;
print("Array ordenat: ", A);
end;Explicació
- Declarem un array
Aamb 10 elements desordenats. - Utilitzem un bucle
forper recórrer l'array. - Inserim cada element en la seva posició correcta utilitzant un bucle
while. - Imprimim l'array ordenat.
Algorismes de Divisió i Conquesta
Quicksort
Quicksort és un algorisme d'ordenació eficient que utilitza la tècnica de divisió i conquesta per ordenar una llista.
Exemple de Quicksort en ALGOL
procedure quicksort(A, low, high);
integer array A;
integer low, high;
begin
integer pivot, i, j, temp;
if low < high then
pivot := A[low];
i := low;
j := high;
while i < j do
while A[i] <= pivot and i < high do
i := i + 1;
od;
while A[j] > pivot do
j := j - 1;
od;
if i < j then
temp := A[i];
A[i] := A[j];
A[j] := temp;
fi;
od;
A[low] := A[j];
A[j] := pivot;
quicksort(A, low, j-1);
quicksort(A, j+1, high);
fi;
end;
begin
integer array A[1:10];
integer n;
A := (21, 19, 17, 15, 13, 11, 9, 7, 5, 3);
n := 10;
quicksort(A, 1, n);
print("Array ordenat: ", A);
end;Explicació
- Definim una funció
quicksortque ordena l'arrayAutilitzant la tècnica de divisió i conquesta. - Utilitzem un pivot per dividir l'array en dues parts.
- Ordenem recursivament les dues parts.
- Imprimim l'array ordenat.
Exercicis Pràctics
Exercici 1: Cerca Lineal
Implementa una funció que realitzi una cerca lineal en un array de nombres enters i retorni la posició de l'element buscat.
Exercici 2: Ordenació per Bombolla
Implementa una funció que ordeni un array de nombres enters utilitzant l'algorisme d'ordenació per bombolla.
Exercici 3: Quicksort
Implementa una funció que ordeni un array de nombres enters utilitzant l'algorisme Quicksort.
Conclusió
En aquest tema, hem après a implementar diversos algorismes en ALGOL, incloent algorismes de cerca, ordenació i divisió i conquesta. Hem vist exemples pràctics i hem practicat la traducció d'algorismes a codi ALGOL. Aquests coneixements són fonamentals per resoldre problemes de programació de manera eficient.
En el següent tema, explorarem la construcció d'un compilador simple en ALGOL, aplicant els coneixements adquirits fins ara.
Curs de Programació en ALGOL
Mòdul 1: Introducció a ALGOL
Mòdul 2: Sintaxi i Estructura Bàsica
- Estructura del Programa ALGOL
- Variables i Tipus de Dades
- Entrada i Sortida Bàsica
- Operadors i Expressions
Mòdul 3: Estructures de Control
Mòdul 4: Funcions i Procediments
- Definició de Funcions
- Paràmetres de Funció i Valors de Retorn
- Funcions Recursives
- Procediments en ALGOL
Mòdul 5: Estructures de Dades
Mòdul 6: Temes Avançats
Mòdul 7: Aplicacions Pràctiques
- Mètodes Numèrics
- Implementació d'Algorismes
- Construcció d'un Compilador Simple
- Estudis de Cas i Projectes
