Skip to content

Examen: Parcial 2:2025_11_19:Datos

Miguel edited this page Dec 9, 2025 · 1 revision

Examen Parcial 2: 2025-11-19. Ciencia e Ingeniería de Datos

  • Tiempo: 50 minutos
  • Descripción: Examen Parcial 2. Laboratorio. Grado de Ciencia e Ingeniería de Datos
  • Fecha: 2024/Octubre/9
  • Temario: Sesiones L5, L6, L7 y L8

Contenido

Enunciado

El examen se ha realizado a través de Aula virtual. Tiene dos partes: Test y un programa

Test (5 ptos)

  • Realizado a través de Aula virtual
  • 6 preguntas tipo test
  • Las respuesats incorrectas restan un 33% del valor de la pregunta
  • Solución disponible en Aula virtual

Programa (5 ptos)

Hacer un programa en rars que pida dos cadenas al usuario (máx. 100 caracteres por cadena), las compare (ignorando entre mayúsculas y minúsculas) y devuelva el resultado. A continuación se muestran tres ejecuciones de dicho programa:

Introduzca la primera cadena: En un lugar de la Mancha
Introduzca la segunda cadena: de cuyo nombre no quiero acordarme
La cadena primera es mayor

Introduzca la primera cadena: hola
Introduzca la segunda cadena: HOLA
Las dos cadenas son iguales

Introduzca la primera cadena: te
Introduzca la segunda cadena: tejido
La cadena segunda es mayor

Nota: De forma resumida, para comparar dos cadenas hay que comparar caracter por caracter ambas cadenas hasta encontrar una diferencia o terminar alguna de las cadenas. Un carácter es mayor que otro si su código ASCII es mayor. Por ejemplo: 'Z' > 'A' , 'A' > '9' y '.' > ' '

Solución al programa

Como siempre ocurre al programar, existen infinitas soluciones. Pero en todas ellas se debe respetar las especificaciones

Este es el contenido del programa:

#  Programa: ejercicioP2.asm
# Propósito: Compara dos cadenas introducidas por el usuario (no diferencia mayúsculas de minúsculas)
#     Autor: Javier Macías del Campo
#     Fecha: 09/11/2025

	.include "servicios.asm"

	.eqv MAX_CADENA 101  #100 caracteres más fin cadena
	.eqv PASA_MAY -32    # Valor a sumar para pasar a mayúscula => ASCII('a')-ASCII('A')

	.data
cad1:	.space MAX_CADENA
cad2:	.space MAX_CADENA
txtC1:	.string "Introduzca la primera cadena: "
txtC2:	.string "Introduzca la segunda cadena: "
txtM1:	.string "La cadena primera es mayor"
txtM2:	 .string "La cadena segunda es mayor"
txtIg:	.string "Las dos cadenas son iguales"

	.text
	
	#mensaje solicitando primera cadena
	la a0, txtC1
	li a7, PRINT_STRING
	ecall
	
	#leemos la primera cadena
	la a0, cad1
	li a1, MAX_CADENA
	li a7, READ_STRING
	ecall

	#mensaje solicitando segunda cadena
	la a0, txtC2
	li a7, PRINT_STRING
	ecall
			
	#leemos la segunda cadena
	la a0, cad2
	li a1, MAX_CADENA
	li a7, READ_STRING
	ecall

	li s3, 'a'           #s3=>ASCII 'a'
	li s4, 'z'           #s4=>ASCII 'z'
	
	#comparamos las dos cadenas
	la s1, cad1           #s1=>puntero a cadena 1
	la s2, cad2           #s2=>puntero a cadena 2
bucle:	lb t1, 0(s1)          #t1=>caracter a analizar cadena 1 
	blt t1, s3, car2      #saltar a car2 si el caracter en t1 menor que 'a'
	bgt t1, s4, car2      #saltar a car2 si el caracter en t1 mayor que 'z'
	addi t1, t1, PASA_MAY #pasamos el caracter t1 a mayúscula

car2:	lb t2, 0(s2)          #t2=>caracter a analizar cadena 2
	blt t2, s3, comp      #saltar a comp(arar) si el caracter en t1 menor que 'a'
	bgt t2, s4, comp      #saltar a comp(arar) si el caracter en t1 mayor que 'z'
	addi t2, t2, PASA_MAY #pasamos el caracter t2 a mayúscula

comp:	bnez t1, sigue        #saltamos si no finalizada la cadena 1
	bnez t2, mayor2       #si no fin cadena 2, la cadena 2 es mayor
	la a0, txtIg          #hemos terminado también la cadena 2 => las cadenas son iguales; lo mostramos
	li a7, PRINT_STRING
	ecall
	j fin

sigue: 	blt t1, t2, mayor2   #cadena 2 mayor 
	bgt t1, t2, mayor1   #cadena 1 mayor
	addi s1, s1, 1       #si llega aquí, todavía son iguales, avanzamos punteros a las cadenas
	addi s2, s2, 1
	j bucle

mayor1:	la a0, txtM1        #mostramos que la cadena 1 es mayor
	li a7, PRINT_STRING
	ecall
	j fin			

mayor2:	la a0, txtM2        #mostramos que la cadena 2 es mayor
	li a7, PRINT_STRING
	ecall

fin:	li a7, 10           #terminamos
	ecall
#   Archivo: servicios.asm
# Propósito: Códigos servicios S.O. para incluir en los programas rars
#     Autor: ObiJuan (con adiciones y comentarios de Javier Macías del Campo)
#     Fecha: 09/11/2024

	.eqv PRINT_INT    1
	.eqv PRINT_INT_U  36
	.eqv READ_INT     5
	.eqv PRINT_STRING 4
	.eqv READ_STRING  8
	.eqv PRINT_CHAR   11
	.eqv READ_CHAR    12
	.eqv EXIT         10

Autores

  • Miguel Ángel de Miguel
  • Javier Macías

Licencia

Enlaces

Página principal


Sesiones de Prácticas

P1: Simulador RARs

L1: El simulador RARs
L2: Calculando expresiones
L3: Práctica 1-3. Variables

P2: E/S mapeada. Llamadas al sistema

L4: Pract 2-1. E/S mapeada
L5: Práctica 2-2: Inst. ecall
L6: Prác 2-3: Cadenas

P3: Bucles y Saltos condicionales

L7: Práct 3-1: Bucles y saltos
L8: Práct 3-2: Cadenas II

P4: Subrutinas

L9: Pract 4-1: Subrut. Nivel-1
L10: Pract 4-2: La pila
L11: Pract 4-3: Recursividad

P5: Memoria Dinámica

L12: Pract 5-1. Heap. Listas

VÍDEO DE DESPEDIDA

SESIONES ADICIONALES

L13: RV32I: Resto de instrucciones
L14: Macros
L15: Entrada/Salida a bajo nivel
L16: Multiplicaciones/divisiones. Unit Tests 🚧
L17: Biblioteca stdio: salida a alto nivel 🚧
Los registros de estado y control (CSR)
Interrupciones y excepciones
Borrador

SOLUCIONES

Soluciones a los ejercicios planteados en cada sesión para practicar:
Sesión L1
Sesión L2
Sesión L3
Sesión L4
Sesión L5
Sesión L6
Sesión L7
Sesión L8
Sesión L9
Sesión L10
Sesión L11
Sesión L12

Ejercicios de examen

Simulacro examen 1
GISAM. Ordinario. 2019-Dic-11
GISAM. Extra. 2020-Jul-03
GISAM. Ordinario. 2021-Ene-21
GISAM. Ordinario. 2022-Ene-10
GISAM. Extra. 2022-Jun-29
GISAM. Parcial 1. 2022-Oct-26
GISAM. Parcial 2. 2022-Nov-30
GISAM. Parcial 3. 2022-Dic-21
GISAM. Parcial 1. 2023-Oct-09
GISAM. Parcial 2. 2023-Nov-11
GISAM. Parcial 3. 2023-Dic-20
GISAM. Extra. 2024-Jun-17
GISAM. Parcial 1. 2024-Oct-14
GISAM. Parcial 2. 2024-Nov-13
GISAM. Parcial 3. 2024-Dic-16
GISAM. Extra. 2025-Jun-17
GISAM. Parcial 1. 2025-Oct-20
GISAM. Parcial 2. 2025-Nov-19
GISAM. Parcial 3. 2026-Enero-9
GISAM. Parcial 1. 2026-Oct-21
TELECO. Ordinario. 2019-Dic-13
TELECO. Extra. 2020-Jul-07
TELECO. Ordinario. 2021-Ene-21
TELECO. Extra. 2021-Jul-02
TELECO. Ordinario. 2022-Ene-10
TELECO. Extra. 2022-Jun-29
TELECO. Ordinario. 2023-Ene-10
TELECO. Extra. 2023-Jun-29
TELECO. Parcial 1. 2023-Oct-20
TELECO. Parcial 2. 2023-Nov-17
TELECO. Parcial 3. 2023-Dic-22
TELECO. Extra. 2024-Jun-17
TELECO. Parcial 1. 2024-Oct-10
TELECO. Parcial 2. 2024-Nov-21
TELECO. Parcial 3. 2024-Dic-19
TELECO. Extra. 2025-Jun-17
TELECO. Parcial 1. 2025-Oct-10
TELECO. Parcial 2. 2025-Nov-13
TELECO. Parcial 3. 2026-Ene-21
TELECO. Extra. 2026-Jun-25
TELECO. Parcial 1. 2026-Oct-09
Robótica. Ordinario. 2020-Jun-1
Robótica. Extra. 2020-Jul-13
Robótica. Ordinario. 2021-Mayo-20
Robótica. Extra. 2021-Junio-16
Robótica. Parcial 1. 2022-Feb-25
Robótica. Parcial 2. 2022-Abril-1
Robótica. Parcial 3. 2022-Mayo-6
Robótica. Parcial 1. 2023-Feb-27
Robótica. Parcial 2. 2023-Mar-27
Robótica. Parcial 3. 2023-May-08
Robótica. Parcial 1. 2024-Feb-26
Robótica. Parcial 2. 2024-Mar-20
Robótica. Parcial 3. 2024-May-06
Robótica. Extra. 2024-Junio-24
Robótica. Parcial 1. 2025-Feb-25
Robótica. Parcial 2. 2025-Mar-31
Robótica. Parcial 3. 2025-May-19
Robótica. Parcial 1. 2026-Feb-23
Robótica. Parcial 2. 2026-Abr-13
Robótica. Parcial 3. 2026-May-11
Datos. Parcial 1. 2023-Oct-09
Datos. Parcial 2. 2023-Nov-15
Datos. Parcial 3. 2023-Dic-20
Datos. Parcial 1. 2024-Oct-09
Datos. Parcial 2. 2024-Nov-13
Datos. Parcial 3. 2025-Ene-17
Datos. Parcial 1. 2025-Oct-15
Datos. Parcial 2. 2025-Nov-19

Clone this wiki locally