Repita Mientrasenteras que están dentro de la elipse 2x2 + 3y2 = 100 En Caracas se hizo una...

33
15/05/05 Programación Digital I 1 Estructuras de Repetición: Repita Mientras. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

Transcript of Repita Mientrasenteras que están dentro de la elipse 2x2 + 3y2 = 100 En Caracas se hizo una...

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).

Programación Digital I 3315/05/05

Ejercicios Propuestos

Imprimir la tabla de multiplicar de un número dado. Elfuncionamiento del programa se muestra en el siguienteejemplo de ejecución.

Introduzca un número: 5

La tabla de multiplicar del 5 es:5 x 1 = 55 x 2 =10...5 x 10 =50