Está en la página 1de 15

EJERCICIOS CON CICLOS, CADENAS

De la clase anterior, se pidieron unos ejercicios.

Ejercicios:

1. Se pide hacer un programa en C, tal que permita leer una cadena de caracteres(string) de hasta 20 posiciones
e imprimir la cadena al revés: Ejemplo: “casa”, deberá imprimirse “asac”.

Una posible solución:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
INICIO char cadena[20]; int i,L;
Imprimir “Introduce la cadena de caracteres”; printf(“Introduce la cadena: ”);
Leer cadena scanf(“%s”, cadena);
L ß longitudEnCaracteres(cadena) L=strlen(cadena);
Para i=L; hasta i>= 0; i = i-1 for(i = L; i>= 0;i = i-1 )
Imprima cadena[i] printf(“%c”, cadena[i]);
Proximo i
system(“PAUSE”)

FIN }

Otra posible solución en C.


#include <stdio.h>
void main (void)
{
char c, palabra[21];
int i;
printf("Teclee una palabra de menos de 20 letras:\n");
scanf("%s", palabra);
i = 0;
while(palabra[i++] != '\0')
;
printf("%s tiene %d letras.\n", palabra, i);
printf("%s escrita al revés es: ", palabra);
while (i >= 0)
printf("%c", palabra[i--]);
}

Comentario: La forma de almacenar el array leyéndolo del teclado es mediante la función scanf(). Luego,
mediante un bucle while se determina el número de letras. La forma de chequear la condición de final del bucle
es por reconocimiento del carácter \0 que tienen todas las cadenas de caracteres al final.
2. Se pide hacer un programa en C, tal que permita leer una cadena de caracteres(string) de hasta 20 posiciones
e imprimir cuantas vocales tiene.

Una posible solución:


INICIO
Leer cadena
L ß longitudEnCaracteres(cadena)
Contadorvocales ß 0
Para i=L; hasta i>= 0; i = i-1
letra ß cadena[i]
Si( letra =”a” or letra=”e” or letra=”i” or letra=”o” or letra=”u”)
Contadorvocales ß Contadorvocales+1
Fin-si
Proximo i
Imprima Contadorvocales
FIN

La anterior solución, no tiene en cuenta las vocales en mayúsculas “A”, “E”, “I”, “O”, “U”. Construir una nueva
solución que las tenga en cuenta.
Ejercicio: Se dice que un rey aburrido porque no tenia guerras, llamo a un inventor para que le hiciera un juego
de guerra. De esta petición nació el conocido juego del ajedrez. El Rey después de utilizar el juego, se emociono
mucho y le dijo al inventor que le dijera como pagarle. El inventor le dijo al Rey, mirando el tablero de ajedrez,
que es de 8x8 cuadros, por favor coloque en el primer cuadro un grano de trigo de la cosecha del reino, en el
segundo cuadro el doble del anterior y así sucesivamente hasta completar los 64 cuadros.

Se pide construir un algoritmo tal que muestre para cada cuadro cuantos granos debió el Rey colocar. Así:

Cuadro Granos de trigo


1 1
2 2
3 4
4 8
5 16
6 32



64

Una posible solución:


INICIO

ContadorGranosTrigo ß 1

Imprima “Cuadro Granos de trigo”

Para i = 1 ; hasta i <= 64 ; i = i + 1

Imprima i , “ “ , ContadorGranosTrigo

ContadorGranosTrigo ß ContadorGranosTrigo * 2

Proximo i

FIN

Ejercicio: Llevar este programa en pseudocodigo a lenguaje C


ESTRUCTURA CONDICIONAL switch - Según (Caso) Hacer.
Esta estructura no esta disponible para todos los lenguajes, sin embargo para el lenguaje C, se tiene la siguiente
sintaxis:

switch (<variable>)
{
case 1: // código que se ejecuta si elige la opción 1
instrucción 1;
instrucción 2;
instrucción…. n
break;

case 2: // código que se ejecuta si elige la opción 2


instrucción 1;
instrucción 2;
instrucción…. n
break;
...
default: //si has elegido un valor diferente a <variable>
instrucción 1;
instrucción 2;
instrucción…. n
}
Ejercicio: Crear el pseudocódigo y diagrama de flujo para un programa que pida al usuario un número de día y
un número de mes, evalúe si la entrada es correcta y en caso de que así sea calcule el día del año que es,
considerando un año no bisiesto.

SOLUCIÓN

1. Objetivos: Determinar qué día del año es un día definido por el número de día y número de mes.

2. Condicionantes: Año bisiesto o no bisiesto. Conteo a partir del cero (¿Existe día cero?) o del uno. Viabilidad
del dato de partida (p. ej. un número de mes igual a 15 no es viable).

3. Datos de partida: Número del día y número del mes.

4. Método o estrategia de resolución: Un problema puede tener distintas vías para ser resuelto. Vamos a enfocarlo
hacia una resolución usando la instrucción Según (Caso) Hacer.

En primer lugar y como variantes globales contemplaremos dos posibilidades: datos correctos o datos incorrectos.
Se considerarán datos correctos aquellos en los que el número de día esté comprendido entre 1 y 31 y el número
de mes entre 1 y 12. Se podría afinar más restringiendo mes a mes las posibilidades (p. ej. en el mes de febrero
no admitir un número de día que fuera 30, ya que ese valor es inviable), cosa que no haremos para simplificar el
ejercicio.

Por otro lado, para el cálculo del día del año se considerarán 12 casos posibles, que son los doce meses del año.
Para cada mes, se calculará el día del año como el día del mes correspondiente más el total de días acumulados
correspondientes a los meses anteriores. Por ejemplo: el día del año que es el día 15 del mes 2 (15 de febrero) se
calcula como 15 + 31 siendo 31 el acumulado de días de los meses anteriores.

5. Resultados a obtener.: Día del año expresado como un valor comprendido entre 1 y 365.
Pseudocódigo:
1 Inicio [Cálculo del día del año ejemplo aprenderaprogramar.com]
2 Mostrar “Introduzca el número del día y número del mes”
3 Pedir NDia, Nmes
4 Si Ndia>= 1 y Ndia <= 31 y Nmes >= 1 y Nmes <= 12 Entonces
Según Nmes Hacer
Caso, = 1
DDA = NDia [DDA es día del año]
Caso, = 2
DDA = NDia + 31
Caso, = 3
DDA = NDia + 31 + 28
Caso, = 4
DDA = NDia + 31 + 28 + 31
Caso, = 5
DDA = NDia + 120
Caso, = 6
DDA = NDia + 151
Caso, = 7
DDA = NDia + 181
Caso, = 8
DDA = NDia + 212
Caso, = 9
DDA = NDia + 243
Caso, = 10
DDA = NDia + 273
Caso, = 11
DDA = NDia + 304
Caso, = 12
DDA = NDia + 334
FinSegún
Mostrar “El ”, NDia, “del ”, Nmes, “es el día ”, DDA, “del año”
SiNo
Mostrar “Datos proporcionados no válidos”
FinSi
5 Fin
Esta “sentencia” sirve para crear muchas condiciones de igualdad. Es útil por ejemplo para la creación de un
menú. Imagínese que tenemos un menú con cuatro (4) opciones. Púes con el switch podemos hacer que
dependiendo de la opción que elijas se ejecute un código u otro.

Y así con todas las opciones que queramos introducir. Si el usuario no elige una opción del 1 al 4, entonces se
podría ejecutar otro código diferente; lo haremos a través de un "default" que se pondrá al final de todas las
opciones, como vamos a ver en el ejemplo práctico de C.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int num;

printf("Elige un numero del 1 al 4: ");


scanf("%i", &num);

switch(num)
{
case 1: //Si has elegido el 1
printf("num es igual a 1. \n");
break;
case 2: //Si has elegido el 2
printf("num es igual a 2. \n" );
break;
case 3: //Si has elegido el 3
printf("num es igual a 3. \n" );
break;
case 4: //Si has elegido el 4
printf("num es igual a 4. \n" );
break;
//AsÌ con todos los casos que queramos...
default: //Si has elegido otro numero distinto
printf("No elegiste un numero del 1 al 4. \n" );
}

system("PAUSE");
}

Es necesario poner el "break" después de cada "case", ya que esto hará que una vez se ejecute el código que hay
en ese "case" el programa se salga del switch, saltándose el resto de código que tenga por debajo del "break".

Lo que hacemos es crear la variable "num", pedir al usuario que introduzca un número y lo asignamos a la variable
"num". Luego switch comprueba que número ha sido el introducido por el usuario, y dependiendo del número,
nos muestra una cosa u otra por pantalla.

Este tipo de sentencias solo vale para igualdades, es decir, no podemos poner en un case: num < 5.

Realmente case 1, significa: si num es igual a 1... y así con todas las opciones.
EJEMPLOS

Ejemplo de uso de la instrucción “switch” en C. Programa que lee dos números y una operación y realiza la
operación entre esos números.

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int A,B, Resultado;
char operador;
printf( "Introduzca un numero:");
scanf(“%i”, &A);
printf( "\n Introduzca otro numero:");
scanf(“%i”, &B);
printf("\n Introduzca un operador (+,-,*,/):");
scanf(“%c”, &operador);
Resultado = 0;
switch (operador)
{
case '-' : Resultado = A - B;
break;
case '+' : Resultado = A + B;
break;
case '*' : Resultado = A * B;
break;
case '/' : Resultado = A / B; //suponemos B!=0
break;
default : printf(“\n”, "Operador no valido");
}
printf("El resultado es: ");
printf("%i", Resultado);
system("pause");
}
Problema 1: Diseñe un algoritmo que, dado un número real que entra como dato, nos indique si está contenido
dentro de los límites predeterminados. El límite inferior es de 100 y el superior de 200.

Restricciones: Uso de las estructuras de selección if-then-else.


Problema 2: Programe un algoritmo que, dados dos números enteros que entran como datos, indique si uno es
divisor del otro.
Restricciones: Uso de las estructuras de selección if-then-else.
Problema 3: Un triangulo rectángulo puede tener lados que sean todos enteros. El conjunto de tres valores enteros
para los lados de un triángulo rectángulo se conoce como una terna pitagórica. Estos tres lados deben satisfacer
la relación de que la suma de los cuadrados de dos lados es igual al cuadrado de la hipotenusa.

Encuentre todas las ternas de Pitágoras para el cateto opuesto, cateto adyacente e hipotenusa, todos ellos no
mayores de 500.

Restricciones: Uso de las estructuras de selección if-then-else y de estructuras repetitivas.


x
Problema 4: Escriba un programa que calcule el valor de e . Recuerde que dicha constante matemática se calcula
de la siguiente forma:

Y el factorial de todo número, se obtiene así:

N! = N * (N-1) * (N-2) * (N-3) *…1


Ademas: 0! = 1

Restricciones: Uso de las estructuras de selección if-then-else y de estructuras repetitivas.

Ejercicios propuestos

Problema 1: Escribir un programa que, dado un número real cualquiera, encuentre su valor absoluto. El valor
absoluto de un número x es igual a x si x > 0, y a -x si x es menor o igual a 0. Por ejemplo, el valor absoluto de
0.5 es 0.5, valor absoluto de -3 es 3.

Restricciones: Debe utilizar una estructura de control si-entonces-sino.

Problema 2: En un videoclub se ofrece la promoción de llevarse tres películas por el precio de las dos más
baratas. Haga un programa que, dados los tres precios de las películas, determine la cantidad a pagar.

Restricciones: Debe utilizar una estructura de control si-entonces-sino.


Problema 3: Escriba un programa que reciba cuatro calificaciones de un estudiante e imprima el promedio y la
máxima y la mínima calificación.
Restricciones: Debe utilizar estructuras de selectivas e iterativas.

Problema 4: Considere siguiente proceso repetitivo para un número entero dado: si el número es 1, el proceso
termina. De lo contrario, si es par se divide entre 2, y si es impar se multiplica por 3 y se le suma 1. Si empezamos
con 6, por ejemplo, obtendremos la sucesión de números 6, 3, 10, 5, 16, 8, 4, 2, 1. La conjetura de Collatz dice
que, a partir de cualquier número inicial, la sucesión obtenida siempre termina en 1.

Escriba un programa que permita verificar la conjetura de Collatz para cualquier entero dado, y que imprima la
secuencia correspondiente.
Restricciones: Debe utilizar estructuras de selectivas e iterativas.

También podría gustarte