Download Sentencias R epetitiva M ientras

Document related concepts

PSeInt wikipedia , lookup

Pseudocódigo wikipedia , lookup

Bucle infinito wikipedia , lookup

Bucle do wikipedia , lookup

Little man computer wikipedia , lookup

Transcript
Lógica de programación
1
Facultad de Ciencias y Tecnología
Departamento de Computación
Lógica de programación
Elaborado por:
Lic. Luis Ernesto Díaz Beteta
La característica fundamental de la programación estructurada consiste en
que todas las instrucciones tienen un único punto de entrada y un único punto
de salida. Esto permite descomponer fácilmente un problema en
subproblemas, reduciendo la complejidad y facilitando la programación
Bibliografía
Metodología de la programación. Dr. Osvaldo Cairó Battistutti
Editorial Alfa­Omega
II semestre de 2015
Sentencias Repetitiva Mientras
Universidad Nacional Autónoma de Nicaragua - León
Lógica de programación
2
Introducción
Como hemos mencionado en el tema anterior en ocasiones vamos a encontrar algoritmos cuyas operaciones se
deban ejecutar un número repetido de veces formando un ciclo de ejecución de sentencias. Además también se
menciono que un ciclo, siempre debe tener una condición de parada o fin de ciclo. La condición de parada de un ciclo se puede indicar al inicio o al final del bucle, de acuerdo a esta premisa
podemos clasificar a las sentencias repetitivas en dos grupos:
•
•
Con la condición de parada al inicio Con la condición de parada al final
Dentro del grupo de sentencias repetitivas con la condición de parada al inicio tenemos a la sentencia
MIENTRAS y a la sentencia PARA. Y dentro del grupo de sentencias con la condición al final tenemos a la
sentencia REPETIR.
En esta etapa hablaremos del funcionamiento de las sentencias MIENTRAS y REPETIR.. Estructura repetitiva MIENTRAS
La estructura algorítmica MIENTRAS es quizás la estructura de repetición más sencilla, y sin embargo es
considerada por muchos como la más potente. Su función consiste en ejecutar un número determinado de veces
una secuencia de instrucciones, no obstante, este número de repeticiones depende de la condición de parada que
contenga el propio ciclo. Por lo tanto el ciclo MIENTRAS se ejecutara hasta que la condición que se evalúa resulte ser falsa.
Sintanxis
Mientras expresion_logica Hacer
secuencia_de_acciones
FinMientras
Donde:
expresion_logica: es cualquier expresión lógica cuyo resultado sea verdadero o falso.
La estructura repetitiva MIENTRAS permite ejecutar las instrucciones mientras la expresión_lógica sea
verdadera. Si la primera vez que se evalúa la expresión lógicaresulta falsa, el conjunto de sentencias
pertenecientes al ciclo no se ejecutaran.
II semestre de 2015
Lógica de programación
3
Representación gráfica
PseInt utiliza la siguiente manera de representar el ciclo MIENTRAS Ejemplo: 1.
2.
3.
4.
5.
6.
7.
8.
9.
Proceso cuentaNumeros
Definir contador Como Entero;
contador <- 1;
Mientras contador <= 10 Hacer
Escribir "Repeticion numero ", contador;
contador <- contador + 1;
FinMientras
FinProceso
Diagrama de flujo
Resultado
II semestre de 2015
Como se puede observar el ciclo
MIENTRAS se ejecuta en diez
ocasiones, estas repeticiones están
dadas por el valor de la variable
“contador”, la que en un inicio vale
1. La variable “contador” deberá ser
incrementada dentro del grupo de
instrucciones del bucle, sino el ciclo
nunca se detendrá.
Lógica de programación
4
En la estructura repetitiva MIENTRAS el número de veces que se ejecute el bucle está determinado por la
condición. Al ejecutar la instrucción mientras, lo primero que se evalúa es la expresión lógica
➢ Si la expresión lógica resulta falsa, no se toma ninguna acción y se prosigue con la instrucción
siguiente al bucle. ➢ Pero si la expresión lógica resulta verdadera, se ejecuta el cuerpo del bucle y después se vuelve
al inicio del bucle y se evalúa nuevamente la expresión. Ejemplos estructura repetitiva MIENTRAS
Ejemplo1
Este ejemplo muestra un algoritmo que presenta el valor correspondiente a la suma de dos números enteros, Esta
suma se realizar implementado un ciclo por medio del cual se le ira sumando la unidad al primero de los
números ingresado y luego se le restara la unidad al segundo número. Deteniendo en proceso hasta que el
segundo de los números tome el valor 0.
Datos de entrada:
• El usuario ingresara dos números enteros.
Datos de salida:
• Se presentara en pantalla el valor correspondiente a la suma de ambos números.
Variables a utilizar
• num1: almacenara el primer valor ingresado por por el usuario.
• num2: almacenara el segundo valor ingresado por el usuario y además controlara las iteraciones del ciclo
Procedimiento:
• Se le solicitara al usuario el ingreso de los dos valores enteros
• Mientras el segundo valor sea mayor que 0, se ejecutara el ciclo.
• Dentro del grupo de sentencias del ciclo, se le sumara la unidad al primer valor ingresado por el usuario, luego se le restara la unidad al segundo valor ingresado por el usuario.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Proceso SumaLenta
Definir num1, num2 Como Entero;
Escribir sin saltar "Ingrese el valor del 1er numero ";
Leer num1;
Escribir sin saltar "Ingrese el valor del 2do numero ";
Leer num2;
Mientras num2 > 0 Hacer
num1 <- num1+1;
num2 <- num2-1;
FinMientras
Escribir "La suma es: ", num1;
FinProceso
II semestre de 2015
Lógica de programación
Diagrama de flujo
5
Resultado
¿Qué pasa si queremos sumar 4 y 0?
Cuando se desea sumar un numero cualquiera con el cero, al evaluarse la expresión lógica del ciclo mientras
resultara falsa, por lo tanto no se ejecutaran las sentencias que forman parte del ciclo mientras.
Ejemplo2
Este ejemplo muestra un algoritmo que por medio de la estructura repetitiva MIENTRAS solicita al usuario el
ingreso de 10 valores y luego presenta en pantalla el valor mayor ingresado por parte del usuario.
Datos de entrada
• El usuario va a introducir los valores los cuales se van almacenando en una variable “num”.
Datos de salida
• Al terminar la ejecución del algoritmo se ha de presentar el valor mayor de los introducidos por parte del
usuario.
Variables a utilizar
• contador: variable que llevara el control de las 10 iteraciones.
• vmayor: variable en la que se almacena el valor mayor ingresado por parte del usuario
• num: Se utilizara para capturar los números ingresados por parte del usuario.
Procedimiento
• Antes de iniciar el ciclo, se le ha de solicitar al usuario ingrese el primero de los valores.
• Este primer elemento ingresado se asume como el valor mayor, por lo tanto la variable “vmayor” tomara
el valor de este primer elemento ingresado.
• Por medio de un ciclo procederemos a pedir el restante de los elementos comparando cada uno con el
II semestre de 2015
Lógica de programación
6
valor de la variable “vmayor” y el elemento ingresado. Si el valor del elemento ingresado es mayor que
el valor de la variable “vmayor”, se reemplaza el valor de este último por el valor ingresado por el
usuario.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Proceso MayorValor
Definir contador, num, vmayor
Como Entero;
Escribir sin saltar "Ingrese el elemento 1 ";
Leer vmayor;
contador<-2;
Mientras contador <= 10 Hacer
Escribir sin saltar "Ingrese el elemento ", contador ;
Leer num;
Si num > vmayor Entonces
vmayor <- num;
FinSi
contador <- contador + 1;
FinMientras
Escribir "El valor mayor introducido es: ", vmayor;
FinProceso
Diagrama de flujo
Resultado
II semestre de 2015
Lógica de programación
7
Ejemplo3
Este ejemplo muestra por medio de la estructura repetitiva MIENTRAS en pantalla la tabla de multiplicar de un
número ingresado por parte del usuario.
Datos de entrada
➢ Número del que se presentara la tabla de multiplicar, este valor será almacenado en la variable “num”.
Datos de salida
➢ Presentar en pantalla la tabla de multiplicar del número ingresado por parte del usuario.
Procedimiento
➢ Solicitar el número al usuario
➢ Por medio del ciclo Mientras ir presentando en pantalla el resultado de multiplicar a la variable cuenta
con el numero (num) ingresado por parte del usuario
Variables a utilizar
➢ cuenta: Variable que llevara el control de las iteraciones, en este caso serán 12 iteraciones.
➢ num: Esta variable almacena el número ingresado por parte del usuario.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Proceso TablaMultiplicar
Definir cuenta, num Como Entero;
Escribir sin saltar "Ingrese el numero ";
Leer num;
cuenta<-1;
Mientras cuenta <= 12 Hacer
Escribir num, " x ", cuenta, " = ", cuenta*num;
cuenta<-cuenta+1;
FinMientras
FinProceso
Diagrama de flujo
Resultado
II semestre de 2015
Lógica de programación
8
Ejemplo4
El siguiente ejemplo muestra un algoritmo en el cual se solicitan 10 números enteros y presenta en pantalla el
promedio de los números ingresados.
Datos de entrada:
• Serie de números ingresados por el usuario.
Datos de salida:
• Promedio de los números ingresados por el usuario.
Variables a utilizar
• contador: Esta variable llevara el control de las iteraciones del ciclo. • numero: Almacena el numero ingresado por parte del usuario en cada iteración.
• suma: Sera la variable que almacena la suma de todos los números ingresados.
• promedio: Almacena el promedio de todos los números ingresados.
Procedimiento :
• Definir las variables a utilizar.
• Asignar el valor 0 a la variable suma
• Solicitar al usuario ingrese una serie de 10 valores, esto se realizara utilizando el ciclo Mientras.
◦ Dentro del ciclo Mientras se irán sumando los valores ingresados. Almacenando el resultado en la variable suma.
• Al terminar el ciclo se calculara el promedio.
• Presentar en pantalla el promedio obtenido.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Proceso CalcularPromedio
Definir contador, numero, suma
Definir promedio como real;
Como Entero;
suma<-0;
contador<-1;
Mientras contador <= 10 Hacer
Escribir Sin Saltar "Ingrese el elemento ", contador;
Leer numero;
suma<-suma + numero;
contador<-contador+1;
FinMientras
promedio<-suma/10;
Escribir "El promedio es: ", promedio;
FinProceso
II semestre de 2015
Lógica de programación
Diagrama de flujo
9
Resultado
Ejemplo5
Calcular la suma siguiente: 100 + 98 + 96 + 94 + . . . + 0 en este orden
Datos de entrada:
• No hay datos de entrada
Datos de salida:
• La suma de cada uno de los números pertenecientes a la serie
Variables a utilizar
• num: esta variable controla la cantidad de iteraciones del ciclos
• sum: almacena la suma de los números de la serie
II semestre de 2015
Lógica de programación
10
Procedimiento :
• Definir las variables a utilizar.
• Asignar el valor 100 a la variable mun, asignar el valor 0 a la variable sum
• Crear el ciclo Mientras, el cual se repetirá hasta que el valor de num sea menor que 0
◦ Sumar cada numero de la serie
◦ Restar 2 al valor actual de la variable num
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Proceso SerieNumeros
Definir num, sum como entero;
num<-100;
sum<-0;
Mientras num >= 0 Hacer
sum<-sum+num;
num<-num-2;
FinMientras
Escribir "La suma es ", sum;
FinProceso
Solución
Resultado
II semestre de 2015
Lógica de programación
11
Estructura repetitiva REPETIR
La estructura repetitiva REPETIR permite ejecutar al menos una vez su bloque repetitivo, a diferencia de
MIENTRAS y PARA que podían no ejecutarse. Esta estructura repetitiva se utiliza cuando conocemos de
antemano que por lo menos una vez se ejecutará el bloque repetitivo ya que la condición de parada de la
estructura repetitiva está al final del bloque a REPETIR.
Sintaxis
Repetir
secuencia_de_acciones
Hasta Que expresion_logica
La estructura repetitiva REPETIR permite la ejecución del grupo de sentencias al menos una vez. Puesto que la
condición de parada será evaluada hasta que se ejecute el grupo de sentencias, el ciclo REPETIR se ejecutara
hasta que la condición de parada resulte ser verdadera.
Representación gráfica
PseInt utiliza la siguiente manera de representar el ciclo REPETIR Ejemplo:
Deseamos presentar en pantalla los primeros 10 números naturales
1. Proceso contarNumeros
2.
Definir contador Como Entero;
3.
contador <- 1;
4.
5.
Repetir
6.
Escribir "Repeticion numero ", contador;
7.
contador <- contador + 1;
8.
Hasta Que contador > 10
9. FinProceso
II semestre de 2015
Lógica de programación
12
Diagrama de flujo
Resultado
En la sentencia repetitiva REPETIR, la condición de parada se comprueba al final del bucle. Lo que
permite que el bucle se ejecute al menos una vez antes de comprobar la condición de parada. El bucle se
repite mientras la condición sea falsa y termina cuando sea verdadera (contrario a la sentencia
mientras).
Ejemplos estructura repetitiva REPETIR
Ejemplo1
El siguiente ejemplo muestra un algoritmo en el cual se solicitan 10 números enteros y presenta en pantalla el
promedio de los números ingresados.
Datos de entrada:
• Serie de números ingresados por el usuario.
Datos de salida:
• Promedio de los números ingresados por el usuario.
Variables a utilizar
• contador: Esta variable llevara el control de las iteraciones del ciclo. • numero: Almacena el numero ingresado por parte del usuario en cada iteración.
• suma: Sera la variable que almacena la suma de todos los números ingresados.
• promedio: Almacena el promedio de todos los números ingresados.
II semestre de 2015
Lógica de programación
13
Procedimiento :
• Definir las variables a utilizar.
• Asignar el valor 0 a la variable suma
• Solicitar al usuario ingrese una serie de 10 valores, esto se realizara utilizando el ciclo Repetir.
◦ Dentro del ciclo Repetir se irán sumando los valores ingresados. Almacenando el resultado en la variable suma.
• Al terminar el ciclo se calculara el promedio.
• Presentar en pantalla el promedio obtenido.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Proceso CalcularPromedio
Definir contador, numero, suma
Definir promedio como real;
Como Entero;
suma<-0;
contador<-1;
Repetir
Escribir Sin Saltar "Ingrese el elemento ", contador;
Leer numero;
suma<-suma + numero;
contador<-contador+1;
Hasta Que contador > 10
promedio<-suma/10;
Escribir "El promedio es: ", promedio;
FinProceso
Resultado
II semestre de 2015
Lógica de programación
14
Diagrama de flujo
Ejemplo2
En el siguiente ejemplo le pediremos al usuario que nos indique si desea que se continué ejecutando el ciclo,
dentro del ciclo se presentara en pantalla un número aleatorio generado por la función AZAR.
Datos de entrada
• El usuario ingresara “S” o “N” como respuesta a la pregunta de confirmación
Datos de salida
• Se presentara en pantalla el valor generado de forma aleatoria
Variables a utilizar
• continuar: captura la respuesta del usuario a la pregunta de confirmación
Procedimiento
• Dentro del grupo de sentencias del ciclo se presentara en pantalla el valor generado por la función
AZAR, Luego se preguntara al usuario si desea continuar.
II semestre de 2015
Lógica de programación
15
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
Proceso numeroAzar
Definir continuar Como Caracter;
Repetir
Escribir "Numero generado al azar: ", azar(100);
Escribir "Desea continuar S / N ";
Leer continuar;
Hasta Que continuar = "N" | continuar = "n"
FinProceso
Diagrama de flujo
Resultado
II semestre de 2015
Lógica de programación
16
Ejemplo3
El siguiente ejemplo muestra la tabla de multiplicar de un numero, dicho numero sera ingresado por el usuario.
Datos de entrada
➢ Número del que se presentara la tabla de multiplicar, este valor será almacenado en la variable “num”.
Datos de salida
➢ Presentar en pantalla la tabla de multiplicar del número ingresado por parte del usuario.
Procedimiento
➢ Solicitar el número al usuario
➢ Por medio del ciclo Mientras ir presentando en pantalla el resultado de multiplicar a la variable cuenta
con el numero (num) ingresado por parte del usuario
Variables a utilizar
➢ cuenta: Variable que llevara el control de las iteraciones, en este caso serán 12 iteraciones.
➢ num: Esta variable almacena el número ingresado por parte del usuario.
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Proceso TablaMultiplicar
Definir cuenta, num Como Entero;
Escribir sin saltar "Ingrese el numero ";
Leer num;
cuenta<-1;
Repetir
Escribir num, " x ", cuenta, " = ", cuenta*num;
cuenta<-cuenta+1;
Hasta Que cuenta > 12
FinProceso
Diagrama de flujo
Resultado
II semestre de 2015
Lógica de programación
17
Ejemplo4
En este ejemplo se muestra como presentar un menú en pantalla, este menú use presentara hasta que el usuario seleccione salir.
Datos de entrada
• Se ingresara un número (correspondiente a la opción del usuario), cuyo valor se almacenara en la variable opción. Datos de salida
• Se presentara en pantalla un mensaje que indique el valor de la opción ingresada por parte del usuario.
Variables a utilizar
• opción: variable de tipo entero, almacenara el valor correspondiente al número ingresado por parte del usuario.
Procedimiento
• Utilizando el ciclo REPETIR, se presentara un menú con 4 opciones. El usuario ingresara un número que puede o no estar en el rango de 1­4.
• Si el valor ingresado esta fuera de rango, se vuelve a mostrar cada una de las opciones.
• El ciclo se repetirá hasta que el usuario ingrese un número en el rango de 1­4
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Proceso ejemploMenu
Definir opcion Como Entero;
Repetir
Escribir "1.- Ingrese 1 para esta Opcion";
Escribir "2.- Ingrese 2 para esta Opcion";
Escribir "3.- Ingrese 3 para esta Opcion";
Escribir "4.- Ingrese 4 para esta Opcion";
Escribir "¿Que opcion desea: ?";
Leer opcion;
Hasta Que opcion >= 1 & opcion <= 4
Escribir "Opcion ingresada: ", opcion;
FinProceso
II semestre de 2015
Lógica de programación
18
Diagrama de flujo
Resultado
II semestre de 2015
Lógica de programación
19
Ejemplo5
Calcular la suma siguiente: 100 + 98 + 96 + 94 + . . . + 0 en este orden
Datos de entrada:
• No hay datos de entrada
Datos de salida:
• La suma de cada uno de los números pertenecientes a la serie
Variables a utilizar
• num: esta variable controla la cantidad de iteraciones del ciclos
• sum: almacena la suma de los números de la serie
Procedimiento :
• Definir las variables a utilizar.
• Asignar el valor 100 a la variable mun, asignar el valor 0 a la variable sum
• Crear el ciclo Repetir, el cual se repetirá hasta que el valor de num sea menor que 0
◦ Sumar cada numero de la serie
◦ Restar 2 al valor actual de la variable num
Solución
Solución
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Proceso SerieNumeros
Definir num, sum como entero;
num<-100;
sum<-0;
Repetir
sum<-sum+num;
num<-num-2;
Hasta Que num < 0
Escribir "La suma es ", sum;
FinProceso
Resultado
II semestre de 2015
Lógica de programación
20
REPETIR vs MIENTRAS Como ya hemos mencionado anteriormente, la estructura repetitiva REPETIR evalúa la condición de parada al
final, luego de haber ejecutado todas las sentencias que forman parte del ciclo. Lo que permite que el bucle se
ejecute al menos una vez antes de comprobar la condición de parada, el bucle se repite mientras la condición sea
falsa y termina cuando sea verdadera (contrario a la sentencia mientras).
Las estructuras repetitivas MIENTRAS y PARA evalúan la condición de parada al inicio del bucle, por lo tanto
para que el ciclo se ejecute la expresión lógica debe ser verdadera desde el principio.
Veamos el siguiente ejemplo en el que se muestra un ciclo en el que se solicitan números enteros al usuario, el
ciclo se detendrá cuando se ingrese un valor negativo.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Proceso leerEnteros
Definir contador, num Como Entero;
contador<-0;
Escribir "Ingrese un numero entero: ";
Leer num;
Mientras num >= 0 Hacer
contador<-contador+1;
Escribir "Ingrese un numero entero: ";
Leer num;
FinMientras
Escribir "Se ingresaro ", contador, " numeros";
FinProceso
En este ejemplo, para poder ingresar al ciclo primero se evalúa la expresión lógica (condición de parada) y
después se ejecutan las sentencias que forman parte del ciclo. ¿Qué pasa si ingresamos un número negativo
desde el principio?. Al ingresar un número negativo desde el principio las sentencias que forman parte del ciclo
no se ejecutaran. Como se muestra en la siguiente captura.
Veamos que pasa si utilizamos el ciclo REPETIR
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Proceso leerEnteros
Definir contador, num Como Entero;
contador<-0;
Repetir
Escribir "Ingrese un numero entero: ";
Leer num;
contador<-contador+1;
Hasta Que num < 0
Escribir "Se ingresaron ", contador, " numeros positivos";
FinProceso
Al utilizar el ciclo REPETIR, se ejecutan el grupo de sentencias pertenecientes al ciclo y posteriormente se
evalúa la condición de parada. II semestre de 2015
Lógica de programación
21
Ejercicios propuestos
Ejercicio1
Realice un algoritmo que presente en pantalla la una serie de números llamada la conjetura de ULAM en honor
del matemático S. Ulam . Por ejemplo: 26,13,40,20,10,5,16,84,2,1. Para presentar los números que corresponden a la conjetura de ULAM, seguimos los siguientes pasos:
• Comience con cualquier entero positivo.
• Si es par, se divide entre 2; si es impar, se multiplica por 3 y se le suma 1. • Obtenga enteros sucesivamente repitiendo el proceso .
• Al final, obtendrá el número 1, independientemente del entero inicial.
Deberá solicitar al usuario un valor, el que será el primero de la lista.
Ejercicio2
Realizar un programa que nos pida un número n, y nos diga cuantos números impares hay entre 1 y n. Para este
realice una versión utilizando mientras y otra versión utilizando para.
Ejercicio3
Hacer un algoritmo que simule el comportamiento de un cronómetro digital desde 0 segundos hasta llegar a 5
minutos en cuenta progresiva. Ejercicio4
Hacer un algoritmo que simule el comportamiento de un cronómetro digital en cuenta regresiva desde 5 minutos
hasta 0 segundos.
Ejercicio5
Obtenga el seno, coseno y tangente de los números ubicados en un rango expresados en ángulos, dichos ángulos
(ángulo inicial y ángulo final) serán ingresados por el usuario. Considere un aumento de 10° .
II semestre de 2015