Está en la página 1de 12

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Laboratorio 4 Estructuras It rati!as" Accio# s $ Fu#cio# s Estructuras It rati!as 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 3 tres! estructuras iterativas, "ue ser#n explicadas a continuacin. R % tir La estructura iterativa repetir posee la caracter$stica de ejecutarse una o m#s veces, es decir, el cuerpo de la estructura siempre se ejecuta al menos una ve% antes de evaluar la condicin. Ps u&oc'&i(o
Repetir <Instruccin 1>; <Instruccin n>; Hasta <condicin>;

Dia(ra)a & F*u+o

GDAyP

pg. &

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

C,,
do{ <Instruccin 1>; <Instruccin n>;

Dia(ra)a & F*u+o

}while (<condicin>);

Cuando se traduce un repetir a C++ se utili%a la estructura 'do ()ile*, ya "ue esta es la +nica "ue posee la caracter$stica de ejecutar su cuerpo antes de evaluar la traduccin. Sin embargo, es importante anali%ar en detalle su diagrama de flujo. La +nica diferencia es "ue el camino tomado despu,s de la condicin es contrario, esto se debe a "ue se utili%a una condicin del tipo mientras en lugar de una condicin del tipo )asta. -n truco simple es negar la condicin original del pseudocdigo durante la traduccin. Ps u&oc'&i(o
Repetir <Instruccin 1>; <Instruccin n>; Hasta <condicin>; do{ <Instruccin 1>; <Instruccin n>;

C,,

}while (!<condicin>);

Mi #tras La estructura iterativa mientras, a diferencia del repetir, eval+a la condicin antes de ejecutar las instrucciones. .or lo tanto, es posible "ue nunca se ejecute el cuerpo de la misma. El siguiente diagrama de flujo muestra el funcionamiento del mientras.

GDAyP

pg. /

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Dia(ra)a & F*u+o

Como existe una traduccin directa a C++, no es necesario anali%ar otro diagrama de flujo. La traduccin se puede reali%ar de la siguiente manera. Ps u&oc'&i(o
Mientras <condicin> hacer <Instruccin 1>; <Instruccin n>; fmientras while (<condicin>){ <Instruccin 1>; <Instruccin n>; }

C,,

Para Las estructuras iterativas repetir y mientras, son poderosas )erramientas "ue nos permiten indicarle a la computadora algoritmos de complejidad arbitraria. Sin embargo, un patrn "ue emerge de forma natural durante la programacin es mover una variable de control desde un valor inicial )asta un valor final en incrementos regulares. .or ejemplo, contar del & al &00 de 3 en 3. 1o )ay nada "ue nos impida reali%ar este tipo de secuencias utili%ando las estructuras anteriores, pero el patrn es tan com+n "ue se desarroll una estructura iterativa especial para este tipo de iteraciones. La estructura iterativa para tiene la peculiaridad de asociar una variable de control o $ndice! a nuestra iteracin, dic)a variable representa donde nos encontramos dentro de nuestra iteracin general y la estructura se encarga de actuali%ar su valor y verificar si se alcan% la condicin deseada. 2 continuacin se muestra la sintaxis de las estructuras para pseudocdigo! y for C++! junto con sus diagramas de flujo. Estos diagramas pueden parecer m#s complejos de lo "ue en realidad son, sin embargo, es sumamente importante entender cmo funcionan las estructuras en cada caso para poder reali%ar una traduccin correcta.

GDAyP

pg. 3

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Ps u&oc'&i(o
Entero var; Para <var>=<inicial> hasta <final> en <inc> hacer <Instruccin 1>; <Instruccin n>; fpara

Dia(ra)a & F*u+o

GDAyP

pg. 3

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

C,,
for(<inic>; <cond>; <act>){ <Instruccin 1>; <Instruccin n>; }

Dia(ra)a & F*u+o

Lo primero "ue se debe notar es "ue la estructura del pseudocdigo es m#s r$gida, es decir, solo puede reali%ar iteraciones "ue involucran una variable de control, un incremento y una condicin "ue utili%a el incremento para ver si se est# intentado subir )acia el valor final o bajar )acia el mismo. .or otra parte, el diagrama de flujo de C++ es demasiado ligero, ya "ue se compone simplemente de tres expresiones "ue son ejecutadas en ciertos momentos. Como se desea traducir una iteracin escrita en pseudocdigo a C++, es necesario obtener las expresiones correctas para "ue ambos diagramas de flujo sean e"uivalentes. 4btener las expresiones para la iniciali%acin y la actuali%acin no presenta mayor complejidad, ya "ue el primer diagrama nos muestra exactamente lo "ue deseamos colocar all$. .ara la condicin podr$amos )acer lo mismo, simplemente colocar lo "ue 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 avan%a!.

No)br 5inic6
GDAyP

E-%r si'# 7ar 8 inicial9


pg. :

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

5cond6 cuando inc 6 0! 5cond6 cuando inc 5 0! 5act6

7ar 58 final9 7ar 68 final9 7ar 8 7ar + inc9

.or lo tanto, tenemos los siguientes ejemplos de traducciones de pseudocdigo a C++. Ps u&oc'&i(o
Para i=0 hasta N hacer <Instruccin 1>; <Instruccin n>; fpara Para i=0 hasta N en 3 hacer <Instruccin 1>; <Instruccin n>; fpara Para i=N hasta 1 en -1 hacer <Instruccin 1>; <Instruccin n>; fpara Para i=N hasta N/2 en -4 hacer <Instruccin 1>; <Instruccin n>; fpara for(i=1; i<=N; i=i+1){ <Instruccin 1>; <Instruccin n>; }

C,,

for(i=1; i<=N; i=i+3){ <Instruccin 1>; <Instruccin n>; } for(i=N; i>=1; i=i-1){ <Instruccin 1>; <Instruccin n>; } for(i=N; i>=N/2; i=i-4){ <Instruccin 1>; <Instruccin n>; }

Los incrementos son expresiones muy comunes en la programacin, por ello, C++ provee formas un poco m#s compactas para reali%ar dic)os incrementos. Es muy posible "ue al estudiar algoritmos expuestos en libros o en ;nternet nunca vea incrementos escritos como se mostr anteriormente. Existen dos tipos de expresiones para incrementos, la primera funciona para cual"uier tipo de incremento y la segunda +nicamente cuando se desea incrementar en &. Cada una de estas expresiones tiene adem#s una versin para decrementos en lugar de incrementos.

GDAyP

pg. <

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Ori(i#a* 7ar 8 7ar + inc9 7ar 8 7ar = inc9 7ar 8 7ar + &9 7ar 8 7ar = &9 7ar +8 inc9 7ar>8inc9 ++7ar9 >>7ar9

Co)%acto

7ar++9 7ar>>9

Como se puede ver los incrementos en & tiene dos formas, la diferencia pr#ctica de cada uno de ellos es sutil y poco relevante para nuestro caso. .or lo tanto, no se explicar# sus diferencias en este laboratorio pero se invita a los estudiantes a investigarlas en libros o ;nternet. .or a)ora, basta con entender "ue ambos representan incrementos en uno de la variable y podemos utili%ar la forma "ue m#s nos llame la atencin. -tili%ando las formas compactas de incremento, los ejemplos anteriores se pueden escribir como sigue. Ps u&oc'&i(o
Para i=0 hasta N hacer <Instruccin 1>; <Instruccin n>; fpara Para i=0 hasta N en 3 hacer <Instruccin 1>; <Instruccin n>; fpara Para i=N hasta 1 en -1 hacer <Instruccin 1>; <Instruccin n>; fpara Para i=N hasta N/2 en -4 hacer <Instruccin 1>; <Instruccin n>; fpara for(i=1; i<=N; i++){ <Instruccin 1>; <Instruccin n>; }

C,,

for(i=1; i<=N; i+=3){ <Instruccin 1>; <Instruccin n>; } for(i=N; i>=1; i--){ <Instruccin 1>; <Instruccin n>; } for(i=N; i>=N/2; i-=4){ <Instruccin 1>; <Instruccin n>; }

GDAyP

pg. ?

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Proc &i)i #tos El paradigma de programacin basado en procedimientos se basa en la posibilidad de crear procedimientos computacionales para resolver problemas complejos, los cuales pueden descomponer el problema en partes menos complejas. Luego, otro procedimiento computacional es desarrollado para el nuevo problema y as$ sucesivamente )asta obtener problemas suficientemente simples "ue pueden ser resueltos utili%ando +nicamente acciones elementales. .or lo tanto, un lenguaje de programacin "ue soporte dic)o paradigma debe ofrecer mecanismos tanto para definir como para invocar procedimientos. La definicin de una accin o funcin no tiene una diferencia significativa desde el punto de vista l,xico, ya "ue ambas poseen la misma estructura. Sin embargo, las acciones se denotan colocando ' void* vac$o! como tipo de valor de retorno y no tienen permitido retornar ning+n valor. Acci'# Ps u&oc'&i(o accion <Nombre_Accion> ( [parametros] ) //Secuencia de instrucciones. Instruccin 1; Instruccin n; faccion } C,, void <Nombre_Accion> ( [parametros] ) { //Secuencia de instrucciones. Instruccin 1; Instruccin n;

Fu#ci'# Ps u&oc'&i(o Funcion <Nombre_Funcion> ( [Parametros] ) : <Tipo_Dato_Retorno> //Secuencia de instrucciones. Instruccin 1; Instruccin n; retorno valor; ffuncion C,, <Tipo_Dato_Retorno> ( [parametros] ) { //Secuencia de instrucciones. Instruccin 1; Instruccin n; return valor; }

<Nombre_Accion>

GDAyP

pg. @

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

Par.) tros La especificacin de los par#metros formales de un procedimiento es similar al utili%ado en nuestro pseudocdigo, sin embargo, algunas diferencias )an de ser mencionadas. La primera diferencia es "ue los par,ntesis no son opcionales, es decir, un procedimiento puede no tener par#metros pero se denota de una de las siguientes formasA &. Bejar el contenido de los par,ntesis vac$oA void a ! /. -tili%ando la palabra clave 'void*A void a void! Como se puede ver, siempre es necesario colocar los par,ntesis. La segunda diferencia es "ue no es posible declarar m+ltiples par#metros del mismo tipo impl$citamente, es decir, es necesario especificar expl$citamente el tipo de cada par#metro. .or lo tanto, no se re"uiere el operador de secuenciamiento 9! para separar par#metros de diferentes tipos. Cinalmente, la tercera diferencia es la declaracin de par#metros por referencia, para ello se utili%a el s$mbolo ampersand D!. Ps u&oc'&i(o Accin a(Entero x, y) Accin a(Entero x, y; Real z) Accin a(Entero x, y; var string w) void a(int x, int y) void a(int x, int y, float z) void a(int x, int y, string& w) C,,

GDAyP

pg. E

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

E+ rcicio a %ro(ra)ar
Bebe desarrollar un algoritmo "ue, por medio de 3 funciones y un men+ de comando, calcule el i> ,simo n+mero Cibonacci, el j>,simo n+mero Friangular y el G n+mero Friangular, donde G es el L> ,simo numero de la sucesin Cibonacci. La sucesin Cibonacci es un conjunto ordenado de n+meros naturales "ue comien%a con 0 y &, y a partir de estos, cada t,rmino es la suma de los dos anteriores. Befiniendo as$ una relacin de recurrencia. .rimeros &0 t,rminos CibonacciA 0, &, &, /, 3, :, @, &3, /&, 33 H Los n+meros Friangulares son a"uellos "ue pueden recomponerse en la forma de un tri#ngulo e"uil#tero, por convencin el primer n+mero triangular es el &. Se forman, sumando los n+meros naturales desde 0 )asta el termino a buscar, por ejemplo, si se esta calculando el : n+mero triangular seria &+/+3+3+: "ue da como resultado &:. Los primeros < n+meros triangulares sonA &, 3, <, &0, &:, /&, H

D ta** s &

#tra&a

Se leer# un n+mero entero 4 "ue indicar# la opcin del usuario, & i>,simo n+mero Cibonacci, / j> ,simo n+mero Friangular y opcin 3 el G n+mero de la sucesin Cibonacci. Luego de la opcin, se debe leer un n+mero entero F "ue ser# el i>,simo, j>,simo o l>,simo dependiendo de la opcin seleccionada. D ta** s & *a sa*i&a .o cada opcin "ue el usuario seleccione, se debe responder el resultado de calcular lo solicitado, bien sea i>,simo n+mero Cibonacci, el j>,simo n+mero Friangular o el G n+mero de la sucesin Cibonacci.

GDAyP

pg. &0

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

E+ )%*os & E#tra&a $ Sa*i&a Entrada: 1 4 2 5 3 2 3 30 2 30 1 30 465 832040 400829492 1 15 Salida: 2

E#tr (a & * E+ rcicio/


.ara los laboratorios de 2lgoritmos y .rogramacin se utili%ar# la plataforma 4micron Iudge desarrollada por el Jrupo de Extensin 7.L. Es de car#cter OPCIONAL el uso de ,sta plataforma para la prueba de los ejercicios de laboratorio. Es O0LIGATORIO enviar la solucin por el sistema Moo&* y responder el cu stio#ario )abilitado, de lo contrario 14 ser# corregido.

R striccio# s/
El proyecto debe ser desarrollado en C++, bajo el sistema operativo Ubu#tu. Las +nicas bibliotecas de C++ permitidas para desarrollar la )erramienta es iostream y string. Se debe usar lectura y escritura st.#&ar. El ejercicio es individual y la entrega del mismo ser# ob*i(atoria) #t a trav,s de la plataforma de competencia 4micron Iudge. Cual"uier copia ser# penali%ada para todos los involucrados con 0. Seguir estrictamente el formato de entrada y salida pautado en este enunciado. ES O0LIGATORIO COMPLETAR EL CUESTIONARIO disponible para cada laboratorio en el tutorial )abilitado en Koodle. Si usted no podido ingresar a la plataforma escriba un correo electrnico a su preparador indicando el inconveniente. La entrega ser# )asta el viernes /& de febrero.

GDAyP

pg. &&

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIN ALGORITMOS Y PROGRAMACIN

L1)it s/
&L4L3 0 L F L 30 Co#su*tas/ En caso de dudas, consultar a los preparadores de la materiaA o o o o o o o o Eduardo Koreno, guayoucvMgmail.com Bavid Nojas, davidrojas0?E&Mgmail.com Iavier Clores, javiverfloMgmail.com I)onatan Jon%ale%, j)onatangrsMgmail.com Nafael Kac)ado, rafael.mac)adoMciens.ucv.ve Elo)ina Juevara, elo)inaguevaraMgmail.com Claudia 7alarino, claudiavalarinoMgmail.com Karjorie Cigueroa, estefi&:&:Mgmail.com

GDAyP

pg. &/

También podría gustarte