FUNC - Departamento de Lenguajes y Ciencias de la Computación

Anuncio
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
Descargar