Soluciones lección 032
Página 1 de 1.
Soluciones lección 032
Soluciones selectas para los ejercicios propuestos en la lección 32:
Solución Ejercicio 3: Escribir una función ALFA que tenga como parámetros un arreglo de caracteres llamado FRASE (con un máximo de 100 caracteres), un natural llamado LARGO (número de caracteres en la frase) y una variable de carácter llamada LETRA. La función ALFA produce el número de apariciones del carácter LETRA en el arreglo FRASE.
La idea es recorrer el arreglo FRASE carácter a carácter y comparar cada uno de los caracteres con el carácter buscado. En caso de coincidencia se incrementa una variable, la cual es la salida del procedimiento. A continuación se presenta una solución al problema. Además de la función ALFA se incluye un programa principal que pide al usuario la frase y el carácter a buscar y devuelve la cantidad de veces que el carácter aparece en la frase.
Solución Ejercicio 8: Dada la siguiente definición de lista de naturales:
Escribir en MODULA-2 un procedimiento que recibe como parámetro una lista de naturales de tipo LNat y muestra todos los números de dicha lista, desde el primero al último.
Solución
Solución
Para resolver este ejercicio existen dos posibilidades:
recorrer iterativamente la lista toda las veces que sea necesario para encontrar los elementos en el orden pedido.
recorrer la lista mediante un procedimiento recursivo.
Solución Iterativa
Solución Ejercicio 3: Escribir una función ALFA que tenga como parámetros un arreglo de caracteres llamado FRASE (con un máximo de 100 caracteres), un natural llamado LARGO (número de caracteres en la frase) y una variable de carácter llamada LETRA. La función ALFA produce el número de apariciones del carácter LETRA en el arreglo FRASE.
La idea es recorrer el arreglo FRASE carácter a carácter y comparar cada uno de los caracteres con el carácter buscado. En caso de coincidencia se incrementa una variable, la cual es la salida del procedimiento. A continuación se presenta una solución al problema. Además de la función ALFA se incluye un programa principal que pide al usuario la frase y el carácter a buscar y devuelve la cantidad de veces que el carácter aparece en la frase.
- Código:
MODULE Pr1_4;
FROM STextIO IMPORT WriteString, WriteLn, WriteChar, ReadRestLine, ReadChar, SkipLine;
FROM SWholeIO IMPORT WriteCard;
FROM Strings IMPORT Length;
PROCEDURE ALFA (FRASE:ARRAY OF CHAR;LARGO:CARDINAL; LETRA:CHAR ): CARDINAL;
VAR n, cantVeces: CARDINAL;
BEGIN
cantVeces := 0;
FOR n:= 0 TO LARGO DO
IF FRASE[n] = LETRA THEN
cantVeces := cantVeces +1;
END; (*END IF*)
END; (*END FOR*)
RETURN cantVeces;
END ALFA;
(*---------------PROGRAMA PRINCIPAL----------------------*)
VAR
f: ARRAY[0..100]OF CHAR;
c: CHAR;
cant: CARDINAL;
BEGIN
WriteString('INGRESE LA FRASE');
WriteLn();
ReadRestLine(f);
SkipLine();
WriteLn();
WriteString('INGRESE CARACTER');
WriteLn();
ReadChar(c);
SkipLine();
WriteLn();
cant := ALFA(f, Length(f), c);
WriteString('El caracter ');
WriteChar(c);
WriteString(' aparece ');
WriteCard(cant,2);
WriteString(' veces.');
END Pr1_4.
Solución Ejercicio 8: Dada la siguiente definición de lista de naturales:
- Código:
FROM Storage IMPORT ALLOCATE;
TYPE
LNat = POINTER TO NodoLista;
NodoLista = RECORD
elem : CARDINAL;
sig : LNat;
END;
Escribir en MODULA-2 un procedimiento que recibe como parámetro una lista de naturales de tipo LNat y muestra todos los números de dicha lista, desde el primero al último.
Solución
- Código:
MODULE Pr1_9show;
FROM STextIO IMPORT WriteString, WriteLn;
FROM SWholeIO IMPORT WriteCard;
FROM Storage IMPORT ALLOCATE;
TYPE
LNat = POINTER TO NodoLista;
NodoLista = RECORD
elem : CARDINAL;
sig : LNat;
END;
PROCEDURE printLst(L: LNat);
VAR lpos: LNat;
BEGIN
lpos:= L;
IF (lpos = NIL) THEN
WriteString("Lista vacía.");
ELSE
WHILE (lpos <> NIL) DO
WriteCard(lpos^.elem,0);
WriteString(" ");
lpos:= lpos^.sig;
END;
END;
END printLst;
(*---------------PROGRAMA PRINCIPAL----------------------*)
VAR
L, aux, actual: LNat;
x:CARDINAL;
BEGIN
(* Se genera la lista L*)
L := NIL;
FOR x := 1 TO 10 DO
NEW(aux);
aux^.elem := x;
aux^.sig := NIL;
IF L = NIL THEN
(* L es puntero al primer elemento de la lista *)
L := aux;
ELSE
actual^.sig := aux;
END;
(* puntero al último elemento agregado en la lista *)
actual := aux;
END;
(* Este es un ejemplo para ver como se muestran los *)
(* elementos de una lista, también podría solicitarse *)
(* al usuario que ingrese dichos elementos *)
printLst(L);
END Pr1_9show.
Solución
Para resolver este ejercicio existen dos posibilidades:
recorrer iterativamente la lista toda las veces que sea necesario para encontrar los elementos en el orden pedido.
recorrer la lista mediante un procedimiento recursivo.
Solución Iterativa
- Código:
MODULE pr1_9i;
FROM STextIO IMPORT WriteString;
FROM SWholeIO IMPORT WriteCard;
TYPE
LNat = POINTER TO NodoLista;
NodoLista = RECORD
elem : CARDINAL;
sig : Lnat;
END;
PROCEDURE printLstReverseIt(L: LNat);
VAR lpos, lult: LNat;
BEGIN
lult:= NIL;
WHILE (lult<>L) DO
lpos:= L;
WHILE (lpos^.sig <>lult) DO
lpos:= lpos^.sig;
END;
WriteCard(lpos^.elem,0);
WriteString(" ");
lult:= lpos;
END;
END printLstReverseIt;
(*---------------PROGRAMA PRINCIPAL----------------------*)
VAR
L: LNat;
BEGIN
... (*Se genera la lista L*)
printLstReverseIt(L);
END pr1_9i.
- Código:
MODULE pr1_9r;
FROM STextIO IMPORT WriteString;
FROM SWholeIO IMPORT WriteCard;
TYPE
LNat = POINTER TO NodoLista;
NodoLista = RECORD
elem : CARDINAL;
sig : LNat;
END;
PROCEDURE printLstReverseRec(L: LNat);
BEGIN
IF (L <> NIL) THEN
printLstReverseRec(L^.sig);
WriteCard(L^.elem,0);
WriteString(" ");
END;
END printLstReverseRec;
(*---------------PROGRAMA PRINCIPAL----------------------*)
VAR
L: LNat;
BEGIN
... (*Se genera la lista L*)
printLstReverseRec(L);
END pr1_9r.
Temas similares
» Soluciones lección 004
» Soluciones lección 033 a 035
» Soluciones lección 005
» Soluciones lección 038
» Soluciones lección 006
» Soluciones lección 033 a 035
» Soluciones lección 005
» Soluciones lección 038
» Soluciones lección 006
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.