Ejercicios Resueltos
Fundamentos de Programación
Primer Semestre 2010
Profesoras: Eliana Providel - Patricia Trejo
Ayudante: Bernarda Ramos (b.ramos@informaticauv.com)
Valparaíso, 29 de abril de 2010.
1.
Estructuras selectivas
Dado los siguientes enunciados escriba el D.F.D y pseudo-código correspon-diente.
1. Realice un programa que permita determinar si un número es múltiplo de 9.
Listing 1: Múltiplo de Nueve D e f i n i c i ó n de V a r i a b l e s {x , v a r i a b l e de t i p o e n t e r o } I n i c i o E s c r i b i r " I n g r e s e un número " L e e r x ; S i ( x %9)=0 E n t o n c e s E s c r i b i r " El número i n g r e s a d o e s m ú l t i p l o de 9" S i n o E s c r i b i r " El número i n g r e s a d o no e s m ú l t i p l o de 9" F i n S i Fin
2. Realice un programa que permita determinar si dos números son pares o no, si es que son pares (ambos), determine cual de ellos es el mayor.
Listing 2: Números pares D e f i n i c i ó n de V a r i a b l e s { n1 y n2 son v a r i a b l e s de t i p o e n t e r o } I n i c i o E s c r i b i r " I n g r e s e dos números " L e e r n1 , n2 ; S i ( ( n1 %2)=0) & ( ( n2 %2)=0) E n t o n c e s E s c r i b i r "Ambos números son p a r e s " S i ( n1>n2 ) E n t o n c e s E s c r i b i r " e l mayor e s : " , n1 S i n o S i n1< >n2 E n t o n c e s E s c r i b i r " e l mayor e s : " , n2 S i n o
E s c r i b i r " Son dos números i g u a l e s " F i n S i
F i n S i S i n o
E s c r i b i r " Alguno o ambos números no son p a r e s " F i n S i
3. Realice un programa que permita transformar una determinada cantidad de horas en segundos, además si la cantidad de horas es superior a 24 debe indicar a cuantos días corresponde dicha cantidad de horas. Utilice variables de tipo entero.
Listing 3: Transformando horas D e f i n i c i ó n de V a r i a b l e s { s e g , d i a s , h o r a s , son v a r i a b l e s de t i p o e n t e r o } { s e g , c a n t i d a d de s e g u n d o s } { d i a s , e q u i v a l e n t e en d i a s } { h o r a s , c a n t i d a d de h o r a s i n g r e s a d a s } I n i c i o E s c r i b i r " I n g r e s e l a c a n t i d a d de h o r a s " L e e r h o r a s ; S i h o r a s >= 24 E n t o n c e s d i a s <−h o r a s /24 s e g <−h o r a s ∗3600 E s c r i b i r " Los d i a s son : " , d i a s E s c r i b i r "y l o s s e g u n d o s c o r r e s p o n d e a : " , s e g S i n o s e g <−h o r a s ∗3600 E s c r i b i r "La c a n t i d a d de s e g u n d o s e s : " , s e g F i n S i Fin
4. En un centro comercial se realizar descuentos a los clientes que pagan con efectivo y con tarjeta de crédito, mientras que a las personas que cancelan con cheque no reciben dicho beneficio. Este descuento se calcula de acuerdo al total de la compra efectuada, según el cuadro 1:
Valor compra Efectivo Tarjeta de crédito > 25.000 ≤ 50.000 3 % 1.5 % > 50.000 ≤ 100.000 4 % 2.2 % > 100.000 6 % 4.5 %
Cuadro 1: Porcentaje descuento
Listing 4: Descuento en centro comercial D e f i n i c i ó n de V a r i a b l e s { formaPago , v a r i a b l e t i p o e n t e r o , r e p r e s e n t a l a forma de pago ( 1 : e f e c t i v o , 2 : t a r j e t a ) } { valorC , v a r i a b l e t i p o e n t e r o , r e p r e s e n t a e l v a l o r t o t a l de l a compra } { d e s c t o , v a r i a b l e de t i p o r e a l , r e p r e s e n t a e l d e s c u e n t o } { v a l o r F i n a l , v a r i a b l e t i p o r e a l , r e p r e s e n t a e l v a l o r f i n a l que p a g a r á e l c l i e n t e } I n i c i o R e p e t i r E s c r i b i r " I n g r e s e v a l o r compra " ; L e e r valorCompra ;
Hasta Que valorCompra >0
E s c r i b i r " I n g r e s e l a forma de pago " ; L e e r formaPago ;
v a l o r F i n a l <−0 d e s c t o <−0
Segun formaPago Hacer 1 :
S i ( ( valorC >25000) & ( valorC <=50000)) E n t o n c e s d e s c t o <−v a l o r C ∗ 0 . 0 3 S i n o S i ( ( v a l o r C > 5 0 0 0 0 ) & ( valorC<= 1 0 0 0 0 0 ) ) E n t o n c e s d e s c t o <−v a l o r C ∗ 0 . 0 4 S i n o S i ( valorC >100000) E n t o n c e s d e s c t o <−v a l o r C ∗ 0 . 0 6 F i n S i F i n S i F i n S i 2 :
d e s c t o <−v a l o r C ∗ 0 . 0 1 5 S i n o
S i ( ( valorC >50000) & ( valorC <=100000)) E n t o n c e s d e s c t o <−v a l o r C ∗ 0 . 0 2 2 S i n o S i ( valorC >100000) E n t o n c e s d e s c t o <−v a l o r C ∗ 0 . 0 4 5 F i n S i F i n S i F i n S i De Otro Modo : E s c r i b i r "Forma de pago no e s v á l i d a " FinSegun v a l o r F i n a l <− v a l o r C − d e s c t o E s c r i b i r " El v a l o r a p a g a r e s : " , v a l o r F i n a l Fin
5. Diseñe una pequeña calculadora que, al digitar un código realice una ope-ración específica: si el código es 1, la opeope-ración es la suma, si es 2, resta, 3 multiplicación y 4 división. Si el usuario ha escrito otro código inválido, mostrar un mensaje de error. Debe pedir dos números para realizar la operación.
Listing 5: Pequeña calculadora D e f i n i c i ó n de V a r i a b l e s {n1 , n2 , v a r i a b l e de t i p o e n t e r o , r e p r e s e n t a n l o s números i n g r e s a d o s } { o p c i o n , v a r i a b l e de t i p o e n t e r o , r e p r e s e n t a e l t i p o de o p e r a c i ó n a r e a l i z a r } { r e s u l t a d o , v a r i a b l e de t i p o r e a l , r e p r e s e n t a e l r e s u l t a d o de l a o p e r a c i ó n } I n i c i o E s c r i b i r " I n g r e s e e l t i p o de O p e r a c i ó n " E s c r i b i r " 1 . Suma , 2 . Resta , 3 . M ú l t i p l i c a c i ó n , 4 . D i v i s i ó n " L e e r o p c i o n E s c r i b i r " I n g r e s e dos números " ; L e e r n1 , n2 r e s u l t a d o <−0 Segun o p e r a c i o n Hacer 1 : r e s u l t a d o <− n1+n2 2 : r e s u l t a d o <− n1−n2 3 : r e s u l t a d o <− n1 ∗ n2 4 : r e s u l t a d o <− n1 / n2
De Otro Modo :
E s c r i b i r " El t i p o de o p e r a c i ó n no e s v á l i d o " FinSegun
E s c r i b i r " El v a l o r e s : " , r e s u l t a d o
6. Se desea calcular el valor de la mensualidad de un trabajador de acuerdo a las horas trabajadas y a la clase a la que pertenece, considere el cuadro 2:
Clase Valor hora 1 1.000 2 2.300 3 3.500 4 5.000
Cuadro 2: Relación clase - valor hora.
Nota: Considere que el trabajador trabaja 30 días y que trabaja todos los días la misma cantidad de horas.
Listing 6: Mensualidad trabajador D e f i n i c i ó n de v a r i a b l e s { h o r a s , v a r i a b l e de t i p o e n t e r o , r e p r e s e n t a l a c a n t i d a d de h o r a s t r a b a j a d a s d i a r i a m e n t e } { c l a s e , v a r i a b l e t i p o e n t e r o , r e p r e s e n t a l a c l a s e a l a que p e r t e n e c e e l t r a b a j a d o r } { s u e l d o , v a r i a b l e de t i p o e n t e r o , r e p r e s e n t a e l s u e l d o d e l t r a b a j a d o r } I n i c i o R e p e t i r E s c r i b i r " I n g r e s e h o r a s t r a b a j a d a s d i a r i a s " L e e r h o r a s Hasta Que ( h o r a s >0) E s c r i b i r " I n g r e s e l a c l a s e " ; L e e r c l a s e s u e l d o <−0 Segun c l a s e Hacer 1 : s u e l d o <− 30∗ h o r a s ∗1000 2 : s u e l d o <− 30∗ h o r a s ∗2300 3 : s u e l d o <− 30∗ h o r a s ∗3500 4 : s u e l d o <− 30∗ h o r a s ∗5000 De Otro Modo : E s c r i b i r " El t i p o de c l a s e no e s v a l i d o " FinSegun E s c r i b i r " El s u e l d o d e l t r a b a j a d o r e s : " , s u e l d o Fin
2.
Estructuras repetitivas
1. Muestre la tabla de múltiplicar de un número mientras el usuario así lo confirme. Nota: Considere que el usuario puede detener la impresión de una tabla de multiplicar y luego quiza quiera ver otra o simplemente salir del programa.
Listing 7: Tabla de múltiplicar {n , v a r i a b l e de t i p o e n t e r o , r e p r e s e n t a e l número d e l c u a l s e c a l c u l a l a t a b l a de m u l t i p l i c a c i ó n } { c o n t i n u a r , v a r i a b l e de t i p o e n t e r o } { s a l i r , v a r i a b l e de t i p o e n t e r o } I n i c i o R e p e t i r R e p e t i r E s c r i b i r " I n g r e s e e l número d e l c u a l q u i e r e l a t a b l a de m ú l t i p l i c a r " L e e r n Hasta Que ( n>0) i <−1 c o n t i n u a r <−1 E s c r i b i r " Tabla de m u l t i p l i c a r de : " , n R e p e t i r E s c r i b i r n∗ i E s c r i b i r " Desea c o n t i n u a r , V a l o r d i s t i n t o de 0 : S i , 0 : No" L e e r c o n t i n u a r i <−i +1 Hasta Que ( c o n t i n u a r =0) E s c r i b i r " Desea s a l i r ? V a l o r d i s t i n t o de 0 : S i 0 : No" L e e r s a l i r Hasta Que ( s a l i r =0) Fin
2. Escribir un programa que permita calcular la suma de los cuadrados de los n primeros números naturales: 1 + 22+ 32+ ... + n2. Donde n es un número ingresado por el usuario.
Listing 8: Suma de cuadrados D e f i n i c i ó n de v a r i a b l e s {n , i , suma , v a r i a b l e de t i p o e n t e r o } {suma , r e p r e s e n t a e l v a l o r de l a s u m a t o r i a } I n i c i o R e p e t i r E s c r i b i r " I n g r e s e un número " L e e r n
Hasta Que ( n>0) i <−1 suma<−0 R e p e t i r suma<−suma+( i ∗ i ) i <−i +1 Hasta Que ( i >n ) E s c r i b i r "La s u m a t o r i a h a s t a e l no: " , n , " e s " , suma Fin
3. Realizar un programa que permita la suma de los números enteros com-prendidos entre n y m (excluyendo a ambos), si m >n. Los números n y m son ingresados por el usuario.
Listing 9: Suma entre un rango de números D e f i n i c i ó n de v a r i a b l e s {n , m, y suma , v a r i a b l e s de t i p o e n t e r o } {suma , r e p r e s e n t a e l v a l o r de l a s u m a t o r i a } I n i c i o R e p e t i r E s c r i b i r " I n g r e s e dos números " L e e r n ,m
Hasta Que ( ( n>0) & (m>0)) S i m>n E n t o n c e s suma<−0 n<−n+1 R e p e t i r suma<−suma + n n<−n+1 Hasta Que ( n=m) E s c r i b i r " El v a l o r de l a suma e s : " , suma S i n o E s c r i b i r "No cumplen l a c o n d i c i ó n " F i n S i Fin
4. Escribir un programa que calcule el cuadrado de un número haciendo sólo sumas. Ayuda: el cuadrado de un número n es la suma de los n primeros números impares. Ejemplo 32= 1 + 3 + 5 = 9.
Listing 10: Cuadrado de un número a partir de sumas D e f i n i c i ó n de v a r i a b l e s {n , i , j , suma , v a r i a b l e s de t i p o e n t e r o } { j , r e p r e s e n t a l a c a n t i d a d de números sumados cuadrado , r e p r e s e n t a e l c ua dr ad o d e l número i n g r e s a d o } I n i c i o R e p e t i r E s c r i b i r " I n g r e s e un no p a r a c a l c u l a r su c u ad ra do "
L e e r n Hasta Que ( n>0) i <−1 j <−1 cuadrado <−0 M i e n t r a s j<=n Hacer S i ( ( i %2)<>0) E n t o n c e s cuadrado<−c ua dr ad o+i j <−j +1 S i n o E s c r i b i r " El no " , i , " e s par po r e l l o no s e suma" F i n S i i <−i +1 F i n M i e n t r a s E s c r i b i r " El cu ad r ad o de " , n , " e s " , cu a dr ad o Fin
5. De una secuencia de cien números ingresados por el usuario identificar el valor máximo y mínimo. Además calcule el promedio de los valores ingresados.
Listing 11: Secuencia de 100 números D e f i n i c i ó n de v a r i a b l e s
{ i , mayor , menor , suma , v a r i a b l e s de t i p o e n t e r o } { promedio , v a r i a b l e de t i p o r e a l } I n i c i o i <−1 mayor<− −1000 menor<− 1000 suma<−0 M i e n t r a s ( i <=100) Hacer E s c r i b i r " I n g r e s e un número " L e e r n suma<−suma+n S i n>mayor E n t o n c e s mayor<−n F i n S i S i n<menor E n t o n c e s menor<−n F i n S i i <−i +1 F i n M i e n t r a s promedio<−suma /100 E s c r i b i r " El no mayor de l a s e c u e n c i a e s : " , mayor E s c r i b i r " El no menor de l a s e c u e n c i a e s : " , menor E s c r i b i r " El promedio de l a s e c u e n c i a e s : " , promedio Fin