Está en la página 1de 17

Informática

Escuela de Ingenierías Marina, Náutica y Radioelectrónica


Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

Sentencia while

while (condición)
SentenciaR o bloque_de_sentenciasR

La sentenciaR o bloque de sentenciasR se repiten mientras la condición se cumpla.


Se ejecutan un número determinado de veces.
Para construir el bucle:
- Sentencias a repetir: ¿qué acciones se realizan varias veces?
- Determinar la condición ¿Cuándo se ejecutan las acciones que se repiten? Mientras…
- Comprobar que alguna sentencia de las que se repiten actualiza la condición del
bucle; y antes del bucle existen sentencias de inicialización que permitan que la
condición del bucle tome un valor.
1. Programa Nasteriscos. Escriba un programa que escriba en pantalla un número N
indicado por el usuario de *.
a. Análisis: Hay que escribir (“*”) N veces. Tendré que escribir (“*”). Contar lo
escrito. Comprobar cuantas veces se ha escrito “*” si no se ha escrito N veces
Constan de tres
vuelvo partes: y contar. Cuando se haya escrito N veces. Se acaba.
a escribir
1.- Sentencias iniciales,
Hay sentencias repetitivas controladas por una condición, es decir hay que
2.- condición
planteary,un bucle:
3.- sentencias quebucle:
Estudio del se repiten que incluyen una actualización.
Sentencias iniciales
Una variable de control del bucle interviene
- Las sentencias a repetir son: en las tres
while partes.
(condición)
Escribir “*” { sentencias a repetir;
Contar que se ha escrito “*” actualización de la condición;
- La condición del bucle será: _ }
numero de * escritos sea < N _ _
- Comprobar que se actualiza la condición del bucle dentro del bucle. Una
sentencia tiene que contar que se ha escrito “*” contador = contador + 1;.
- Plantear qué sentencias de inicialización hay que poner para que entre en el
bucle. que no se ha contado ninguna escritura, es decir _ contador= 0 .
b. Algoritmo Pasos a dar:
Leer (N);
contador =0; /* Inicializar el contador */
mientras (contador < N) /*mientras el número de * escritos sea < N */
escribir ( “*”);
contador= contador +1 ; /* Contar que se ha escrito un “*” mas */

Pág 1
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

c. Codificación Bucles controlados por contador: Se


Solucion 1 ejecutan un número determinado de veces.
int contador, n; Interviene una variable que cuenta cuántas
printf ("Número"); veces se ejecuta el bucle. (Se puede contar
scanf ("%d", &n); ascendentemente o descendentemente.)
contador = 0; Si contamos ascendentemente:
while (contador<n) { - La condición (contador< ValorLimite)
printf ("*" ); - La actualización es entontes una sentencia
contador = contador +1; del tipo contador = contador +1;
} /* hay dos sentencias */ - En la inicialización también suele
printf ("\n"); intervenir la variable contador.
Solucion 2
int n; Si contamos descendentemente la
printf ("Número"); decreciente condición será
scanf ("%d", &n); (contador>ValorLimite), y la actualización
while (n>0) { será decreciente contador= contador-1;
printf ("*" ); Son ideales para utilizar el bucle for
n= n-1;
} for (inicializa; condición; actualiza)
printf ("\n"); sentenciaR o bloques_de_sentenciaR

d. Realice un juego de ensayo para cada una de las soluciones. Suponga que se
introduce un 5.
SOLUCIÓN 1.
N Cont cont<n Explicación Pantalla
5 0 SI Se escribe el asterisco *
Se incrementa contador
1 Vuelvo a la condición
SI Se escribe el asterisco *
Se incrementa contador
2 Vuelvo a la condición
SI Se escribe el asterisco *
Se incrementa contador
3 Vuelvo a la condición
SI Se escribe el asterisco *
Se incrementa contador
4 Vuelvo a la condición
SI Se escribe el asterisco *
Se incrementa contador
5 NO Se sale del bucle

e. Observe qué ocurre si introduce un 0. _ _ _ No escribe ningún * _ _ _ _ _

Pág 2
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

f. Compare las dos soluciones dadas. ¿Cuántas variables se utilizan en la primera


solución? _ _ _ _ ¿Y en la segunda ?_ _ _ _

2. Programa Numeros0aN. Dado un número entero positivo N dado por el usuario.


Escribir en pantalla todos los números desde el 0 a N.
a. Hacer el Análisis: Entender el problema,
b. Realizar el algoritmo
Pasos: 1.- Leer (N) 2.- Escribir varias veces un número el número va
incrementándose.
Análisis del bucle
Sentencias a repetir : 1.- Escribir el número; 2.- Incrementar el contador .
La condición del bucle es: ___ contador <N __
Comprobar que se actualiza la condición del bucle: incrementar el contador.
Plantear las sentencias de inicialización: contador =0 ;
c. Compruebo que funciona. Hago juegos de ensayo
d. Codificar. Escribir código fuente, compilarlo y obtener el ejecutable
#include <stdio.h>
int main(void){
int cont, n;
printf ("Numero >=0 ");
scanf("%d", &n);
cont=0;
while (cont<n) {
printf (" %d,", cont);
cont++;/*cont=cont+1*/
}
return 0;
}
e. Pruebo el programa.
f. Compruebe que el número N se escribe.
g. Modifique el programa para que N no se escriba _ _ _ _ _ _ _ _ _ _ _ _ _

3. Programa DeNa0. El siguiente programa escribe en pantalla todos los números


enteros positivos desde el dado por el usuario hasta el cero.
………….
int num;
printf ("Introduce un número"); scanf ("%d", &num);
while (num >= 0) {
printf ("%d ", num );
num=num-1;
} …………..
i. ¿Qué sentencias se repiten?_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ¿Cuál es la condición
del bucle? _ _ _ _ _ _ _ ¿Qué sentencia actualiza la condición del bucle? _ _
_ _ _ ¿Qué sentencia es la inicialización del bucle ?_ _ _ _

Pág 3
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

ii. Realice un juego de ensayo suponiendo que el usuario introduce un 6.


iii. ¿Qué ocurre si quito las llaves del bucle while? _ _ _ _ _ _ _ _ _ _ _ _ _ _
¿Para qué sirven?_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
iv. Sustituya la asignación num= num-1; y en su lugar escriba num--;

4. Programa De0aNPosONeg. Dado un número entero N dado por el usuario. Escribir


en pantalla todos los números desde el 0 a N. El número N puede ser negativo o
positivo.
Pasos a dar: 1.- leer (N) 2.- si (N> 0) { escribir número que va cambiando de uno
en uno N veces.} sino { escribir número que va cambiando de uno en uno N
veces.} Hay dos bucles uno cuando N>0 y otro con N<=0.

5. Programa DeMaN. Escriba un programa que escriba todos los números enteros
comprendidos entre dos dados por el usuario. Por ejemplo si el usuario introduce 4 y
7 el programa escribirá 4,5,6,7 y si el usuario introduce 7 y 4 escribe también 4,5,6,7.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona
d. Generar el programa. Escribir código fuente, compilarlo y obtener el
ejecutable
e. Probar el programa

6. Programa ValidarLecturaNota. Escribir un programa que pida la nota de un examen


entre 0 y 10. Asegúrese que la nota es válida [0,10] e indique si le corresponde un
suspenso o aprobado.
a. Análisis. Entiende el problema. ¿Sabe resolverlo?
b. Encontrar el algoritmo. Determine los pasos: 1.- Leer (valor) mientras sea
erroneo 2.- Si (valor<5) escribir (“Suspenso”) sino escribir (“Aprobado”).
c. Analizar el bucle.
d. Pruebe el algoritmo
e. Realice el programa: Traducir el algoritmo a C.
SOLUCION 1
#include <stdio.h>
int main (void){
float num;
printf ("Introduce la nota del examen: ");scanf ( "%f" , &num);
while (num<0 || num >10) {
printf (" ERROR. La nota %5.2f no es Valida \n", num);
printf ("\n Vuelve a Introducir la nota del examen : ");
scanf ( "%f" , &num);
}
if (num >=0 && num <5) printf (" La nota %5.2f es Suspenso \n", num);
else printf (" La nota %5.2f es Aprobado \n", num);
return (0);

Pág 4
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

} Bucles controlados por indicador:


Una condición lógica controla el flujo de programa, se
SOLUCION 2 puede utilizar una variable lógica, en el bucle la
#include <stdio.h> sentencia de actualización suele estar dentro de un
int main (void){ condicional.
float num; Se utiliza para evitar condiciones muy complejas en
los bucles.
int continuar=1;
while (continuar !=0 ) {
printf ("\n Introducir la nota del examen: "); scanf ( "%f" , &num);
if (num>=0 && num <=10) continuar =1;
else printf (" ERROR. La nota %5.2f no es Valida \n", num);
}
if (num >=0 && num <5) printf (" La nota %5.2f es Suspenso \n", num);
else printf (" La nota %5.2f es Aprobado \n", num);
return (0);
}
f. Compare las soluciones.
i. Sentencias que se repiten: Solución 1. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Solución 2. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ii. Condición: 1._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
iii. Inicialización: 1._ _ _ _ _ _ _ _ _ _ _ _ _ _ 2. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
iv. Sentencias que permiten que la condición se actualice: Solución 1. _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ Solución 2 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
g. En la segunda solución quien es el indicador _ la variable continuar _ _ _ _ _
h. Pruebe el programa ¿Con qué valores lo ha hecho? _ _ _ _ _ _ _ _ _ _ _ _ _ _

7. Programa Primo. Realizar un programa que calcule si un número es primo.


……..
scanf(“%d”, &num);
primo =1;
cont =2;
while ( num>cont && primo) {
if (num%cont==0) primo=0;
cont++;
}
………

Pág 5
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

Sentencia do- while


do {
bloque_de_sentenciasR
} while (condición) ;

El bloque de sentenciasR se ejecutan al menos 1 vez, pues la condición se evalua


tras las primera ejecución del bloque de sentenciasR.
Se suelen utilizar para validar datos.

8. Programa ValidarLecturaNotaDo-while. Escribir un programa que pida la nota de


un examen entre 0 y 10. Asegúrese que la nota es válida [0,10] e indique si le
corresponde un suspenso o aprobado. Utiliza la sentencia do-while.
a. Análisis. Entiende el problema. ¿Sabe resolverlo?
b. Encontrar el algoritmo. Determine los pasos:
1.- Leer(valor) mientras sea erroneo
2.- Si (valor<5) escribir (“Suspenso”) sino escribir (“Aprobado”).
i. Analizar el bucle.
c. Pruebe el algoritmo Las sentencias del bucle do-while
d. Realice el programa: se ejecutan al menos una vez
#include <stdio.h>
int main (void){
float num;
do {
printf ("\n Introducir la nota del examen correcta[0-10]: ");
scanf ( "%f" , &num);
} while (num<=0 || num >10) ;
if (num >=0 && num <5) printf (" La nota %5.2f es Suspenso \n", num);
else printf (" La nota %5.2f es Aprobado \n", num);
return (0);
}
i. Compare la solución 1 del programa ValidarLecturaNota con while con
esta.
- Sentencias que se repiten._ En esta solución no hay mensaje de error. _
- Condición del Do-while: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Condición del while: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- Inicialización en el do-while: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Inicialización en el while: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- ¿Es posible que el bucle do-while no se ejecute? _ _ _ _ _ _ _ _ _ _ _ _ _
¿Es posible no entrar en el bucle while ?_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

9. Programa ValidarRadioDo-while. El programa siguiente calcula el área y el


perímetro de un círculo cuyo radio introduce el usuario y tiene que ser mayor que 0.
#include <stdio.h>

Pág 6
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

#define PI 3.1416
int main(void ){
float r, area, perim ;
do {
puts(" Introduce un radio >0 :");
scanf(“\%f”, &r);
} while (r<=0);
area = PI *r *r; perim= 2*`PI*r;
printf ("\n Circunferencia de radio= %f “, r);
printf (“\n \t Area= %f \n \t Perimetro= %f \n”, area, perim);
return 0;
}

10. Programa AdivinaNumeroDo-while. Realizar un programa que genere un número


entero aleatorio entre 1 y N que debe ser acertado por el usuario. El programa debe
dar pistas diciendo si el número introducido está por debajo o por encima del que
tiene que acertar. Al final indicará cuantos intentos ha necesitado el usuario para
adivinarlo
………...
int numSecreto, numero, maxValor;
printf ("Generar un numero secreto entre 0 y ");
scanf ("%d",&maxValor);
srand(time(NULL));
numSecreto = rand()%(maxValor+1);
……......

11. Programa ASCII. El siguiente programa escribe en pantalla todos los caracteres
ASCII así como la posición que ocupan.
int i=0;
while ( i<256) {
printf ("Pos:%d -> %c\n", i, i );
i++;
}………..
¿Qué sentencia permite que el bucle se ejecute por primera vez? _ _ _ _ _ ¿Cuál
es la condición del bucle? _ _ _ _ _ _ _ _ _ _ _¿Cuáles son las sentencias que se
repiten?_ _ _ _ _ _ _ _ _ _ _ _ _ _ ¿Qué sentencia actualiza la condición del
bucle? _ _ _ _ _ _ _ _ ¿Tiene un esquema de recorrido o de Búsqueda? _ _ _ _

12. Programa SentenciasESCaracteres. Analice el siguiente programa. ¿Qué hace?


#include <stdlib.h> /* No usamos la stdio.h */
#include <conio.h> /* para la función int getche()*/
int main(void ){
puts("\n letra :"); /* Sentencia de escritura en pantalla */
while (getche() != 'N') /* Lectura de un carácter del teclado */

Pág 7
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

puts(" No acertaste \t letra:");


return 0;
}

a. ¿Qué sentencia permite que el bucle se ejecute por primera vez? _ _ _ _ _ _ _


b. ¿Cuál es la condición del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
c. ¿Qué sentencia actualiza la condición del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
d. En qué librería están las funciones int getch(void), int getche(void) _ _ _ _ _
¿En qué se diferencian ambas funciones? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
e. Pruebe a utilizar las funciones getchar, getc en lugar de la getche. ¿Para qué
sirven estas funciones? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
f. Suponga que el usuario introduce una a una la siguiente secuencia de letras A L
k S o T n E N. ¿Cuántas veces se escribe “No acertaste”? _ _ _ _ _ _ _ _

13. Programa Factorial. Calcular el factorial de un número N introducido por el usuario.


Sabiendo que N!= 1*2*3*….*(N-1)*N;
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona.
d. Codificación. Escribir código fuente, compilarlo y obtener el ejecutable.
e. Probar el programa.
Estudio del programa. ¿Tiene un esquema de recorrido o búsqueda? _ _ _

14. Programa Potencia. Calcular la potencia de dos números ab, siendo a un número real
y b un número entero positivo o negativo.

15. Programa RaizCuadrada. Realizar un programa que calcule cuál es la raiz cuadrada
de un número dado por el usuario con la aproximación que el operador de consola
indique.
Se usará el siguiente método iterativo en cual vamos aproximando:
1.- Asignar a raiz el valor 1.
2.- Controlar que la diferencia entre el número y el cuadrado de la raíz
supuesta se acerque a la aproximación permitida. Para ello daremos un
nuevo valor a a la raíz
(raiz + num / raiz) / 2 , cuando nos pasemos, o
raiz++ cuando raiz*raiz sea <= num;
3.- Realizar el paso dos hasta que la diferencia entre el cuadrado de la raíz
y el número sea mayor que el error posible (eps)

#include <stdio.h>
int main (void) {
float num, eps, resta, raiz=1;
resta = (num>raiz*raiz) ? num - raiz*raiz: raiz*raiz-num ;
/* es lo mismo que poner resta = abs ( num-raiz*raiz); */

Pág 8
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

while ( resta > eps) {


if ((raiz * raiz) > num) raiz = (raiz + num/raiz )/ 2 ;
else raiz++;
resta = (num>raiz*raiz) ? num - raiz*raiz: raiz*raiz-num ;
}
return (0);
}

16. Programa RaizCubicaEntero. Dado un número entero realizar un programa que


calcule el entero más próximo a su raíz cúbica.

17. Programa Serie3pos. Modifique el programa para que no escriba el último. Por
ejemplo para los valores dados por el usuario 4 y 7, escribiría 4, 5, 6. Escriba un
programa que escriba los elementos de la serie menores que uno dado por el usuario.
Serie: 0, 3, 6, 9, 12, 15, 18….
a. Entender el problema. ¿Sabe cómo se genera el siguiente elemento?
b. Algoritmo: Pasos:
Leer (N);
escribir (numero) varias veces
c. Análisis del bucle.
i. Las sentencias a repetir son:
1. Escribir el elemento de las serie
2. calcular el nuevo elemento
ii. Condición del bucle será : _ _ _ elemento de la serie < num _ _ _
iii. Comprobar que se actualiza la condición del bucle dentro del
bucle: _ _ Calcular el nuevo elemento. _ _
iv. Sentencia de inicialización: _ calcular el primer elemento de la
serie
d. Probar el algoritmo
e. Codificación
#include <stdio.h>
int main (void){
int num, a_i;
printf ("Introduce el valor : ");
scanf ( "%d" , &num);
a_i=0;
while (a_i < num ) { /
printf (“ %d, “, a_i); /* Escribe los elementos de la serie */
a_i = a_i+3; /* equivalente a a_i +=3;*/
}
return (0);
}
f. Probar el programa

Pág 9
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

18. Programa SumaSerie3pos. Escriba un programa que sume los elementos de la serie
(anterior) menores que uno dado por el usuario. Serie: 0, 3, 6, 9, 12….
a. Entienda el problema. ¿Cuál es el siguiente valor? ¿Cuál es la suma para
5 elementos?
b. Algoritmo:
Pasos: 1.- Leer (N); 2.- calcular el elemento de la serie y sumar varias
veces. Análisis del bucle.
i. Las sentencias a repetir son:
1. Escribir el elemento de las serie
2. calcular el nuevo elemento
3. Sumar el elemento de la serie
ii. Condición del bucle será: _ _ el elemento calcularo sea menor que
N__
iii. Comprobar que se actualiza la condición del bucle dentro del
bucle: _ _ Calcular el nuevo elemento. _ _ _
iv. Sentencia de inicialización: _ _ Calcular el primer elemento de la
serie _
c. Prueba del algoritmo.
d. Codificación
………….
int suma, num, a_i=0;
printf ("Introduce el valor : "); scanf ( "%d" , &num);
suma=0;
while (a_i < num ) {
printf (“ %d, “, a_i); /* Escribe los elementos de la serie */
suma= suma+ a_i; /*suma += a_i , Suma elmtos de la
serie */
a_i = a_i+2; /* a_i += 2 */
}
printf ( “\n suma = %d “, suma);
……….
¿Qué sentencia permite que el bucle se ejecute por primera vez? _ _ _ _ _
¿Cuál es la condición del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
¿Qué sentencia actualiza la condición del bucle? _ _ _ _ _ _ _ _ _ _ _
¿Cuál es la sentencia acumuladora? _ _ suma= suma+ a_i; _
e. Pruebe el programa.
i. ¿Con qué datos lo ha hecho? _ _ _ _ _ _ _ _ _ _ _ _ _ _
ii. Para el valor de número de entrada 15, ¿Qué valores de la serie se
escriben? _ _ _ _ _ _ _ _ _ _ _ _ _ ¿Cuál es el valor de la suma? _
_ _ _ ¿Cuántas veces se ha ejecutado el bucle? _ _ _ _ _.

19. Programa Serie2ElevadoPos. Escriba un programa que escriba N primeros


elementos de la serie. Dado N por el usuario. Serie: 1, 2, 4, 8, 16, 32, 64….

Pág 10
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

a. Análisis: Entender el problema.


b. Algoritmo:1.- Leer (N); 2.- Varias veces calcular el elemento de la serie y
escribirlo. Análisis del bucle.
- Sentencias a repetir son: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- Condición del bucle : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- Comprobar que se actualiza la condición del bucle.
- Sentencias de inicialización: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
c. Probar el algoritmo.
d. Codificación
…………..
int N, i, a_i;
printf ("Introduce el valor : "); scanf ( "%d" , &num);
a_i=1; i=1;
while (i < N ) { /
printf (“ %d, “, a_i); /* Escribe los elementos de la serie */
a_i = a_i*2; /* es equivalente a_i *=2 */
i++;
} Esquema de recorrido
……….,... Tratamiento inicial
¿Qué sentencia actualiza la Condición del bucle: (i<N)
condición del bucle? _ _ _ _ _ _ _ Permite pasar por todos los elementos.
¿Qué sentencia permite que el Sentencias que se repiten:
bucle se ejecute por primera vez? _ Tratamiento de datos
e. Prueba. ¿Con qué datos debe probar printf( “%d”, a_i);
el programa?_ _ _ _ _ _ _ _ _ _ _ _ a_i*=2;
Elemento siguiente i++;
20. Programa SumaSerie2elevadoPos.
Realice un programa que calcule la suma de los N primeros elementos de la serie.
Dado N por el usuario. Serie: 1, 2, 4, 8, 16, 32, 64….
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona
d. Codificación. Escribir código fuente, compilarlo y obtener el ejecutable
e. Probar el programa

21. Programa Serie3elevadoPos. Realice un programa que calcule los N primeros


elementos de la siguiente serie: 1, 3, 9, 27 ... . Siendo N un número introducido por
teclado.

22. Programa SumaSerie3elevadoPos. Realice un programa que calcule la suma de los


N primeros elementos de la siguiente serie: 1, 3, 9, 27 ... . Siendo N un número
introducido por teclado.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.

Pág 11
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

c. Compruebo que funciona


d. Codificación. Escribir código fuente, compilarlo y obtener el ejecutable
e. Probar el programa

23. Programa SumaNNumeros. Realizar un programa que sume los 7 primeros valores
que introduzca el usuario por teclado.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona
d. Codificación: Completa el código fuente, compilar y obtener el ejecutable
………
int i=0;
float num, suma=0; /* Inicializa la variable suma a la vez que se declara */

while (i < 7 ) {
printf ("Introduce el valor : "); scanf ( "%d" , &num);
suma += num; /* suma = suma + num */
i++; /* i= i+1; */
}
……. Esquema de recorrido
¿Cuál es la condición del bucle? _ _ _ Tratamiento inicial
¿Qué sentencia actualiza la condición Condición del bucle: (i<N)
del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _ _ Permite pasar por todos los elementos.
¿Qué sentencia permite que el bucle Sentencias que se repiten:
se ejecute por primera vez? _ _ _ _ _ Tratamiento de datos
¿Es un esquema de recorrido?_ _ _ _ printf( “%d”, a_i);
a_i*=2;
Elemento siguiente i++;

24. Programa Fibonacci. Escriba en pantalla los N primeros elementos de la serie: 1, 1,


2, 3, 5, 8, 13… Siendo N un valor introducido por el usuario.
a. Hacer el Análisis: Entender el problema.
b. Algoritmo: Es un esquema de Recorrido, pues voy a tratar todos los datos.
Defino los pasos y Analizo las variables.
Análisis del bucle:
- Sentencias que se repiten: Tratamiento de los datos y elemento siguiente
–contar-
- Condición del bucle:
- Tratamiento inicial
c. Compruebo que funciona
d. Codificación: Escribir código fuente, compilarlo y obtener el ejecutable
e. Probar el programa
int main(void) {
int n, i, a, ant, aux ;

Pág 12
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

ant=0; i=1; a=1


printf("Introduce el numero de terminos"); scanf("%d", &n);
while ( i<n) {
printf (" %d, ", a);
aux= a;
a= a+ ant;
ant= aux;
i++;
}
printf(" %d ", a);

return 0;
}

25. Programa MediaNnumeros. Calcule la media de los N primeros valores reales


introducidos por el usuario. Siendo N un valor introducido por el usuario.
a. Análisis: Entender el problema.
b. Algoritmo: Defino los pasos y Analizo las variables.
c. Prueba del algoritmo
d. Codificación. Escribir código fuente, compilarlo y obtener el ejecutable
e. Probar el programa
¿Es un esquema de recorrido?

26. Programa MediaControladoBandera. Calcule la media de los elementos


introducidos por el usuario. Para acabar de introducirlos el usuario introducirá el
valor 999.

……...
#define BANDERA 999
……...
int main (void){
int i=0;
float num, suma =0;
printf ("Introduce el valor : "); scanf ( "%d" , &num);
while (num != BANDERA ) {
suma += num; /* suma = suma + num; */
i++; /* i= i+1; */
printf ("Introduce el valor : "); scanf ( "%d" , &num);
}
printf ("La media es %f ", suma/i);
¿Cuál es la condición del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
¿Qué sentencia actualiza la condición del bucle? _ _ _ _ _ _ _ _ _ _ _ _ _
¿Qué sentencia permite que el bucle se ejecute por primera vez? _ _ _ _ _ _ _
¿Es un esquema de recorrido o de búsqueda? _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Pág 13
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

27. Programa MaximoDeValores. Calcule el valor máximo de los elementos


introducidos por el usuario. Para acabar de introducirlos el usuario introducirá el
valor 999.
#include <stdio.h>
#define BANDERA 999
int main (void){
float num, max= -99999; /* Un valor muy pequeño */
printf ("Introduce el valor, 999 para acabar: "); scanf ( "%d" , &num);
while (num != BANDERA ) {
if (num>max) max= num;
printf ("Valor (999 para acabar): "); scanf ( "%d" , &num);
}
if (max!= -99999) printf ("El valor mayor de todos es %f ", max);
return (0);
}
¿Cuál es la condición del bucle? _ _ _ _ _ _ _ _ _ ¿Qué sentencia actualiza la
condición del bucle? _ _ _ _ _ _ _ ¿Qué sentencia permite que el bucle se ejecute
por primera vez? _ _ _ _ _ _ ¿Es un esquema de recorrido o de búsqueda? _ _ _

28. Programa MinimoDeValores. Calcule el valor mínimo de los elementos


introducidos por el usuario. Para acabar de introducirlos el usuario introducirá el
valor 999.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona
d. Codificar. Escribir código fuente, compilarlo y obtener el ejecutable
e. Probar el programa

29. Programa MediaValoresMenosMas1. Realizar un programa calcule la media de una


serie de medidas reales cuyos valores oscilan entre (-1, 1). Si el usuario quiere acabar
la serie introducirá un valor FIN cuyo valor será 99.

30. Programa Juego5ParesyNones. Realizar un programa en permita al usuario jugar a


pares y nones contra el ordenador 5 veces. El ordenador jugará con los nones.
Al final del programa indicará el número de partidas empatadas, ganadas por el
usuario y por el ordenador.

Pág 14
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

31. Programa JuegoParesyNonesMejorde5.


Esquema de búsqueda
Realizar un programa en permita al usuario
Tratamiento inicial
jugar a pares y nones contra el ordenador al
Condición del bucle:
mejor de 5 jugadas. El ordenador jugará con
No es necesario pasar por
los nones. Al final del programa indicará el
todos los elementos del bucle.
número de partidas empatadas, ganadas por el
La condición es compuesta
usuario y por el ordenador.
Sentencias que se repiten:
……...
Tratamiento de datos.
#include <time.h>
Elemento siguiente
int main (void){
Tratamiento de datos finales según
/* Esquema de busqueda */
la salida.
int suma, jug, ord;
int contJug, contOrd, cont;
srand( time( NULL));
contJug= 0; contOrd=0;
cont=0; pot = 1; /*Tratamiento inicial */
while ( contJug < 3 && contOrd<3 && cont<5) ) {/* Condición */
ord = rand() % 11; // numero entre 0 y 10 ambos incluidos
do {
printf ("numero [0..10] "); scanf ( "%i , &jug);
} while (jug<0 || jug>10);
suma = ord + jug;
if (suma %2==0) {
printf( “Ganan pares: USUARIO \t%i+%i= %i \n”, jug, ord, suma );
contJug++;
} else {
printf (“Ganan IMpares: Ordenador\t%i+%i=%i\n”, jug, usu, suma);
contOrd++;
}
cont++; /* Siguiente elemento */
}
if (cont<5) /* Tratamiento final */
printf (“ No ha necesario jugar las 5 partidas \n”);
printf (“Ganador %s \n“, contJug>contOrd? “USUARIO”: “Ordenador”);
………...

32. Programa JuegoDados Realizar un programa en permita al usuario jugar a los dados
contra el ordenador ganando aquel que gane 5 jugadas. Una jugada la ganará el
participante que obtenga más puntos. El ordenador lanzará los 2 dados usando la
función rand, mientras que el usuario introducirá por teclado el lanzamiento de sus
dos dados. Al final del programa indicará el número de partidas empatadas, ganadas
por el usuario y por el ordenador.

Pág 15
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

33. Programa PrimosMenoresN. Realizar un programa que escriba en pantalla todos los
números primos menores que uno dado por el usuario.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos y Analizo las variables.
c. Compruebo que funciona.
d. Generar el programa.
e. Probar el programa.

34. Programa SerieErrorFraccionPoten. Realizar un programa que calcule la sume de


los elementos de la serie, con un error menor que 0.01, es decir siempre que el
elemento sea mayor que 0.01.
Serie = 1/1; ½; ¼; ⅛; 1/16 ; 1/32; 1/64; 1/128
a. Hacer el Análisis: Entender el problema.
Tengo que sumar mientras el elemento sea > que el error.
Por ejemplo para error =0,01 tendré que sumar 1+1/2+1/4+1/8 +1/16 +1/32 +1/64
no sumo 1/128 porque 1/128 es menor que 0.01La otra duda es cómo se calcula
cada elemento. Y veo que los elementos son 1/20, 1/21, 1/22, 1/23, 1/24, 1/25, 1/26
b. Realizar el algoritmo:
Defino los pasos:
calcular primer elemento
mientras (elemento > error)
sumar el elemento y
calcular el nuevo elemento
Escribir la suma.
Analizo las variables.
c. Compruebo que funciona.
d. Codificarlo. Escribir código fuente, compilarlo y obtener el ejecutable
……
int main (void){
int i;
float suma, num, a_i;
i =1; suma =0; a_i=1;
while (a_i > 0.01 ) {
suma = suma + num;
printf (“ Elemento %d vale %f y la suma es %f\n”,i, a_i, suma);
a_i= a_i *1/2;
}
……
return (0);
}
¿Cuál es la condición del bucle? _ _ _ ¿Qué sentencia actualiza la condición del
bucle? _ _ _ ¿Qué sentencia hace que el bucle se ejecute por primera vez? _ _

Pág 16
Informática
Escuela de Ingenierías Marina, Náutica y Radioelectrónica
Ejercicios de Programación

Practica 3: Sentencias repetitivas o iterativas

35. Programa SumaSerieError3elevi. Realice un programa que calcule la suma de


primeros elementos de la siguiente serie: 1, 1/3, 1/9, 1/27..., con un error menor que
uno dado por el usuario.
a. Hacer el Análisis: Entender el problema.
b. Realizar el algoritmo: Defino los pasos. Analizo las variables.
c. Compruebo que funciona.
d. Codificarlo. Escribir código fuente, compilarlo y obtener el ejecutable.
e. Probar el programa.

36. Programa SieteYMedia. Simular el juego de cartas de siete y media en el que el


usuario juega contra el ordenador N veces. Puede pensar que las cartas son valores
entre 1 y 10 y los valores 8,9, 10 tiene un valor de medio punto.

37. Programa EvaluarPolinomio. Evaluar un polinomio de grado n. P(x)= an* xn + an-1*


xn-1 +… + a1* x +a0. Dados por el usuario los coeficientes ai, n y x. Muestre en
pantalla primero el polinomio y luego el resultado de la evaluación.

38. Programa EntradasCine. Escribir un programa en C que simule la venta de entradas


de un cine que proyecta una sola película. El cine tiene 100 localidades disponibles
y la taquilla cerrará cuando la taquillera lo decida (llega la hora de cierre, la taquillera
indicara con S ó N si ha llegado la hora de cierre) o se le acaben las entradas. Al
finalizar el programa se indicará el número entradas vendidas, y sin vender y si ha
cerrado la taquilla por decisión de la taquillera o por que se han acabado las entradas.

39. Programa MediaMaxMinTempVálidas. Calcular la temperatura media, máxima y


mínima tomadas en Cádiz durante un día cada media hora. El usuario puede dejar de
introducir los datos introduciendo el valor 100. La temperaturas válidas en Cádiz
oscilan entre [0ª, 40º] C.
¿Cuántas medidas validas como máximo pueden obtenerse?

40. Programa MaxMinTProyectilAngulos. Realice un programa que escriba en


pantalla el alcance máximo, la altura máxima y el tiempo que tarda un proyectil
lanzado a ras de suelo con una velocidad indicada por el operador de consola para
los ángulos 10º, 20º,..., 80º.
Calcule también la posición (x,y) del proyectil en 20 puntos equidistantes en el eje x,
para cada uno de los ángulos.
Las fórmulas son:
tMax = 2*vi* sin( angInic*PI/180)/ G;
xMax = vi*vi* sin( 2*angInic*PI/180)/ G;
yMax = vi*vi* sin( angInic*PI/180)*sin( angInic*PI/180)/ (2*G);

xi= vi* cos(angInic*PI/180)*t;


yi = vi* sin(angInic*PI/180)*t- G*(t*t)/2;

Pág 17

También podría gustarte