15/05/05 Programación Digital I 1
Estructuras deRepetición:Repita Mientras.Andrés ArciaDepartamento de ComputaciónEscuela de Ingeniería de SistemasFacultad de IngenieríaUniversidad de Los Andes
Programación Digital I 215/05/05
Programación Estructurada
La programación estructurada es un paradigma queconsiste en la organización de un código en bloquesconformados por estructuras del tipo:
Secuencial (asignación, lectura, escritura)Decisión o selección (simple, doble, múltiple)Repetición (Repita mientras, Hacer-Mientras, Repita para)
Programación Digital I 315/05/05
Estructuras de RepeticiónEstructura de repetición o lazoPermite que un conjunto de sentencias (bloque) deun programa puedan ser ejecutadas repetidamentesegún el resultado de una expresión lógica.
Tipos de estructuras de repeticiónRepetición condicional o controlada por uncentinela: REPITA-MIENTRAS y HACER-MIENTRAS.Repetición controlada por un contador: REPITA-PARA.
Conceptos BásicosContadorAcumuladorCentinela
Programación Digital I 415/05/05
Contador
Variable cuyo valor se incrementa odecrementa en una cantidad constantecada vez que se produce un determinadosuceso o acción. Se debe realizarprimeramente una operación deinicialización y posteriormente loscorrespondientes incrementos odecrementos.
Programación Digital I 515/05/05
Inicialización:contador = valor inicial
Incremento/decremento:contador = contador + valor_constantecontador = contador – valor_constante
Ejemplo
// inicializaciónint i=0, j=1000;i++; // incremento j--; //decrementoi+=15; // incremento j-=10; //decremento
¿Cuántas iteraciones hacen falta para que j llegue a 0 (cero)?
Operaciones sobre un Contador
Programación Digital I 615/05/05
Acumulador
Variable cuyo valor se incrementa odecrementa en una cantidad variable cadavez que se produce un determinadosuceso o acción. Se debe realizarprimeramente una operación deinicialización y posteriormente loscorrespondientes incrementos odecrementos.
Programación Digital I 715/05/05
Inicialización:
acumulador = valor inicial
Acumulación:acumulador = acumulador + valor
acumulador = acumulador * valor
acumulador = acumulador - valor
acumulador = acumulador / valor
Operaciones sobre un Acumulador
Programación Digital I 815/05/05
float iterador = 0, nota = 15.5;unsigned multiplicador = 1; // valor distinto de cerosigned divisor = 2021;
- Acumular (Incrementos)iterador = iterador + nota;multiplicador = multiplicador * nota;multiplicador *= nota;
- Acumular (Decrementos)iterador = iterador – nota;multiplicador /= nota;
Ejemplo
Programación Digital I 915/05/05
Es el valor asignado a una variable que hace que seejecute un bloque de instrucciones. Por lo general existendos puntos críticos dentro del algoritmo, cuando sepregunta por el valor centinela y cuando se cambia devalor.
Ejemplochar bandera = 1;inicio:…// cuerpo del programa;…// punto de cambio;bandera = 0;if (bandera) goto inicio;
Centinela
Programación Digital I 1015/05/05
Repita MientrasDiagrama de flujo Pseudocódigo en español
Repita mientras (condición)S1…Sn
Fin_RM
Código en C
while (condición){S1…Sn
}
Programación Digital I 1115/05/05
Repita Mientras
Las sentencias (una o más) del cuerpo del lazo seejecutan mientras la condición (expresión lógica) escierta. Cuando la condición es falsa, termina laejecución del lazo.
Se pregunta al principio por la condición, por tanto ellazo se ejecuta cero (si la primera vez la condición esfalsa) o mas veces.
Si la condición nunca se hace falsa, el programa entraen un “lazo infinito”, es decir, las sentencias del cuerpodel lazo se ejecutarán indefinidamente.
Programación Digital I 1215/05/05
Repita Mientras
Hay que estar pendientes de INICIALIZAR las variablesque intervienen en la condición antes de ejecutar el lazopor primera vez, ya que lo primero que hace laestructura es evaluar la condición.
Hay que estar pendientes de MODIFICAR dentro delcuerpo del lazo los valores de las variables queintervienen en la condición, para garantizar que en algúnmomento ésta se haga falsa y el lazo pueda terminar suejecución y así tratar que el lazo no sea infinito.
Programación Digital I 1315/05/05
#define MAX 1000
int i=0;while (i < MAX){i++;printf(“%i”,i);
}
NOTA: recuerde usar lasllaves {} cuando haya másde una instrucción.
i=0;
REPITA MIENTRAS (i<MAX)i=i+1;Escribir (i)
Fin_RM.
Código en CPseudocódigo en Español
Ejemplo
Programación Digital I 1415/05/05
#define MAXPOT 500
int pot=1;while (pot < MAXPOT)pot *=2;
printf(“potencia: %i“,pot);
NOTA: recuerde que puedeomitir las llaves {} cuandohay solo una instrucción.
pot = 1REPITA MIENTRAS (pot < 500)pot = pot * 2;
Fin_RM
Escribir(“potencia =“,pot)
Código en CPseudocódigo en Español
Ejemplo
Programación Digital I 1515/05/05
#define true 1char bandera=true;int contador=1;
while (bandera){printf(“%i”,contador);contador++;if (contador == 10)
bandera = !bandera;}
bandera = cierto;contador = 1;REPITA MIENTRAS (bandera =cierto)Escribir(contador)contador = contador + 1Si (contador = 10)
bandera = falso;Fin_si
Fin_RM
Código en CPseudocódigo en Español
Ejemplo
Programación Digital I 1615/05/05
Ejemplo
char seguir = 1;int contador = 0;while(seguir)contador+=1;
seguir = verdaderoREPITA MIENTRAS (seguir = verdadero)contador = contador + 1
Fin_RM
char seguir = TRUE;char respuesta = ‘s’;while (seguir){printf(“¿Seguir
repitiendo?”);scanf(“%c”,&respuesta);if (respuesta == ‘n’)
seguir = false;}
seguir = verdaderorespuesta = ‘s’REPITA MIENTRAS (seguir=verdadero)
Escribir (“¿Seguir repitiendo?”)Leer (respuesta)Si respuesta = ‘n’
seguir = falsoFin_Si
Fin_RM
Código en CPseudocódigo en Español
Programación Digital I 1715/05/05
Ejemplo
#include <stdio.h>
void main(){
int i = 0,suma = 0;
while(i<5){
suma += i;i++;printf(“%i”,suma);
}}
Iteración i suma
(0) 0 0
(1) 1 0
(2) 2 1
(3) 3 3
(4) 4 6
(5) 5 10
Corrida en Frío
Programación Digital I 1815/05/05
Ejemplo
#include <stdio.h>
void main (){
int i = 1;
while ( i < 3 ){
printf(”i es menor que 3\n”);i++;
}printf(”Se termino el lazo\n”);
}
Iteración i
(0) 1
(1) 2
(2) 3
Corrida en Frío
Programación Digital I 1915/05/05
Salidas abruptas del while
Algunas veces es conveniente salir deforma abrupta de una estructura derepetición. Para esto se utiliza la sentenciabreak.
Según break, el lazo de repetición másinterno se cancelará.
Programación Digital I 2015/05/05
Ejemplo de break
Int i, j;
i=0;
j=0;
while (i>-1)
{
j++;
while (j<20)
{
printf(“Valor de j %i”,j);
if (j>=15) break;
// pueden haber mas instr.
}
}
Observe que:➢ Hay un par de while anidados➢ El break esta dado por unacondición y se encuentra en elwhile más interno.➢ La condición que imperará en ellazo interno será la del if.
Programación Digital I 2115/05/05
Regreso abrupto a la condición
Dentro de un lazo de repetición, se puedenhacer regresos abrutos a la condición quegobierna al lazo.
El constructo en C para tal proposito es el“continue”.
Programación Digital I 2215/05/05
Ejemplo del continue
Supongamos que queremos procesar solamente los númerosenteros positivos de un conjunto introducido porteclado:
i=0;
while (i<10)
{
prinf(“Introduzca un número: “);
scanf(“%i”,&n);
if (n < 0)
continue;
else
{ i++;
printf(“Procesable”); }
}
Programación Digital I 2315/05/05
Ejemplo
Calcular la suma de n números introducidos por teclado.
Análisis E-P-SEntradas: total de números (n ∈ Z), números (a1, a2, a3, …, an ∈ Z)
Proceso: Calcular suma = a1 + a2 + a3 + … + anSalidas: suma ∈ Z
Programación Digital I 2415/05/05
Ejemplo
Algortimo
0. Inicio1. Escribir (“Introduzca el número de elementos a sumar”)2. Leer (n)3. suma = 04. contador = 05. Repita mientras (contador < n)
contador = contador + 1Escribir (“Introduzca un numero”)Leer (num)suma = suma + num
fin_RM6. Escribir (suma)7. Fin
Programación Digital I 2515/05/05
Estructura de Repetición“Repita mientras”: Ejemplo 3Codificación
#include <stdio.h>void main (){
int n, num, suma = 0, contador = 0;printf(“Introduzca el número de elementos a
sumar”);scanf(“%i”,n);while (contador < n){contador++;printf(“Introduzca un numero”);scanf(“%i”,&num);suma += num;
}printf(“Suma = %i\n“, suma);
}
Programación Digital I 2615/05/05
Ejemplo. EPS.
Leer una serie de números reales y calcular su media.La marca de fin de lectura será el –999
Análisis E-P-S
Entradas: num1, num2, num3, …, numn -999
Proceso:- Acumular la suma e incrementar contador de númerosmientras número leído sea diferente de -999
suma = num1 + num2 + num3 + … + numn
contador = contador + 1- Calcular media = suma / contador
Salidas: media
Programación Digital I 2715/05/05
Ejemplo. Algoritmo.
0. Inicio1. contador = 02. suma = 03. Escribir (“Introduzca el primer número”)4. Leer (num)5. Repita mientras (num != -999)
contador = contador + 1suma = suma + numEscribir (“Introduzca un número”)Leer (num)
Fin_RM6. Si (contador != 0) entonces
media = suma/contadorEscribir (“La media es =”, media)
sinoEscribir (“El usuario no introdujo numeros”)
Fin_Si7. Fin
Programación Digital I 2815/05/05
Ejemplo. Código.
#include <stdio.h>
void main(){float contador = 0.0,
suma = 0.0, media;
printf(“Introduzca el primernumero”;scanf(“%i”,&num);while (num != -999.0){contador = contador +
1.0;suma = suma + num;printf(“Introduzca un
número”;scanf(“%i”,&num);
}
if (contador != 0){media = suma/contador;printf(“La media es = %i”,
media);}else
printf(“El usuario nointrodujo numeros”);
}
Programación Digital I 2915/05/05
Ejercicios Propuestos
Para cada uno de los siguientes problemas realizar el análisis E-P-S, algoritmo y codificación.
Hallar el resultado de la siguiente sucesión:S = 1 + 1/2 + 1/3 + 1/4 … + 1/nhasta que 1/N converja hacia e/100 (o sea igual o menor que unnúmero e cualquiera dividido entre 100).
Calcular la sumatoria de los 100 primeros números naturales.
Calcular independientemente la suma de los números pares eimpares comprendidos entre 1 y n.
Programación Digital I 3015/05/05
Ejercicios Propuestos
Escribir todos los enteros positivos menores que 100omitiendo aquellos divisibles por 7.
Encuentre el número de puntos con coordenadasenteras que están dentro de la elipse
2x2 + 3y2 = 100
En Caracas se hizo una encuesta de los medios detransporte urbano mas comunes. A cada persona se lepreguntó si el autobús, el metro o el carro era el mediomas usado para ir al trabajo. Se permitió mas de unarespuesta. El resultado de la encuesta fue el siguiente:
Programación Digital I 3115/05/05
n1 personas escogieron el autobús
n2 personas escogieron el metro
n3 personas escogieron el carro
n4 personas escogieron el autobús y el metro
n5 personas escogieron el autobús y el carro
n6 personas escogieron el metro y el carro
n7 personas escogieron los tres medios de transporte
¿ Cuántas personas respondieron la encuesta ?¿ Cuántas personas escogieron sólo un medio de transporte ?¿ Cuántas personas escogieron dos medios de transporte ?¿ Cuántas personas escogieron los tres medios de transporte ?
Ejercicios Propuestos
Programación Digital I 3215/05/05
Ejercicios Propuestos
Leer valores que representan años e indique si son o noaños bisiestos. El programa seguirá leyendo años hastaun máximo de 10 o hasta que haya leido 3 añosbisiestos. Recuerde, una vez más, la regla:"Un año es bisiesto si es divisible por 400, o bien si esdivisible por 4 pero no por 100"Por ejemplo, el año 2000 es bisiesto (es divisible por400), el año 1992 es bisiesto (es divisible por 4 y no por100), y el año 2100 no es bisiesto (es divisible por 4 ytambién por 100).