You are on page 1of 20

7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc.

Condicionales+PC2

BMA09O Algoritmos y Estructura de Datos I 


Página Principal Mis cursos L-BMA09O S06: Estruc. Condicionales+PC2

General S01: Lenguaje C S02: Tipo de Datos y Variables S03: Constantes, Operadores y Teclado

S04: Funciones Matemáticas Predefinidas S05: Estruc. Repetitivas+PC1 S06: Estruc. Condicionales+PC2

S07: Funciones definidas por usuario PARCIAL S09: Arreglos Unidimensionales

S10: Aplicaciones de Arreglos S11: Arreglo con Funciones+PC3 S12: Arreglos Bidimensionales

S13: Funciones con Arreglos Bidimensionales S14: Aplicaciones Arreglos Bidimensionales+PC4 S15: Cadenas

FINAL SUSTI

INTRODUCCIÓN

En la presente unidad aprenderemos acercar de las estructuras condicionales como if,


if-else y switch. Estas estructuras permiten darle mayor flexibilidad e inteligencia a
nuestros programas permitiendo "elegir" entre opciones.

Todo explicado mediante ejemplos didácticos. Al final de la unidad usted deberá


resolver una serie de ejercicios para verificar lo aprendido.

PROGRAMACIÓN SELECTIVA: ESTRUCTURAS CONDICIONALES

Todos los programas que hemos desarrollado han sido lineales, esto significa que empezaban por la primera
instrucción y finalizaba en la última instrucción. Pero resulta que muchas veces queremos que ciertas
instrucciones se ejecuten en función a ciertas condiciones. Para esto están las sentencia de control de flujo
o sentencias de condición.

Estas instrucciones permiten "elegir un camino" en nuestro programa e implementar algoritmos más
complejos.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 1/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Sentencia 'if ... else' en lenguaje C | | UPV

if

La palabra if significa si (condicional).

Tenemos un bloque de instrucciones que se ejecuta si la condición es verdadera.


Si la condición es falsa, no hace nada y pasa a la siguiente instrucción después del if.

Su formato es el siguiente:

if (condición){

   <bloque de instrucciones>

}
Cuando se cumple la condición entre paréntesis se ejecuta el bloque inmediatamente siguiente al if (bloque de
instrucciones).

Ejemplo 01F: Programa que solicita el ingreso por teclado de dos números enteros y los compara, indicando
si el primero es mayor, menor o igual que el segundo número ingresado.

#include <stdio.h>

main() {

   int num1,num2;

   printf ("Ingrese el primer numero entero: ");

   scanf ("%i", &num1);

   printf ("Ingrese el segundo numero entero: ");

   scanf ("%i", &num2);

   if (num1 > num2)

      {printf ("El numero %i es mayor que %i\n",num1,num2);}

   if (num1 < num2)

      {printf ("El numero %i es menor que %i\n",num1,num2);}

   if (num1 == num2)

      {printf ("El numero %i es igual que %i\n",num1,num2);}

   system("PAUSE");

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 2/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Ejemplo 02F: Programa que solicita el ingreso de dos opciones (tecla S o N) y displaya que opción hemos
elegido. Para la solución usaremos un variable tipo char:

#include <stdio.h>

main() {

   char opcion;

   do {

      printf("Presionar Si (S) o No (N): ");

      opcion = getch();

      printf("%c\n",opcion);

   } while (opcion!='S' && opcion!='N');

   if(opcion=='S')

      {printf("Usted a elegido Si");}

   if(opcion=='N')

      {printf("Usted a elegido No");}

   printf("\n");

   system("PAUSE");

Otra forma de solucionar el problema es usando una variable entera:



#include <stdio.h>

main() {

   int opcion;

   do {

      printf("Presionar Si (S) o No (N): ");

      opcion = getch();

      printf("%c\n",opcion);

   } while (opcion!=83 && opcion!=78);

   if(opcion==83)

      {printf("Usted a elegido Si");}

   if(opcion==78)

      {printf("Usted a elegido No");}

   printf("\n");

   system("PAUSE");

if - else

Tenemos un bloque de instrucciones que se ejecuta si la condición es verdadera y otro bloque de instrucciones
que se ejecuta si la condición es falsa.

El formato es el siguiente:

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 3/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

if ( condición ){

   <bloque que se ejecuta si se cumple la condición>

else{

   <bloque que se ejecuta si no se cumple la condición>

Ejemplo 03F: Programa que solicita el ingreso de un número entero e indica si es un número par o impar.

#include <stdio.h>

main() {

   int num;

   printf ("Ingrese un número entero: ");

   scanf ("%i", &num);

   if (num % 2 == 0) 

      {printf ("El numero %i es par.\n",num);}

   else 

      {printf ("El numero %i es impar.\n",num);}

   system("PAUSE");


Ejemplo 04F:  Programa  que lee tres números enteros: hora (H), minutos (M) y segundos (S)
respectivamente, y comprueba si la hora especificada es una hora válida. La hora se especifica en modo de 24
horas.

#include <stdio.h>

main() {

   int H,M,S;

   printf("Ingrese la hora: ");

   scanf("%i",&H);

   printf("Ingrese los minutos: ");

   scanf("%i",&M);

   printf("Ingrese los segundos: ");

   scanf("%i",&S);

   if(H>=0 && H<24 && M>=0 && M<60 && S>=0 && S<60) 

      printf("Hora correcta %i:%i:%i\n",H,M,S);

   else

      printf("Hora incorrecta\n");

   system("PAUSE");

Ejemplo 05F: Una variante al programa anterior es imprimir la hora bajo el formato HH:MM:SS. Para ello se
debe tener en cuenta cuando H, M o S ingresado es menor a 10.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 4/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main() {

   int H,M,S;

   printf("Ingrese la hora: ");

   scanf("%i",&H);

   printf("Ingrese los minutos: ");

   scanf("%i",&M);

   printf("Ingrese los segundos: ");

   scanf("%i",&S);

   if(H>=0 && H<24 && M>=0 && M<60 && S>=0 && S<60){

      if (H<10)
         printf("0%i:",H);

      else

         printf("%i:",H);

      if (M<10)

         printf("0%i:",M);

      else

         printf("%i:",M);

      if (S<10)

         printf("0%i\n",S);

      else

         printf("%i\n",S);

      }

   else

      printf("Hora incorrecta\n");

   system("PAUSE");


Ejemplo 06F:  Programa al cual se le ingresa un año y calcula si es bisiesto o no. Un año es bisiesto si
cumple lo siguiente: El año es divisible entre 400 o si es divisible entre 4, pero no entre 100. Esto lo podemos
expresar mediante el siguiente algoritmo:

En la solución empleamos un solo if para realizar las dos preguntas las cuales están "unidas" por el operador
OR.

Observar que para imprimir la ñ debemos emplear su correspondiente código ASCII: Alt-164

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 5/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main(){

   int anio;

   printf("Ingrese el a%co: ",164);

   scanf("%i",&anio);

   if(anio%400==0 || anio%4==0 && anio%100!=0)

      printf("El a%co es bisiesto\n",164);

   else

      printf("El a%co no es bisiesto\n",164);


   system("PAUSE");

Ejemplo 07F:  Programa que solicite el ingreso del lado de un cuadrado (número mayor o igual a cero) e
imprime la diagonal principal con asteriscos. Ejemplo: Cuadrado de lado 5:

#include <stdio.h>

main() {

   int lado,x,y;

   do {

      printf("Ingrese el lado del cuadrado (entero mayor o igual a cero): ");

      scanf( "%i", &lado);

   } while (lado<0);

   for(y=1;y<=lado;y++) {

      for(x=1;x<=lado;x++){

         if(y==x)

            printf("*");   //Imprime asterisco



         else

            printf(" ");   //Imprime espacio en blanco

      }

      printf("\n");

   }

   system("PAUSE");

Ejemplo 08F:  Programa que solicite el ingreso del lado de un cuadrado (número mayor o igual a cero) e
imprime la diagonal secundaria con asteriscos. Ejemplo: Cuadrado de lado 5:

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 6/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main() {

   int lado,x,y;

   do {

      printf("Ingrese el lado del cuadrado (entero mayor o igual a cero): ");

      scanf( "%i", &lado);

   } while (lado<0);

   for(y=1;y<=lado;y++) {

      for(x=1;x<=lado;x++){

         if(x+y==(lado+1))

            printf("*");   //Imprime asterisco

         else

            printf(" ");   //Imprime espacio en blanco

      }

      printf("\n");

   }

   system("PAUSE");

if else if

La instrucción if else if significa podemos colocar un if dentro de otros if y así sucesivamente. Esto se llama
anidamiento.

Ejemplo 09F: Programa al cual se le ingresan dos números enteros e indica si el primero es mayor, menor o
igual que el segundo.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 7/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main() {

   int num1,num2;

   printf ("Ingrese el primer numero: ");

   scanf ("%i", &num1);

   printf ("Ingrese el segundo numero: ");

   scanf ("%i", &num2);

   if (num1 > num2) 

      {printf ("El numero %i es mayor que %i\n",num1,num2);}

   else {
      if (num1 < num2) 

         {printf ("El numero %i es menor que %i\n",num1,num2);}

      else 

         {printf ("El numero %i es igual que %i\n",num1,num2);}

      }

   system("PAUSE");

Ejemplo 10F: Programa que solicita el ingreso de un número entero e indica si es menor a 10, si esta entre
10 y 100 o si es mayor o igual a 100.

#include <stdio.h>

main() {

   int a;

   printf( "Ingrese un numero: " );

   scanf( "%i", &a );

   if ( a<10 ) {

      printf ( "El numero ingresado es menor de 10\n" );

      }

   else {
      if ( a>10 && a<100 ){

         printf ( "El numero ingresado esta entre 10 y 100\n" );

         }

      else {

         if ( a>=100 ){

            printf( "El numero es mayor o igual a 100\n" );

            }

      }

   }

   printf( "Fin del programa\n" );

   system("PAUSE");

Ejemplo 11F: Programa al cual se le ingresa una letra y envía a pantalla un mensaje indicando si es un letra
mayúscula o minúscula.

#include <stdio.h>

main() {

   char letra;

   printf("Ingrese una letra: ");

   scanf("%c",&letra);

   if(('A'<= letra) && (letra <='Z'))

      printf("Es una letra mayuscula\n"); 

   else{

      if(('a'<= letra) && (letra <='z'))

         printf("Es una letra minuscula\n"); 

      else 

         printf("No es una letra\n");

      }

   system("PAUSE");

Modificamos el programa para incluir a la ñ y Ñ

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 8/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main() {

   unsigned char letra;

   printf("Ingrese una letra: ");

   scanf("%c",&letra);

   if((('A'<= letra) && (letra <='Z')) || (letra==165))

      printf("Es una letra mayuscula\n");

   else{

      if((('a'<= letra) && (letra <='z')) || (letra==164))

         printf("Es una letra minuscula\n");

      else

         printf("No es una letra\n");

   }

   system("PAUSE");

Ejemplo 12F:  Programa que determina el mayor de tres números enteros positivos previamente ingresados
por el teclado.


#include <stdio.h>

main() {

   int n1, n2, n3;

   do {

      printf("Ingrese primer numero entero mayor o igual a cero: ");

      scanf( "%i", &n1);

      } while (n1<0);

   do {

      printf("Ingrese segundo numero entero mayor o igual a cero: ");

      scanf( "%i", &n2);

      } while (n2<0);

   do {

      printf("Ingrese tercer numero entero mayor o igual a cero: ");

      scanf( "%i", &n3);

      } while (n3<0);

   if(n1 > n2)

      if(n1 > n3)

         printf("El mayor numero es: %i\n", n1);

      else

         printf("El mayor numero es: %i\n", n3);

   else if(n2 > n3)

            printf("El mayor numero es: %i\n", n2);

         else

            printf("El mayor numero es: %i\n", n3);

   system("PAUSE");

Ejemplo 13F: Programa que indica si un número entero mayor a 1 ingresado por teclado, es primo o no.

Para calcular si un número es primo o no se utiliza el concepto de divisiones sucesivas y contabilizar cuando
divisores existen.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 9/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

main() {

   int i,numero,divisor=0;

   do{

      printf("Ingrese un numero entero mayor que 1: ");

      scanf( "%i", &numero);


   }while (numero<2);

   printf("El numero se divide entre: ");

   for (i=2;i<numero;i++){

      if (numero%i==0){

         divisor++;

      }

      printf("%i,",i);

   }

   printf("\n");

   if(divisor==0)

      printf("El numero ingresado es primo\n");

   else

      printf("El numero ingresado no es primo\n");

   system("PAUSE");

El "problema" con el programa anterior es que si se encuentra un divisor, el for continúa hasta terminar. Como
podemos hacer que el for termine apenas encuentre un divisor?

#include <stdio.h>

main() {

   int i,numero,divisor=0;

   do{

      printf("Ingrese un numero entero mayor que 1: ");

      scanf( "%i", &numero);


   }while (numero<2);

   printf("El numero se divide entre: ");

   for (i=2;(i<numero)&&(divisor==0);i++){


      if (numero%i==0){

         divisor++;

      }

      printf("%i,",i);

   }

   printf("\n");

   if(divisor==0)

      printf("El numero ingresado es primo\n");

   else

      printf("El numero ingresado no es primo\n");

   system("PAUSE");

Ejemplo 14F: Programa al  cual se le ingresa un número entero positivo mayor a uno y displaya todos sus
divisores.

#include <stdio.h>

main() {

   int i,numero;

   do{

      printf("Ingrese un numero entero mayor que 1: ");

      scanf( "%i", &numero);


   }while (numero<2);

   for (i=1;i<=numero;i++){

      if (numero%i==0)

         printf("%i,",i);

   } 

   printf("\n");

   system("PAUSE");

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 10/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Ejemplo 15F:  Programa que imprime en pantalla todos los números primos existentes hasta un número
entero n, el cual ha sido ingresado por teclado (n debe ser mayor a 1). Problema tomado en el Examen Parcial
del semestre 2014-1

#include <stdio.h>

main() {

   int i,j,numero,divisor;

   do{

      printf("Ingrese un numero entero mayor que 1: ");

      scanf("%i", &numero);

   }while (numero<2);

   for(j=2;j<=numero;j++){

      divisor=0;
      for (i=2;i<j;i++){

         if (j%i==0)

            divisor++;

         } 

      if(divisor==0)

         printf("%i,",j);

   }

   printf("\n");

   system("PAUSE");

Ejemplo 16F: Programa que calcula las soluciones enteras para x, y,


z, que cumplan el “último teorema de Fermat” cuando n = 2:

El programa imprime los valores de x, y, z. Se esta considerando para


el cálculo de las soluciones que los valores de x e y van desde 1 hasta
100. (Problema tomado en la Examen Parcial del semestre 2015-1).

Como z debe ser un número entero qeu tenga raíz cuadrada exacta, 
entonces debe cumplir con los siguiente:

z = round (z)

#include <stdio.h>

#include <math.h>

#define NUM 100

#define EXP 2

main() {

   double z;

   int x,y;

   for(x=1;x<=NUM;x++){

      for(y=1;y<=NUM;y++){

         z=sqrt(pow(x,EXP)+pow(y,EXP));

         if (z==round(z)){

            printf ("%i \t %i \t %.0lf\n",x,y,z);

         }

   }

   }

   system("PAUSE");

Ejemplo 17F:  Halle todos los enteros positivos menores que 1000 tales que, el cubo de la suma de sus
dígitos es igual al cuadrado de dicho entero. Tener en cuenta que el CERO no es considerado ni positivo ni
negativo.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 11/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

#include <stdio.h>

#include <math.h>

main(){

   int i,j,k=0,uni,dec,cen;

   for(i=1;i<10000;i++){

      uni=i%10;

      dec=(i/10)%10;

      cen=(i/100);

      if(pow(uni+dec+cen,3)==pow(i,2))

         printf("%i, ",i); 

      }

   printf("\n"); 

   system("PAUSE");

Errores más comunes en sentencias condicionales en lenguaje C.© UPV

LABORATORIO 5: Práctica Dirigida

Estos primeros ejercicios trate de hacerlos por su cuenta y luego compare su solución
con las mostradas en el enlace inferior de cada pregunta.

La idea es que usted mejore sus "hábitos programativos".

Ejercicio 01F:  Elaborar un programa que solicite el ingreso del largo y ancho de un rectángulo y que
imprima asteriscos en los vértices. Los números ingresados deben ser mayores o iguales a cero, de no ser así
el programa debe solicitar nuevamente el ingreso.

Solución E01F

Ejercicio 02F: Elaborar un programa que solicite el ingreso del largo y ancho de un rectángulo y lo imprima
en pantalla (solo el borde) empleando el caracter asterisco. Los números ingresados deben ser mayores o
iguales a cero, de no ser así el programa debe solicitar nuevamente el ingreso (Problema tomado en el

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 12/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Examen Parcial del semestre 2013-2).

En el siguiente gráfico podemos observar como sería el rectángulo para los datos: largo = 8 y ancho = 4

Solución E02F

Ejercicio 03F:  Elaborar un programa que solicite el ingreso del valor del lado de un cuadrado e imprima
asteriscos según la secuencia mostrada. El número ingresado debe ser mayor a cero (Problema tomado en la
Examen Parcial del semestre 2016-3).

Solución E03F

Ejercicio 04F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando un triángulo invertido.

Solución E04F

Ejercicio 05F: Elaborar un programa que encuentre los denominados números perfectos, menores a 10000.
Un número perfecto es un número natural que es igual a la suma de sus divisores (sin considerar al número
mismo). (Problema tomado en la Examen Parcial del semestre 2015-2).

Ejemplo:

6=1+2+3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064

Solución E05F

Ejercicio 06F: Elaborar un programa que calcule que el valor de e elevado a la x. El programa debe solicitar
el ingreso de x (real positivo) y n (entero mayor a cero).

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 13/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Solución E06F

Ejercicio 07F: Elaborar un programa que solicite el ingreso de una letra mayúscula (A<=letra<=Z). Luego
genere en forma aleatoria 20 letras mayúsculas y las imprima en una fila. Finalmente imprima cuantas veces
se repite la letra ingresada.

Solución E07F

Ejercicio 08F: Elaborar un programa que calcule que números desde 1 a 100, tienen la mayor cantidad de
divisores.

Si hay varios números con el número máximo de divisores, estos deben ser impresos en pantalla.
Por cada número que se imprime, se debe imprimir la cantidad de divisores que tiene. 

Solución E08F

Ejercicio 09F:  En matemáticas, se conoce como Producto de Wallis una
expresión utilizada para representar el valor de PI que fue descubierta por John
Wallis en 1655 y que establece que:

Elaborar un programa el cual solicite el ingreso por teclado del número n (mayor
a cero) y calcule el valor de PI.

Solución E09F

Ejercicio 10F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando una cruz (Problema tomado en la Segunda Práctica Calificada 2017-1).

Solución E10F

Ejercicio 11F: Elaborar un programa que calcule que el valor del seno hiperbólico de x. El programa debe
solicitar el ingreso de x (real positivo) y n (entero mayor a cero).
https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 14/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Cálculo del seno hiperbólico: https://es.planetcalc.com/1116/

Solución E11F

Ejercicio 12F: Elaborar un programa que simule el resultado de lanzar tres dados (considerar las variables
dado1, dado2 y dado3) 10 veces.

Dichos valores deben ser impresos en pantalla junto con la suma de dichos valores.
El programa debe imprimir cuantas lanzadas obtuvieron un número primo como suma.

Solución E12F

Ejercicio 13F: Elaborar un programa que solicite el ingreso del lado de un cuadrado (mayor o igual a cero) e
imprima asteriscos formando un rombo.

Solución E13F

Ejercicio 14F: Elaborar un programa que imprima en pantalla todos los números primos de dos cifras, cuya
suma de dígitos sea múltiplo de 5.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 15/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Solución E14F

Ejercicio 15F: Elaborar un programa que solicite el ancho y largo (mayor o igual a cero) de una rectángulo
he imprima en pantalla lo siguiente:

Solución E15F

Ejercicio 16F:  Elaborar un programa que genere en forma aleatoria 20 letras mayúsculas (A<=letra<=Z) y
las imprima en una fila y adicionalmente que imprima cuantas vocales se generaron.

Solución E16F

Ejercicio 17F:  Elaborar un programa que simule el resultado de lanzar cuatro dados (considerar las
variables dado1, dado2, dado3 y dato4) 10 veces.

Dichos valores deben ser impresos en pantalla junto con la suma de dichos valores. 
El programa debe imprimir el valor máximo y mínimo de las sumas obtenidas.

Solución E17F

Ejercicio 18F: Elaborar un programa que calcule que el valor del seno hiperbólico de x. El programa debe
solicitar el ingreso de x (real positivo) y n (entero mayor a cero).

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 16/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Solución E18F

Pregunta 19F: Elaborar un programa que encuentre "números amigos" considerando que deben ser
números enteros. Ejemplo: Los pitagóricos ya habían observado una rara relación entre los números 220 y
284.

Los divisores de 220 son(sin incluir el mismo número): 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 y 110
Los de 284 son: 1, 2, 4, 71 y 142.
En apariencia no tiene mucho parecido, salvo por este curioso hecho:

Si sumamos todos los divisores de 220: 


1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284,
si sumamos los de 284: 
1 + 2 + 4 + 71 + 142 = 220
La suma de los divisores de un número nos da el otro.

Los números primos menores a 10000 son:

220, 284
1184, 1210
2620, 2924
5020, 5564 
6232, 6368

PDF Listado de números amigos

Ejercicio 20F:  Elaborar un programa que utilizando la aproximación indicada en el manuscrito de


Bakhshali, calcule la raíz cuadrada de un número. El programa solo debe solicitar el ingreso por teclado del
número al cual se quiere calcular la raíz cuadrada (x).

Si queremos calcular   con este método lo primero que hacemos es asignarle el número cuadrado
perfecto cuyo cuadrado se acerque más a 10.5, ese número va a ser 3, ya que 3^2 da como resultado 9 y se
acerca más que 4^2, que da 16:

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 17/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Ejercicio 21F: Elaborar un programa que haciendo uso de la siguiente ecuación:

1000 = a2+b2+c2+d2

Y asumiendo que a, b, c, d son números enteros mayores o iguales a cero, calcule e imprima:

Todas las soluciones.


Cuantas soluciones en total tiene la ecuación.

SEGUNDA PRÁCTICA CALIFICADA

La práctica calificada esta formada por:

Problema 1 de 25 minutos (5 puntos).


Problema 2 de 30 minutos (7 puntos).
Problema 3 de 35 minutos (8 puntos).

La prueba deben rendirla con la cámara encendida en todo momento.

Nombre cada programa son las iniciales de su nombre seguido del número de la pregunta. Ejemplo: JGBB1,
JGBB2, etc.
Solo debe enviar al aulavirtual, el archivo *.c de cada programa.
No debe comprimir el archivo.
La sesión de Zoom no debe tener habilitado la opción de "Fondo de Pantalla".

Cualquiera de los programas enviados que tenga errores de compilación se le evaluará con nota CERO.

P01: Elaborar un programa que calcula cuantos números primos de 3 cifras son capicúas. El programa debe
imprimir en una fila todos los números que cumplen con la condición, separados por comas. En una siguiente
linea imprimir cuantos números son.

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 18/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

PC2-01

P02: Elaborar un programa que calcule cuántos números primos de cuatro dígitos cumplen con la condición
de que la suma de sus dígitos sea un cuadrado perfecto. El programa imprime en una fila todos los números
primos que cumplen la condición y en una segunda fila el número total.

PC2-02

P03:  Elaborar un programa que solicite el ingreso por teclado el valor del lado de un cuadrado "T" (valor
entero mayor o igual a 2) y el valor de "N" (número entero mayor a cero). Con esos dos valores debe imprimir
en pantalla la siguiente secuencia de asteriscos.

Ejemplo 1: Para "T" igual a 7. Observar que "N" no puede ser 4 porque los asteriscos se superponen.

Ejemplo 2: Para "T" igual a 8. Observar que "N" puede llegar a ser 4.

PC2-03

◄S05: Estruc. Repetitivas+PC1 S07: Funciones definidas por usuario►

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 19/20
7/1/22 22:49 Curso: BMA09O Algoritmos y Estructura de Datos I, Tema: S06: Estruc. Condicionales+PC2

Mantente en contacto
UNI VIRTUAL

http://univirtual.uni.pe

univirtual@uni.edu.pe




 Descargar la app para dispositivos móviles

https://univirtual.uni.pe/course/view.php?id=5350&section=6#tabs-tree-start 20/20

You might also like