Professional Documents
Culture Documents
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Laboratorio 3
Tema 5. Estructuras Iterativas
Mientras
La estructura iterativa mientras, a diferencia del repetir, evala la condicin antes de ejecutar
las instrucciones. Por lo tanto, es posible que nunca se ejecute el cuerpo de la misma. El
siguiente diagrama de flujo muestra el funcionamiento del mientras.
Diagrama de Flujo
Como existe una traduccin directa a C++, no es necesario analizar otro diagrama de flujo. La
traduccin se puede realizar de la siguiente manera.
Pseudocdigo C++
Mientras <condicin> hacer while (<condicin>){
<Instruccin 1>; <Instruccin 1>;
<Instruccin n>; <Instruccin n>;
fmientras }
GDAyP pg. 1
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Repetir
La estructura iterativa repetir posee la caracterstica de ejecutarse una o ms veces, es decir,
el cuerpo de la estructura siempre se ejecuta al menos una vez antes de evaluar la condicin.
Cuando se traduce un Repetir a C++ se utiliza el do while, ya que es una estructura iterativa
equivalente que posee la caracterstica de ejecutar su cuerpo de instrucciones antes de evaluar
la condicin. Sin embargo, su validacin no es exactamente igual que el Repetir utilizado en
pseudocdigo. El do while utiliza una condicin de control para el ciclo del tipo mientras, por
lo tanto se hacen las instrucciones mientras la condicin es verdadero (se sale del ciclo cuando
se hace falso); en cambio el Repetir utiliza una condicin del tipo hasta, se repiten las
instrucciones mientras que la condicin es falso y se sale del ciclo cuando se hace verdadero.
Un truco simple es negar la condicin original del Repetir del pseudocdigo al traducirlo al do ..
while.
GDAyP pg. 2
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Pseudocdigo C++
Repetir do{
<Instruccin 1>; <Instruccin 1>;
<Instruccin n>; <Instruccin n>;
Hasta <condicin>; } while (<condicin>);
Para
Las estructuras iterativas Repetir y Mientras, son poderosas herramientas que nos permiten
indicarle a la computadora algoritmos de complejidad arbitraria. Sin embargo, un patrn que
emerge de forma natural durante la programacin es mover una variable de control desde un
valor inicial hasta un valor final en incrementos regulares. Por ejemplo, contar del 1 al 100 de 3
en 3. No hay nada que nos impida realizar este tipo de secuencias utilizando las estructuras
anteriores, pero el patrn es tan comn que se desarroll una estructura iterativa especial para
este tipo de iteraciones.
La estructura iterativa para tiene la peculiaridad de asociar una variable de control a nuestra
iteracin, dicha variable representa donde nos encontramos dentro de nuestra iteracin general
y la estructura se encarga de actualizar su valor y verificar si se alcanz condicin deseada.
A continuacin se muestra la sintaxis de las estructuras para (pseudocdigo) y for (C++) junto
con sus diagramas de flujo. Estos diagramas pueden parecer ms complejos de lo que en
realidad son, sin embargo, es sumamente importante entender cmo funcionan las estructuras
en cada caso para poder realizar una traduccin correcta.
GDAyP pg. 3
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Lo primero que se debe notar es que la estructura del pseudocdigo es ms rgida, es decir,
solo puede realizar iteraciones que involucran una variable de control, un incremento y una
condicin que utiliza el incremento para ver si se est intentado subir hacia el valor final o bajar
hacia el mismo. Por otra parte, el diagrama de flujo de C++ es demasiado ligero, ya que se
compone simplemente de tres expresiones que son ejecutadas en ciertos momentos.
Como se desea traducir una iteracin escrita en pseudocdigo a C++, es necesario obtener las
expresiones correctas para que ambos diagramas de flujo sean equivalentes. Obtener las
expresiones para la inicializacin y la actualizacin no presenta mayor complejidad, ya que el
primer diagrama nos muestra exactamente lo que deseamos colocar all. Para la condicin
podramos hacer lo mismo, simplemente colocar lo que muestra el primer diagrama. Sin
embargo, el valor del incremento nunca se modifica, por lo tanto es mejor tener dos reglas de
traduccin, uno cuando el incremento es positivo y uno cuando es negativo (si el incremento es
cero el ciclo nunca avanza).
Nombre Expresin
<inic> Var = inicial;
<cond> (cuando inc > 0) Var <= final;
<cond> (cuando inc < 0) Var >= final;
<act> Var = Var + inc;
GDAyP pg. 4
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Pseudocdigo C++
Para i=0 hasta n hacer for(i=1; i<=n; i=i+1){
<Instruccin 1>; <Instruccin 1>;
<Instruccin n>; <Instruccin n>;
}
fpara
Los incrementos son expresiones muy comunes en la programacin, por ello, C++ provee
formas un poco ms compactas para realizar dichos incrementos. Es muy posible que al
estudiar algoritmos expuestos en libros o en pginas web nunca vea incrementos escritos
como se mostr anteriormente.
Existen dos tipos de expresiones para incrementos, la primera funciona para cualquier tipo de
incremento y la segunda nicamente cuando se desea incrementar en 1. Cada una de estas
expresiones tiene adems una versin para decrementos en lugar de incrementos.
Original Compacto
Var = Var + inc; Var += inc;
Var = Var inc; Var-=inc;
Var = Var + 1; ++Var; Var++;
Var = Var 1; --Var; Var--;
Como se puede ver los incrementos en 1 tiene dos formas, la diferencia prctica de cada uno
de ellos es sutil y poco relevante para nuestro caso. Por lo tanto, no se explicar sus diferencias
en este laboratorio pero se invita a los estudiantes a estudiarlas en libros o pginas web. Por
GDAyP pg. 5
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
ahora, basta con entender que ambos representan incrementos en uno de la variable y
podemos utilizar la forma que ms nos llame la atencin.
Utilizando las formas compactas de incremento, los ejemplos anteriores se pueden escribir
como sigue. Para los casos de incrementos en 1 o decrementos en -1 se muestran tres veces,
uno con la forma compacta genera y uno con cada forma compacta de incremento 1. Esto con
la intencin de mostrar que todas son vlidas.
Pseudocdigo C++
Para i=0 hasta n hacer for(i=1; i<=n; i++){
<Instruccin 1>; <Instruccin 1>;
<Instruccin n>; <Instruccin n>;
}
fpara
GDAyP pg. 6
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
NOTA: en todos los ejercicios debe solicitarse los valores de entrada al usuario, leerlos y
realizar las validaciones necesarias en los datos de entrada.
1. Utiliza ciclos for para calcula el valor de siguiente expresin, con valores n, x, z dados por el
usuario y de tipo entero. Considere en su solucin que el valor de n debe ser mayor o igual a
1, mientras que el valor de z puede ser cualquier valor entero. Realice las validaciones
necesarias sobre los valores de entrada.
n i
3 x j
2
x
2*
n* z
i 1 j 1
Ayudas:
https://www.youtube.com/watch?v=Npwdw3kdea8
http://www.lawebdelprogramador.com/foros/Dev-C/1358509-Calculo-de-PI.html
2. Utiliza ciclos para calcular rea de un polgono dados los valores de n de sus vrtices. La
cantidad n de vrtices ser suministrada por el usuario, debe ser mayor o igual a 3.
Utilice la siguiente frmula para el clculo del rea:
Detalles de entrada
Se utilizar lectura estndar para obtener los datos de entrada suministrados por el usuario para
cada ejercicio.
Detalles de la salida
Se escribir por salida estndar un string que representa la respuesta a cada ejercicio.
Entrega del Ejercicio: Fecha de entrega: hasta el viernes 23.enero.2015, 11:30 pm.
GDAyP pg. 7
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Restricciones
El laboratorio debe realizarse en C++, de forma tal que COMPILE en el sistema
operativo Ubuntu. Laboratorio que NO compila, NO se corrige, nota CERO (0) puntos.
Se permite el uso de elementos de la Librera (o Biblioteca) Estndar de C++ (stdio,
iostream, string, cmath, math, entre otras).
Se debe usar lectura y escritura estndar.
El ejercicio es individual y la entrega del mismo ser obligatoriamente a travs de la
plataforma Moodle, tambin debe responderse el cuestionario que ser habilitado.
Cualquier copia ser penalizada con CERO (0) puntos para todos los involucrados.
Material de Apoyo
En el sitio web de la materia hay enlaces a sitios con informacin sobre programacin
con C++ (http://www.ciens.ucv.ve/algoritmosyprogramacion/materiales.html).
En el sitio web https://ideone.com/ puede copiarse el cdigo del programa, seleccionarse
el lenguaje de programacin, compilarse y probarse en lnea.
Consultas
En el sitio web de la materia, seccin Materiales, se indican los horarios en que los
Preparadores estarn disponibles en la Sala de Micros para consultas de los
laboratorios y proyectos.
GDAyP pg. 8
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN
Cuestionario Laboratorio 3
Tema 5. Estructuras Iterativas
1. Cul de las estructuras iterativas existentes en C++ evala la condicin antes de ejecutar la
instruccin?
- for
- while
- do .. while
- Ninguno de los anteriores
2. Cul de los ciclos existentes en C++ se ejecuta al menos una vez, sea cual sea la condicin de
parada?
- for
- while
- do .. while
- Ninguno de los anteriores
3. Si utilizamos un ciclo for Es necesario conocer a priori la cantidad de iteraciones que se van a
realizar?
- S
- No
4. Los ciclos, al igual que los condicionales, trabajan bajo una condicin que se evala y retorna los
valores Verdadero o Falso.
- Verdadero
- Falso
Aquellos alumnos que no tienen acceso al Moodle deben responder a las preguntas del cuestionario
envindolas por correo electrnico al preparador encargado de corregir su laboratorio, con el siguiente
nombre de archivo:
<Seccion>Lab3<NombreyApellido>_Cuestionario.pdf (.doc)
ejemplo: C3Lab3LuisGarcia_Cuestionario.pdf
Archivos de laboratorio o proyecto que no cumpla con este formato de nombre NO SER
CORREGIDO
GDAyP pg. 9