03: intel·ligència artificial
Un computador és una màquina de caràcter general, capaç de resoldre una gran quantitat de problemes diferents. Així i tot, un computador no pot resoldre qualsevol problema sinó solament aquells que tenen un mètode de resolució que es pot expressar d’una forma determinada anomenada algorisme. Un algorisme és una descripció no ambigua i precisa de les accions que cal fer per a resoldre un problema en un nombre finit de passos.
El nom prové del nom del matemàtic persa al-Jwārizmī, considerat el pare de l’àlgebra i introductor del nostre actual sistema de numeració, que va estudiar els mètodes per resoldre de forma sistemàtica determinats problemes matemàtics. Donat que els algorismes provenen de les matemàtiques en elles trobarem bons exemples d’aquests, com l’algorisme per calcular l’arrel quadrada d’un nombre.
Els algorismes generalment no ressolen un problema concret sinó que són la solució general a un problema de manera que, depenent de les dades d’entrada, poden resoldre cadascun dels casos particulars. Per exemple: Hi ha un mètode general que ens permet dividir dos nombres i que podem aplicar per a dividir 68 entre 2, 230 entre 5,…
Perquè un seguit d’instruccions sigui realment un algorisme haurà de tenir les següents propietats:
Cal que no continguin cap ambigüitat.
Cal que cadascuna de les accions estigui definida sense dubtes.
Cal que es pugui realitzar en un nombre finit de passos.
Observa les següents instruccions per fregir un ou: Primerament, ficarem oli en una paella i l’escalfarem. A continuació trencarem un ou i el ficarem també a la paella. Amb una paleta, tirarem oli calent per sobre de l’ou. Finalment servirem l’ou en un plat.
Aquest procediment no es pot considerar un algorisme, ja que conté ambigüitats (quant d’oli ficarem a la paella, una gota o mil litres? Fins quina temperatura l’escalfem?), alguns passos poden ser dubtosos (que significa exactament «trencar» un ou?) i algun dels passos pot esdevindre infinit (fins quan hem d’estar abocant oli amb la paleta per damunt de l’ou?).
En general el llenguatge natural conté ambigüitats que el fan poc adequat per a la descripció d’algorismes, i per aquest motiu utilitzarem dues solucions diferents: els diagrames de flux i el pseudocodi.
És un conjunt finit d’instruccions o passos que serveixen per a executar una tasca o resoldre un problema
El pseudocodi i els ordinogrames seran les dues eines que utilitzarem per expressar algorismes. Són les maneres que pots utilitzar per dissenyar «en brut» un algorisme sense haver de pensar en la sintaxi d’un llenguatge de programació concret.
E pseudocodi no és un llenguatge de programació, però tampoc té la llibertat del llenguatge col·loquial. En realitat és una forma d’expressar els algorismes on se segueixen una sèrie de normes i s’utilitzen símbols i instruccions que més tard podran ser traduïdes a un llenguatge de programació concret.
Hi ha nombrosos exemples de pseudocodi als apartats següents d’aquest curs que podràs llegir i entendre sense problemes. L’únic detall que cal explicar és com el pseudocodi evita l’ambigüitat que hi ha en una expressió tan simple com a és igual a 3.
Assignació. L’expressió a = 3 significa que la variable anomenada «a» emmagatzema a partir d’aquest moment el valor 3.
Comparació. L’expressió a == 3 avaluarà si la variable a és igual al valor 3 i retornarà el valor vertader en cas afirmatiu, i fals en cas contrari.
Representació gràfica d'un algorisme. En ells es poden utilitzar els símbols de la taula següent.
La programació estructurada pretén que els programes no solament funcionen, sinó que estiguin escrits de manera que faciliti la seva lectura posterior. Segons aquest mètode de programació, qualsevol programa pot ser escrit utilitzant únicament tres tipus d’estructures (que hem vist anteriorment):
Seqüències: Concatenacions d’ordres que s’executaran una rere l’altra. Moltes vegades el final de cadascuna d’aquestes ordres està marcat per un bot de línia.
Condicionals: Estructures que permeten al programa executar unes o altres seqüències d’ordres en funció del seu estat.
Iteracions o repeticions: Estructures que permeten executar una seqüència d’ordres fins que es compleix-ca una determinada condició.
Els programes es dissenyen de manera modular, separant les parts complexes del programa en segments que poden ser més tard reutilitzats, i descendent, resolent els problemes de manera ordenada des del més general fins als més particulars.
La seqüència d’ordres estarà expressada com a pseudocodi simplement col·locant les ordres una rere l’altra i en els ordinogrames encadenant-les amb fletxes:
acció1
acció2
Hi haurà una determinada condició que el computador comprovarà si és vertadera o falsa. Un cert bloc de codi serà executat únicament si aquesta condició resulta ser vertadera:
si condició llavors
acció
fsi
També hi haurà una condició que pot ser vertadera o falsa, i dues accions: si la condició resulta vertadera es realitzarà una de les accions, i si es falsa es realitzarà l’altra:
si condició llavors
acció1
sino
acció2
fsi
L’acció es realitzarà si una determinada condició es vertadera, i es continuarà repetint fins que aquesta condició siga falsa. Quan s’utilitza aquesta estructura, en principi no sabem quantes vegades es repetirà l’acció:
mentre condició fer
acció
fmentre
Aquest és un cas particular de la iteració MENTRE que s’utilitza es vol repetir una acció un nombre determinat de vegades. En l’exemple següent, la variable índex pren un valor inicial que va incrementant a cada repetició. L’acció es repetirà fins que índex arribi a un cert valor final:
per índex = valor inicial fins valor final fer
acció
índex = índex + increment
fper