Algoritmo FuncionamientoAplicacion - jsyh1/practica_aplicada GitHub Wiki

Algoritmo FuncionamientoAplicacion

Definir expresion, operador, opcion Como Cadena
Definir numero Como Entero
Definir abiertos, cerrados Como Entero
Definir progresoActual, totalActividades Como Entero
Definir salir Como Logico

expresion <- ""
abiertos <- 0
cerrados <- 0

progresoActual <- 0
totalActividades <- 10

salir <- Falso

Escribir "================================="
Escribir "      CALCULADORA MATEMATICA"
Escribir "================================="

Escribir "Actividad: Calculadora matematica"

Si totalActividades > 0 Entonces
	
	Escribir "Progreso: ", progresoActual, "/", totalActividades
	
SiNo
	
	Escribir "Error: el progreso no esta disponible."
	
FinSi

Mientras NO salir Hacer
	
	Escribir ""
	Escribir "---------------------------------"
	Escribir "EXPRESION ACTUAL: ", expresion
	Escribir "---------------------------------"
	Escribir "1. Agregar numero"
	Escribir "2. Agregar operador"
	Escribir "3. Agregar parentesis abierto ("
	Escribir "4. Agregar parentesis cerrado )"
	Escribir "5. Eliminar ultimo elemento"
	Escribir "6. Limpiar expresion"
	Escribir "7. Evaluar expresion"
	Escribir "8. Salir"
	Escribir "Seleccione una opcion:"
	
	Leer opcion
	
	Segun opcion Hacer
		
		"1":
			
			Escribir "Ingrese un numero entre 1 y 10:"
			Leer numero
			
			Si numero >= 1 Y numero <= 10 Entonces
				
				expresion <- expresion + ConvertirATexto(numero)
				
				Escribir "Numero agregado correctamente."
				Escribir "Expresion actual: ", expresion
				
			SiNo
				
				Escribir "Error: ", numero, " esta fuera del rango permitido."
				Escribir "Solo se permiten numeros del 1 al 10."
				
			FinSi
			
			
		"2":
			
			Si expresion = "" Entonces
				
				Escribir "Error: no puede agregar un operador a una expresion vacia."
				
			SiNo
				
				Escribir "Ingrese un operador (+, -, *, /):"
				Leer operador
				
				Si operador <> "+" Y operador <> "-" Y operador <> "*" Y operador <> "/" Entonces
					
					Escribir "Error: operador no valido."
					Escribir "Solo se permiten +, -, * y /."
					
				SiNo
					
					Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "+" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "-" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "*" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "/" Entonces
						
						Escribir "Error: no se permiten dos operadores consecutivos."
						
					SiNo
						
						expresion <- expresion + operador
						
						Escribir "Operador agregado correctamente."
						Escribir "Expresion actual: ", expresion
						
					FinSi
					
				FinSi
				
			FinSi
			
			
		"3":
			
			Si expresion <> "" Entonces
				
				Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) <> ")" Entonces
					
					expresion <- expresion + "("
					abiertos <- abiertos + 1
					
					Escribir "Parentesis abierto agregado correctamente."
					Escribir "Expresion actual: ", expresion
					
				SiNo
					
					Escribir "Error: no puede agregar un parentesis de apertura despues de un parentesis de cierre."
					
				FinSi
				
			SiNo
				
				expresion <- "("
				abiertos <- abiertos + 1
				
				Escribir "Parentesis abierto agregado correctamente."
				Escribir "Expresion actual: ", expresion
				
			FinSi
			
			
		"4":
			
			Si abiertos > cerrados Entonces
				
				Si expresion <> "" Entonces
					
					Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) <> "(" Entonces
						
						expresion <- expresion + ")"
						cerrados <- cerrados + 1
						
						Escribir "Parentesis cerrado agregado correctamente."
						Escribir "Expresion actual: ", expresion
						
					SiNo
						
						Escribir "Error: no puede cerrar un parentesis inmediatamente despues de abrirlo."
						
					FinSi
					
				FinSi
				
			SiNo
				
				Escribir "Error: no existe un parentesis abierto disponible para cerrar."
				
			FinSi
			
			
		"5":
			
			Si expresion = "" Entonces
				
				Escribir "Error: no hay elementos para eliminar."
				
			SiNo
				
				Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = ")" Entonces
					
					cerrados <- cerrados - 1
					
				SiNo
					
					Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "(" Entonces
						
						abiertos <- abiertos - 1
						
					FinSi
					
				FinSi
				
				expresion <- Subcadena(expresion, 1, Longitud(expresion) - 1)
				
				Escribir "Ultimo elemento eliminado correctamente."
				Escribir "Expresion actual: ", expresion
				
			FinSi
			
			
		"6":
			
			expresion <- ""
			abiertos <- 0
			cerrados <- 0
			
			Escribir "Operacion limpiada correctamente."
			Escribir "La expresion actual esta vacia."
			
			
		"7":
			
			Si expresion = "" Entonces
				
				Escribir "Error: no existe una expresion para evaluar."
				
			SiNo
				
				Si abiertos <> cerrados Entonces
					
					Escribir "Error: la expresion contiene parentesis incompletos."
					Escribir "Debe cerrar todos los parentesis antes de evaluar."
					
				SiNo
					
					Si Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "+" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "-" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "*" O Subcadena(expresion, Longitud(expresion), Longitud(expresion)) = "/" Entonces
						
						Escribir "Error: la expresion esta incompleta."
						Escribir "No puede terminar con un operador."
						
					SiNo
						
						Escribir "Expresion valida para evaluacion: ", expresion
						Escribir "Resultado de la expresion:"
						
						// Aqui se conecta con el algoritmo EvaluarExpresion.
						
					FinSi
					
				FinSi
				
			FinSi
			
			
		"8":
			
			salir <- Verdadero
			Escribir "La aplicacion se ha cerrado correctamente."
			
			
		De Otro Modo:
			
			Escribir "Error: la opcion seleccionada no existe."
			Escribir "Debe seleccionar una opcion entre 1 y 8."
			
	FinSegun
	
FinMientras

FinAlgoritmo