You are on page 1of 9

UNIVERSIDAD CENTRAL DE VENEZUELA

FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN

Laboratorio 3
Tema 5. Estructuras Iterativas

Los computadores tienen la capacidad de repetir la ejecucin de secuencias de instrucciones a


gran velocidad y con alto grado de confiabilidad, para este fin se definen en los lenguajes de
programacin Estructuras de Control Iterativas. Su objetivo es permitir la expresin de la
repeticin de una secuencia de instrucciones.
En C++ existen tres estructuras iterativas: el while (equivalente al Mientras), el do while
(equivalente al Repetir) y el for (equivalente al Para), las cuales sern explicadas a
continuacin.

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.

Pseudocdigo Diagrama de Flujo


Repetir
<Instruccin 1>;

<Instruccin n>;
Hasta <condicin>;

C++ Diagrama de Flujo


do {
<Instruccin 1>;

<Instruccin n>;
} while (<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.

Pseudocdigo Diagrama de Flujo


Entero var;
Para <var>=<Valor1> hasta <final> en <inc> hacer
<Instruccin 1>;

<Instruccin n>;
fpara

GDAyP pg. 3
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIN
ALGORITMOS Y PROGRAMACIN

C++ Diagrama de Flujo


for(<inic>; <cond>; <act>){
<Instruccin 1>;

<Instruccin n>;
}

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;

Por lo tanto, tenemos los siguientes ejemplos de traducciones de pseudocdigo a C++:

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

Para i=0 hasta n en 3 hacer for(i=1; i<=n; i=i+3){


<Instruccin 1>; <Instruccin 1>;

<Instruccin n>; <Instruccin n>;
}
fpara

Para i=n hasta 1 en -1 hacer for(i=n; i>=1; i=i-1){


<Instruccin 1>; <Instruccin 1>;

<Instruccin n>; <Instruccin n>;
}
fpara

Para i=N hasta n/2 en -4 hacer for(i=n; i>=n/2; i=i-4){


<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

Para i=0 hasta n en 3 hacer for(i=1; i<=n; i+=3){


<Instruccin 1>; <Instruccin 1>;

<Instruccin n>; <Instruccin n>;
}
fpara

Para i=n hasta 1 en -1 hacer for(i=n; i>=1; i--){


<Instruccin 1>; <Instruccin 1>;

<Instruccin n>; <Instruccin n>;
}
fpara

Para i=n hasta n/2 en -4 hacer for(i=n; i>=n/2; i-=4){


<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

EJERCICIOS A PROGRAMAR PARA EL LABORATORIO 3


En este laboratorio debes desarrollar programas capaces usar la lectura y escritura estndar,
declaracin de variables, acciones elementales y prioridad de operadores, utilizando lenguaje
C++ y creando programas que compilen y corran en el entorno Linux.

Ejercicios: todos deben agregarse en el mismo archivo .cpp

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:

3. Dada un nmero entero positivo N calcular:


3.1. El promedio de los dgitos de N, usando el equivalente en C++ del ciclo Repetir.
3.2. El porcentaje de dgitos impares y el porcentaje de dgitos pares de N, usando el
equivalente en C++ del ciclo Mientras.
3.3. Indicar si N es un nmero primo, usando el equivalente en C++ del ciclo Para.

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

Es OBLIGATORIO entregar la solucin del laboratorio subindola a la plataforma Moodle en la


cuenta de cada alumno.
En caso de problemas con la plataforma Moodle se debe enviar el archivo del laboratorio al
correo electrnico del preparador de su grupo de laboratorio, con copia al correo del profesor de
su seccin y copia a la Profa. Yusneyi Carballo Barrera (yusneyi.carballo@ciens.ucv.ve) antes
de la hora tope de entrega, de lo contrario NO ser corregido.
Los correos electrnicos del grupo docente estn en el sitio web de la materia, as como
el correo electrnico del preparador de cada grupo de laboratorio.

Formato para el nombre del archivo, sin usar acentos o :


<Seccion>Lab3<NombreyApellido>.cpp
Ejemplo, para el alumno con nombre Jos Antonio Marias
C1Lab3JoseMarinas.cpp
Archivos de laboratorios o proyectos que no cumplan con este formato de nombre
NO SERN CORREGIDOS

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

EN CASO DE NO TENER ACCESO AL MOODLE:

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, 28 de diciembre de 2014

GDAyP pg. 9

You might also like