Exercici 2 · Fundamentos de Programación I URV Examen Parcial de Fonaments de Programació I
Tema: Traça, verificació i correcció d'algorismes · Del examen Examen Parcial de Fonaments de Programació I
Enunciado
Exercici 2 (4 punts). Anàlisi i correcció d'un algorisme de càlcul estadístic
Es disposa del codi següent dissenyat per determinar el percentatge d'estudiants que han destinat entre 30 i 40 hores (ambdues incloses) a preparar una matèria. L'entrada és una seqüència d'enters positius introduïts per teclat, culminada amb el nombre -1. El valor percentual resultant ha de ser un enter.
algorisme calcul_proporcio
const
MINH <-- 30
MAXH <-- 40
fconst
var
conta, cont: enter
percen, hores: real
fvar
inici
escriure("Introdueix la llista d'hores i acaba amb el nombre -1")
mentre (hores <> -1) fer
llegir(hores)
si (hores >= MINH) i (hores <= MAXR) llavors
conta <-- conta + 1
fsi
cont <-- cont + 1
percen <-- conta div cont * 100
escriure("El percentatge que ha invertit entre", MINR, "i", MAXR, "hores es:", percen)
fmentre
falgorisme
Localitzeu totes les errades semàntiques i estructurals del codi i proposeu la versió corregida definitiva.

Solución
Según los criterios oficiales de corrección
Localitzeu totes les errades semàntiques i estructurals del codi
Solución: 1. Manca d'inicialització: Els comptadors conta i cont no estan inicialitzats a zero abans del bucle. 2. Tipus de dada de la variable de sortida: La variable percen ha de ser de tipus enter, no pas real, d'acord amb els requisits. 3. Lectura prèvia anticipada: Cal fer una primera lectura de hores abans de comprovar la condició del mentre. Dins del bucle, la lectura ha d'anar al final per no processar valors inexistents o ometre el darrer. 4. Ubicació del càlcul i emissió del resultat: El càlcul del percentatge i el missatge de sortida es trobaven indegudament a l'interior de la iteració; han de figurar un cop finalitzat el bucle complet. 5. Precedència en la divisió entera: L'expressió conta div cont * 100 produeix truncament prematur a 0 sempre que conta < cont. Cal canviar l'ordre: (conta * 100) div cont (o alternativament divisió real i conversió posterior). 6. Discrepàncies de nomenclatura: Ús erroni de MAXR i MINR en comptes de les constants definides MAXH i MINH (errades tipogràfiques).
Proposeu la versió corregida definitiva.
Solución: ```pseudocode algorisme calcul_proporcio_corregit const MINH <-- 30 MAXH <-- 40 fconst var conta, cont, hores, percen: enter fvar inici conta <-- 0 cont <-- 0 escriure("Introdueix la llista d'hores i acaba amb el nombre -1") llegir(hores) mentre (hores <> -1) fer si (hores >= MINH) i (hores <= MAXH) llavors conta <-- conta + 1 fsi cont <-- cont + 1 llegir(hores) fmentre si (cont > 0) llavors percen <-- (conta * 100) div cont escriure("El percentatge que ha invertit entre ", MINH, " i ", MAXH, " hores es: ", percen) sino escriure("No s'ha introduït cap registre d'hores vàlid.") fsi falgorisme ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.