• No se han encontrado resultados

NOTES SOBRE PROGRAMACIÓ

N/A
N/A
Protected

Academic year: 2021

Share "NOTES SOBRE PROGRAMACIÓ"

Copied!
115
0
0

Texto completo

(1)

UNIVERSITAT DE BARCELONA

NOTES SOBRE PROGRAMACIÓ

Curs 2002-2003

Alex Sánchez

Barcelona. Juliol 2002

DEPARTAMENT D’ESTADÍSTICA

Sèrie de quaderns docents del Departament d’Estadística

Núm. 9

(2)

1. CONCEPTES BÀSICS... ... ... .... 5

1.1 RESOLUCIÓDEPROBLEMESAMBORDINADOR ... 5

1.2 CICLEDEVIDAD'UNAAPLICACIÓINFORMÀTICA... ... 5

1.3 FASESDECREACIÓDELPROGRAMA ... ... ... 6

1.3.1 Anàlisi... 6

1.3.2 Disseny... 7

1.3.3 Implementació... ... ... ... 7

1.3.4 Exemple : Càlcul del salari d'un treballador. ... 7

1.3.5 Exemple : Càlcul del volum tumoral ... 8

1.4 ALGORISMES ... 8

1.5 CODIFICACIÓIIMPLEMENTACIÓDELSALGORISMES... 9

1.6 ELEMENTSD'UNPROGRAMA ...10

1.6.1 Objectes d'un programa ...11

1.6.2 Instruccions ...16

1.7 REPRESENTACIÓDELSALGORISMES ...18

1.7.1 Diagrames de flux...19

1.7.2 El pseudocodi ... ... ... ...21

1.8 DISSENYD'ALGORISMES ...23

1.8.1 Disseny descendent...24

1.9 RESUMDEDADESIINSTRUCCIONS ENPSEUDOCODIVBAIC...25

1.9.1 Tipus de dades simples...25

1.9.2 Constants i variables ...26

1.9.3 Estructura general d’un programa...26

1.9.4 Instruccions primitives. ... ... ...26

1.10 EXERCICIS ...27

2. ESTRUCTURA GENERAL D'UN PROGRAMA...29

2.1 PROGRAMES... ... ... ...29

2.2 PARTSD'UNPROGRAMA ...29

2.3 INSTRUCCIONSITIPUSD'INSTRUCCIONS...30

2.3.1 Instruccions de declaració ... ... ...30

2.3.2 Instruccions primitives...31

2.4 INSTRUCCIONSDECONTROL...31

2.4.1 Instruccions alternatives...31

2.4.2 Instruccions repetitives ... ... ...36

2.5 VARIABLESAUXILIARSD'UNPROGRAMA ... ...40

2.6 INSTRUCCIONSCOMPOSTES ...42

2.7 EXERCICIS ...43

3. SUBPROGRAMES O SUBALGORISMES: PROCEDIMENTS I FUNCIONS ...44

3.1 FUNCIONS...44

3.2 PROCEDIMENTS...45

3.3 ÀMBIT:VARIABLESLOCALSIGLOBALS ... ... ...46

3.4 COMUNICACIÓAMBSUBPROGRAMES :PASDEPARÀMETRES...48

3.4.1 Pas de paràmetres per valor o per referència ...48

3.4.2 Funcions i procediments com paràmetres...50

3.5 RECURSIVITAT ... ... ... ...50

3.6 EXERCICIS...52

4. ESTRUCTURES DE DADES ... ... ...53

5. ESTRUCTURES DE DADES ESTÀTIQUES ...55

5.1 TAULES ...55

5.2 CLASSIFICACIODELESTAULES ...56

(3)

5.2.2 Taules bidimensionals...57

5.2.3 Taules multidimensionals. ... ... ...58

5.3 OPERACIONSAMBTAULES ...58

5.4 CADENES...61

5.5 REGISTRES...63

5.5.1 Emmagatzematge de registres... ... ...66

5.6 EXERCICIS ...67

6. ESTRUCTURES DE DADES DINÀMIQUES...68

6.1 INTRODUCCIÓ ... ... ... ...68

6.2 PUNTERSIVARIABLESDINÀMIQUES ...69

6.3 ELMUNT(HEAP) ...69 6.4 LLISTES ...71 6.5 PILES ...75 6.6 CUES ...75 6.7 ARBRES ...76 6.8 EXERCICIS...78

7. ESTRUCTURES DE DADES EXTERNES: FITXERS...79

7.1 INTRODUCCIO ... ... ... ...79

7.2 FITXERSDELD.O.S.:FITXERSDETEXTE(ASCII)IBINARIS. ... ...79

7.2.1 Fitxers de text o ASCII. ...79

7.2.2 Fitxers binaris... ... ... ...80

7.3 FITXERSDEDADES:PERSPECTIVALÒGICAVSFÍSICA. ...81

7.3.1 Registres lògics ...81 7.3.2 Registres físics ...83 7.4 GESTIOD’ARXIUS ...84 7.4.1 Crear un arxiu... ... ... ...85 7.4.2 Obrir un arxiu... ... ... ...85 7.4.3 Tancar un arxiu...86 7.4.4 Eliminar un arxiu ...86

7.4.5 Exemples de gestió d’arxius en llenguatge C ... ...86

7.5 MANTENIMENTD’ARXIUS...87

7.5.1 Actualització d’arxius...88

7.5.2 Consulta d’arxius ... ... ... ...88

7.5.3 Reestructuració d’arxius...88

7.6 ORGANITZACIÓDELFITXERS ...89

7.6.1 Organització seqüencial ...89

7.6.2 Organització directa... ... ...90

7.6.3 Organització indexada ...90

7.7 ACCESALSREGISTRES ... ... ...90

7.7.1 Accés seqüencial...91

7.7.2 Accés directe...91

7.7.3 Accés per índexs ...91

8. BIBLIOGRAFIA ...92

Teoria...92

Metodologia de la programació...92

9. APÈNDIX I : UN CAS COMPLET : CANVIS DE BASE ... ...93

9.1 DESCRIPCIÓDELPROBLEMA... ... ...93

9.2 ANÀLISIDELASOLUCIÓ...94

9.3 DISSENY...94

9.4 CODIFICACIOENPSEUDOCODI ...99

10. APENDIX II: EL PSEUDOCODI ... ... ...103

10.1.1 Definició de l’entorn ...103

(4)

11. APÈNDIX II: COMPARACIÓ ENTRE EL PSEUDOCODI I ALGUNS LLENGUATGES

VBA, C I JAVA... ... ... ...106

11.1 EXPRESSIONS I OPERADORS...106

11.1.1 Identificadors... . 106

11.1.2 Constants, variables ... ... ...107

11.1.3 Tipus de dades simples...107

11.1.4 Operadors ...108

11.2 ESTRUCTURA GENERAL D’UN PROGRAMA EN DIVE RSOS LLENGUATGES. ...110

11.2.1 Instruccions de declaració ... ... ...111

11.2.2 Instruccions primitives. ... ... ...111

11.2.3 Sintaxi de les instruccions de bifurcació en alguns llenguatges ... . 112

11.2.4 Instruccions de repetició en diversos llenguatges. ...112

11.3 VARIABLESDETIPUSESTRUCTURATSENPASCALIC ...114

LLISTA D’EXEMPLES Exemple 2-1 Algorisme executable linealment, sense canvis en la seqüència ...31

Exemple 2-2 Ús d'una bifurcació simple en un càlcul ...35

Exemple 2-3 Ús d’una bifurcació múltiple per posar qualificacions ...35

Exemple 2-5 Ús de REPETIR... FINS... per fer un nombre variable d'operacions ...38

(5)

1. CONCEPTES BÀSICS

1.1 RESOLUCIÓ DE PROBLEMES AMB ORDINADOR

Un ordinador és una màquina electrònica amb la qual hom pot fer moltes coses, però que només és capaç de dur a terme tres menes d’operacions elementals, això sí, amb gran rapidesa:

• Operacions aritmètiques bàsiques : suma, resta, multiplicació i divisió. • Operacions lògiques, "i", "o", "no", que permeten fer comparacions. • Emmagatzemar i recuperar informació.

La combinació d'aquestes instruccions bàsiques en conjunts d'instruccions complexes, els programes, permeten dur a terme tasques de gran complexitat.

En línies generals, donat un problema i una forma de resoldre, l'objectiu que perseguim serà elaborar les indicacions necessàries per dur a terme aquesta solució amb ajut de (les capacitats de) l'ordinador.

Sense entrar en disquisicions filosòfiques val la pena considerar què vol dir "resoldre un problema amb l'ordinador". De fet, anant una mica més enllà, ens podem plant ejar quan té sentit fer servir l'ordinador per resoldre un problema. Podem trobar diversos tipus de problemes :

1. Alguns els sabem resoldre, però no té cap sentit que recorrem a l'ordinador per la seva senzillesa o poca complexitat. Per exemple: resoldre l'equació 3x -1 = 5 o ordenar alfabèticament les paraules "Pere", "Joan", "Miquel".

2. Altres els sabem resoldre de forma exacta o aproximada però són prou feixucs o repetitius com perquè valgui la pena fer servir l'ordinador. Per exemple : resoldre un sistema d'equacions lineal de 100 equacions o ordenar alfabèticament una llis-ta de 3000 noms.

3. Finalment n'hi ha que no sabem resoldre o que resulten excessivament feixucs. En aquest cas tampoc l'ordinador ens hi podrà ajudar.

L'objectiu que perseguirem al llarg d'aquestes notes serà aprendre a analitzar un proble-ma, del segon tipus dels esmentats, i dissenyar i escriure un programa per facilitar-ne la resolució amb l'ajut de l'ordinador.

1.2 CICLE DE VIDA D'UNA APLICACIÓ INFORMÀTICA

El procés que cal seguir des del plantejament d'un problema fins que disposem d'una so-lució instal·lada en l'ordinador i en funcionament pels usuaris finals s'anomena el cicle de vida de l'aplicació informàtica.

Aquest procés consta de dues fases agrupades en dos blocs ben definits, tal i com es pot veure en la figura 1 on es mostra cada una de les fases i el resultat obtingut en cada un d'elles :

(6)

Problema Anàlisi del problema Especificacions ANÀLISI Disseny de I l’algorisme DISSENY Algorisme Implementació Programa Edició Programa font Compilació Programa objecte Muntatge IMPLANTACIÓ Programa executable I EXPLOTACIÓ Prova d’'execució Aplicació Explotació i manteniment

1.3 FASES DE CREACIÓ DEL PROGRAMA

Per crear un programa cal definir i descriure amb el màxim detall i rigor possibles la manera en què es vol resoldre el problema. Això es pot fer de formes diverses, però un esquema bastant senzill contempla, com a mínim les fases següents :

1. Anàlisi del problema

2. Disseny i verificació de l’algorisme i de la solució informàtica 3. Implementació : Escriptura del programa en un llenguatge.

1.3.1 Anàlisi

(7)

En primer lloc cal establir amb precisió què ha de fer el programa, decidint si es trac-ta d'un problema per al qual es coneix o es pot trobar la solució, o pel contrari no se sap com resoldre'l.

• A més a més cal definir quines són les entrades i les sortides del programa. Com a detalls menors cal establir quins recursos semblen necessaris per a la seva execució.

Definició del problema Especificacions d'entrada Especificacions de sortida= Resultats Anàlisi del problema

1.3.2 Disseny

En la fase del disseny cal passar de pensar en què cal fer, en com fer-ho. També es trac-ta de no pensar trac-tant en com resol el problema l'usuari i començar a fixar-se en com ho fa l'ordinador. L'anterior es pot resumir dient que cal dissenyar els algorismes que interve-nen en la solució.

1.3.3 Implementació

En aquesta fase cal traduir els algorismes a un determinat llenguatge de programació. Si bé és una feina relativament mecànica, a partir dels algorismes també està condicionada pel llenguatge escollit i les característiques del problema.

1.3.4 Exemple : Càlcul del salari d'un treballador.

Es vol fer un programa que calculi i imprimeixi les nòmines dels treballadors d'una em-presa de treball temporal. Per simplificar l'exemple, suposarem que no es fan hores ex-tres, és a dir es paguen totes al mateix preu, i que el programa efectua el càlcul només una vegada.

1.3.4.1 Anàlisi del problema

Els treballadors de les empreses de treball temporal cobren per hores una quantitat fixa-da que depèn de cafixa-da cas. Només se'ls reté una quantitat fixa en concepte d'impostos (un 15%). El sou brut s'obtindrà de multiplicar el nombre d'hores treballades pel preu hora. i el sou net s'obté de restar la retenció per impostos (el 15%) del sou brut

DADES D’ENTRADA : Hores treballades, Preu hora DADES DE SORTIDA : Sou brut, Sou net

DADES AUXILIARS : Percentatge de retenció de IRPF 1.3.4.2 Disseny : obtenció de l'algorisme

A partir de l'anàlisi hom pot proposar el següent algorisme per al càlcul del salari que ha de cobrar un treballador d'una empresa de treball temporal.

1. Llegir el nom i cognoms (NOM), el nombre d'hores treballades (NH) i el preu que es cobra per hora (PH).

2. Calcular

Sou Brut (SB) = NH * PH Retenció (RET)= 0.15 * SB Sou Net (SN) = SB - RET

(8)

1.3.4.3 Codificació

L'algorisme anterior es pot codificar en qualsevol llenguatge de programació. Per exe m-ple, en C, VBA o Java s’obtenen respectivament els programes llistats en EX11SOU1.C, EX11SOU1.VBA o EX11SOU.JAVA.

1.3.5 Exemple : Càlcul del volum tumoral

Certes aplicacions biomèdiques basades en exploracions o ecografies necessiten calcular el volum de tumors o altres cossos a partir de mesures indirectes. Sovint es disposa de dades com la longitud (dimensió major) o l’amplada del tumor i es desitja estimar-ne el volum a partir d’aquestes.

1.3.5.1 Anàlisi del problema

DADES D’ENTRADA : Longitud (L) i Amplada (A) del tumor DADES DE SORTIDA : Volum estimat (V)

Es farà la suposició que el tumor té la forma aproximada d’un elipsoide amb els dos semieixos menors iguals, de manera que la fórmula per al volum de l’elipsoide:

esdevé : 2 4 3 V = ⋅ ⋅ ⋅π L A 1.3.5.2 Disseny de l’algorisme

1. Llegir la longitud (L) i l’Amplada (A) del tumor. 2. Calcular

V = 4* 3.141592* L * A 3. Escriure el Volum del tumor 1.3.5.3 Codificació

L'algorisme anterior es pot codificar en qualsevol llenguatge de programació. Per exe m-ple, en C, VBA o Java s’obtenen respectivament els programes llistats en EX12VOLUM1.C, EX12VOLUM1.VBA o EX12VOLUM1.JAVA.

1.4 ALGORISMES

Un algorisme es defineix com un conjunt ben definit de regles (operacions,

instrucci-ons...) per a la resolució d'un problema en un nombre finit de passes.

Una definició equivalent és la d’una seqüència ordenada de passes, sense

(9)

No tots els problemes tenen un algorisme per a la seva solució. En aquest cas no serà possible escriure un programa per resoldre'ls.

La informació proporcionada a l’algorisme constitueix la seva entrada i la informació produïda per l’algorisme és la seva sortida.

Donada una entrada cal que un algorisme produeixi sempre exactament la mateixa sorti-da. Per fer això cal que estigui precisat amb el màxim de detall. Això es pot fer refinant molt la seva redacció i/o formalitzant-los en major o menor grau. Aquesta darrera opció (us d'un cert grau de formalisme) resulta tant més adient quant més complex sigui el pro-blema i per tant quan pugui caldre comunicar els algorismes i processos entre diverses persones que intervenen en el desenvolupament de l'aplicació.

Per resoldre un mateix problema hi pot haver infinitat d'algorismes. La qualitat d'un algo-risme es podrà mesurar per dos factors :

El temps que cal per a executar-lo, o equivalentment, el nombre d'instruccions de cada tipus necessàries per resoldre el problema.

Els recursos, en termes de memòria principal i d'emmagatzematge que es neces-siten per implantar-lo.

1.4.1.1 Verificació de l’algorisme

Un cop s’ha escrit l’algorisme cal comprovar que , efectivament, és capaç de dur a terme les accions per a les quals ha estat dissenyat. Això se sol fer executant-lo pas a pas, “ma-nualment” amb dades de prova escollides de forma que abastin totes les possibles cond i-cions d’execució. Així per exemple, si hom ha dissenyat un algorisme per fer un càlcul on intervé el radi d’un cercle, cal haver considerat que farà aquest si se li suministra un nombre negatiu. Si al donar un nombre negatiu no ho avisa vol dir que hi ha un error en el disseny que cal corregir.

Els algorismes se solen escriure mitjançant algun tipus de llenguatge algorísmic que ha de ser :

• independent del llenguatge de programació en que finalment es codifiqui el pro-grama.

• fàcil de traduïr a qualsevol llenguatge.

Hi ha diversos llenguatges algorísmics normalitzats, que hom pot fer servir per represen-tar algorismes, com els diagrames de flux, els diagrames de Nassi-Schneiderman o el pseudocodi , que s’estudien més endavant.

1.5 CODIFICACIÓ I IMPLEMENTACIÓ DELS ALGORISMES

La codificació dels algorismes, és a dir la creació del programa consta de dues fases: • L’algorisme s’ha de codificar en un determinat llenguatge de programació

• El codi s’ha de traduir a llenguatge màquina per tal que pugui ser “entes i executat per l’ordinador”

Un llenguatge de programació és un conjunt de símbols (el seu alfabet) i de regles per combinar-los (la seva gramàtica ) que serveix per expressar algorismes. Com passa en els llenguatges naturals les possibilitats d’expressió varien d’un llenguatge a altre.

(10)

Hi ha centenars de llenguatges de programa ció, i no sempre resulta fàcil respondre a la pregunta “quin és el millor llenguatge per a...?”. Alguns llenguatges es van crear per a la programació científica (FORTRAN, APL). Altres per a la gestio (COBOL) altres eren simplement de propòsit general (BASIC, C). A la pràctica l’elecció ve sovint condicio-nada per la disponibilitat i/o la moda del moment.

Ilustración 1 Alguns dels llenguatges de programació més coneguts

Un cop s’ha codificat l’algorisme en el llenguatge escollit s’ha de traduir a llenguatge

màquina, en un format comprensible per l’ordinador, o més exactament pel seu sistema

operatiu. Hi ha bàsicament dues formes de traducció i per tant de programes traductors: • Els interprets tradueixen el codi línia a línia. Això els sol donar força flexibilitat.

Com a contrapartida no són molt ràpids ja que si una instrucció s’ha d’executar un millio de vegades també es traduirà aquest nombre de cops. El llenguatge VBA de Microsoft o el lenguatge estadística R són interpretats.

Els compiladors tradueixen tot el programa abans d’executar-lo. Això fa que puguin ser menys flexibles però alhora són més eficients. El Visual BASIC o el C són llen-guatges compilats.

Tradicionalment les funcions d’edició, traducció i execució dels programes es feien per separat. Avui en dia encara pot fer-se així, (per exemple fent programes en JAVA) però tendeix a fer servir entorns de programació que són programes des dels quals es poden fer totes les funcions sense distinció, és a dir es pot escriure el programa, compilar-lo i executar-lo des del mateix entorn.

1.6 ELEMENTS D'UN PROGRAMA

La implementació de l’algorisme en un llenguatge determinat dóna lloc a un programa. Els termes algorisme i programa es fan servir sovint com sinònims tot i no ser el mateix. • Els algorismes poden descriure’s en termes purament conceptuals o lògics sense

ha-ver de pensar en com s’implementen.

• Els programes estan lligats a la implementació concreta en un llenguatge de progr a-mació determinat. Per a això, a més a més dels algorismes calen altres elements.

De forma general podem considerar un programa com una seqüència lògica d'acci-ons, (instruccions), corresponents a un algorisme determinat, que manipulen un conjunt d'objectes (dades) per obtenir uns resultats (solució del problema).

En aquesta definició hi han intervingut dos elements : les instruccions i les dades. Això recorda la frase que sintetitza una de les més importants metodologies de programació : la programació estructurada :

(11)

Algorismes + Estructures de dades = Programes

Això ens duu a pensar que per aprendre a escriure programes cal que aprenguem sobre dos menes de coses:

D'una banda hi ha els objectes dels programes, amb els quals representem les estructures de dades que són manipulades pels algorismes.

D'altra banda hi ha les instruccions que representen les accions que es fa so-bre els objectes dels programes.

Ambdós conceptes són, de fet, més amplis que simplement estructures de dades o algo-rismes però l'esquema anterior té prou importància com per retenir-lo en una primera aproximació.

1.6.1 Objectes d'un programa

1.6.1.1 Constants, variables, funcions i expressions

Des d'un punt de vista més pràctic anomenem dada a qualsevol objecte amb el qual

opera un algorisme. Les dades poden ser de molts tipus, i aquests tipus de dades es

poden classificar segons molts criteris. Una classificació que està àmpliament admesa és la que els divideix en tipus simples i estructurats. Són dades de tipus simples aquelles que no es poden dividir en components més elementals. Equivalentment les dades que hom pot descompondre en components més elementals que elles mateixes s'anomenen estructurades.

(12)

Enter Real Numerics Caracter Lògic Definit per l'usuari No Numèrics SIMPLES Vectors Taules Estàtiques Piles Cues Llistes Arbres Dinàmiques Interns Seqüencial Directe Indexat Fitxers Bases de Dades Externs ESTRUCTURATS TIPUS DE DADES

Centrant-nos en els tipus de dades simples (les estructurades es van presentant en capí-tols successius) podem distingir :

Enter. Valors d’un subconjunt finit dels nombres enters. El rang d’aquests dependrà del llenguatge amb el que hom codifiqui l’algorisme, així com de l’ordinador que es faci ser-vir. En són exemples els valors 12, -31 o 44567, si bé aquest darrer podria no ser repre-sentable en alguns casos.

Real. Valors d’un subconjunt dels nombres reals, limitat en el tamany i la precisió pel llenguatge i l’ordinador. En són exemples 1.32, -2.4567, 154234.

Lògic. Només poden prendre dos valors: VERITAT o FALS.

Caràcter. Valors del conjunt finit de caracters que poden ser reconeguts i representats per l’ordinador.

Cadena. Són sèries finites de caracters. Alguns llenguatges les consideren un tipus bà-sic simple, per la seva importància, mentre que d’altres les comnsideren dades estructu-rades. Una forma moplt usual de mirar-se les és com taules de caracters.

La major part dels llenguatges de programació disposen d’aquests tipus bàsics. En alguns no estan tots disponibles mentre que d’altres disposen de més tipus, alguns formats per subtipus dels anteriors com enters de poques o moltes xifres o reals de simple, doble o quadruple precisió (cada un dels quals és capaç de contenir un major nombre de xifres decimals).

Molts llenguatges permeten la creació de nous tipus, directament o per agrupació de va-lors senzills dels tipus predefinits. En aquest segon cas parlem de dades estructurades.

(13)

Quan hom estableix un tipus per una dada està determinant com estarà aquesta representa-da en memòria. Quant més flexible és el llenguatge més probable és que hom pugui tenir un tipus de dada “informàtic” diferent per a cada tipus de dada “real” diferent.

En un programa les dades es fan servir normalment en una de les formes següents: com constants, variables, expressions o funcions.

Una constant és un objecte el valor del qual roman invariable durant l'execució del pro-grama. Les constants poden ser literals o amb nom. En principi les constants poden ser dels mateixos tipus que les dades.

Una constant literal és un valor de qualsevol tipus que es fa servir en un punt de l’algorisme. Pot ser numèrica (P. ex : 100) o no (“VERITAT”, “CNN”,…).

Una constant amb nom té un valor concret i un nom que es fa servir sempre que es vol referenciar aquest valor.

PI = 3.141592, e = 2.718281.

Una variable és un objecte que pot modificar el seu valor un o més cops durant el des-envolupament de l’algorisme. S’identifica pel seu nom i el seu tipus, que pot ser qualse-vol dels disponibles i és el que determina el conjunt de valors que pot prendre la varia-ble.

X := 0 ( X comença valent 0)

X := X+1 ( X passa a valer 1)

Funcions La major part de llenguatges de programació incorporen funcions predefini-des, directament o través de “biblioteques”, amb les quals hom pot dur a terme les tas-ques més usuals. Les funcions, de forma similar a les de les matemàtitas-ques, solen rebre un o més arguments i retornen un valor que anomenem resultat.

Expressions. Les constants i les variables no apareixen aïllades sinó formant part d'ex-pressions. Una expressió és la representació d'un càlcul necessari per a l'obtenció d'un resultat. Una expressió es defineix, recurrentment, de la forma següent :

- Un valor és una expressió P. ex. : 1.25, "JOAN"

- Una constant o una variable són expressions P. ex : PI, E, X

- Una funció és una expressió

P. ex : Cos (X), Sqrt (25)

- Una combinació de valor, constants, variables, funcions i operadors que compleixen determinades regles de construcció és una expressió.

P. ex. : Cos (PI * X) + 1.25 N := 2 * PI * X

1.6.1.2 Operadors i operacions

Les expressions es construeixen fent operacions de tipus diversos entre els seus compo-nents. Els símbols que caracteritzen les operacions són els operadors.

(14)

Per aprendre a construir expressions cal saber quines operacions es poden fer i quin és l’ordre de prioritat entre els operadors, és a dir com es decideix quin operador actua primer quan n’hi ha més d’un que actua sobre un objecte.

Bàsicament distingirem tres grans grups d’operacions: Aritmètiques, relacionals o de comparació i lògiques.

1.6.1.3 Expressions aritmètiques

Són les expressions anàlogues a les fórmules matemàtiques. Les variables o constants que hi intervenen són numèriques(enteres o reals) i les operacions són les aritmètiques.

Operador Significat + suma - resta * multiplicació / divisió ^, ** exponenciació

div divisió entera mod mòdul (residu)

Els operadors es fan servir de la mateixa forma que en matemàtiques. Així per represen-tar l’expressió 2× −A 3 hom escriura “2 * A +3”, i per fer A2 posarem A*A o bé A**2 o A^2.

No tots els operadors es troben disponibles en tots els llenguatges, particularment div o mod que representen la divisió entera o el residu de la divisió poden estar absents (p.ex. en FORTRAN).

Els tipus de dades del resultat d’una operació ve determinat pel tipus de dades dels ope-rands i per l’operació realitzada.

Operador Significat Tipus dels operands

Tipus del resultat + suma Enter o real Enter o real - resta Enter o real Enter o real * multiplicació Enter o real Enter o real

/ divisió Real Real

^, ** exponenciació Enter o real Enter o real Div divisió entera Enter Enter Mod mòdul (residu) Enter Enter Per exemple si A, B, C són enters podem fer

A := B div C, o A := B mod C però no C := A/B

És a dir, no podem assignar un nombre real a una variable entera. En general funciona una conversió implicita de tipus sempre i quan sigui possible, és a dir el que sí podrem fer serà assignar un nombre enter a un real, i, serà com si li assignéssim el nombre real equi-valent, és a dir sense part decimal.

(15)

15 / 6 = 2.5, 15 div 6 = 2 15 mod 6 = 3 10.5/3.0 = 3.5 10 div 3

Regles de prioritat

Les expressions que tenen dos o més operands necessiten unes regles que permetin de-terminar en quin ordre s’avaluen. Això no passa només en la programació, sinó que tam-bé en els càlculs quotidians. Per exemple si hom ha d’avaluar l’expressió 3x2, amb x=10, tothom ( ?) farà 3*100, no 302. Ara bé si això ho ha de fer un ordinador caldrà especificar sense ambigüitats quina de les dues formes usar. Per a això hi ha establertes unes regles

de prioritat. Aquestes són :

1. Les expressions entre parèntesis s’avaluen en primer lloc

2. Les operacions aritmètiques dins d’una expressió segueixen el següent ordre de prioritat :

• Exponencial ^ o ** • *, /

• div, mod • +, -

Si dos operadors d’igual prioritat coincideixen es poden avaluar indistintament. 1.6.1.4 Expressions lògiques

Són expressions que poden valdre només “veritat” o fals i es formen combinant constants, variables o altres expressions lògiques mitjançant operadors lògics o operadors relacio-nals.

Operadors relacionals

Els operadors de relació serveixen per comparar dues expressions, retornant un valor de

fals o cert. Per exemple si X=1 i Y=2 :

(X+Y) < 10 és una expressió lògica que val cert “a” > “j” és una expressió lògica que val fals Els operadors de relació són els següents :

Operador Significat < Menor > Major = Igual <= Menor o igual >= Major o igual <> Diferent

Les operacions entre caracters depenen no rmalment del sistema de codificació utilitzat en cada cas.

Si hom compara dues expressions lògiques el valor fals és menor que el valor cert, és a dir que l’expressió (fals < cert) és certa

(16)

Operadors lògics

Els operadors lògics són no, i i o. Per comoditat al referir-nos-hi els indicarem amb els noms anglesos not, and i or. Els resultats d’actuar sobre expressions lògiques ve-nen donats per les taules de veritat dels operadors :

a not a

cert fals fals cert

a b a and b

cert cert cert fals cert fals cert fals fals fals fals fals

a b a or b

cert cert cert fals cert cert cert fals cert fals fals fals Regles de prioritat

Els operadors lògics i relacionals tenen uns ordres de prioritats que es combinen amb els dels aritmètics. La prioritat pot variar d’un a un altre llenguatge. Per exemple en els llen-guatges Visual Basic, C, o JAVA tenim :

Prioritat VisualBasic C Java

Més alta (Primera opera-ció executada) Més baixa (Última operació executada) ^(exponeciacio) - (negació) /, * \ (divisio entera) Mod (mòdul) +,- & (concatenació) <,>,=,<=,>=,<> Not And Or = (assignacio) ! (NOT) /,*, % (MOD), +,-, <,>,<=,>=, ==, != (igualtat) && (AND) || (OR) = (assignacio) ! (NOT) /,*, % (MOD), +,-, <,>,<=,>=, ==, != (igualtat) && (AND) || (OR)

(17)

1.6.2 Instruccions

Les instruccions no són només les indicacions de com s'efectuen les modificacions sobre les dades. Són els components bàsics tan dels algorismes com dels programes, motiu pel qual, quan parlem d’instruccions no fem distinció (o ens confonem amb facilitat) entre els uns i els altres. Podem diferenciar diferents tipus d’instruccions que es corresponen amb els diferents tipus d’accions que podem dur a terme sobre els objectes del progr ames. 1.6.2.1 (Instruccions de) declaració

En la majoria dels llenguatges de programació cal declarar explícitament els noms i els tipus de les constatnts variables amb què es treballa. Això es fa amb les instruccions de declaració que els assignen un nom i un espai de memòria inicials.

Per exemple si es vol treballar amb una constant PI i dues variables reals LONGITUD i AMPLADA la seva declaració seria:

• En llenguatge C++ const PI = 3.141592; float longitud, amplada; • En llenguatge Visual BASIC: Const PI = 3.141582

Dim longitud As Double, amplada As Double

1.6.2.2 Assignacions

L’assignació és l’acció que cal dur a terme per donar valor a una variable.

Una assignació consisteix en l'avaluació d'una expressió i l'emmagatzematge del seu va-lor en una variable. Sempre s'efectua seqüencialment i implica un moviment de dades dins la memòria i, potser, la realització d'operacions lògiques i/o aritmètiques.

El format general de l’operació és

nom de la variable := expressió L’operació

A := 5

indica que a la variable A se li ha assignat el valor 5.

Aquesta d’assignació és destructiva, és a dir després de l’assignació la variable pren el nou valor que se li ha assignat i perd l’antic.

És possible fer assignacions on aparegui la mateixa variable a ambdues bandes de l’assignació, del tipus :

N := N+1

Aquesta expressió indica que s’incrementa en 1 el valor de N.

En principi una assignació ha de donar a una variable un nou valor que sigui comp atible amb el seu tipus. Si per exemple X és un nombre i C un carácter no té sentit una assigna-ció del tipus :

X := C * 2

Exemples d’assignacions corresponents al programa de càlcul de volum de tumors • En llenguatge C++, VBA o java :

(18)

1.6.2.3 Entrades/Sortides

Les operacions d'entrada i sortida serveixen per a que el programa intercanviï informació amb un medi extern. En una operació d'entrada el programa assigna a una variable un valor emmagatzemat en un suport extern o generat per un perifèric. En una operació de sortida o escriptura el programa transfereix a un dispositiu de memòria massiva o a un perifèric el valor d'una variable.

Veiem exemples d’entrades i sortides corresponents al programa de càlcul de volum de tumors. A diferencia de l’assignació, molt similar en tots els llenguatges, les entrades o les sortides varien molt de llenguatge a llenguatge:

• En llenguatge C

// Entrada de la longitud i l'altura

printf("\nEntra la longitud del tumor "); scanf("%f",&longitud);

printf("\nEntra l'amplada del tumor "); scanf("%f",&amplada);

// Sortida de resultats

printf("\nEl volum estimat del tumor es %f ",volum);

• En llenguatge Visual BASIC: 'Entrada de dades

longitud = Val(InputBox("Entra la longitud del tumor")) amplada = Val(InputBox("Entra l'amplada del tumor"))

'Sortida

MsgBox ("El volum estimat del tumor es: " + Str(volum))

1.6.2.4 Modi ficació del flux del programa. Instruccions i estructures de control Els algorismes es recorren, en principi, seqüencialment. Eventualment hom pot voler mo-dificar aquesta forma d'execució. Per fer-ho es disposa de les estructures de control que permeten mo dificar l'ordre en que es duen a terme les accions. Trobem dos tipus bà-sics d'estructures de control, les que serveixen per bifurcar el flux del programa i les que permeten repetir un procés un nombre fix o variable de vegades, es a dir les :

Decisions o Bifurcacions Cicles o Repeticions

• Condicionals • Incondicionals

Les instruccions de control són les que implementen les estructures de control i es des-criuen amb més detall en el capítol següent. Conceptualment és més ampla la idea d’estructura de control ja que un llenguatge determinat pot no tenir una instrucció deter-minada, però sí pot ser possible implementar la estructura de control corresponent. 1.6.2.5 Instruccions compostes (subrutines, procediments, funcions)

Sovint, a mida que augmenta la complexitat d'un programa, convé descompondre’l en parts més senzilles, fàcils d'executar separadament. Una subrutina és un fragment del programa que realitza una tasca concreta i pot ser cridat o activat des de una altra part del programa.

Un estudi més detallat de les ins truccions de control i les subrutines es presentarà en els capítols següents.

(19)

1.7 REPRESENTACIÓ DELS ALGORISMES

Per representar un algorisme se sol fer servir algun mètode que permeti independitzar-lo del llenguatge de programació escollit. Això permetrà de codificar-lo en el llenguatge que es desitgi. Per fer-ho cal algun mètode que sigui sistemàtic i objectiu i serveixi de bon pont entre les solucions obtingudes en l'etapa d'anàlisi i la codificació.

Hi ha diverses tècniques per descriure un algorisme. Entre elles podem indicar

Els organigrames són eines gràfiques per a la representació d'algorismes. Estan for-mats per una sèrie de símbols units per fletxes. Els símbols representen accions i les fletxes l'ordre de realització d'aquestes.

Els llenguatges de descripció d'algorismes o pseudocodi són llenguatges simi-lars al natural que permeten descriure l'algorisme de manera compacta orientada a la transcripció de l'algorisme a un llenguatge de programació donat.

Els diagrames de Nassi-Scheiderman (N-S) són, com els organigrames, eines gràfi-ques pensats per a la representació d'algorismes seguint la metodologia de programa-ció anomenada programaprograma-ció estructurada. Aquest diagrames, que no s’estudiaran aquí es poden consultar a Alcalde y García (1992).

Sigui quina sigui la tècnica de representació de l'algorisme ha de tenir les propietats se-güents : • Senzillesa • Claredat • Normalització • Flexibilitat 1.7.1 Diagrames de flux

Els diagrames de flux (flowchart) són la tècnica més antiga i més coneguda, tot i que, actualment se'n fa menys ús. Consisteixen en diagrames que fan servir els símbols estàn-dard mostrats en la taula 2.1. i que tenen els passos de l'algorisme escrits dins de les cap-ses, unides per les línies, anomenades línies de flux que indiquen la seqüència en que s'han d'executar.

(20)

Símbols principals Funció

Terminal. Representa l'inici i el final d'un programa (o també una parada o interrupció).

Entrada/Sortida de qualsevol tipus de dades en la memòria des dels perifèrics.

Procés. Qualsevol operació que pugui originar canvi de valor, for-mat o posició de la informació emmagatzemada en la memòria.

Decisió. Indica operacions lògiques o de comparació entre dades i en funció d'aquesta determina quin de dos camins cal seguir.

Connector. Serveix per enllaçar dues parts qualsevulles d'un ordi-nograma que es trobin en la mateixa pàgina.

Connector per enllaçar dues parts d'un ordinograma entre pàgines diferents.

Crida a una subrutina o subprograma, és a dir a un mòdul indepen-dent del programa principal que rep una entrada provenint del grama, realitza una tasca determinada i retorna el control al pro-grama princ ipal.

Indicador de la direcció o línia de flux : indica el sentit d'execució de les operacions.

Línia connectora. Serveix d'unió entre dos símbols

Taula 1-1 : Principals símbols que intervenen en els diagrames de flux El diagrama de flux corresponent al programa de càlcul de la nòmina es mostra en la Fi-gura 2.1.

(21)

Inici Llegir NOM, N o m b r e d ' h o r e s ( N H ) P r e u H o r a ( P H ) S B : = N H * P H R E T : = 0 . 1 5 * S B S N : = S B - R E T Escriure NOM, SouBrut (SB), R e t e n c i ó ( R E T ) , S o u N e t ( S N ) F i

Figura 1-1 Diagrama de flux pel programa de càlcul de nòmines

1.7.2 El pseudocodi

Els pseudocodis o llenguatges d'especificació d'algorismes són, com el seu nom indica, llenguatges per a la descripció dels algorismes que procuren mantenir les propietats dels diagrames de flux de senzillesa, claredat, normalització i flexibilitat, però que, enlloc de basar-se en una notació gràfica es basen en paraules en llenguatge natural, preferent-ment en l'idioma propi del programador enlloc de l’anglès, base de molts dels llenguatges de programació.

Un inconvenient del pseudocodi és el menor grau de normalització que presenta respecte dels diagrames de flux. Per exemple, si hom consulta tres llibres moderns de programa-ció com són Alcalde (1995), Pérez (1996) o Joyanes (1996) troba en els tres la mateixa notació per als diagrames de flux, mentre que el pseudocodi utilitzat és molt més varia-ble.

(22)

1.7.2.1 Estructura general del pseudocodi El pseudocodi consta de dues parts principals :

En la part primera o entorn s'hi posa el nom i l'entorn del programa, és a dir la in-formació de què es disposa, els tipus i noms de les variables i constants que es faran servir i la manera i lloc on s’emmagatzema

En la part segona o procés central es descriu el procés pròpiament dit que corres-pon al desenvolupament ordenat i estructurat de l'algorisme. Aquesta segona part es correspon amb el diagrama de flux..

Tot pseudocodi ha de possibilitar la descripció dels diferents elements d’un algorisme, és a dir ha de permetre

• Representar els objectes del programes

Ø Declaració de constants, variables, o tipus de dades Ø Declaració de subprogrames

• Representar les diferents accions que es duen a terme en l’execució de l’algorisme mitjançant:

Ø Instruccions simples de procés com l’assignació, l’entrada o la sortida Ø Instruccions de modificació o control del flux de l’execució

Ø Instruccions compostes o subprogrames

Per tal de no patir de sobrecárrega d’informació anirem introduint els diversos compo-nents del pseudocodi a mida que haguem vist els conceptes que codifiquen.

1.7.2.2 Elements del pseudocodi (I) DESCRIPCIÓ DE L’ENTORN

Tipus de dades

• Tipus estandar o predefinits Ø Enter Ø Real Ø Caracter Ø Cadena Ø Logic Declaració d’objectes • Constants

CONST nom_constant = valor • Tipus de dades

TIPUS nom_tipus = definició del tipus • Variables

VAR nom_variable : nom_tipus

DESCRIPCIO DE L’ALGORISME Instruccions simples

Les accions simples o instruccions primitives són les que el processador executa de forma immediata.

(23)

Assignació: Variable := Expressió • Entrada: LLegir Variable

Sortida: Escriure Expressió

L’exemple següent mostra un pseudocodi corresponent a l’algorisme del càlcul de la nò-mina desenvolupat més amunt

1.8 DISSENY D'ALGORISMES

Com ja s'ha comentat al definir els algorismes, no hi ha cap procediment rigorós que permeti construir un algorisme que resolgui un problema donat. El disseny d'algorismes és doncs una tasca complexa on es poden seguir poques normes i on té molta importància la imaginació i l'experiència de la persona que el duu a terme. Observem els algorismes següents que s'encarreguen de decidir si un nombre N és parell.

Algorisme 1 2:Llegir N SI N = 2 ALESHORES escriure "és parell" FI SI SI N = 1 ALESHORES escriure "es senar" FI SI N := N-2 SI N > 0 ALESHORES ANAR A 2 FI SI PROGRAMA nomina1

** Els comentaris venen precedits d’un o més *

** Descripció: Programa que calcula la nòmina d'un treballador ** La primera part o entorn descriu les variables i constants ENTORN

CONST

nRETIRPF = 0.15 VAR

cNom : Cadena

nHores, nPreu : Enter

nSouBrut, nRetencio, nSouNet : Real

** La segona part conté les accions de què consta l'algorisme INICI ALGORISME

Llegir cNom, nHores, nPreu

nSouBrut := nHores * nPreu nRetencio := nSouBrut * nRETIRPF nSouNet := nSouBrut – nRetencio

Escriure cNom, nSouBrut, nRetencio, nSouNet FI ALGORISME

(24)

Algorisme 2 Llegir N M := 2 * PartEntera(N/2) SI M=N ALESHORES escriure "és parell" SI NO escriure "és senar" FI SI

L'algorisme 1 resol el problema en un nombre de passes que augmenta linearment amb la magnitud de N mentre que el 2 ho fa en un temps constant.

Això mostra la necessitat d'avaluar l'algorisme un cop dissenyat i, si es decideix que a-quest no és eficient, dissenyar-ne un de nou o optimitzar l'original introduint-hi modifica-cions que facin disminuir el temps necessari per resoldre el problema o reduir els recur-sos que es fan servir.

La complexitat de l'algorisme està relacionada, òbviament, amb la del problema que es vol resoldre. Hi ha un límit de complexitat per sobre del qual resulta molt difícil moure's independentment de l'experiència que es tingui. La ment humana està acostumada a treba-llar amb objectes que pot imaginar-se i a fer-ho en nombre reduït. Sempre hi haurà pro-blemes massa complexes per tenir-los al cap en conjunt.

Això dóna, però, una idea de com afrontar un problema complex. Podem anar descom-ponent el problema en subproblemes cada cop més senzills fins arribar a un nivell on siguem capaces de resoldre'l directament. Aquesta és, essencialment la idea del disseny descendent o "top down" que es descriu a continuació.

1.8.1 Disseny descendent

El mètode del disseny descendent consisteix en començar treballant a nivell abstracte per anar dividint el problema en les seves parts naturals. D'aquesta forma el problema a re-soldre es descompon en altres més senzills. A aquests darrers se'ls aplica el mateix pro-cediment fins arribar a problemes prou petits que podem resoldre directament.

Una forma d'entendre què es pretén amb aquest mètode consisteix en oblidar les possibi-litats reals de l'ordinador i suposar que aquest és capaç de dur a terme qualsevol acció. Vist així la resolució del problema serà senzilla. Les accions hipotètiques seran comple-xes i no tenen perquè coincidir amb les que és capaç de realitzar un ordinador real. En conseqüència la resolució de qualsevol problema serà senzilla. Un cop trobat un algoris-me basat en aquestes accions hipotètiques caldrà considerar individualalgoris-ment cada una d'aquestes accions i plantejar-les com nous problemes trobant algorismes que les resol-guin, fent servir si cal altres instruccions genèriques. Aquest procés s'anirà iterant, aug-mentant més i més el detall fins arribar a una solució factible del problema basada en accions que sí és capaç de realitzar un ordinador real. Això es coneix amb el nom de refinament de l'algorisme (stepwise refinement).

L'algorisme resolt d'aquesta forma es pot presentar com un arbre on cada node és un mò-dul, o problema, o solució hipotètica. Cada subarbre depenent d'aquest node es fa servir per a la resolució d'aquest subproblema. En particular el node del nivell més alt és el problema de partida. L'algorisme serà correcte si la solució que es dóna a cada nivell ho és.

El programa es podrà crear com un tot, tenint en compte l'algorisme complet, però una solució més raonable és dividir-lo en mòduls coincidents amb les parts naturals del pro-blema. En aquest cas es podria construir el programa d’avall a dalt creant primer

(25)

proce-diments que resolguin els mòduls de detall que, un cop comprovats seran utilitzats per altres procediments més generals fins a arribar a la creació del programa.

El diagrama següent mostra la descomposició de l'algorisme per al càlcul de la nòmina considerat més amunt.

Llegir NOM Entrada nom

Llegir NH, PH Entrada Hores i Preu Entrada de dades

SB = NH * PH Càlcul sou brut

Ret=SB * 0.15 Càlcul retencio

SN = SB - Ret Càlcul Sou net Càlcul dels sous

i retencions

Escriure NOM Imprimir nom

Escriure SB, RET, SN Imprimir sou brut, sou net i retenció Impressió nòmina Calcul i impressió de la

nòmina d'un treballador

1.9 RESUM DE DADES I INSTRUCCIONS EN PSEUDOCODI VBA I C 1.9.1 Tipus de dades simples

GENERAL PSEUDOCODI VBA C Numèriques Enters Reals Byte Integer Long Single Double Deci-mal short int signed long unsigned int unsigned short unsigned long float double long double No Numèr iques Caràcters Caracter Cadena String char

(26)

1.9.2 Constants i variables

GENERAL PSEUDOCODI VBA C

Constants CONST <Nom> = <Va-lor>;

Const <Nom> = <Valor> #define <NOM> <VALOR> const <tipus> <nom> = <valor> ; Variables VAR <Nom> : <tipus> ; DIM <Nom> as <tipus> <tipus> <nom>[=<valor>] ;

1.9.3 Estructura general d’un programa

GENERAL PSEUDOCODI VBA C

Capçalera Programa <Nom>; Sub <Nom>; main() Bloc de Decla-racions ENTORN Tipus <declaracions de tipus de dades> Constant <declaracions de con stants> Variable < declaracions de variables> Type <declaracions de tipus de dades> Const <declaracions de constants> DIM < declaracions de variables>

typedef <Nom d’un nou tipus>

#define <NOM> <V ALOR> [tipus] const nom = valor ;

<tipus > <nom de la va-riable>[= valor inici-al] ;

Bloc Executiu INICI ALGORISME [Codi executiu ] FI ALGORISME { } 1.9.4 Instruccions primitives. GENERAL Pseudoco-di VBA C

Instruccions d'Entra da Llegir INPUTBOX (Pet ició, ..) scanf([cadena de control], item1,…item2,…) getchar() Instruccions d'assignació Simple Composta := = = *=, /=, %=, +=, -=

Instruccions de Sortida Escriure MSGBOX (Missatge) printf([cadena de control], item1, -… item2,…)

(27)

1.10 EXERCICIS

1. Quin tipus de dades sembla més adient per representar cadascun dels conceptes se-güents:

a) El sou d’un treballador b) L’edat d’una persona c) El número de fills d) L’estat civil e) L’estat de caducat o no d’un producte f) El nº de telèfon g) Una frase h) El genoma humà 2. Quin és el resultat final de les operacions següents ?. En quin ordre s'han de dur a

terme ?

a) (((*5)**2 + 4 - 3 + (6*9))/2 b) 3+9**2 -((6/2)+5)

c) (5 < 0 AND 6 >= 7) OR (9 < (5 * 2) AND 3<> 3)

3. Donats els valors següents de les variables X := 1, Y := 4, Z :=10, i les constants PI=3.141592, i E=2.718281 avalueu les expressions següents

a) 2 * X + 0.5 * Y -1 / 5 * Z

b) PI * X ** 2 > Y OR 2 * PI * X <= Z c) E ^( X-1) / ( X * Z) / (X/Z)

d) "Don " + "Pepito" = "Don Pepito" OR "A"="a"

4. Construïu expressions correctes per a les fórmules següents a) ax2 bx c 0 + + ≥ b) 3 2 1 2 x y z xy z x y − − + c) A B C D E F G H I J K − − − + + +

d) Si DN, MN, AN representen el dia, mes i any d'una persona i DA, MA, AA el dia, mes i any actuals, expressar si ha complert 18 anys.

5. Deduir els resultats que s’obtenen dels següents algorismes : var enter : x,y,z

inici x <- 5 y <-20 z <- x+y escriure (x,y) escriure (z) fi

6. Escriure un algorisme que llegeixi un nombre i calculi el seu quadrat

7. Dissenyar un algorisme que demani una quantitat de pessetes i retorni el seu equiva-lent en euros.

(28)

8. Dissenyar un algorisme que demani dues monedes, p.ex. Dolar i lliura esterlina, l’equivalència entre les dues i una quantitat en la primera moneda i retorni la quant itat inicial expressada en la segona moneda.

9. Escriure un algorisme per determinar l’àrea i el volum d’un cilindre les dimensions del qual es llegeixen des del teclat.

10. Escriure un programa que demani dos nombres enters, DIVIDEND i DIVISOR i en retorni el QUOCIENT i el RESIDU.

11. Escriure un programa que llegeixi un temps en segons i el retorni en format “ho-res:minuts:segons”.

(29)

2. ESTRUCTURA GENERAL D'UN PROGRAMA

2.1 PROGRAMES

Podem considerar un programa com una seqüència lògica d'accions (instruccions) que

manipulen un conjunt d'objectes (dades) per obtenir uns resultats (solució del pro-blema).

Qualsevol programa sol contenir dos blocs ben diferenciats :

Bloc de declaracions on s'especifiquen els objectes que fa servir el programa. Bloc d'instruccions format per les operacions que cal dur a terme per a la

realitza-ció de l'algorisme.

L'execució d'un programa consisteix en la realització seqüencial de les instruccions que el componen, des de la primera fins l'última, d'una en una. Aquesta seqüència pot ser alte-rada mitjançant instruccions de control de bifurcació, repetició o ruptura.

2.2 PARTS D'UN PROGRAMA

Les parts principals d'un programa estan relacionades amb els seus blocs. Esquemàtica-ment :

Programa

• Declaracions • Bloc d'instruccions

⇒ Entrada de dades

⇒ Procés (algorisme de resolució) ⇒ Sortida de resultats

L'entrada està formada per totes les instruccions que agafen les dades des d'un disposi-tiu extern i les emmagatzemen en la memòria central. Esquemàticament :

Dades d'entrada

Memòria central

El procés està format per les instruccions que modifiquen els objectes a partir del seu estat inicial (dades d'entrada) fins el final (resultats), deixant els objectes que el contenen disponibles en la memòria central. Esquemàticament :

Resultats Procés

Dades d'entrada

(30)

La sortida consta de totes les ordres i instruccions per donar format als resultats i con-trolar els dispositius de sortida. Esquemàticament :

Memòria central

Dades de sortida

L’estructura general d’un programa, en pseudocodi, és la següent. Cada llenguatge pot presentar variacions sobre aquesta estructura.

PROGRAMA NomPrograma ENTORN CONST NomConstant=valor ... TIPUS NomTipus={Definicio de Tipus} ... VAR NomVariable : NomTipus ... INICI ALGORISME ... ... ... FI ALGORISME

2.3 INSTRUCCIONS I TIPUS D'INSTRUCCIONS

Com ja hem comentat en el capítol anterior podem trobar diferents tipus d’instruccions : • De declaració • Primitives • I. d'entrada • I. d'assignació • I. de sortida • De control • Alternatives • Repetitives • De ruptura de seqüència • Compostes o subprogrames. 2.3.1 Instruccions de declaració

Serveixen per anunciar l’ús d'objectes en un programa indicant-ne el nom i, segons el llenguatge, el tipus. Poden ser obligatòries (com en Pascal o C) o no (com en BASIC). Les formes bàsiques de declaració, en pseudo codi, són les següents:

• Constants

CONST nom_constant = valor • Tipus de dades

(31)

• Variables

VAR nom_variable : nom_tipus

2.3.2 Instruccions primitives

Són les que el processador executa de forma immediata, és a dir no depenen més que de la seva aparició en el programa per ser executades. Poden ser d'entrada d'assignació o de sortida.

Les instruccions bàsiques d’assignació, en pseudocodi, són les següents: • Assignació: Variable := Expressió

Entrada: LLegir Variable • Sortida: Escriure Expressió

Fent servir les instruccions de declaració i primitives ja és possible escriure programes senzills amb un flux lineal. El programa següent realitza el càlcul de l’àrea i el perímetre d’un cercle.

2.4 INSTRUCCIONS DE CONTROL

Són instruccions que no duen a terme cap feina concreta excepte l'avaluació d'expressi-ons, en general lògiques amb la finalitat de controlar l'execució d'altres instruccions o alterar l'ordre normal d'execució de les instruccions d'un programa. Serveixen per im-plementar les estructures de control descrites en el capítol anterior.

Hi ha tres grans grups d'instruccions de control : alternatives, repetitives i de ruptura de seqüència.

2.4.1 Instruccions alternatives

Són instruccions que controlen l'execució d'un o varis blocs d'instruccions, depenent de si es compleix o no alguna condició o del valor final d'una expressió. N'hi ha de tres me-nes : simple, doble o múltiple segons si la bifurcació del programa es pot produir passant per un, dos o més punts alternatius al principal. A continuació es mostra el pseudocodi i els diagrames de flux següents mostren aquests tipus d'instruccions.

Exemple 2-1 Algorisme executable linealment, sense canvis en la seqüència PROGRAMA Cercle1

ENTORN CONST

PI = 3.141592 VAR

nRadi, nLongitud, nArea: Real INICI

LLegir nRadi

nLongitud:=2*PI*nRadi nArea:=PI*Radi**2

Escriure nLongitud, nArea FI

(32)

2.4.1.1 Bifurcació simple

Considera només una condició que és una expressió lògica. Si aquesta es certa s’executaran les instruccions incloses en el bloc

Pseudo codi

SI CONDICIÓ

ALESHORES I1; I2;...;In FI SI Diagrama de flux Condició Acció SI NO

Figura 2-1 Bifurcació simple: SI... ALESHORES...

2.4.1.2 Bifurcació doble

Si l’avaluació de la condició produeix un resultat CERT s’executaran les instruccions del primer bloc si produeix un resultat FALS s’executaran les instruccions del segon bloc Pseudocodi

SI CONDICIÓ

ALESHORES I1; I2;...;In SI NO

J1; J2;...;Jm FI SI

(33)

Condició

Acció 1 SI

NO

Acció 2

Figura 2-2 Bifurcació doble: SI... ALESHORES... EN CAS CONTRARI... 2.4.1.3 Bifurcació múltiple

Davant d’un seguit d’opcions, expressades mitjançant una expressió alfanumèrica o nu-mèrica entera, s’executarà el bloc d’instruccions corresponent a l’opció que coincideixi amb el valor de l’expressió. Si cap ho fa s’executarà l’acció per defecte

Pseudocodi

SELECCIONAR PER EXPRESSIO

EN CAS QUE VALGUI V1 FER I1; I2;...;In1 EN CAS QUE VALGUI V2 FER J1; J2;....;Jn2 ....

EN CAS QUE VALGUI VK FER K1;...;Knk ALTRAMENT FER L1;L2;...;Lnl

FI SELECCIONAR

Diagrama de flux

Expressió

Acció 1 Acció 2 Acció N Alternativa a 1...N

...

V1 V2 VN Altres

(34)

Exemple. Bifurcació simple.

El programa següent calcula l’àrea d'un cercle a partir del radi. Per controlar si el radi que s'entra és o un nombre positiu fa servir una doble alternativa. El diagrama de flux és el següent : Treu MISSATGE D'ERROR Estructura IF..THEN..ELSE Calcula AREA INICI FI Entra RADI Treu RESULTAT Radi > 0? SI NO

Figura 2-4 Algorisme pel càlcul de l'area d'un cercle La codificació en pseudocodi dóna els llistats següents :

(35)

Exemple de bifurcació múltiple

El programa següent fa servir una bifurcació múltiple per decidir la qualificació que dó-na a un alumne en funció de la seva nota numèrica

Exemple 2-2 Ús d'una bifurcació simple en un càlcul PROGRAMA Cercle1

ENTORN CONST

PI = 3.141592 VAR

nRadi, nLongitud, nArea: Real INICI

LLegir nRadi

SI nRadi > 0 ALESHORES nLongitud:=2*PI*nRadi nArea:=PI*Radi**2

Escriure nLongitud, nArea SI NO

Escriure “El radi no pot ser negatiu” FI SI

FI

Exemple 2-3 Ús d’una bifurcació múltiple per convertir notes a qualificacions PROGRAMA PosaNota ENTORN VAR nNota: Real cQualificació: Cadena INICI LLegir nNota

SELECCIONAR PER nNota EN CAS QUE nNota < 5

cQualificacio = “Suspens”

EN CAS QUE (nNota >= 5) I (nNota <7) cQualificacio = “Aprovat”

EN CAS QUE (nNota >= 7) I (nNota <9) cQualificacio = “Notable”

EN CAS QUE (nNota >= 9) I (nNota <10) cQualificacio = “Excel.lent” EN CAS QUE (nNota =10)

cQualificacio = “Matricula d’honor” EN ALTRES CASOS

cQualificacio=”” FI SELECCIONAR

SI cQualificacio<>”” ALESHORES

Escriure “La qualificacio és :”,cQualifiacio SI NO

Escriure “Nota incorrecte” FI SELECCIONAR

(36)

2.4.2 Instruccions repetitives

Són les que controlen la repetició d'un conjunt d'instruccions anomenat rang mitjançant l'avaluació d'una condició que es realitza a cada repetició (repeticions condicionals) o mitjançant un comptador associat (repeticions incondicionals).

2.4.2.1 Repeticions condicionals

N'hi ha dues de principals. La instrucció MENTRE... REPETIR repeteix una instrucció mentre una condició sigui certa. La instrucció REPETIR ... MENTRE/ FINS QUE la re-peteix fins que una condició sigui certa. Són similars, i la diferència principal és que en el segon cas la instrucció s'executarà com a mínim un cop, mentre que en el primer, pot no haver-se d'executar mai.

Pseudocodi Ø Mentre

MENTRE CONDICIO FER I1; I2;...;In FI MENTRE Ø Repetir REPETIR I1; I2;...;In MENTRE/FINS CONDICIO Diagrames de flux Condició Acció Si No Acció Si Condició No

Repetir ... Mentre Repetir ... Fins

Figura 2-5 Diagrama de flux de "Mentre...Repetir" i "Repetir... Mentre / Fins que..."

(37)

Aquestes estructures s'utilitzen força per controlar l'entrada correcta d'informació o per repetir un mateix procés (per exemple el càlcul de la nòmina fins que l'usuari decideixi aturar-lo).

Exemple 2.4

El programa següent fa servir l'estructura MENTRE...REPETIR per controlar que, en l'exemple anterior de càlcul de l'àrea d'un cercle, el valor de radi que s'ha introduït sigui efectivament més gran de 0. Observeu que no es tracta d’anar repetint el càlcul sinó que el l’estructura “MENTRE... REPETIR” s’utilitza per entrar el radi tants cops com calgui fins que s’hi entri un valor positiu. Si el primer cop el radi ja es positiu el programa ni tan sols entrarà al bucle

º Treu resultat Calcula AREA INICI FI Entra RADI Entra RADI Estructura: WHILE... Radi < = 0? SI NO

Figura 2-6 Exemple de MENTRE...REPETIR

PROGRAMA AREACERCLE2 ENTORN

CONST Pi=3.14159 Real

VAR radi, arecercle, circumferencia : Real INICI ALGORISME

Llegir radi

MENTRE radi <=0 FER

Escriure El radi no pot ser un numero negatiu Escriure Entre un nombre positiu i prem INTRO Llegir radi

FI MENTRE

areacercle:= Pi * radi * radi circumferencia := Pi * 2 * radi Escriure areacercle, circumferencia FI ALGORISME

(38)

Una forma usual de fer servir els bucles condicionals és per repetir l'execució d'un pro-grama fins que l'usuari decideixi finalitzar. El propro-grama següent utilitza una estructura REPETIR...MENTRE per anar entrant nºs per promitjar fins que se n’hi entri un de nega-tiu

Exemple 2-5 Ús de REPETIR... FINS... per fer un nombre variable d'operacions

2.4.2.2 Repeticions incondicionals

De vegades es coneix, a priori quantes vegades s'executarà una instrucció. En aquest cas no cal anar avaluant una instrucció sinó que el que es fa és utilitzar un comptador (Vc) que, s'inicialitza en un determinat valor (Vi) i es va incrementant en una quantitat fixa (In). La repetició es duu a terme fins que el comptador assoleix un valor determinat (Vf) (de fet sí que s'avalua una condició, que és precisament si el comptador ha assolit aquest valor de terminació).

El nombre de repeticions d'una instrucci ó ve definit per la fórmula :

Nombre de repeticions = Part entera de V V I f i n −       +1 Pseudocodi

PER Vc DE Vi FINS Vf FER I1; I2;...;In FI PER Diagrama de flux Programa MITJANA ENTORN VARIABLES

nX: Real, nSuma: Real, nMig: Real nCont : Enter

ALGORISME INICI ALGORISME

** Inicialitzem les variables que fan paper d'acumuladors nSuma = 0

nCont = 0

** El bucle s’efectuarà com a mínim un cop REPETIR Llegir nX SI nX >= 0 ALESHORES nSuma = nSuma + nX nCont = nCont + 1 FI SI FINS QUE (nX<0) nMig = nSuma / nCont Escriure nMig

(39)

Vc<=Vf Vc:=Vc+In Si No Acció Vc:=Vi

Figura 2-7 Diagrama de flux de l'estructura FOR ... TO...

El programa següent fa servir una estructura PER...FINS per escriure un mateix caracter un cert nombre de vegades

Els bucles PER...FINS es nien sovint quant es vol realitzar alguna acció, no en una, sinó en dues direccions. Per exemple el programa següent estén l’anterior en el sentit que, enlloc de dibuixar una linia de caracters dibuixarà un triangle rectangle fet amb aquests:

PROGRAMA LINIACARACTERS ENTORN

VAR i, N : Enter, c : caracter INICI ALGORISME

LLegir “Quin caracter vols repetir?”, c LLegir “Quants cops el vols repetir?”, N PER i DE 1 FINS N FER

Escriure c ***Sense saltar de linia FI PER

FI ALGORISME

Exemple 2-6 Ús d'una estructura PER...FINS...

PROGRAMA TRIANGLECARACTERS ENTORN

VAR i,j N : Enter, c : caracter INICI ALGORISME

LLegir “Quin caracter vols repetir?”, c LLegir “Quants cops el vols repetir?”, N PER i DE 1 FINS N FER

PER j DE 1 FINS N FER

Escriure c ***Sense saltar de linia FI PER

Saltar linia FI PER

FI ALGORISME

(40)

2.5 VARIABLES AUXILIARS D'UN PROGRAMA

Com hem vist en el primer capítol els llenguatges de programació tenen elements bàsics que es fan servir com blocs constructius i regles mitjançant les quals hom pot combinar aquests elements. Aquestes regles són la sintaxi del llenguatge. Un ordinador només és capaç d'interpretar instruccions sint àcticament correctes, i els programes que contenen errors de sintaxi són rebutjats pel traductor.

Els elements bàsics constitutius d'un programa o algorismes són el que hem anomenat els objectes dels programes (paraules reservades, identificadors, constants variables i expressions) i les instruccions.

Hi ha altres elements que també formen part dels programes i el funcionament dels quals serà força important per un disseny correcte de l'algorisme i la codificació adient del programa. Es tracta de les variables auxiliars que són objectes que fa servir el progra-ma, i que, per la funció que duen a terme dins d'ell agafen un nom especial, moderl·litzant el seu comportament degut a la freqüència amb què apareixen.

Són els :

• comptadors, • acumuladors, • interruptors

Un comptador es fa servir per comptar qualsevol esdeveniment que es pugui presentar. Per exemple en un programa que vagi llegint nombres i comptant quants són positius. Un acumulador és un objecte que, com el seu nom indica serveix per acumular els resul-tats d’una operació que es realitza, normalment de forma successiva sobre un seguit d’elements. Per exemple si es vol calcular la mitjana de 10 nombres caldrà fer servir un acumulador per anar-hi guardant els valors sumats. Sempre s’ha d’inicialitzar, normal-ment a zero.

Un interruptor és un objecte que pot prendre només el valor cert o fals i es pot fer ser-vir per interrompre una seqüència que, altrament es prolongaria de forma indefinida. Per exemple en una bucle repetir mentre se sol fer servir al final d’aquest per decidir si es repeteix o s’acaba la iteració.

(41)

L’exemple següent calcula la potència d’un nombre i fa servir un acumulador per desar-hi els valors

L’exemple següent avalua els divisors d’un nombre per decidir si és primer i fa servir un interruptor per decidir sortir del bucle si no ho és.

PROGRAMA ESPRIMER ENTORN

VAR

Primer : Logic

i, ElNombre, MaxDiv : Enter Quocient : Real INICI ALGORISME

LLegir “Entra un nombre enter major que 3”, ElNombre Primer :=VERITAT

*** DIV representa divisio entera MaxDiv := ElNombre DIV 2

PER i DE 2 FINS ElNombre-1 FER Quocient := ElNombre/i

SI Enter (Quocient)=Quocient LLAVORS *** Divisió exacte: No és primer Primer :=FALS

SORTIR FI SI FI PER

SI Primer LLAVORS

Escriure ElNombre, “es un nombre primer” SI NO

Escriure ElNombre, “no és un nombre primer” FI SI

FI ALGORISME

Exemple 2-9 Combinació de vàries estructures en un càlcul PROGRAMA POTENCIA

ENTORN

VAR i, exponent : Enter

pot, base : Real INICI ALGORISME

LLegir base, exponent pot :=1

PER i DE 1 FINS exponent FER pot := pot*base

FI PER Escriure pot FI ALGORISME

(42)

2.6 INSTRUCCIONS COMPOSTES

Una instrucció composta representa un conjunt d'instruccions que es troben definides en una altra part diferent del punt on s'invoca aquesta. En general són crides a subprogra-mes.

Es representen en un ordinograma amb el símbol de subprograma acompanyats d'un identificador del subprograma o conjunt d'instruccions representades.

NomRutina

Els subprogrames apareixen relacionats amb el disseny descendent dels algorismes si bé es tracta d'una relació més conceptual que obligada. Atesa la seva importància es dedica-rà el capítol següent al seu estudi de forma independent.

Referencias

Documento similar

J. Servicio Retribuciones y Apoyo Técnico FRRH0129 26 A1 A2 Jornada continua N CONCURSO  ESPECÍFICO A4 EX11 24.426,08

dente: algunas decían que doña Leonor, &#34;con muy grand rescelo e miedo que avía del rey don Pedro que nueva- mente regnaba, e de la reyna doña María, su madre del dicho rey,

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

En un congrés, convé disposar d’un pla o full de ruta per tal de garantir la igualtat d’accés de totes les persones, tant ponents com participants.. Comunicació : Tant si el

Teniendo esto en cuenta, en este trabajo se defiende la manera en que podemos hacer uso de los descriptores de los tres niveles de referencia de la lengua (A1, A2, B1, B2, C1 y C2)

Las manifestaciones musicales y su organización institucional a lo largo de los siglos XVI al XVIII son aspectos poco conocidos de la cultura alicantina. Analizar el alcance y

Español y catalán para extranjeros, nivel A1 y A2 es un manual dirigido a los estudiantes del Máster Interuniversitario Erasmus Mundus en Robótica Avanzada de la Escuela Superior

Para las muestras artesanales A1, A2, A3 y de marca “B1” tienen un porcentaje de humedad de 23.04, 21.04, 22.24 y 21.84 respectivamente, dichos valores se encuentran por encima del