Exercicis: Les estructures d'un programa
Explica què és una variable en un programa i posa un exemple: quin nom i quin contingut tindria una variable en un videojoc que guarda els punts del jugador. Quina…
Explica què és una variable en un programa i posa un exemple: quin nom i quin contingut tindria una variable en un videojoc que guarda els punts del jugador. Quina operació canviaria el seu valor en superar un nivell?
Explica què és una estructura condicional (si... llavors... si no...) i escriu dos exemples de decisions quotidianes expressades amb aquesta estructura, indicant la…
Explica què és una estructura condicional (si... llavors... si no...) i escriu dos exemples de decisions quotidianes expressades amb aquesta estructura, indicant la condició i les dues accions possibles.
Explica què és un bucle i quin problema resol enfront de repetir les mateixes instruccions moltes vegades. Escriu en pseudocodi un bucle que escrigui els nombres de l'1…
Explica què és un bucle i quin problema resol enfront de repetir les mateixes instruccions moltes vegades. Escriu en pseudocodi un bucle que escrigui els nombres de l'1 al 5.
Explica la diferència entre una variable i una constant en un programa, amb un exemple de cadascuna en un programa de facturació (el preu del producte enfront del…
Explica la diferència entre una variable i una constant en un programa, amb un exemple de cadascuna en un programa de facturació (el preu del producte enfront del percentatge d'IVA).
Les dades d'un programa tenen tipus: enter, decimal, text o booleà. Indica el tipus més adequat per a cada dada i justifica-ho: l'edat d'una persona, la seva alçada en…
Les dades d'un programa tenen tipus: enter, decimal, text o booleà. Indica el tipus més adequat per a cada dada i justifica-ho: l'edat d'una persona, la seva alçada en metres, el seu nom i si ha aprovat o no.
Explica què és una funció en un programa i dos avantatges de trossejar el codi en funcions amb nom (reutilitzar sense copiar, entendre i provar cada part per separat).
Explica què és una funció en un programa i dos avantatges de trossejar el codi en funcions amb nom (reutilitzar sense copiar, entendre i provar cada part per separat).
Què és un comentari en el codi font? Explica a qui van dirigits els comentaris (no pas a l'ordinador, sinó a qui llegirà el codi després) i què ha d'explicar un bon…
Què és un comentari en el codi font? Explica a qui van dirigits els comentaris (no pas a l'ordinador, sinó a qui llegirà el codi després) i què ha d'explicar un bon comentari (el perquè de les decisions, no el que ja es veu).
Llegeix aquest fragment i fes-ne la traça: Indica quin valor es mostra per pantalla i explica per què la segona instrucció no és una equació matemàtica sinó una…
Llegeix aquest fragment i fes-ne la traça:
inici
x ← 4
x ← x + 2
escriure x
fi
Indica quin valor es mostra per pantalla i explica per què la segona instrucció no és una equació matemàtica sinó una assignació.
Llegeix aquest programa en pseudocodi: Fes la traça pas a pas (valor de suma i de n al final de cada volta) i indica quantes vegades es repeteix el bucle i quin valor…
Llegeix aquest programa en pseudocodi:
inici
suma ← 0
n ← 1
mentre n ≤ 5 fer
suma ← suma + n
n ← n + 1
fi mentre
escriure suma
fi
Fes la traça pas a pas (valor de suma i de n al final de cada volta) i indica quantes vegades es repeteix el bucle i quin valor s'escriu al final.
Escriu en pseudocodi un programa que llegeixi la nota d'un examen (un nombre de 0 a 10) i escrigui «apte» si la nota és 5 o més gran, i «no apte» en cas contrari.…
Escriu en pseudocodi un programa que llegeixi la nota d'un examen (un nombre de 0 a 10) i escrigui «apte» si la nota és 5 o més gran, i «no apte» en cas contrari. Utilitza una variable, una lectura de dada i una estructura condicional.
El diagrama de flux de la figura representa un programa amb un bucle: llegeix un nombre n i, mentre n sigui més gran que 0, escriu el seu valor i li resta 1, com es…
El diagrama de flux de la figura representa un programa amb un bucle: llegeix un nombre n i, mentre n sigui més gran que 0, escriu el seu valor i li resta 1, com es mostra a la figura.
Si l'usuari introdueix n = 3: (a) fes la traça indicant quins valors pren n i què s'escriu a cada volta; (b) indica quantes vegades s'executa el cos del bucle; (c) explica què passaria si l'usuari introduís n = 0.
Aquest programa classifica una persona segons la seva edat: Fes la traça per a una entrada de 17 i per a una de 21, indicant en cada cas quina condició s'avalua i què…
Aquest programa classifica una persona segons la seva edat:
inici
llegir edat
si edat ≥ 18 llavors
escriure "major d'edat"
si no
escriure "menor d'edat"
fi si
fi
Fes la traça per a una entrada de 17 i per a una de 21, indicant en cada cas quina condició s'avalua i què s'escriu per pantalla.
Escriu en pseudocodi un programa que escrigui el compte enrere del 10 a l'1 i, en acabar el bucle, escrigui «enlairament!». Utilitza una variable i un bucle mentre.
Escriu en pseudocodi un programa que escrigui el compte enrere del 10 a l'1 i, en acabar el bucle, escrigui «enlairament!». Utilitza una variable i un bucle mentre.
Aquest programa suma els nombres que introdueix l'usuari fins que escriu un zero: Fes la traça per a la seqüència d'entrades 4, 3, 0: indica el valor de n i de suma…
Aquest programa suma els nombres que introdueix l'usuari fins que escriu un zero:
inici
suma ← 0
llegir n
mentre n ≠ 0 fer
suma ← suma + n
llegir n
fi mentre
escriure suma
fi
Fes la traça per a la seqüència d'entrades 4, 3, 0: indica el valor de n i de suma després de cada lectura i què s'escriu al final. Explica a més per què el primer llegir n està fora del bucle.
El diagrama de flux de la figura representa el control d'accés d'un dispositiu: hi ha un màxim de tres intents per introduir la clau correcta, com es mostra a la figura.…
El diagrama de flux de la figura representa el control d'accés d'un dispositiu: hi ha un màxim de tres intents per introduir la clau correcta, com es mostra a la figura.
(a) Explica el recorregut complet del programa quan l'usuari falla la clau dues vegades i l'encerta a la tercera. (b) Indica el nombre màxim de vegades que el programa demana la clau. (c) Raona per què la variable intents s'incrementa només en una de les branques del segon rombe.
Aquest programa hauria d'escriure els nombres de l'1 al 5, però té un error: a) Identifica l'error: què li falta al cos del bucle? b) Explica què passa en executar el…
Aquest programa hauria d'escriure els nombres de l'1 al 5, però té un error:
inicio
n ← 1
mientras n ≤ 5 hacer
escribir n
fin mientras
fin
- a) Identifica l'error: què li falta al cos del bucle?
- b) Explica què passa en executar el programa tal com està escrit.
- c) Escriu el pseudocodi corregit.
Un company afirma que per comptar quants nombres entre dos valors enters positius qualssevol $A$ i $B$ ($A \le B$) són divisibles simultàniament per $3$ i per $5$, el…
Un company afirma que per comptar quants nombres entre dos valors enters positius qualssevol $A$ i $B$ ($A \le B$) són divisibles simultàniament per $3$ i per $5$, el següent pseudocodi sempre funciona i és el més eficient:
inici
llegir A, B
total ← 0
mentre A ≤ B fer
si (A mod 3 = 0) o (A mod 5 = 0) llavors
total ← total + 1
fi si
A ← A + 1
fi mentre
escriure total
fi
(a) Refuta dues deficiències de la seva proposta: un error de lògica condicional segons l'especificació demanada i una ineficiència algorísmica (analitza quantes iteracions i avaluacions de condicions realitza si $B - A = 1\,000\,000$).
(b) Si obligatòriament s'ha d'emprar un bucle mentre, reescriu l'algorisme optimitzant el valor inicial i el pas d'increment per realitzar el menor nombre possible d'iteracions sense avaluar cap condicional dins del bucle.
(c) Dissenya una solució matemàtica en temps constant $O(1)$ sense bucles en pseudocodi i justifica formalment la fórmula emprada.
Dissenya en pseudocodi un algorisme per al joc d'«endevina el nombre» on els rols s'inverteixin: l'usuari pensa un nombre secret enter entre $1$ i $100$ i l'ordinador…
Dissenya en pseudocodi un algorisme per al joc d'«endevina el nombre» on els rols s'inverteixin: l'usuari pensa un nombre secret enter entre $1$ i $100$ i l'ordinador l'ha d'endevinar emprant l'estratègia òptima de cerca binària.
(a) Escriu el pseudocodi de l'algorisme. A cada iteració, l'ordinador proposarà el punt mitjà de l'interval actual i l'usuari respondrà si el nombre secret és «més gran», «més petit» o si la màquina ha «encertat».
(b) Incorpora un mecanisme de validació que detecti si l'usuari comet una contradicció o fa trampes (per exemple, si els límits de l'interval de cerca es creuen perquè el límit inferior supera el superior), aturant el programa amb un missatge d'alerta justificatiu.
(c) Justifica formalment quin és el nombre màxim d'intents que necessitarà l'ordinador per endevinar qualsevol nombre en el rang $[1, 100]$ i prediu quants intents màxims es requeririen si el rang s'ampliés a $[1, 1\,000]$.
Dissenya en pseudocodi l'algorisme de control per a un semàfor de pas de vianants regulat per polsador que gestioni de manera segura el trànsit d'una avinguda amb els…
Dissenya en pseudocodi l'algorisme de control per a un semàfor de pas de vianants regulat per polsador que gestioni de manera segura el trànsit d'una avinguda amb els següents requisits:
-
En repòs, el semàfor de vehicles roman en verd.
-
Per evitar retencions provocades per crides contínues, s'ha de garantir un temps mínim de verd de vehicles de $30$ segons entre dues fases de vianants consecutives.
-
Un cop transcorregut aquest temps mínim i detectada la pulsació d'un vianant, la seqüència obligatòria és: ambre de vehicles durant $3$ segons, vermell de vehicles i verd de vianants durant $15$ segons, i finalment verd de vianants parpellejant durant $4$ segons abans de restablir el verd de vehicles.
(a) Escriu el pseudocodi del sistema estructurat dins d'un bucle continu de supervisió.
(b) Analitza quina fallada de bloqueig patiria la cruïlla si el sensor s'avariés en estat actiu continu (polsador encallat) i justifica com el teu disseny prevé que l'avinguda quedi col·lapsada indefinidament.
(c) Justifica tècnicament per què en sistemes de control concurrents en temps real és preferible consultar una marca temporal de rellotge (temps_actual()) en comptes de suspendre la CPU mitjançant esperes bloquejants passives (esperar()).
Analitza el següent algorisme que processa parells d'índexs $(i, j)$: (a) Dedueix i justifica algebraicament una fórmula que expressi quantes vegades en total s'avalua…
Analitza el següent algorisme que processa parells d'índexs $(i, j)$:
inici
llegir N
comptador ← 0
per a i des de 1 fins a N fer
per a j des de i fins a N fer
si (i + j) mod 2 = 0 llavors
comptador ← comptador + 1
fi si
fi per a
fi per a
escriure comptador
fi
(a) Dedueix i justifica algebraicament una fórmula que expressi quantes vegades en total s'avalua la condició si en funció de $N$ (calculant la suma d'iteracions del bucle intern respecte a l'extern).
(b) Prediu el valor final exacte de comptador si l'entrada és $N = 5$, elaborant una taula de traça que mostri els valors de $i$, $j$, el resultat de la condició i les actualitzacions de comptador.
(c) Un alumne afirma: «Com que el bucle niat recorre parelles de nombres, canviar per a j des de i fins a N per per a j des de 1 fins a N i dividir el resultat final entre $2$ produiria exactament el mateix resultat per a qualsevol $N$». Demostra mitjançant un raonament formal o un contraexemple si aquesta afirmació és vertadera o falsa.
Un analista de ciberseguretat revisa el següent pseudocodi dissenyat per controlar l'accés amb targeta i PIN en un terminal bancari: (a) Identifica i justifica una…
Un analista de ciberseguretat revisa el següent pseudocodi dissenyat per controlar l'accés amb targeta i PIN en un terminal bancari:
inici
pin_secret ← 3852
intents ← 0
bloquejada ← fals
mentre intents < 3 i no bloquejada fer
llegir pin_ingressat
si pin_ingressat = pin_secret llavors
escriure "Benvingut al sistema"
si no
intents ← intents + 1
escriure "PIN incorrecte"
fi si
fi mentre
si intents = 3 llavors
bloquejada ← cert
escriure "Targeta bloquejada per seguretat"
fi si
fi
(a) Identifica i justifica una fallada greu de control de flux que ocorre quan l'usuari introdueix el PIN correcte en el primer intent.
(b) Prediu el comportament del programa i el valor final de les variables intents i bloquejada si l'usuari introdueix la seqüència d'entrades: 1111, 3852, 9999.
(c) Reescriu l'algorisme en pseudocodi corregint el flux d'execució per garantir sortida neta immediata després de l'encert i bloqueig estricte després de tres fallades consecutives, assegurant que sota cap circumstància es mostri el missatge de benvinguda si la targeta queda bloquejada.
En el disseny d'una instal·lació hidràulica s'utilitzen casquets cilíndrics de fosa nodular de secció anul·lar (corona circular) amb una densitat…
En el disseny d'una instal·lació hidràulica s'utilitzen casquets cilíndrics de fosa nodular de secció anul·lar (corona circular) amb una densitat $\rho = 7{,}2\text{ g/cm}^3$.
(a) Dissenya en pseudocodi una funció area_anell(radi_int, radi_ext) que calculi i retorni l'àrea de la corona circular ($\pi \cdot (r_{ext}^2 - r_{int}^2)$). La funció ha de validar que $radi\_ext > radi\_int > 0$; si els paràmetres incompleixen aquesta condició física, ha de retornar $-1{,}0$ com a codi d'error. Considera $\pi \approx 3{,}1416$.
(b) Dissenya una segona funció massa_tub(radi_int, radi_ext, longitud, densitat) que invoqui area_anell per calcular el volum i la massa total del tram en quilograms (considerant que les dimensions s'introdueixen en centímetres i la densitat en $\text{g/cm}^3$). Si area_anell retorna error o la longitud és menor o igual a zero, la funció ha de propagar el valor $-1{,}0$.
(c) Realitza la traça completa de l'execució de massa_tub(4{,}0, 5{,}0, 100{,}0, 7{,}2), indicant els valors que entren i surten de cada funció i justificant el resultat numèric obtingut.
La comissió de garantia de qualitat d'un centre avalua el següent algorisme, destinat a determinar la qualificació final d'un mòdul tècnic a partir de tres notes…
La comissió de garantia de qualitat d'un centre avalua el següent algorisme, destinat a determinar la qualificació final d'un mòdul tècnic a partir de tres notes parcials ($N_1, N_2, N_3 \in [0{,}0; 10{,}0]$). La normativa oficial estableix: «L'alumne resulta 'Apte' si la mitjana ponderada ($30\,\%$ per a $N_1$, $30\,\%$ per a $N_2$ i $40\,\%$ per a $N_3$) és igual o superior a $5{,}0$, sempre que cap de les notes individuals sigui inferior a $4{,}0$; en cas contrari, resultarà 'No apte'».
inici
llegir N1, N2, N3
mitjana ← N1 · 0,3 + N2 · 0,3 + N3 · 0,4
si mitjana ≥ 5,0 o (N1 ≥ 4,0 i N2 ≥ 4,0 i N3 ≥ 4,0) llavors
escriure "Apte"
si no
escriure "No apte"
fi si
fi
(a) Explica detalladament per què el programa no genera cap error de sintaxi i s'executa amb normalitat tot i contenir un error lògic crític en l'estructura condicional.
(b) Dissenya dues ternes de notes de prova $(N_1, N_2, N_3)$ que posin en evidència la fallada de l'algorisme: una que causi un fals positiu (el programa declari 'Apte' havent de ser 'No apte') i una altra que causi un fals negatiu (o justifica si aquest últim és possible amb l'expressió actual).
(c) Reescriu l'algorisme en pseudocodi corregint la condició lògica i afegint una comprovació prèvia que verifiqui que les tres notes introduïdes es trobin dins del rang vàlid $[0{,}0; 10{,}0]$.
Un programador novell ha implementat el joc d'«endevina el nombre» utilitzant una única funció que accedeix directament a variables globals: (a) Justifica tres…
Un programador novell ha implementat el joc d'«endevina el nombre» utilitzant una única funció que accedeix directament a variables globals:
variables globals: secret, intents
funcio jugar_ronda()
escriure "Introdueix un nombre (1-100): "
llegir intent
intents ← intents + 1
si intent = secret llavors
escriure "Has encertat en ", intents, " intents!"
si no
si intent < secret llavors
escriure "El nombre secret és més gran"
si no
escriure "El nombre secret és més petit"
fi si
fi si
fi funcio
(a) Justifica tres desavantatges d'aquest disseny basant-te en els conceptes d'acoblament, efectes secundaris i falta de cohesió. Per què barrejar l'entrada/sortida de la consola amb la lògica de comparació impedeix reutilitzar aquesta funció en una interfície gràfica o en una aplicació web?
(b) Redefineix l'arquitectura modular creant tres funcions amb baix acoblament: una funció pura de comparació (que rebi l'intent i el secret i retorni un indicador de resultat), una funció de validació d'entrada (que verifiqui el rang $[1, 100]$) i una funció d'actualització d'estat. Especifica per a cadascuna la seva signatura exacta (nom, paràmetres amb tipus i tipus de retorn) i les seves responsabilitats.
(c) Escriu en pseudocodi el programa principal que coordini aquestes funcions mitjançant pas de paràmetres i retorns, sense utilitzar cap variable global.