Exercici 1 · Fundamentos de Programación I URV 2013

Tema: Disseny del programa principal i resolució integrada de problemes · Del examen Examen Segon Parcial 2013 (2013)

Enunciado

Exercici 1 [10 punts]. Processament i tarifació d'un telegrama

Es demana dissenyar una solució algorísmica modular en pseudocodi per processar un telegrama transmès com una seqüència de caràcters paraula a paraula.

L'anàlisi funcional estableix els següents requisits:

Estructura de dades: Cada paraula s'emmagatzema en un registre paraula_t compost per una taula de caràcters de mida màxima 25 (constant MAX_P) i un enter per enregistrar la seva mida efectiva.

Centinella de finalització: La seqüència clou amb la paraula especial 'FINTEL', la qual indica l'acabament de la transmissió i no s'ha de comptabilitzar.

Tractament dels elements:

a. Comptabilitzar les paraules ordinàries transmeses.

b. Si apareix el mot clau 'STOP', s'ha de substituir per un punt ( '.') imprès per pantalla i no es computa com a paraula per a la tarifa.

c. Identificar les paraules que excedeixin els 12 caràcters. Aquestes paraules s'han de penalitzar (incrementen el compte de penalitzacions) i es gestionen dividint-les en dues meitats o bé mostrant-les amb un espai separador central.

d. Tarifació final: calcular l'import total considerant una tarifa base d'1 unitat monetària per mot vàlid i una penalització afegida de 6 unitats monetàries per cada paraula de longitud superior a 12 caràcters.

Desenvolupeu el programa principal ( Algoritmo TELEGRAMA) juntament amb totes les accions i funcions auxiliars necessàries (lectura de paraula ignorant espais inicials, còpia i comparació de cadenes, tractament de la paraula i impressió del desglossament econòmic).

Enunciado: Exercici 1 · Fundamentos de Programación I URV 2013

Solución

Según los criterios oficiales de corrección

Desenvolupeu el programa principal (Algoritmo TELEGRAMA) juntament amb totes les accions i funcions auxiliars necessàries

Solución: ```pseudocode algorisme TELEGRAMA és constants CAPACITAT_MAX ← 25; PREU_UNITARI ← 1; RECARREC_LLARG ← 6; fconstants tipus registre paraula_t és contingut: taula [CAPACITAT_MAX] de caracter; longitud: enter; fregistre ftipus variables mot_actual, mot_fintel: paraula_t; total_mots, total_penalitzacions: enter; fvariables inici // Inicialització del mot de parada FINTEL mot_fintel.longitud ← copiar_cadena(mot_fintel.contingut, "FINTEL", CAPACITAT_MAX); total_mots ← 0; total_penalitzacions ← 0; llegir_paraula(mot_actual, CAPACITAT_MAX); mentre no son_paraules_iguals(mot_actual, mot_fintel) fer processar_element_telegrama(mot_actual, total_mots, total_penalitzacions); llegir_paraula(mot_actual, CAPACITAT_MAX); fmentre mostrar_resum_cost(total_mots, total_penalitzacions); falgorisme // Subprogrames auxiliars: funció copiar_cadena(var dest: taula de caracter, oritg: taula de caracter, capacitat: enter) retorna enter és variables pos: enter; fvariables inici pos ← 0; mentre (oritg[pos] ≠ '\0') i (pos < capacitat - 1) fer dest[pos] ← oritg[pos]; pos ← pos + 1; fmentre dest[pos] ← '\0'; retorna pos; ffunció acció llegir_paraula(var p: paraula_t, limit: enter) és variables car: caracter; pos: enter; fvariables inici pos ← 0; p.contingut[0] ← '\0'; p.longitud ← 0; llegir(car); // Salt d'espais en blanc inicials mentre (car = ' ') fer llegir(car); fmentre // Emmagatzematge dels caràcters vàlids mentre (pos < limit - 1) i (car ≠ ' ') i (car ≠ '.') fer p.contingut[pos] ← car; pos ← pos + 1; llegir(car); fmentre p.longitud ← pos; p.contingut[pos] ← '\0'; facció funció son_paraules_iguals(p1: paraula_t, p2: paraula_t) retorna booleà és variables i: enter; coincideixen: booleà; fvariables inici coincideixen ← fals; si (p1.longitud = p2.longitud) llavors i ← 0; mentre (i < p1.longitud) i (p1.contingut[i] = p2.contingut[i]) fer i ← i + 1; fmentre si (i = p1.longitud) llavors coincideixen ← cert; fsi fsi retorna coincideixen; ffunció acció dividir_mot(var origen: paraula_t, var sobrant: paraula_t) és variables i, k: enter; fvariables inici k ← 0; per i ← 12 fins a origen.longitud - 1 pas 1 fer sobrant.contingut[k] ← origen.contingut[i]; k ← k + 1; fper sobrant.contingut[k] ← '\0'; sobrant.longitud ← k; origen.contingut[12] ← '\0'; origen.longitud ← 12; facció acció escriure_mot_simple(p: paraula_t) és variables idx: enter; fvariables inici per idx ← 0 fins a p.longitud - 1 pas 1 fer escriure(p.contingut[idx]); fper escriure(' '); facció acció processar_element_telegrama(elem: paraula_t, var q_paraules: enter, var q_penals: enter) és variables mot_stop, segona_part: paraula_t; fvariables inici mot_stop.longitud ← copiar_cadena(mot_stop.contingut, "STOP", CAPACITAT_MAX); si (elem.longitud > 0) llavors si son_paraules_iguals(elem, mot_stop) llavors escriure('.'); sino si (elem.longitud > 12) llavors q_paraules ← q_paraules + 2; q_penals ← q_penals + 1; dividir_mot(elem, segona_part); escriure_mot_simple(elem); escriure_mot_simple(segona_part); sino q_paraules ← q_paraules + 1; escriure_mot_simple(elem); fsi fsi fsi facció acció mostrar_resum_cost(recompte_mots: enter, recompte_penalitzacions: enter) és variables import_final: enter; fvariables inici escriure("El cost del telegrama és: "); escriure("Són ", recompte_mots, " paraules."); import_final ← (recompte_mots * PREU_UNITARI) + (recompte_penalitzacions * RECARREC_LLARG); escriure("El cost total és: ", import_final); facció ```

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.

‹ Ejercicio 2 · 2015 · Exercici 4 · Examen Final. Fonaments de Programació I ›

Más ejercicios de Disseny del programa principal i resolució integrada de problemes