Un cop tenim l’enunciat d’un problema, cal que siguem capaços de dissenyar l’algorisme que porta a la seva solució. L’eina bàsica de que disposem pel disseny d’algorismes és el llenguatge algorísmic.
Un llenguatge és un conjunt de símbols juntament amb un conjunt de regles sintàctiques i semàntiques que serveix per comunicar-nos.
Les regles sintàctiques determinen com s’han de combinar els símbols per fer construccions que pertanyin al llenguatge (com s’han de dir les coses). Per exemple, una oració consta de subjecte, predicat i complements.
Les regles semàntiques determinen quin és el significat de les construccions del llenguatge (què es diu).
El llenguatge que fem servir habitualment (català, castellà) s’anomena llenguatge natural. El llenguatge natural no és adient per expressar els algorismes perquè poden arribar a ser molt complicats i difícils d’entendre, ja que:
* És massa complex (amb un subconjunt molt reduit n’hi hauria prou)
* És ambigüu (per això tots els traductors automàtics entre diferents idiomes donen resultats tan poc satisfactoris)
* Pot haver tantes formes d’expressar un algorisme en llenguatge natural com persones.
Al llarg del temps s’han proposat llenguatges alternatius que tenien com a objectiu la claredat, la simplicitat i la precisió: els llenguatges formals.
Nosaltres farem servir un llenguatge algorísmic que s’acostuma a fer servir molt sovint en la docència de la programació. La llista següent recull algunes de les característiques més rellevants del llenguatge algorísmic que farem servir:
* És un llenguatge **simple** (té molts pocs elements i poques regles que recordar).
* És un llenguatge **no ambigüu** (les seves construccions tenen un significat clar i precís).
* És un llenguatge **potent**. Malgrat la seva simplicitat, permet expressar algorismes complexos.
* Està destinat a interlocutors humans. Per tant, pot ser executat per qualsevol persona.
* Per executar-lo en un computador, prèviament hem de codificar-lo en un llenguatge de programació.
* La major part de construccions del llenguatge fan servir un reduit conjunt de paraules en català (com ara **algorisme**, **var**, **si**, **mentre**, etc.).
Tots els algorismes comparteixen un patró comú que es descriu a continuació i que anirem ampliant a mesura que avancem en el temari:
algorisme Nom de l’Algorisme
const
{Definició de constants}
fconst
tipus
{Definició de tipus}
ftipus
var
{Declaració de variables}
fvar
{Acció 1}
{Acció 2}
{Acció 3}
...
falgorisme
Comentaris
* El llenguatge fa servir algunes paraules clau, com ara **algorisme** i **tipus.** Aquestes paraules clau les escriurem en **negreta** (a la pissarra, les subratllarem) per facilitar la lectura de l’algorisme i per distingir-les dels noms de les variables.
* Tot algorisme comença per la paraula **algorisme** i acaba amb la paraula **falgorisme** (la f vol dir fi de l’algorisme).
* El primer que segueix és la **definició de les constants** que farem servir a l’algorisme.
* Després segueix la **definició dels tipus de dades** que farem servir a l’algorisme.
* Després segueix la **declaració de les variables** que farem servir a l’algorisme.
* Finalment, vé la part més important de l’algorisme: una succesió d’accions, que són les que modificaran els valors de les variables que hem declarat de cara a obtenir els resultats desitjats.
Exemple: Càlcul de la lletra del NIF
Especificació:
dni: enter;** lletra: caracter
{Pre: dni=DNI i DNI>0}
calcul_lletra_NIF
{Post: lletra = la lletra que correspon a DNI}
Algorisme
algorisme calcul\_lletra\_NIF
const
NUMLLETRES: enter = 23
fconst
var
dni, codi: enter
lletra: caracter
fvar
dni:=LlegirEnter()
{dni=DNI i DNI>0}
codi:= dni mod NUMLLETRES
si
codi=0 lletra:='T'
codi=1 lletra:='R'
codi=2 lletra:='W'
codi=3 lletra:='A'
codi=4 lletra:='G'
codi=5 lletra:='M'
codi=6 lletra:='Y'
codi=7 lletra:='F'
codi=8 lletra:='P'
codi=9 lletra:='D'
codi=10 lletra:='X'
codi=11 lletra:='B'
codi=12 lletra:='N'
codi=13 lletra:='J'
codi=14 lletra:='Z'
codi=15 lletra:='S'
codi=16 lletra:='Q'
codi=17 lletra:='V'
codi=18 lletra:='H'
codi=19 lletra:='L'
codi=20 lletra:='C'
codi=21 lletra:='K'
codi=22 lletra:='E'
fsi
{lletra = lletra que correspon a DNI} EscriuCaracter(lletra)
falgorisme
Exemple: Càlcul del factorial d’un enter
Especificació:
n: enter
{Pre: n=N i N>=0} factorial
{Post: fact=N!}
Algorisme
algorisme factorial
var
n, fact, i: enter
fvar
n:=LlegirEnter() {n=N i N>=0} fact:=1
i:=2
mentre i<=n fer fact:=fact\*i
i:=i+1
fmentre
{fact=N!}
EscriureEnter(fact)
falgorisme
Més comentaris...
-
El llenguatge fa servir una notació parentitzada: algunes paraules claus (com ara var i fvar) actuen com parèntesis en el sentit que serveixen per agrupar diferents parts de l’algorisme. Per exemple, var indica que comença l’apartat de definicions de variables, i fvar indica la fi d’aquest apartat. D’alguna forma, var actua com un parèntesi que s’obre, i fvar actua com un parèntesi que es tanca.
-
Fixeu-vos que cada cop que comença un nou bloc (amb var, const, mentre, etc.) augmentem la indentació del text (és a dir, la distància al marge esquerre); simètricament, cada cop que acaba un bloc (amb fvar, fconst, fmentre, etc.) disminuim un nivell la indentació. D’aquesta manera és molt més fàcil identificar on comencen i on acaben els diferents blocs de l’algorisme de forma visual.
Variable: Una variable és un nom simbòlic associat a una determinada cel·la de memòria en la que es pot guardar un cert valor per recuperar-lo més endavant.
Als exemples anteriors, dni, codi, fact i lletra són variables.
Constant: Una constant és exactament el mateix que una variable de la qual no es permet alterar el seu contingut, és a dir, manté sempre el seu valor.
Exemples de constants són PI, E, VELOCITAT_LLUM.
També reben el nom de constants tots els valors que poden aparéixer en una expressió. En aquest cas, però, no necessiten cap nom perquè només s’utilitzen en el lloc puntual en que apareixen.
Quan volem fer referència a variables i constants de forma conjunta, parlem d’objectes. Per tant, els objectes d’un algorisme són les seves constants i les seves variables.
Tot objecte té tres atributs:
-
el nom o identificador: és el nom que li donem i que ens permet referenciar-lo. el tipus: determina la classe de valors pot prendre: enters, reals...
-
el valor: el valor que es guarda a la cel·la de memòria associada a l’objecte.
Tipus de dades: El tipus d’un objecte determina el conjunt de valors possibles que pot prendre, i en consequència:
- l’espai de memòria que ocupa,
- la seva representació interna,
- les operacions que es podran dur a terme amb aquell objecte.
El nostre llenguatge algorísmic reconeix quatre tipus elementals:** enter, real, carácter i boolea. Una dada de tipus enter pot prendre com a valor un nombre enter qualsevol: 3, 5, -34...
Una dada de tipus real pot prendre qualsevol valor del conjunt dels nombres reals: 2.45, 3e-5...
Una dada de tipus caracter pot prendre qualsevol valor d’una taula de caracters, que inclou les lletres de l’abecedari, els dígits decimals i una sèrie de símbols addicionals, com ara símbols de puntuació, espais en blanc, etc. Normalment es fa servir la taula de caràcters ASCII.
Una dada de tipus booleà pot prendre només dos valors: cert o fals.
Tipus de dades elementals
enter | qualsevol nombre enter | 512 |
---|---|---|
real | qualsevol nombre real | 3.5e-3 |
caracter | qualsevol caracter d’una taula | ‘D’ |
booleà | només pot ser cert o fals. | cert, fals |
Totes les dades a la memòria d’un computador estan codificades com una seqüència de 0’s i 1’s.
La memòria dels ordinadors està basada en l’agrupació de gran quantitat de components electrònics que poden estar en dos estats (p.ex +5V, 0V) que es representen per 0 i 1 (és a dir, un bit). Per aixó, totes les dades emmagatzemades a la memoria d'un ordinador es codifiquen com una seqüència de bits.
Codificació dels booleans
Com que només hi ha dos valors possibles (cert i fals), n'hi ha prou amb un sol bit i una codificació com: fals 0 (on la fletxa “ ” la podem llegir com “...es representa amb...” ).
cert 1.
Codificació dels enters
Per codificar un número enter es pot ser servir la seva representació binària.
Habitualment fem servir la numeració en base 10. Aixó vol dir que en un número, el valor d'un digit (0..9) depén de la seva posició, segons una sèrie de potències de 10:
d 4 |
d 3 |
d 2 |
d 1 |
d 0 |
---|---|---|---|---|
10000 1000 100 10 1 Per exemple: 5243 = 5*1000 + 2*100 + 4*10 + 3*1 |
Els ordinadors fan servir una numeració en base 2, on el valor dels digits (0, 1) depén de la seva posició, peró segons una sèrie de potencies de 2:
d 8 |
d 7 |
d 6 |
d 5 |
d 4 |
d 3 |
d 2 |
d 1 |
---|---|---|---|---|---|---|---|
128 64 32 16 8 4 2 1 |
Per exemple: la sequència de bits 10011 representa el número 1*16 + 1*2 + 1*1 =19.
Per representar enters entre 0 i 255, n’hi ha prou amb 8 bits:
0 00000000 1 00000001 2 00000010
3 00000011 4 00000100 5 00000101
...
D’aquesta forma podem representar el valor absolut d’un enter. Per representar el signe, podem fer servir un bit addicional, o utilitzar l’anomenada notació en complement a 2, on el valor de cada posició és:
d 8 |
d 7 |
d 6 |
d 5 |
d 4 |
d 3 |
d 2 |
d 1 |
---|---|---|---|---|---|---|---|
-128 64 32 16 8 4 2 1 |
Codificació dels reals
Una possible representació dels reals és la representació en coma flotant. S’obté d’aquesta manera:
- Primer agafem el número que volem representar i el normalitzem, per exemple fent que hi hagi cap un zero abans del punt decimal, i un digit significatiu (1-9) després del punt decimal:
234.56 0.23456e3. 0.023 0.23e-1
- Un cop normalitzat, l'unic que hem de fer és representar la mantissa (el que hi ha després del punt decimal) i l'exponent per separat, fent servir la codificació del enters.
Exemple: si fem servir 8 bits per la mantissa i 8 més per l’exponent:
900 0.9e3 00001001 00000011
Codificació dels caracters
Per codificar els caracters es fa servir una taula de traducció on cada caracter té assignat un número enter. Normalment s’utilitza un codi estandard anomenat ASCII. Per que us en feu una idea, aquí teniu el codi ASCII d’els caracters imprimibles:
: 32 !: 33 ": 34 #: 35 $: 36 %: 37 &: 38 ': 39 (: 40 ): 41 *: 42 +: 43
,: 44 -: 45 .: 46 /: 47 0: 48 1: 49 2: 50 3: 51 4: 52 5: 53 6: 54 7: 55 8: 56 9: 57 :: 58 ;: 59 <: 60 =: 61 >: 62 ?: 63 @: 64 A: 65 B: 66 C: 67 D: 68 E: 69 F: 70 G: 71 H: 72 I: 73 J: 74 K: 75 L: 76 M: 77 N: 78 O: 79 P: 80 Q: 81 R: 82 S: 83 T: 84 U: 85 V: 86 W: 87 X: 88 Y: 89 Z: 90 [: 91 : 92 ]: 93 ^: 94 _: 95 : 96 a: 97 b: 98 c: 99 d:100 e:101 f:102 g:103 h:104 i:105 j:106 k:107 l:108 m:109 n:110 o:111 p:112 q:113 r:114 s:115 t:116 u:117 v:118 w:119 x:120 y:121 z:122 {:123 |:124 }:125 ~:126
Exemple: ‘A’ 65 01000001
Unitats de memòria
Les unitats de memòria o mesures de la quantitat d’informació són:
- bit: quantitat d’informació que permet distingir un valor concret d’entre 2 valors diferents. byte: equival a 8 bits. Amb 8 bits es poden representar 28=256 valors diferents.
- KB: equival a 1024 bytes:
- MB: equival a 1024 KB
- GB: equival a 1024 MB
Si volem fer servir una constant en un algorisme, cal que la definim en el bloc de definició de constants:
algorisme Nom de l’Algorisme
const
{Definició de constants}
fconst
tipus
{Definició de tipus} ftipus
var
{Declaració de variables} fvar
{Accions}
...
falgorisme
En llenguatge algorísmic, totes les constants es defineixen en el bloc const i fconst, amb el format:
const
nom : tipus = valor
fconst
Exemple (fixeu-vos que cada constant es defineix en una línia separada):
const
DIES\_EN\_UN\_ANY : enter = 365
PI : real = 3.14159
DARRERA\_LLETRA : caracter = ‘Z’ fconst
nom:
- El nom de les constants es posa normalment en majúscules.
- El nom ha de ser un identificador vàlid. Un identificador és vàlid quan:
- Només està format per lletres, números i el carácter subratllat ‘_’, sense que puguin apareixer altres caracters com signes de puntuació o espais en blanc.
- No coincideix amb cap de les paraules clau del llenguatge (var, mentre, etc.).
-
- Es tria de forma sigui expressiu del seu contingut.
tipus:
- El tipus ha de ser un dels quatre tipus elementals: enter, real, caracter o boolea. valor:
- Si la constant és un enter, es posa el valor de la forma habitual: 234, -12...
- Si la constant és un real, ha de dur o bé el punt decimal, o bé la lletra d’exponencial “e”: 12.25,
314e-2, 3.0
- Si la constant és un caracter, el posa entre cometes simples: ‘a’, ‘b’, ‘A’, ‘_’, ... Si la constant és un boolea, el valor només pot ser cert o fals.
Si volem fer servir una variable en un algorisme, cal que la declarem en el bloc de declaració de variables:
algorisme Nom de l’Algorisme
const
{Definició de constants}
fconst
tipus
{Definició de tipus}
ftipus
var
{Declaració de variables}
fvar
{Accions}
...
falgorisme
En llenguatge algorísmic, totes les variables es declaren en el bloc var i fvar, amb el format:
var
nom : tipus
fvar
Exemple (fixeu-vos que en una mateixa línia es poden declarar més d’una variable):
var
dni, edat : enter
velocitat, temps : real
lletraNIF : caracter
es\_solter : boolea
fvar
nom:
- El nom de les variables es posa normalment en minuscules (excepte inicials de noms compostos). El nom ha de ser un identificador vàlid. Un identificador és vàlid quan:
- Només està format per lletres, números i el carácter subratllat ‘_’, sense que puguin apareixer altres caracters com signes de puntuació o espais en blanc.
- No coincideix amb cap de les paraules clau del llenguatge (var, mentre, etc.).
- Es tria de forma sigui expressiu del seu contingut.
tipus:
- El tipus ha de ser un dels quatre tipus elementals: enter, real, caracter o boolea., o un tipus definit per l’usuari al bloc de definició de tipus (ho veurem més endavant).
Fixeu-vos que quan es tractava de constants parlavem de definició (perquè li domavem ja el valor que tindrà durant tota l’execució de l’algorisme), mentre que quan es tracta de variables parlem de declaració (perquè només diem com es diu la variable i de quin tipus és). Quan una variable es declara, el seu valor resta indeterminat fins que s’hi assigna un valor inicial a una variable (inicialització).
Amb les dades d’un determinat tipus (enter, real, caracter i boolea) podrem fer unes operacions predefinides que es corresponen amb les que sap fer la unitat aritmètico-lògica del processador. Aquestes operacions es representen amb símbols especials anomenats operadors.
El llenguatge algorísmic té quatre tipus d’operadors: Operadors aritmètics
Operadors aritmètics pels enters |
---|
+ |
- |
* |
div |
mod |
Exemples: |
14 div 4 dóna com a resultat 3 14 mod 4 dóna com a resultat 2
Operadors aritmètics pels reals |
---|
+ |
- |
* |
/ |
Exemples: 14.0 / 4.0 = 3.5 Operadors lògics per booleans |
Operadors lògics pels booleans |
---|
i |
o |
no |
Exemple: (a>b) i (b>c) |
Operadors relacionals
Permeten comparar dos operands del mateix tipus, segons una relació d’ordre. El resultat és un booleà.
/|Operadors relacionals| | - | |=|Igual| |<|Menor| ||Menor o igual| |>|Major| ||Major o igual| ||Diferent|
- L’ordre dels enters i dels reals coincideix amb l’ordre habitual.
- L’ordre dels caracters està determinat per l’ordre de la seva codificació ASCII. Fixeu-vos que en el codi ASCII es respecta l’ordre alfabètic de les lletres.
- L’ordre dels booleans (pràcticament no es fa servir) es defineix de forma arbitraria: fals < cert.
Operadors de conversió de format
Donat que no es pot operar directament un enter amb un real, cal disposar d’operadors de conversió:
Operadors de conversió |
---|
real(e) |
enter(r) |
Exemple: |
2.0 + real(3 div 4) 34 + enter(12.0 / 4.0)
Resum de les operacions definides per cada tipus:
Operadors definits per cada tipus | ||
---|---|---|
enter | + | - |
real | + | - |
caracter | ||
boolea | ||
Llevat que s’indiqui el contrari, aquestes són les úniques operacions que es poden aplicar sobre les dades de tipus elementals. Qualsevol altre operació que necessitem (factorial, valor absolut, etc...) cal definir-la a partir d’aquests operadors predefinits. |
Comentaris sobre les operacions amb enters i reals
Divisió real i divisió entera
És important diferenciar la divisió entre enters i la divisió entre reals.
La divisió entre reals és la divisió típica amb xifres decimals, que denotem amb “/”:
5.0 / 2.0 dóna 2.5
La divisió entre enters és diferent, doncs obtenim un quocient i un residu, tots dos enters:
5 2
1 2
El quocient enter de la divisió de 5 entre 2 es denota per 5 div 2 El residu de la divisió de 5 entre 2 es denota per 5 mod 2
Conversió obligatòria entre enters i reals
És important recordar que, en una mateixa operació, no es poden barrejar directament enters amb reals (recordeu que la representació interna és diferent!).
Cal recordar també que els valors reals, per ser considerats com a tals, han de tenir o bé un punt decimal o bé la e'' d'exponent: 1.2, 3e-3, 3.0, etc. En cas contrari es representarien internament com enters!
No és correcte fer
2.3 + 5
perquè l'operació suma requereix tots dos operands enters o tots dos reals. Si volem fer l'operació, hem de convertir un dels dos al tipus de l'altre:
enter(2.3) +5 que dóna 7, o bé:
2.3 + real(5)
que dóna 7.3 .
A l’apartat anterior hem vist que les dades (variables, constants) es poden combinar amb un conjunt d’operadors predefinits. La combinació resultant s’anomena expressió:
Expressió: sequència de variables i constants combinades amb operadors i parèntesis. Exemples d’expressions:
(a + 1) **mod** n
2.0 \* PI \*512.5 ‘z’
a > b
Tipus d’una expressió: El tipus d’una expressió és el tipus del resultat que s’obté quan s’avalua.
(a + 1) mod n és de tipus enter. 2.0 * PI *512.5 és de tipus real. ‘z’ és de tipus caracter. a > b és de tipus booleà!
Una expressió és correcta quan compleix tots aquests requeriments:
Els operadors que conté són operadors predefinits (apartat 4.7).
Tots els operadors que apareixen tenen exactament el mateix nombre d’operands que indica la seva
definició (observeu tots són binaris, excepte la negació i els de conversió, que són unaris) i el tipus d’aquests són els esperats per l’operador. Observeu que els operands poden ser variables, constats amb nom (p. ex. PI), constants sense nom (p. ex. 3.14), i altres expressions.
Exemples d’expressions incorrectes:
Exemples d’expressions incorrectes |
---|
Expressió |
a % 2 |
(a>3) no (b<2) |
2 + 3.0 |
(a>3) + 4 |
Definició alternativa del concepte “expressió”
La definició constructiva que teniu a continuació ens diu com podem construir expressions vàlides.
- Un valor qualsevol, ja sigui enter, real, carácter o boolea, és considera una expressió vàlida. Una variable és una expressió.
Una constant és una expressio.
Essent A i B expressions del mateix tipus, un operador unari definit per A, i un operador binari definit per A i B, llavors:
(A) és una expressió
- A és una expressió A B és una expressio
Avaluació d'expressions
Avaluar una expressió vol dir realitzar les operacions que indica.
Ja hem vam veure la interpretació que té cada operador per separat. Ara només queda establir les regles que determinen l’ordre en que s’aparellen i s’avaluan els operadors quan una expressió conté més d’un operador.
- Els operadors dels nivells més interns de parèntesis s’apliquen abans que els dels nivells més interns.
- Dintre d’un mateix nivell de parèntesis, per decidir l’ordre de les operacions s’utilitza una taula que determina la prioritat dels operadors, de forma que els operadors més prioritaris s’apliquen abans que els menys prioritaris:
Prioritat dels operadors en llenguatge algorísmic |
---|
(de més a menys prioritat) |
no |
* / div mod |
+ - |
= < > |
i |
o |
- Els operadors d’un mateix nivell de parèntesis que tinguin la mateixa prioritat s’avaluan en l’ordre en que apareixen a l’expressió, és a dir, d’esquerra a dreta.
Exemples:
a>5 i b<4 equival a (a>5) i (b<4)
a + 4 > 5 o 3 + 5 mod 2 < 3 equival a ( (a + 4) > 5 ) o ( (3 + (5 mod 2) )<3)
Del darrer exemple es pot observar la conveniència d’utilitzar parèntesis en expressions llargues.
Errors comuns amb expressions
En altres àmbits es fa servir la notació
1< a < 10
per indicar que a està entre 1 i 10. Observeu que en llenguatge algorísmic cal escriure-ho com:
(1<a) i (a<10)
ja que la primera no és una expressió vàlida en llenguatge algorísmic.
Si b és una variable de tipus boolea, l’expressió
*b* = cert
donarà com a resultat cert quan b sigui cert, i fals quan b sigui fals. Per tant, l’expressió anterior és equivalent a:
b
Anàlogament, l’expressió
b = fals és millor escriure-la com: no b
Un cop hem definit les constants i hem declarat les variables que farem servir, cal escriure les accions que formaran el cos de l’algorisme:
algorisme Nom de l’Algorisme
const
{Definició de constants}
fconst
tipus
{Definició de tipus} ftipus
var
{Declaració de variables}
fvar
Accio1
Accio2
Accio3
...
falgorisme
El llenguatge algorísmic reconeix una acció elemental (l’assignació) i tres accions compostes o estructures de control, que es resumeixen a continuació:
Accions elementals i estructures de control del llenguatge algorísmic |
---|
Assignació |
Estructura condicional (o alternativa) |
Estructura iterativa “mentre” |
Estructura iterativa “per” |
L’assignació és l’acció fonamental a partir de la qual es construeixen els algorismes. L’execució d’una assignació consisteix a avaluar una expressió i a emmagatzemar el resultat en una variable.
Sintaxi de l’assignació en llenguatge algorísmic
nomVariable := expressio
on:
- nomVariable és el nom d’una variable que haurem declarat prèviament;
- expressió és una expressió vàlida on totes les constants que conté estan definides i totes les variables que conté estan declarades i inicialitzades.
El simbol ‘:=’ s’anomena símbol de l’assignació, i es llegeix “...pren per valor...”.
Exemple:
mitja := suma / n
Validesa
- Al costat dret deu haver una expressio vàlida (totes les variables han d'haver estat declarades i inicialitzades prèviament).
- El tipus de l'expressió i de la variable han de coincidir (enter i enter, real i real, booleà i booleà, etc.).
Execució d’una assignació
Una assignació s’executa en dos passos:
- S'avalúa l'expressió del costat dret (tasca duta a terme per la unitat aritmètico-lògica)
- El resultat s'emmagatzema dins la variable de la part esquerra. (escriptura a memòria)
Observeu que l’execució d’una assignació implica:
- una operació de lectura (consulta) per cadascuna de les variables que apareixen en l’expressió.
- una operació d’escriptura (modificació) de la variable de la esquerra de l’assignació.
Exemple: Intercanvi de dues variables.
Lectura de dades del canal d’entrada
El llenguatge algorísmic està dotat de tres funcions predefinides que permeten llegir dades del canal d’entrada estàndar. Habitualment el canal d’entrada és el teclat, per tant aquestes funcions permeten demanar l’entrada de dades a l’usuari (ja siguin dades enteres, reals o caracters). Aquestes tres funcions són LlegirEnter, LlegirReal i LlegirCaracter, i el seu format és:
nomVariable := LlegirEnter() nomVariable := LlegirReal() nomVariable := LlegirCaracter()
L’execució d’aquestes assignacions sobre el teclat es duu a terme així:
- L’ordinador espera fins que l’usuari entri una dada
- Si la dada entrada no és del tipus demanat (enter, real, caracter), es considera un error.
- Si la dada entrada és del tipus demanat, es copia aquest valor dins la variable.
Escriptura de dades pel canal de sortida
El llenguatge algorísmic també està dotat de quatre accions predefinides que permeten escriure dades al canal de sortida estàndar (normalment el canal de sortida és la pantalla, per tant, aquestes operacions escriuen per pantalla):
EscriureEnter
Format: EscriureEnter(expressió entera)
Resultat: Escriu pel canal de sortida el valor d’una expressió de tipus enter. Exemples: EscriureEnter(25), EscriureEnter(a+5)
EscriureReal
Format: EscriureReal(expressió real)
Resultat: Escriu pel canal de sortida el valor d’una expressió de tipus real Exemples: EscriureReal(25.2), EscriureReal(r/2.0)
EscriureCaracter
Format: EscriureEnter(expressió de tipus caracter)
Resultat: Escriu pel canal de sortida el valor d’una expressió de tipus caracter.
Donat que els caracters no tenen cap operació interna, una expressió de tipus caracter només pot ser o bé un valor (ex. ‘a’), o bé el nom d’una variable de tipus caracter.
Exemples:
const
C : caracter = ‘Z’
fconst
EscriureCaracter(C) {escriu per pantalla una Z} EscriureCaracter(‘C’) {escriu per pantalla una C}
EscriureMissatge
Format: EscriureMissatge(“cadena de text”)
Resultat: Escriu pel canal de sortida la cadena de text delimitada per cometes dobles. Exemple: EscriureMissatge(“Entra un enter:”)
L’estructura condicional permet que algunes accions s’executin només quan es compleix una determinada condició. Per tant, permet prendre decisions i seguir camins alternatius dins un algorisme.
Sintaxi de l’estructura condicional en llenguatge algorísmic
si condicio
accio
1 1 ...
condicio accio
n n
fsi
on:
- condicio és una expressió vàlida que dóna com a resultat un booleà
- acció és qualsevol acció o conjunt d’accions vàlides (assignació o altres estructures de control).
El simbol “ ” es pot llegir i escriure com “aleshores” o “llavors”, amb idèntic significat.
Exemple
si a>b maxim:=a
a=b maxim:=a
a<b maxim:=b
fsi
Execució d’una estructura condicional
Una estructura si s’executa en tres passos:
- S'avaluen totes les condicions i s’identifica quina és certa (n’hi ha d’haver exactament una).
- S’executen les accions corresponents a la condició que ha resultat ser certa.
- Continua l’execució de l’algorisme per la línia següent al fsi
Validesa
Perquè aquesta estructura sigui vàlida, s’han de seguir aquestes regles:
Les condicions condicio , ... condicio , han de posar-se de forma que estiguin contemplats tots els cassos possibles, però que no hi hagi cassos repetits. Per tant, hem de garantir que, per qualsevol estat possible al començament del si, sempre hi haurà exactament una condició certa i la resta seran falses. Per aconseguir aixó, a vegades cal descomposar un si en més d'un nivell.
Si per algun cas del si no hem de fer res, posarem l'accio especial continuar, que no canvi l’estat de l’algorisme.
Exemple: Càlcul del màxim de 3 numeros, etc.
L’estructura iterativa permet executar repetidament un conjunt d’accions fins que s’arribi a una determinada condició.
Sintaxi de l’estructura iterativa en llenguatge algorísmic
mentre condicio fer
accio1
...
accion
fmentre
on:
- condicio és una expressió vàlida que dóna com a resultat un booleà
- accio és qualsevol acció o conjunt d’accions vàlides que s’anomenen “cos del bucle”.
Exemple
a:=1
mentre a<5 fer
EscriureEnter(a) a:=a+1
fmentre
Observeu que l’execució de l’exemple anterior escriuria per pantalla els valors 1, 2, 3 i 4. Execució d’una estructura iterativa
Una estructura mentre s’executa en tres passos:
- S'avalua la condició de continuació.
- Si és certa, s’executen totes les accions del cos del bucle i tornem al pas 1.
- Si és falsa, sortim del bucle i continua l’execució de l’algorisme per la línia següent al fmentre
Observeu que si al comencament del bucle la condició és falsa, no s'executa el cos del bucle cap vegada. Validesa
Perquè aquesta estructura sigui vàlida, s’han de seguir aquestes regles:
La condicio ha de posar-se de forma que es faci falsa després d’un determinat número d’iteracions. Aixó implica que la condició ha de contenir variables, i que el valor d’almenysuna d’aquestes variables s’haurà d’alterar dins el bucle. Exemple: Càlcul de productes, potències, factorial.
Aquesta estructura també permet executar repetidament un conjunt d’accions. De fet, és un cas particular de mentre, en el que sabem a priori el número d’iteracions que cal fer.
Sintaxi de l’estructura en llenguatge algorísmic
per variable en [inici..fi]
accio
1
...
accio
n
fper
on:
- variable és una variable declarada com enter, peró que no cal que hagi estat inicialitzada abans.
- inici i fi són enters o expressions que dónen com a resultat un enter
- accio és qualsevol acció o conjunt d’accions vàlides (assignació o altres estructures de control). Les accions dins d’un mentre s’anomenen “cos del bucle”.
Exemple
per a en [1..4] fer
EscriureEnter(a)
fper
Observeu que l’execució de l’exemple anterior escriuria per pantalla els valors 1, 2, 3 i
Una estructura per es defineix en termes del seu equivalent amb un mentre:
per variable en [inici..fi] accions fper |
equival a |
variable:=inici mentre variable<=fi fer accions variable:=variable+1 fmentre |
---|
Observeu que:
- si abans del per es cumpleix que inici=fi, llavors el cos del bucle només s’executa una vegada (només es fa una iteració).
- si abans del per es cumpleix que inici>fi, llavors el cos del bucle no s’executa cap vegada. Exemple: Càlcul de productes, potències, factorial.