You are on page 1of 51

Fonaments de Programació I

T2. Estructures de control


Estructures de control
§ La programació estructurada disposa de blocs que
permeten controlar el flux d’execució. Són les estructures
de control:
– El condicional o selecció és una estructura de control que
permet l’execució d’instruccions segons si es compleixen o
Departament d’Enginyeria Informàtica i Matemàtiques

no unes condicions.
– El bucle (o repetició o iteració) permet executar instruccions
un determinat nombre de vegades o mentre es compleixi
una condició.

Fonaments de Programació I – Estructures de control 2


Contingut
§ Condicionals
§ Bucles
Departament d’Enginyeria Informàtica i Matemàtiques

Fonaments de Programació I – Estructures de control 3


Condicionals
§ Condicional simple
La condició és una expressió lògica.

condició

si (condició) llavors
Departament d’Enginyeria Informàtica i Matemàtiques

seqüència d’instruccions
seqüència no
fsi d’instruccions

seqüència d’instruccions

Noteu com fem ús de la indentació


per millorar la llegibilitat. seqüència
d’instruccions

Fonaments de Programació I – Estructures de control 4


Condicionals
§ Condicional simple
– Exemple. Dissenya un algorisme per a obtenir el valor absolut
d’un nombre enter introduït per teclat.
algorisme valor_absolut
inici
Departament d’Enginyeria Informàtica i Matemàtiques

Obtenir valor
Calcular valor absolut
Mostrar resultat
falgorisme

Com es calcula el valor absolut d’un


nombre enter?

Fonaments de Programació I – Estructures de control 5


Condicionals
algorisme valor_absolut
var
x: enter
fvar
inici
escriure ("Introdueix el nombre")
Departament d’Enginyeria Informàtica i Matemàtiques

llegir(x)
si (x < 0) llavors $ Si és negatiu cal canviar el signe
x ß -x
fsi
escriure ("El valor absolut és ", x)
falgorisme

Fonaments de Programació I – Estructures de control 6


Condicionals: llenguatge C
§ Utilitzem la instrucció if i definim entre claus el bloc
d’instruccions a executar.
si (x < 0) llavors Els operadors lògics són
! (no), && (i), || (o)
x ß -x
fsi
Es tracta de !
Departament d’Enginyeria Informàtica i Matemàtiques

dues pleques
(en anglès,
pipes)
1
if (x < 0)
{
En les condicions compostes
x = -x; hem d’usar parèntesis que les
} englobin, això també millora
la llegibilitat del codi:
Quan hi ha una única instrucció dins els blocs, es
poden ometre les claus. Tanmateix, no és una opció ((n>=2) && (j<3))
recomanable quan us inicieu a la programació.

Fonaments de Programació I – Estructures de control 7


Condicionals
§ Condicional doble
– Defineix també les instruccions que
condició
s’executen si no es compleix la
condició. sí no

si (condició) llavors
Departament d’Enginyeria Informàtica i Matemàtiques

seqüència d’instruccions seqüència seqüència


d’instruccions d’instruccions
sino
seqüència d’instruccions
fsi
seqüència d’instruccions seqüència
d’instruccions

En algunes fonts d’informació


trobareu ‘altrament’ o una fletxa à
en comptes de ‘sino’.

Fonaments de Programació I – Estructures de control 8


Condicionals
§ Condicional doble
– Exemple. Dissenya un algorisme que indiqui si un nombre és
parell o senar.

Quina és l’estratègia que farem servir?


Departament d’Enginyeria Informàtica i Matemàtiques

Fonaments de Programació I – Estructures de control 9


Condicionals
algorisme parell
var n : enter fvar
inici
escriure("Introdueix un nombre enter:")
llegir(n)
si (n mod 2 = 0) llavors
Departament d’Enginyeria Informàtica i Matemàtiques

escriure("El nombre ", n, " és parell")


sino
escriure("El nombre ", n, " és senar")
fsi
falgorisme

Fonaments de Programació I – Estructures de control 10


Condicionals
algorisme parell Sovint serà necessari usar el resultat d’una
condició en vàries ocasions. En aquest cas,
var n : enter per no haver de fer servir condicionals cada
és_parell: booleà vegada, podem desar el resultat de la
condició en una variable de tipus booleà.
fvar
inici
escriure("Introdueix un nombre enter:")
llegir(n) Instruccions que
Departament d’Enginyeria Informàtica i Matemàtiques

és_parell ß (n mod 2 = 0) s’executarien si n és


senar i múltiple de 3.
...
si (no és_parell i n mod 3 = 0) llavors ... fsi
si (és_parell) llavors
escriure("El nombre ", n, " és parell")
sino
escriure("El nombre ", n, " és senar")
fsi
falgorisme
Fonaments de Programació I – Estructures de control 11
Condicionals
§ Exemple. Donada una lletra introduïda pel teclat, s’indiqui si és
vocal o consonant.
algorisme vocal_consonant
var
ll: caràcter
fvar
Departament d’Enginyeria Informàtica i Matemàtiques

inici
escriure ("Introdueix una lletra")
llegir (ll)
si (ll=’a’ o ll=’e’ o ll=‘i’ o ll=‘o’ o ll=‘u’) llavors
escriure ("És una vocal") Fixeu-vos que si introduïm una
sino vocal en majúscules o amb
escriure ("És una consonant") accent/dièresi no funcionaria.
Com que l’objectiu és didàctic, ja
fsi ens va bé aquest exemple.
falgorisme

Fonaments de Programació I – Estructures de control 12


Condicionals
§ Condicionals dins condicionals
– Exemple. Donat un numerador i un denominador, s’indiqui si el
resultat de la fracció és major, menor o igual a 1.
algorisme resultat_fracció
var num, den: enters fvar
inici
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Introdueix el numerador")


llegir (num)
escriure ("Introdueix el denominador")
llegir (den)

...

falgorisme

Fonaments de Programació I – Estructures de control 13


Condicionals
algorisme resultat_fracció
var num, den: enters fvar
inici
escriure ("Introdueix el numerador")
llegir (num)
escriure ("Introdueix el denominador")
llegir (den)
Departament d’Enginyeria Informàtica i Matemàtiques

si (num = den) llavors escriure ("Igual a 1")


sino
si (num < den) llavors escriure ("Menor que 1")
sino escriure ("Major que 1")
fsi
fsi
falgorisme

Fonaments de Programació I – Estructures de control 14


Condicionals
§ Podem usar els condicionals per assegurar una precondició

...
Recuperem l’exemple de la divisió
inici que hem vist al tema anterior.
escriure ("Introdueix el dividend:")
llegir (n1) $ Obtenim dividend
escriure ("Introdueix el divisor:")
llegir (n2) $ Obtenim divisor
Departament d’Enginyeria Informàtica i Matemàtiques

$ Si el divisor no és zero, fem els càlculs


si (n2 ≠ 0) llavors
q ß n1 div n2
r ß n1 mod n2
escriure ("El quocient és ", q, " i el residu és ",r )
sino $ Altrament, mostrem un missatge
escriure ("La divisió no es pot calcular")
fsi
falgorisme

Fonaments de Programació I – Estructures de control 15


Condicionals: llenguatge C
§ Utilitzem else per a les instruccions alternatives.
si (a ≥ 5) llavors
nota ß ‘A'
sino
nota ß ‘S'
fsi
Departament d’Enginyeria Informàtica i Matemàtiques

if (a >= 5)
{
nota = 'A';
}
else
{
nota = 'S';
}

Fonaments de Programació I – Estructures de control 16


Condicionals
§ Condicional múltiple
– Permet definir les instruccions a expressió

executar per cadascun dels valors


possibles de l’expressió que es valor1

tractin. seq.instr.1
Departament d’Enginyeria Informàtica i Matemàtiques

– Pels valors no contemplats,


valor2
s'executen les instruccions "altre cas" seq.instr.2

opció (expressió) altre


cas
seq.instr.3
valor1: seq.instruccions1
valor2: seq. instruccions2
altre cas: seq. instruccions3
fopció

Fonaments de Programació I – Estructures de control 17


Condicionals
§ Condicional múltiple o selecció
– Exemple. Donat un número de l’1 al 7 introduït pel teclat, indicar
a quin dia de la setmana es correspon.

algorisme dia_setmana
var x: enter fvar
Departament d’Enginyeria Informàtica i Matemàtiques

inici
escriure("Introdueix un nombre (1..7)")
llegir(x)
...

Fonaments de Programació I – Estructures de control 18


Condicionals
algorisme dia_setmana
var x: enter fvar
inici
escriure("Introdueix un nombre (1..7)")
llegir(x)
opció (x)
1: escriure("Dilluns")
Departament d’Enginyeria Informàtica i Matemàtiques

2: escriure("Dimarts")
3: escriure("Dimecres")
4: escriure("Dijous")
5: escriure("Divendres")
6,7: escriure("Cap de setmana") $ Tractem dues opcions
altre cas: escriure("Valor no vàlid")
fopció
falgorisme Com es faria sense utilitzar el condicional múltiple?
Fonaments de Programació I – Estructures de control 19
Condicionals: llenguatge C
§ Utilitzem switch / case / default al condicional múltiple.
opció (x) switch (x)
1: escriure("Dilluns") {
2: escriure("Dimarts") case 1 : printf("Dilluns \n");
... break;
6,7: escriure("Cap de case 2 : printf("Dimarts \n");
Departament d’Enginyeria Informàtica i Matemàtiques

setmana")
break;
altre cas: escriure("Valor
...
invàlid")
fopció case 6 :
case 7 : printf("Cap de setmana\n");
Fixeu-vos com usem els break i com break;
no l’usem en l’opció 6: amb la manca
default : printf("Valor invàlid\n");
de break el programa executarà les
instruccions del següent cas. }

Fonaments de Programació I – Estructures de control 20


Condicionals
§ Ús de condicions compostes
si C1 llavors
si C1 i C2 llavors
si C2 llavors
instruccions
instruccions
fsi
fsi
fsi
Departament d’Enginyeria Informàtica i Matemàtiques

si C1 llavors
si C1 o C2 llavors
instruccions
instruccions
fsi
fsi
si C2 llavors
instruccions
Sempre i quan les
fsi instruccions siguin
les mateixes!

Fonaments de Programació I – Estructures de control 21


Contingut
§ Condicionals
§ Bucles
Departament d’Enginyeria Informàtica i Matemàtiques

Fonaments de Programació I – Estructures de control 22


Bucles
§ Un bucle o estructura repetitiva permet repetir una
instrucció o conjunt d’instruccions vàries vegades
– La instrucció o el bloc d’instruccions de dins el bucle s’anomena
cos del bucle.

§ Cada repetició s’anomena iteració:


Departament d’Enginyeria Informàtica i Matemàtiques

– Es pot executar el bloc d’instruccions un nombre determinat de


vegades, quan sabem quantes vegades cal executar-lo.
– I també si es compleix una condició, és a dir, mentre aquesta és
"certa".

Especificar la condició sovint implica usar una variable


anomenada variable de control, índex o comptador, en
funció de l’escenari.

Fonaments de Programació I – Estructures de control 23


Bucles
§ Bucle ‘mentre’
– El cos es repeteix mentre la condició del
bucle és certa. Ja no es repeteix quan la
fals
condició del bucle és falsa. condició

cert
Departament d’Enginyeria Informàtica i Matemàtiques

Inicialització variable control


mentre (condició) fer
seqüència
Cos del bucle d’instruccions

Actualització variable control


fmentre

Sovint el nom de les variables de control als


bucles són d’una lletra, típicament i o j.

Fonaments de Programació I – Estructures de control 24


Bucles
§ Bucle ‘mentre’
– Exemple. Suma acumulada de nombres que l’usuari entra pel
teclat. Deixem de sumar quan l’usuari introdueix 0.
• Estratègia

algorisme sumar_valors
Departament d’Enginyeria Informàtica i Matemàtiques

inici
Mostrar instruccions a l’usuari
Demanar valor
mentre (n ≠ 0) fer
Sumar i demanar un nou valor
fmentre
Mostrar resultat
falgorisme

Fonaments de Programació I – Estructures de control 25


Bucles
§ Bucle ‘mentre’
algorisme sumar_valors
var sum, n: enters fvar
inici
escriure("Ves introduint nombres per calcular la suma")
escriure ("Per acabar, introdueix 0")
Departament d’Enginyeria Informàtica i Matemàtiques

sum ß 0 $ Inicialització del sumatori Quan usem una variable,


per prevenir errors, cal
llegir (n) inicialitzar-la al valor
mentre (n ≠ 0) fer adequat.
sum ß sum + n
llegir (n)
fmentre
escriure ("La suma val ", sum)
falgorisme

Fonaments de Programació I – Estructures de control 26


Bucles
§ Bucle ‘mentre’
– Exemple. Generar els múltiples de 3 per sota d’un llindar.
• Estratègia

algorisme generar_múltiples
inici
Departament d’Enginyeria Informàtica i Matemàtiques

Demanar valor llindar


Comencem amb 3 $ És el primer múltiple
mentre (no arribem al llindar) fer
Mostrar valor per pantalla
Calcular el següent múltiple (sumar 3)
fmentre
falgorisme

Fonaments de Programació I – Estructures de control 27


Bucles
§ Bucle ‘mentre’
algorisme generar_múltiples
var max, mul: enters fvar
inici
escriure("Indica el llindar:")
llegir(max)
Departament d’Enginyeria Informàtica i Matemàtiques

mulß 3 $ Inicialització variable de control


mentre (mul ≤ max) fer
escriure(mul)
mul ß mul + 3 $ Actualització variable de control
fmentre
falgorisme Un error freqüent és oblidar actualitzar la
variable de control... aleshores el bucle
es queda iterant!

Fonaments de Programació I – Estructures de control 28


Bucles
§ Bucle ‘fer mentre’
– Es tracta d’una variant del mentre que, com a mínim,
executa el cos del bucle una vegada.

fer
Departament d’Enginyeria Informàtica i Matemàtiques

Cos del bucle


mentre (condició)

Aquesta instrucció la farem servir


en casos excepcionals, on com a
mínim calgui una execució.

Fonaments de Programació I – Estructures de control 29


Bucles
§ Bucle ‘fer mentre’
– Exemple. Recuperem l’exemple de la divisió
...
inici
escriure ("Introdueix el dividend:")
llegir (n1) $ Obtenim dividend
Departament d’Enginyeria Informàtica i Matemàtiques

fer
escriure ("Introdueix el divisor:")
llegir (n2)
mentre (n2 = 0) $ Demanem el divisor
i el tornem a demanar mentre aquest sigui 0
q ß n1 div n2 $ Calculem el quocient
r ß n1 mod n2 $ Calculem el residu
$ Mostrem resultat
escriure ("El quocient és ", q, " i el residu és ",r )

Fonaments de Programació I – Estructures de control 30


Bucles: llenguatge C
§ Per implementar els bucles ‘mentre’ fem servir la
instrucció while.

mulß 3
mentre (mul ≤ max) fer
mul = 3;
escriure(mul)
while (mul <= max)
Departament d’Enginyeria Informàtica i Matemàtiques

mul ß mul + 3
{
fmentre
printf ("%d\n", mul);
mul = mul + 3;
}

Fonaments de Programació I – Estructures de control 31


Bucles: llenguatge C
§ Per implementar els bucles ‘fer mentre’ fem servir les
instruccions do i while.
fer
escriure ("Introdueix el divisor:")
llegir (n2)
Departament d’Enginyeria Informàtica i Matemàtiques

mentre (n2 = 0)

do
{
printf("Introdueix el divisor\n");
scanf("%d", &n2);
}
while (n2 == 0);

Fonaments de Programació I – Estructures de control 32


Bucles
§ Bucle ‘per’
– El seu ús es restringeix a quan coneixem el nombre
d’iteracions que cal fer.

per iß 1 fins n_iteracions fer


Departament d’Enginyeria Informàtica i Matemàtiques

Cos del bucle


fper

Aquesta instrucció 'per' ja fa implícitament


l’assignació del valor inicial a la variable de control i.
A cada iteració, incrementa en 1 el seu valor.

Fonaments de Programació I – Estructures de control 33


Bucles
§ Bucle ‘per’
– El seu ús es restringeix a quan coneixem el nombre
d’iteracions que cal fer
• Podem ajustar els increments que fa 'per', per exemple:
Departament d’Enginyeria Informàtica i Matemàtiques

per iß 1 fins n_iteracions pas +2 fer


Cos del bucle
fper

per iß n_interaccions fins 1 pas -1 fer


Cos del bucle
fper

Fonaments de Programació I – Estructures de control 34


Bucles
§ Bucle ‘per’
– Exemple. Mostrar per pantalla els n primers múltiples de 3, on n
és un valor introduït per l’usuari.
algorisme múltiples_3
var i, mul, n: enters fvar
inici
Departament d’Enginyeria Informàtica i Matemàtiques

escriure("Indica quants múltiples de 3 vols:")


llegir(n)
mul ß 0
per iß1 fins n fer Noteu que aquest bucle, on
mul ß mul + 3 controlem les iteracions amb la
variable i, es podria escriure
escriure (mul) també com per iß0 fins n-1
fper
falgorisme

Fonaments de Programació I – Estructures de control 35


Bucles: llenguatge C
§ En llenguatge C i altres el bucle ‘per’ s’escriu com una
forma "compacta" de bucle while.

per iß1 fins n fer


mul ß mul + 3
escriure (mul)
Departament d’Enginyeria Informàtica i Matemàtiques

fper

for (i = 1; i <= n; i++)


{
mul = mul + 3;
printf("%d\n", mul);
}

Fonaments de Programació I – Estructures de control 36


Estructures de control
§ Per acabar aquest tema veurem un seguit d’exemples en
pseudocodi i també en llenguatge C.
– Múltiples de 5
– Càlcul d’una potència
– Menú d’opcions
Departament d’Enginyeria Informàtica i Matemàtiques

Fonaments de Programació I – Estructures de control 37


Estructures de control
§ Múltiples de 5
– Es tracta de demanar dos nombres per teclat, max i min. Mostrar
per pantalla tots els nombres entre max i min que siguin múltiples
de 5.
– Estratègia
Departament d’Enginyeria Informàtica i Matemàtiques

Demanar el valor màxim i el mínim


El primer nombre serà el mínim
mentre no superem màxim fer
si el nombre múltiple de 5, mostrar-lo
Calcular valor següent
fmentre

Fonaments de Programació I – Estructures de control 38


Estructures de control
Versió 1. Fet amb un bucle mentre
algorisme múltiples_5
var
n, max, min : enters
fvar
inici
escriure("Introdueix un nombre") $ Demanar el valor màxim i el mínim
llegir (min)
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Introdueix un nombre més gran que ", min)


llegir (max)
n ß min
mentre (n ≤ max) fer
si (n mod 5 = 0) llavors
escriure (n)
fsi
Noteu que si min ≥ max no
n ß n + 1 s’executarà el bucle.
fmentre
falgorisme
Fonaments de Programació I – Estructures de control 39
Estructures de control
Versió 1.1. Fet amb un bucle mentre, controlant valors
...
escriure("Introdueix un nombre") $ Demanar el valor màxim i el mínim
llegir (min)
escriure ("Introdueix un nombre més gran que ", min)
llegir (max)
si (min ≥ max) llavors
escriure ("Error en el valor introduït")
Departament d’Enginyeria Informàtica i Matemàtiques

sino
n ß min
mentre (n ≤ max) fer
si (n mod 5 = 0) llavors
escriure (n)
fsi
n ß n + 1
mentre
fsi
falgorisme
Fonaments de Programació I – Estructures de control 40
Estructures de control
Versió 2. Fet amb un bucle per, controlant valors
...
escriure("Introdueix un nombre") $ Demanar el valor màxim i el mínim
llegir (min)
escriure ("Introdueix un nombre més gran que ", min)
llegir (max)
si (min ≥ max) llavors
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Error en el valor introduït")


sino
per n ß min fins max fer
si (n mod 5 = 0) llavors
escriure (n)
fsi
fper
fsi
falgorisme

Fonaments de Programació I – Estructures de control 41


Estructures de control
int main ()
{ Versió 1.1. En llenguatge C (1/2)
int n, min, max;

printf("Introdueix un nombre\n");
scanf("%d", &min);
printf("Introdueix un nombre més gran que %d\n", min);
scanf("%d", &max);
Departament d’Enginyeria Informàtica i Matemàtiques

/* Controlem que el valor de max sigui correcte */


if (min >= max)
{
printf("Error en el valor introduit\n");
}
else
...

Fonaments de Programació I – Estructures de control 42


Estructures de control
...
else Versió 1.1. En llenguatge C (2/2)
{
n = min; /* Comencem pel mínim */
while (n <= max)
{
if (n % 5 == 0) /* Si es múltiple de 5 */
{
Departament d’Enginyeria Informàtica i Matemàtiques

printf ("%d\n", n);


}
n++; /* Anem a pel seguent */
} /* Fi while */
} /* Fi else */

return 0;
} /* Fi programa */

Fonaments de Programació I – Estructures de control 43


Estructures de control
§ Càlcul d’una potència (be)
– Hem de calcular-la a partir de multiplicar la base tantes vegades
com ens indiqui l’exponent.
– (per qüestions didàctiques, usarem el bucle 'mentre')
Departament d’Enginyeria Informàtica i Matemàtiques

Fonaments de Programació I – Estructures de control 44


Estructures de control
algorisme potència
var Quins errors presenta aquest algorisme?
b, e, res, i: enters $ Res desarà el resultat
fvar
inici
escriure ("Introdueix la base")
llegir (b)
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Introdueix l’exponent")


llegir (e)
res ß 0
i ß 1
mentre (i < e) fer $ Tantes vegades com indica l'exponent
res ß res * b $ multipliquem la base
i ß i + 1
fmentre
escriure (b, "^", e, "= ", res)
falgorisme
Fonaments de Programació I – Estructures de control 45
Estructures de control
algorisme potència
var
b, e, res, i: enters $ Res desarà el resultat
fvar
inici
escriure ("Introdueix la base")
llegir (b)
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Introdueix l’exponent")


llegir (e)
res ß 1
i ß 1
mentre (i ≤ e) fer $ Tantes vegades com indica l'exponent
res ß res * b $ multipliquem la base
i ß i + 1 Alternativament, hauríem
fmentre pogut inicialitzar i ß 0, i que la
condició fos menor estricte.
escriure (b, "^", e, "= ", res);
falgorisme
Fonaments de Programació I – Estructures de control 46
Estructures de control
algorisme potència Precondició de funcionament
var e > 0, altrament no calcularia bé la
potència. Podríem controlar-ho amb un
b, e, res, i: enters $ Res desarà el resultat
condicional.
fvar
Prova 1
inici
Potència 23 à farà 3 iteracions
escriure ("Introdueix la base")
#1 à i = 1, res = 1 * 2 = 2, incrementa i
llegir (b) #2 à i = 2, res = 2 * 2 = 4, incrementa i
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("Introdueix l’exponent") #3 à i = 3, res = 4 * 2 = 8, incrementa i


llegir (e) Com que 4 > e, acaba el bucle
res ß 1 res = 8
i ß 1 Prova 2
mentre (i ≤ e) fer $ Tantes vegades comPotència
indica 21 à farà 1 iteració
l'exponent
res ß res * b #1 à i = 1, res = 1 * 2 = 2, incrementa i
$ multipliquem la base
i ß i + 1 Com que 2 > e, acaba el bucle

fmentre res = 2
Prova 3
escriure (b, "^", e, "= ", res)
Potència 20 à e>i, no farà iteració
falgorisme
res = 1 (que és el valor inicial)
Fonaments de Programació I – Estructures de control 47
Estructures de control
En llenguatge C
int main()
{
int b, e, res, i; /* Res desarà el resultat */
printf("Introdueix la base\n");
scanf("%d", &b);
printf("Introdueix l'exponent\n");
scanf("%d", &e);
Departament d’Enginyeria Informàtica i Matemàtiques

res = 1;
i = 1;
while (i <= e) /* Tantes vegades com indica l'exponent */
{
res = res * b; /* Multipliquem la base */
i++;
}
printf("%d ^ %d = %d", b, e, res);
return 0;
}
Fonaments de Programació I – Estructures de control 48
Estructures de control
§ Menú d’opcions
– Quan usem el terminal per demanar dades a l’usuari, sovint
hem de fer un menú d’opcions:
• En primer lloc, es presenta a l’usuari el conjunt d’opcions entre
les quals triar.
Departament d’Enginyeria Informàtica i Matemàtiques

• Es demana pel teclat quina opció desitja.


• Si l’opció introduïda no és vàlida, cal tornar a presentar el
menú.
– Estratègia
• Podem resoldre aquest cas amb un ‘fer mentre’, ja que com a
mínim cal mostrar les opcions una vegada.

Fonaments de Programació I – Estructures de control 49


Estructures de control
§ Menú d'opcions
...
fer
escriure ("Quina opció tries?")
escriure ("[1] llegir dades de fitxer")
escriure ("[2] introduir dades")
Departament d’Enginyeria Informàtica i Matemàtiques

escriure ("[3] desar dades al fitxer")


escriure ("[0] sortir")
llegir (op)
mentre (op < 0 o op > 3)
opció (op)
0: escriure ("Adéu")
1: ...
...

Fonaments de Programació I – Estructures de control 50


Estructures de control
int op; /* Variable per desar l'opció */
... En llenguatge C
do
{
printf("Quina opció tries?\n");
printf("[1] llegir dades de fitxer\n");
printf("[2] introduir dades\n");
printf("[3] desar dades al fitxer\n");
Departament d’Enginyeria Informàtica i Matemàtiques

printf("[0] sortir\n");
scanf("%d", &op);
}
while ((op < 0) || (op > 3));
switch (op)
{
case 0 : printf("Adeu\n");
break;
...

Fonaments de Programació I – Estructures de control 51

You might also like