Anda di halaman 1dari 8

1.- Realizar un programa que imprima la tabla de multiplicar por un nmero ledo como dato.

Por ejemplo, si se quiere obtener la tabla de multiplicar del 9 se tendra la siguiente hoja de resultados: Nmero? 9 Tabla de multiplicar por 9 ========================== 9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81 9 x 10 = 90 Solucin: Pedir un nmero Imprimir cabecera de la tabla Imprimir tabla --> Imprimir cada una de las lineas. Programa: (****************************************************************************** * Programa: TABLA DE MULTIPLICAR. * Ejercicio 1 de la Unidad Didactica I. * * Autor: Agustin Borrego Colomer * * Descripcin: Imprime la tabla de multiplicar por un nmero introducido * como dato. ******************************************************************************) MODULE TablaM; FROM InOut IMPORT WriteString,WriteInt,WriteLn,ReadInt; VAR primerfactor,segundofactor:INTEGER; BEGIN (*----- Pedir al usuario que introduzca un nmero -----*) WriteString("Nmero? "); ReadInt(primerfactor); WriteLn; WriteLn; (*----- Presentar en pantalla la cabecera de la tabla -----*) WriteString("Tabla de Multiplicar por "); WriteInt(primerfactor,1); WriteLn; WriteString("=========================="); WriteLn; (*----- Escribir la tabla con el nmero introducido -----*) FOR segundofactor:=1 TO 10 DO (*---- Escribir una linea particular de la tabla ----*) WriteInt(primerfactor,6); WriteString(" x"); WriteInt(segundofactor,3); WriteString(" ="); WriteInt(primerfactor*segundofactor,4); WriteLn; END END TablaM.

2.- Realizar un programa para calcular el mximo comn divisor de dos nmeros enteros. Por ejemplo: Primer Nmero? 655 Segundo Nmero? 1325 El mximo comn divisor es: Solucin: Lectura de los dos nmeros. Clculo del mximo comn divisor ---> Probar un divisor mientras ambos nmeros sean mayores que 1 ---> Si ambos son divisibles acumular resultado en MaxCDiv Si el primer nmero es divisible, dividirlo. Si el segundo nmero es divisible, dividirlo. Si ninguno es divisible aumentar el divisor en una unidad. Escribir resultado en pantalla. Programa: (****************************************************************************** * Programa: MAXIMO COMUN DIVISOR. * Ejercicio 2 de la Unidad Didactica I. * * Autor: Agustin Borrego Colomer * * Descripcin: Calcula el mximo comn divisor de dos nmeros introducidos * como datos. ******************************************************************************) MODULE MaxCDiv; FROM InOut IMPORT WriteString,WriteCard,WriteLn,ReadCard; VAR primerNumero,segundoNumero,maxComunDiv,divisor:CARDINAL; BEGIN maxComunDiv := 1 ; (* inicializar mximo comun divisor *) (*---- Lectura de los dos nmeros ----*) WriteString("Primer Nmero? "); ReadCard(primerNumero); WriteLn; WriteString("Segundo Nmero? "); ReadCard(segundoNumero); WriteLn; WriteLn; (*---- Clculo del mximo comn divisor ----*) divisor := 2; (* inicializar divisor a 2 *) (*---- Seguir clculo mientras ambos nmeros sean mayores que 1 ----*) WHILE ((primerNumero > 1) AND (segundoNumero > 1)) DO (*---- Si ambos son divisibles acumulamos divisor en maxComunDiv ----*) IF ((primerNumero MOD divisor)=0) AND ((segundoNumero MOD divisor)=0) THEN maxComunDiv := maxComunDiv * divisor END; (*---- Actualizamos ambos nmeros ----*) IF ((primerNumero MOD divisor)=0) THEN primerNumero := primerNumero DIV divisor END; IF ((segundoNumero MOD divisor)=0) THEN segundoNumero := segundoNumero DIV divisor END; (*---- Si ninguno es divisible probamos siguiente divisor ----*) IF ((primerNumero MOD divisor)<>0) AND ((segundoNumero MOD divisor)<>0) THEN divisor := divisor + 1 5

END; END; (*---- Escribimos resultado en pantalla ----*) WriteString("El mximo comun divisor es:"); WriteCard(maxComunDiv,5); END MaxCDiv.

3.- Realizar un programa que escriba un rombo simtrico de asteriscos como el que se muestra a continuacin, tomando como dato el nmero de asteriscos que tiene un lado. Lado? 4 * * * * * * * * * * * * * * * * Solucin: Pedir longitud del lado en asteriscos. Escribir rombo ---> Si Lado es mayor que 0 escribe el primer asterisco ---> Escribe espacios iniciales necesarios. Escribe un asterisco. Escribe las filas superiores ---> Escribe cada una de las filas superiores ---> Escribe espacios iniciales necesarios. Escribe asteriscos necesarios. Si Lado es mayor que la unidad escribe la fila central ---> Escribe los asteriscos necesarios. Escribe las filas inferiores ---> Escribe cada una de las filas inferiores ---> Escribe espacios iniciales necesarios. Escribe asteriscos necesarios. Si Lado es mayor que la unidad escribe el ltimo asterisco ---> Escribe espacios iniciales necesarios. Escribe un asterisco. Programa: (****************************************************************************** * Programa: ROMBO. * Ejercicio 3 de la Unidad Didactica I. * * Autor: Agustin Borrego Colomer * * Descripcin: Escribe un rombo simtrico con el nmero de asteriscos del * lado como dato. ******************************************************************************) MODULE Rombo; FROM InOut IMPORT Write, WriteString, WriteCard, WriteLn, ReadInt; VAR lado, espaciosIniciales, linea, asteriscos : INTEGER; BEGIN (*---- Pide la longitud del Lado en asteriscos ----*) WriteString ("Lado ? "); ReadInt (lado); WriteLn; WriteLn;

(*---- Si Lado > 0, escribe el primer asterisco ----*) IF (lado > 0) THEN FOR espaciosIniciales:=1 TO (lado - 1) DO Write (' ') END; Write ('*') END; (*---- Escribe filas de la mitad superior ----*) FOR linea:=1 TO (lado - 2) DO WriteLn; FOR espaciosIniciales:=lado - 2 TO linea BY -1 DO Write (' ') END; FOR asteriscos:=1 TO linea+1 DO WriteString ("* ") END; END; (*---- Escribe fila central si lado es mayor que 1 ----*) IF lado > 1 THEN WriteLn; FOR asteriscos:=1 TO lado DO WriteString("* ") END END; (*---- Escribe filas de la mitad inferior ----*) FOR linea:=(lado - 2) TO 1 BY -1 DO WriteLn; FOR espaciosIniciales:=linea TO lado - 2 DO Write (' ') END; FOR asteriscos:=1 TO linea+1 DO WriteString ("* ") END; END; (*---- Si Lado > 1 escribe el ltimo asterisco ----*) IF lado > 1 THEN WriteLn; FOR espaciosIniciales:=1 TO (lado - 1) DO Write (' ') END; WriteString('*') END; WriteLn; END Rombo.

(* espacios *)

(* espacios *)

(* asteriscos *)

(* espacios *)

(* asteriscos *)

(* espacios *)

4.- Realizar un programa que calcule el nmero e mediante el desarrollo en serie: e Solucin: Funcin para obtener el factorial de un nmero. Procedimiento para representar un nmero LONGREAL de la forma convencional ---> Obtener la parte entera. Escribir parte entera. Escribir punto decimal. Obtener la parte decimal. Escribir la parte decimal ---> Obtener cifra decimal. Escribir cifra decimal. Escribe nmero e mediante la serie dada, con la precisin requerida ---> Pedir precisin deseada. = 1 +
1 1!

1 2!

1 3!

1 4!

+-

Calculo aproximado de e hasta la precisin requerida. Calculo del numero de decimales del resultado. Representacin del resultado. Programa: (****************************************************************************** * Programa: OBTENCION DEL NUMERO e MEDIANTE EL DESARROLLO DE UNA SERIE. * Ejercicio 4 de la Unidad Didactica I. * * Autor: Agustin Borrego Colomer * * Descripcin: Calcula el nmero e mediante el desarrollo en serie: * * e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... * ******************************************************************************) MODULE Eserie; FROM InOut IMPORT WriteString, WriteLn, WriteLongCard, Write; FROM RealInOut IMPORT ReadLongReal, WriteLongReal; FROM LMathLib0 IMPORT exp; VAR n : CARDINAL ; eAproximada,error : LONGREAL ; nDecimales : CARDINAL ; (*============================================================================ = = Procedimiento para representar un nmero LONGREAL de la forma = acostumbrada: = parteEntera.parteDecimal = numero es el LONGREAL a representar. = ancho es el espacio en caracteres reservado. = decimales es el numero de decimales reservado. = =============================================================================*) PROCEDURE WriteFixPt (numero: LONGREAL; ancho,decimales: CARDINAL); VAR numeroDecimales: CARDINAL; parteEntera,cifraDecimal: LONGCARD; parteDecimal: LONGREAL; BEGIN (*---- Obtener parte entera ----*) parteEntera := TRUNC(numero); (*---- Escribir parte entera ----*) WriteLongCard (parteEntera, ancho - decimales); (*---- Escribir punto decimal ----*) Write ('.'); (*---- Obtener parte decimal ----*) parteDecimal := numero - FLOAT(parteEntera); (*---- Escribir parte decimal ----*) FOR numeroDecimales:=1 TO decimales DO (*---- Obtener cifra decimal ----*) parteDecimal := parteDecimal * LONG(10.0); cifraDecimal := TRUNC(parteDecimal); (*---- Escribir cifra decimal ----*) WriteLongCard (cifraDecimal, 1); parteDecimal :=parteDecimal - FLOAT(cifraDecimal) END; END WriteFixPt; (*============================================================================

= = Funcin para obtener el factorial de un nmero entero. La funcin = devuelve un LONGREAL. = numero es el INTEGER del que se tiene que obtener el factorial. = =============================================================================*) PROCEDURE Factorial(Numero : INTEGER): LONGREAL; VAR Resultado: LONGREAL; BEGIN Resultado := LONG(1.0); WHILE Numero > 1 DO Resultado := Resultado * LONG(FLOAT(Numero)); DEC(Numero) END; RETURN Resultado; END Factorial;

BEGIN (*---- Inicializacin de variables ----*) eAproximada := LONG(1.0); n := 1; nDecimales := 0; (*---- Obtencin del error deseado ----*) WriteString("Error ? "); ReadLongReal(error); WriteLn; WriteLn; (*---- Clculo aproximado de e ----*) WHILE ((exp(LONG(1.0)) - eAproximada) >= error ) DO eAproximada := eAproximada + 1.0 / Factorial(n); INC(n) END; (*---- Calcula nmero de decimales del resultado *) WHILE error < LONG(1.0) DO nDecimales := nDecimales + 1; error := error * LONG(10.0) END; (*---- Presentacin del resultado ----*) WriteString ("Valor de e = "); WriteFixPt (eAproximada, nDecimales+2, nDecimales); END Eserie.

5.- Realizar un programa que lea la longitud de los tres lados de un tringulo y analice qu tipo de tringulo es. Los resultados posibles sern los siguientes: No forman Tringulo Tringulo Tringulo Tringulo tringulo ( un lado mayor que la suma de los otros dos ) equiltero ( tres lados iguales ) issceles ( dos lados iguales ) escaleno ( tres lados distintos ) rectngulo ( sus lados cumplen el teorema de Pitgoras )

Solucin: Funcin para obtener el factorial de un nmero. Procedimiento para representar un nmero LONGREAL de la forma convencional ---> Obtener la parte entera. Escribir parte entera. Escribir punto decimal.

Obtener la parte decimal. Escribir la parte decimal ---> Obtener cifra decimal. Escribir cifra decimal. Escribe nmero e mediante la serie dada, con la precisin requerida ---> Pedir precisin deseada. Calculo aproximado de e hasta la precisin requerida. Calculo del numero de decimales del resultado. Representacin del resultado. Programa: (****************************************************************************** * Programa: OBTENCION DEL NUMERO e MEDIANTE EL DESARROLLO DE UNA SERIE. * Ejercicio 4 de la Unidad Didactica I. * * Autor: Agustin Borrego Colomer * * Descripcin: Calcula el nmero e mediante el desarrollo en serie: * * e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... * ******************************************************************************) MODULE Eserie; FROM InOut IMPORT WriteString, WriteLn, WriteLongCard, Write; FROM RealInOut IMPORT ReadLongReal, WriteLongReal; FROM LMathLib0 IMPORT exp; VAR n : CARDINAL ; eAproximada,error : LONGREAL ; nDecimales : CARDINAL ; (*============================================================================ = = Procedimiento para representar un nmero LONGREAL de la forma = acostumbrada: = parteEntera.parteDecimal = numero es el LONGREAL a representar. = ancho es el espacio en caracteres reservado. = decimales es el numero de decimales reservado. = =============================================================================*) PROCEDURE WriteFixPt (numero: LONGREAL; ancho,decimales: CARDINAL); VAR numeroDecimales: CARDINAL; parteEntera,cifraDecimal: LONGCARD; parteDecimal: LONGREAL; BEGIN (*---- Obtener parte entera ----*) parteEntera := TRUNC(numero); (*---- Escribir parte entera ----*) WriteLongCard (parteEntera, ancho - decimales); (*---- Escribir punto decimal ----*) Write ('.'); (*---- Obtener parte decimal ----*) parteDecimal := numero - FLOAT(parteEntera); (*---- Escribir parte decimal ----*) FOR numeroDecimales:=1 TO decimales DO (*---- Obtener cifra decimal ----*) parteDecimal := parteDecimal * LONG(10.0); cifraDecimal := TRUNC(parteDecimal);

(*---- Escribir cifra decimal ----*) WriteLongCard (cifraDecimal, 1); parteDecimal :=parteDecimal - FLOAT(cifraDecimal) END; END WriteFixPt; (*============================================================================ = = Funcin para obtener el factorial de un nmero entero. La funcin = devuelve un LONGREAL. = numero es el INTEGER del que se tiene que obtener el factorial. = =============================================================================*) PROCEDURE Factorial(Numero : INTEGER): LONGREAL; VAR Resultado: LONGREAL; BEGIN Resultado := LONG(1.0); WHILE Numero > 1 DO Resultado := Resultado * LONG(FLOAT(Numero)); DEC(Numero) END; RETURN Resultado; END Factorial;

BEGIN (*---- Inicializacin de variables ----*) eAproximada := LONG(1.0); n := 1; nDecimales := 0; (*---- Obtencin del error deseado ----*) WriteString("Error ? "); ReadLongReal(error); WriteLn; WriteLn; (*---- Clculo aproximado de e ----*) WHILE ((exp(LONG(1.0)) - eAproximada) >= error ) DO eAproximada := eAproximada + 1.0 / Factorial(n); INC(n) END; (*---- Calcula nmero de decimales del resultado *) WHILE error < LONG(1.0) DO nDecimales := nDecimales + 1; error := error * LONG(10.0) END; (*---- Presentacin del resultado ----*) WriteString ("Valor de e = "); WriteFixPt (eAproximada, nDecimales+2, nDecimales); END Eserie.

Anda mungkin juga menyukai