Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación EJERCICIO 1 MODULO Mcadena DEFINICIÓN CONSTANTES FINCAD = CHAR(0) TIPOS Tcadena = PUNTERO A TNodoCadena REGISTRO TNodoCadena = car:CARACTER sig: Tcadena FINREGISTRO PROC LeerCadena():Tcadena PROC EscribeCadena (↓ ↓cad:Tcadena) FUNC CreaCadenaVacia ():Tcadena FUNC EstáVacía(↓ ↓cad:Tcadena):LÓGICO PROC InsertarCaracter (↓ ↓↑ cad:Tcadena; ↓x:CARACTER, ↓pos:NATURAL) FUNC VerCaracter (↓ ↓cad:Tcadena; pos:NATURAL):CARACTER FUNC Longitud (↓ ↓cad:Tcadena):NATURAL FUNC Mayor (↓ ↓cad1, ↓cad2:Tcadena): LÓGICO FUNC Menor(↓ ↓cad1, ↓cad2:Tcadena): LÓGICO FUNC Igual(↓ ↓cad1, ↓cad2:Tcadena): LÓGICO FUNC Copia (↓ ↓cad):Tcadena FUNC Concatena (↓ ↓cad1, ↓cad2:Tcadena):Tcadena PROC Destruye (↓ ↓↑ cad:Tcadena) Dpto. de Lenguajes y Ciencias de la Computación IMPLEMENTACIÓN CONSTANTES ENTER = CHR(13) PROC LeerCadena():Tcadena VARIABLES car:CARACTER cad:Tcadena i:NATURAL INICIO cad ← CreaCadenaVacia () LEER(car) i←1 MIENTRAS car ≠ ENTER HACER InsertarCaracter (cad,car,i) LEER(car) i ← i+1 FINMIENTRAS RESULTADO ← cad FIN PROC EscribeCadena (↓ ↓cad:Tcadena) VARIABLES car:CARACTER i: NATURAL INICIO i←1 car ← VerCaracter (cad,i) MIENTRAS car ≠ FINCAD HACER ESCRIBIR(car) i ← i+1 car ← VerCaracter (cad,i) FINMIENTRAS FIN Metodología de Programación Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación FUNC CreaCadenaVacia ():Tcadena INICIO RESULTADO ← NULO FIN PROC InsertarCaracter (↓ ↓↑ cad:Tcadena; ↓x:CARACTER, ↓pos:NATURAL) VARIABLES ant,ptr,nuevo:Tcadena i: NATURAL INICIO i←1 ptr ← cad ant ← NULO nuevo ← NUEVO(TNodoCadena) nuevo^.car ← x nuevo^.sig ← NULO MIENTRAS (ptr ≠ NULO) ∧ (i<pos) HACER i ← i+1 ant ← ptr ptr ← ptr^.sig FINMIENTRAS SI ant=NULO ENTONCES /* voy a insertar antes del primer elemento */ nuevo^.sig ← cad cad ← nuevo EN OTRO CASO /* voy en medio o al final. Nótese que si es al final ptr vale NULO */ nuevo^.sig ← ptr ant^.sig ← nuevo FINSI FIN Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación FUNC Longitud (↓ ↓cad:Tcadena):NATURAL VARIABLES ptr:Tcadena long: NATURAL INICIO long ← 0 ptr ← cad MIENTRAS (ptr ≠ NULO) HACER long ← long +1 ptr ← ptr^.sig FINMIENTRAS RESULTADO ← long FIN FUNC Igual(↓ ↓cad1, ↓cad2:Tcadena): LÓGICO VARIABLES ptr1,prt2:Tcadena INICIO ptr1 ← cad1 ptr2 ← cad2 MIENTRAS (ptr1 ≠ NULO) ∧ (ptr2 ≠ NULO) ∧ (ptr1^.car = ptr2^.car) HACER ptr1 ← ptr1^.sig ptr:2 ← ptr2^.sig FINMIENTRAS RESULTADO ← (ptr1=NULO) ∧ (ptr2=NULO) FIN Dpto. de Lenguajes y Ciencias de la Computación FUNC Copia (↓ ↓cad):Tcadena VARIABLES car:CARACTER i: NATURAL cadCop:Tcadena INICIO i←1 cadCop ← CreaCadenaVacia() car ← VerCaracter (cad,i) MIENTRAS car ≠ FINCAD HACER InsertarCaracter (cadCop,car,i) i ← i+1 car ← VerCaracter (cad,i) FINMIENTRAS RESULTADO ← cadCop FIN PROC Destruye (↓ ↓↑ cad:Tcadena) VARIABLES aux:Tcadena INICIO MIENTRAS (cad ≠ NULO) HACER ptr ← cad cad ← cad ^.sig ELIMINAR(aux) FINMIENTRAS FIN Metodología de Programación Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación EJERCICIO 2 MODULO Mnat /* Números Naturales Grandes */ DEFINICIÓN TIPOS Tdigito=[0..9] Tnat = PUNTERO A TnodoNat TnodoNat = REGISTRO dig:Tdigito ant,sig: Tnat FINREGISTRO FUNC LeeNat():Tnat /* Procedimiento de creación!!! PROC EscribeNat(↓ ↓ n:Tnat) FUNC Igual(↓ ↓n1, ↓n2:Tnat):LÓGICO FUNC Mayor(↓ ↓n1, ↓n2:Tnat): LÓGICO FUNC Menor(↓ ↓n1, ↓n2:Tnat): LÓGICO FUNC Suma(↓ ↓n1, ↓n2:Tnat): Tnat FUNC Resta(↓ ↓n1, ↓n2:Tnat): Tnat PROC Destruit(↓ /* Procedimiento de destrucción!!! ↓↑ n:Tnat) Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación IMPLEMENTACIÓN PROC LeeNat():Tnat VARIABLES c:CARÁCTER n,ptr:Tnat INICIO n ← NULO ptr ← NULO LEER(c) /* Primer Elemento */ MIENTRAS ('0' <= c) ∧ (c <='9') ∧ (c=’0’) HACER LEER(c) /* Elimino los 0’s a la izquierda */ FINMIENTRAS SI ('0' <= c) ∧ (c <='9') ENTONCES n ← NUEVO(TnodoNat) n^.ant ← NULO n^.sig ← NULO n^.dig ← c-‘0’ ptr ← n /* Resto de dígitos */ LEER(c) MIENTRAS (('0' <= c) ∧ (c <='9')) HACER ptr^.sig ← NUEVO(TnodoNat) ptr^.sig^.ant ← ptr prt ← ptr^.sig ptr^.sig ← NULO ptr^.dig ← c-‘0’ LEER(c) FINMIENTRAS FIN RESULTADO ← n FIN Dpto. de Lenguajes y Ciencias de la Computación Metodología de Programación PROC EscribeNat(↓ ↓ n:Tnat) VARIABLES ptr:Tnat INICIO ptr ← n SI ptr=NULO ENTONCES ESCRIBIR(0) ENOTROCASO MIENTRAS ptr ≠ NULO HACER ESCRIBIR(ptr^.dig) prt ← ptr^.sig FINMIENTRAS FIN FIN FUNC Igual(↓ ↓ n1, ↓ n2:Tnat): LÓGICO VARIABLES ptr1,ptr2:Tnat iguales: LÓGICO INICIO ptr1 ← n1 ptr2 ← n2 iguales ← VERDADERO MIENTRAS (ptr1≠NULO) ∧ (ptr2 ≠ NULO) ∧ (iguales) HACER iguales ← (ptr1^.dig = ptr2^.dig) prt1 ← ptr1^.sig prt2 ← ptr2^.sig FINMIENTRAS RESULTADO ← (iguales ∧ (ptr1=NULO) ∧ (ptr2=NULO) ) FIN Dpto. de Lenguajes y Ciencias de la Computación PROC Destruit(↓ ↓ ↑n:Tnat) VARIABLES ptr:Tnat INICIO MIENTRAS n ≠ NULO HACER ptr ← n n ← n^.sig ELIMINAR(ptr) FINMIENTRAS FIN Metodología de Programación