Introducció
Objectius
- Comprendre els conceptes bàsics de programació: algorisme i programa.
- Conèixer les etapes bàsiques de desenvolupament d’un programa.
- Entendre la diferència entre disseny i implementació i comprendre la importància que el disseny d’algorismes té en la programació.
Introducció
En aquesta assignatura aprendreu els conceptes i les eines necessàries per a poder crear programes que resolguin problemes. L’objectiu és que a partir d’una descripció no formal d’una necessitat o problema (com per exemple la que podria fer un client no informàtic que vol un programa per al seu negoci) sapigueu resoldre’l implementant un programa en llenguatge C.
Amb aquesta finalitat, treballarem en paral·lel dos tipus de llenguatge:
- Llenguatge algorísmic, notació algorísmica o pseudocodi: és una convenció adoptada per a definir els problemes d’una manera més senzilla i comprensible. A la bibliografia es poden trobar diverses formulacions o convencions de llenguatge algorísmic, però, atès que totes tenen les mateixes estructures, resulta senzill comprendre els algorismes independentment de la convenció que s’utilitzi.
En aquesta assignatura utilitzarem el llenguatge algorísmic resumit en la següent notació: guia de notació algorísmica o Nomenclàtor.
Podríem dir que es tracta d’un llenguatge de programació genèric que ens ajuda a passar d’un enunciat no formal a la seva formalització precisa independentment del llenguatge de programació que s’utilitzarà per a escriure el programa. En ser un llenguatge que no és executable directament per un ordinador, permet certa flexibilitat.
Està format per les mateixes estructures que un llenguatge de programació, però és important no confondre’ls.
- Llenguatge de programació: és un llenguatge formal capaç de ser comprès per un ordinador. La seva definició inclou diferents estructures i instruccions que, combinades convenientment, permeten resoldre problemes mitjançant l’execució dels programes. Hi ha diversos tipus de llenguatges de programació.
Segons l’última actualització de l’índex TIOBE, els 5 llenguatges de programació més populars en l’actualitat són: Java, C, C__, Pyhton i C#. En aquesta assignatura aprendrem a programar en llenguatge C.
Finalment, potenciarem la capacitat de cercar informació a internet. Saber com trobar i interpretar la informació que hi ha a internet és una competència fonamental per a poder desenvolupar-se com a programador, ja que la programació és un camp molt dinàmic i constantment apareixen nous llenguatges o funcionalitats que poden ajudar-nos a fer programes d’una manera més àgil i segura. A més, és un molt bon lloc per a trobar programes ja fets per altres programadors i que sovint els podem utilitzar directament (llicències obertes).
1. Introducció a la programació
Llegiu el següent document, en el qual s’introdueixen els conceptes bàsics de l’assignatura. Atenció: aquest document no segueix la mateixa anotació algorísmica que utilitzarem durant el curs. En breu actualitzarem la notació. El contingut que s’explica, no obstant això, és plenament vàlid i vigent.
Exemple
En el document anterior hem vist exemples des d'un punt de vista formal. En el document següent, que forma part de les transparències de síntesi de la introducció, veureu un exemple de disseny descendent des d'un punt de vista més pràctic. En aquest cas, s'utilitzen comentaris per tal de definir els subproblemes que caldrà afrontar.
2. Exemples
A continuació, il·lustrarem amb dos exemples els conceptes d’algorisme i de proves d’un programa.
2.1. Exemple 1: algorisme Truita de patates
Un exemple d’algorisme podria ser qualsevol recepta de cuina. Per exemple, l’algorisme «Fer una truita de patates» es podria especificar de la manera següent:
Ingredients (variables):
- Bol.
- Paella.
- Fogó.
- Patates.
- 4 ous.
- Oli.
- Sal.
- Ceba.
Passos que cal seguir (algorisme):
- Trencar els ous i posar-los al bol.
- Batre els ous al bol fins que quedin uniformes.
- Pelar les patates.
- Tallar les patates en trossos no gaire grans.
- Pelar la ceba.
- Tallar la ceba en trossos no gaire grans.
- Encendre el fogó.
- Posar la paella al fogó.
- Posar l’oli a la paella.
- Quan l’oli estigui calent, posar el contingut del bol a la paella, juntament amb les patates i la ceba.
- Mentre no tingui una forma consistent, batre la barreja.
- Quan la truita estigui feta, apagar el fogó i posar-la en un plat.
2.2. Exemple 2: proves d’un programa calculadora
Imagineu que volem fer un programa que sigui una calculadora molt simple, que permet fer només una operació matemàtica (suma, resta, multiplicació i divisió) de dos enters positius i com a molt tres xifres. Com a dades del programa tenim tres valors:
- Operació,
- Operand1,
- Operand2,
i el programa generarà un resultat:
- Resultat.
Per a simplificar la notació de les proves, les podem escriure així:
(Operació, Operand1, Operand2) Resultat
Abans de començar, i sense ni tan sols saber com farem aquest programa, podem definir una sèrie de casos que ens permetran comprovar que, una vegada fet, el nostre programa funciona correctament. Podem provar molts aspectes del programa, però en general sempre s’haurien de comprovar com a mínim els següents:
- Dades d’entrada al programa: les dades d’entrada no depenen del nostre programa, generalment venen donades per un altre programa o per un usuari. Per tant, s’ha d’assumir que poden contenir errors i el nostre programa ha de reaccionar correctament a aquests errors, per exemple, mostrant un missatge d’error.
- (%,3,5) Error. (Atès que l’operació no és cap de les quatre indicades, el programa hauria de mostrar un error).
- (_,a,6) Error. (Atès que l’Operand1 no és un nombre, el programa hauria de mostrar un error).
- (-,3,1000) Error. (Atès que l’Operand2 té més de tres xifres, el programa hauria de mostrar un error).
- Casos especials: si les dades d’entrada tenen rangs definits, s’ha de comprovar què passa en els punts extrems. En aquest cas, ens diuen que els operands són enters positius de com a màxim tres xifres, o sigui, que han d’estar entre 0 i 999. Haurem de comprovar els casos extrems:
- (*, 999, 999) 998001. (En aquest cas comprovarem que realment el nostre programa és capaç de treballar amb valors màxims del rang i, per tant, que hem tingut en compte que els resultats poden tenir més de tres xifres.)
- (*, 0, 0) 0
- (_, 0, 0) 0
- (-, 0, 0) 0
- (/, 0, 0) Error. (Dividir per zero pot ser un problema. Per tant, hem de tenir-ho present i decidir quin és el resultat esperat. En aquest cas, podríem decidir que volem que es mostri un error.)
- (-,0,999) -999. (Encara que els operands d’entrada hagin de ser positius, el resultat pot ser negatiu. Aquesta prova ens assegura que ho tenim en compte.)
- (/,4,3) 1. (En el cas de la divisió, pot passar que el resultat no sigui un valor enter. S’haurà de decidir què farem en aquests casos si el resultat pot no ser enter o si fem la divisió entera com hem fet en aquest exemple.)
- Casos normals: s’ha de provar el resultat esperat en un conjunt de dades conegudes, si pot ser, tan representatius com sigui possible.
- (_,2,3) 5
- (*,2,3) 6
- (/,4,2) 2
Definir les proves abans de començar a fer un programa és una forma de disseny de programes coneguda com a 'test-driven development, 'i permet mesurar l’evolució del nostre programa mentre l’estem fent, o sigui, inicialment totes les proves fallaran, però a mesura que anem avançant en la seva implementació, les proves aniran funcionant. També té l’avantatge que si hem de fer modificacions al nostre programa posteriorment, les proves ens asseguren que aquest continua funcionant correctament.
3. Exercicis
Aquí plantegem dos exercicis similars als exemples anteriors. Us recomanem que intenteu fer-los i si voleu podeu compartir-los al fòrum de l’aula per a comentar-los amb el professor i amb els vostres companys.
3.1.Exercici 1 (algorismes)
Escriviu l’algorisme «Canviar roda» que expliqui els passos que cal seguir per a canviar una roda d’un cotxe.
3.2. Exercici 2 (proves)
Volem fer un programa per a explicar les lletres d’una paraula. L’entrada al programa serà una paraula, i volem que la sortida sigui el nombre de lletres que conté. Definiu un conjunt de proves per a aquest programa.
Resum
En aquesta introducció hem vist els conceptes bàsics de programació. Aquests conceptes es poden resumir en:
- Què és un programa i un algorisme.
- Passos que cal seguir per a fer un programa.
- Què vol dir provar un programa.
Treballarem aquests conceptes durant el curs en les diferents unitats teòriques i pràctiques.