Está en la página 1de 18

Estructura de Datos :Repetitivas y Secuencial Estructuras Repetitivas Las estructuras repetitivas o iterativas son aquellas en las que las

s acciones se ejecutan un nmero determinado de veces y dependen de un valor predefinido o el cumplimiento de una determinada accin. Caractersticas Las estructuras repetitivas permiten representar aquellas acciones que pueden descomponerse en otras sub-acciones primitivas. Es una estructura con una entrada y una salida en la cual se repite una accin un nmero determinado o indeterminado de veces En una Estructura Repetitiva Mientras (While) se repite una accin mientras se cumpla la condicin que controla el bucle. La caracterstica principal de esta estructura es lque la condicin es evaluada siempre antes de cada repeticin. La estructura repetitiva Desde(FOR) permite que las instrucciones las cuales contiene en su mbito, se ejecuten un nmero de veces determinado. Entre las estructuras repetitivas se encuentran: Mientras (while) Repetir (repeat) Estructura Mientras (while) La estructura repetitiva while, es aqulla en que el cuerpo del bucle se repite mientras se cumple una determinada condicin, su representacin grfica es:

Pseudocdigo en espaol Mientras condicin hacer Accin S1 Accin S2 : accin Sn

Pseudocdigo en ingls while condicin do <Acciones> : End_while

Fin_mientras Diagrama N-S

1er. Ejemplo: Contar los nmeros enteros positivos introducidos por teclado. Se consideran dos variables enteras NUMERO y CONTADOR (contar el nmero de enteros positivos). Se supone que se leen nmeros positivos y se detiene el bucle cuando se lee un nmero negativo o cero. Pseudocdigo Inicio contador 0 Leer (numero) Mientras numero > 0 hacer contador Leer (numero) Fin_Mientras Escribir('El nmero de enteros positivos es : ', contador) Fin Diagrama de Flujo 1er. Ejemplo contador+1

2do. Ejemplo Se presenta algoritmo para el clculo de la sumatoria de los n primeros trminos de la siguiente serie: 1*2*3 + 2*3*4 + 3*4*5 + 4*5*6 //WHILE_ #include <iostream.h> #include <conio.h> main(){ int i=0, n; float termino, suma=0; clrscr(); cout << "Digite el valor de N: "; cin >> n; cout << "\n"; while( i<n ){ i = i + 1;

termino = i * (i+1) * (i+2); suma = suma + termino; cout << i << " * " << i+1 << " * " << i+2 << " = " << termino << endl; } cout << "\nSumatoria = " << suma; } Estructura Repetir (repeat) Esta estructura se ejecuta hasta que se cumpla una condicin determinada que se comprueba hasta el final del bucle. Se ejecuta al menos una vez. El bucle repetir-Hasta_que se repite mientras el valor de la expresin booleana de la condicin sea falsa, justo la opuesta de la sentencia mientras. Pseudocdigo en Espaol Pseudocdigo en Ingls Repetir Repeat <acciones> : Hasta que <condicin> Until <condicin> Diagrama de Flujo de Repetir <acciones> :

1 er .Ejemplo : Preguntar un nombre y repetirse en pantalla tantas veces como se desee. (preguntar cantidad de repeticiones), indicando el nmero de repeticin. Declaracin de variables Cadena : nom entero : x, n Inicio escribir(Nombre : ) leer(nom)

escribir(Cuntas veces quieres repetirlo ? : ) leer(n) para x 1 hasta n hacer escribir(x.- , nom) Fin 2do. Ejemplo Construir un programa que sume todos los nmeros que introduce el usuario hasta que introduzca el nmero cero. /* declaraciones */ float numero, suma_acumulada; /*instrucciones*/ comienzo /* inicializacin */ suma_acumulada := 0; leer (numero); mientras numero > 0 repetir comienzo suma_acumulada := suma_acumulada + numero; leer (numero); fin mientras; mostrar ("La suma acumulada es: ", suma_acumulada); fin; Estructura Desde/Para (for) Esta sentencia incluye una expresin que especifica el valor inicial de un ndice, otra expresin que determina cuando se contina o no el bucle y una tercera expresin que permite que el ndice se modifique al final de cada pasada. La forma general de esta sentencia es: for (expresin 1; expresin 2; expresin 3) sentencia en donde expresin 1 (expresin de asignacin), inicializa algn parmetro (llamado ndice) que controla la repeticin del bucle; expresin 2 (expresin lgica), representa una condicin que debe ser satisfecha para que se contine la ejecucin del bucle; expresin 3 (expresin monaria o expresin de asignacin), modifica el valor del parmetro inicialmente asignado por la expresin La ejecucin de la sentencia for sucede de la siguiente forma: 1. Se inicializan los parmetros. 2. Se evala la expresin lgica. 2.1. Si el resultado es distinto de cero (verdadero), se ejecuta la sentencia, se evala la expresin que da lugar a la progresin de la condicin y se vuelve al punto 2. 2.2. Si el resultado de 2, es cero (falso), la ejecucin de la sentencia for se da por finalizada y se contina en la siguiente sentencia del programa. En muchas ocasiones se conoce de antemano el nmero de veces que se desean ejecutar las acciones de un bucle. En estos casos en el que el nmero de iteraciones es fija, se debe usar la estructura desde o para. La estructura Desde ejecuta las acciones del cuerpo del bucle un nmero especfico de veces y de modo

automtico controla el nmero de iteraciones o pasos a travs del cuerpo del bucle. Pseudocdigo en Espaol Pseudocdigo en Ingls Desde variable(v)= vi Hasta vf hacer For variable (v)= vi To vf Do <acciones> : Fin_desde Donde: v: Variable ndice vi, vf: Valores inicial y final de la variable Diagrama de Flujo de la estructura Desde/Para <acciones>

1er.Ejemplo Cuenta del 1 al 50 varias veces, con variantes de la instruccin FOR. //FOR_ #include <iostream.h> #include <iomanip.h> #include <conio.h> main(){ int i=1; clrscr(); for( ; i<=50; i++) cout << setw(5) << i; cout << "\n\n"; for(i=1; i<=50; i++) cout << setw(5) << i; cout << "\n\n"; i = 0; for( ; i<50; ) { i++; cout << setw(5) << i; } cout << "\n\n"; for(i=1 ; i<=50; ) { cout << setw(5) << i; i++; } cout << "\n\n"; i = 0; for( ; ; ) { i ++;

if (i > 50) break; else cout << setw(5) << i; } getch();} 2do. Ejemplo Expansin binomial: n n-i i (a+b)_ = S ( n! / (i!(n-i)!))a b i=0 El siguiente algoritmo muestra en pantalla los coeficientes de la expansin binomial para un N dado por teclado: //FOR_5.CPP #include <iostream.h> #include <conio.h> float factorial(int numero){ int i; float f=1; for(i=1; i<=numero; i++) f = f * i; return f; } main(){ int n, i, a, b, coeficiente; clrscr(); cout<<"Digite exponente(n) para calcular coeficientes del binomial (a+b)_: "; cin >> n; cout <<"\n";

for(i=0; i<=n; i++) { coeficiente = factorial(n) / (factorial(i)*factorial(n-i)); cout << coeficiente << " "; } getch(); return 0; } Estructura Secuencial Es aqulla en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. Caractersticas La estructura secuencial tiene una entrada y una salida. Un programa puede contener simplemente una secuencia de instrucciones. Es aquella que ejecuta las acciones sucesivamente unas a continuacin de otras sin posibilidad de omitir ninguna y naturalmente, sin bifurcaciones. Su representacin grfica es la siguiente: Estructura Secuencial

.... Pseudocdigo De Una Estructura Secuencial Inicio : : acciones : fin 1er. Ejemplo : Calcular el salario neto de un trabajador en funcin del nmero de horas trabajadas, precio de la

hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de impuestos (20 por 100). Pseudocdigo Inicio {clculo salario neto} leer nombre, horas, precio_hora salario_bruto horas * precio impuestos 0.20 * salario_bruto salario_neto salario_bruto_impuestos escribir nombre, salario_bruto, salario_neto_bruto, salario_neto Fin Diagrama de flujo 1er. Ejemplo

2do. Ejemplo Suponga que un curso estaba compuesto de tres estudiantes. Cada uno de los estudiantes curs dos asignaturas. Se deben leer inicialmente los nombres de los tres estudiantes, los nombres de las dos asignaturas y luego: las calificaciones definitivas de cada una de las dos asignaturas para cada uno de

los tres estudiantes. Calcular: 1. la nota promedio de cada uno de los tres estudiantes. 2. 2. la nota promedio de cada una de las asignaturas. INICIO CARACTER Asignatura1[10], Asignatura2[10], Estudiante1[15], Estudiante2[15], Estudiante3[15]; REAL Est1Asig1, Est1Asig2, Est2Asig1, Est2Asig2, Est3Asig1, Est3Asig2, PromedioAsignatura1, PromedioAsignatura2, PromedioEstudiante1,PromedioEstudiante2, PromedioEstudiante3; Escribir("Digite Nombre asignatura 1: ") Leer(Asignatura1) Escribir("Digite Nombre asignatura 2: ") Leer(Asignatura2) Escribir("Digite Nombre estudiante 1: ") Leer(Estudiante1) Escribir("Digite Nombre estudiante 2: ") Leer(Estudiante2) Escribir("Digite Nombre estudiante 3: ") Leer(Estudiante3) //A continuacin se pedir digitar las 3 * 2 = 6 calificaciones Escribir("Digite Calificaciones de ", Estudiante1, ":") Escribir("En la asignatura de ", Asignatura1, ": ") Leer(Est1Asig1) Escribir("En la asignatura de ", Asignatura2, ": ") Leer(Est1Asig2) Escribir("Digite Calificaciones de ", Estudiante2 ": ") Escribir("En la asignatura de ", Asignatura1, ": ") Leer(Est2Asig1) Escribir("En la asignatura de ", Asignatura2, ": ") Leer(Est2Asig2)

Escribir("Digite Calificaciones de ", Estudiante3, ": ") Escribir("En la asignatura de ", Asignatura1, ": ") Leer(Est3Asig1) Escribir("En la asignatura de ", Asignatura2, ": ") Leer(Est3Asig2) //A continuacin los clculos necesarios

PromedioEstudiante1 = (Est1Asig1 + Est1Asig2) / 2 PromedioEstudiante2 = (Est2Asig1 + Est2Asig2) / 2 PromedioEstudiante3 = (Est3Asig1 + Est3Asig2) / 2 PromedioAsignatura1 = (Est1Asig1 + Est2Asig1 + Est3Asig1) / 3 PromedioAsignatura2 = (Est1Asig2 + Est2Asig2 + Est3Asig2) / 3

Escribir("Promedio estudiantes en ", Asignatura1, "=", PromedioAsignatura1) Escribir("Promedio estudiantes en ", Asignatura2, "=", PromedioAsignatura2) Escribir("Promedio ", Estudiante1, " = ", PromedioEstudiante1) Escribir("Promedio ", Estudiante2, " = ", PromedioEstudiante2) Escribir("Promedio ", Estudiante3, " = ", PromedioEstudiante3) FIN. 3er. Ejemplo En unas elecciones se presentan tres candidatos. a continuacin se presenta algoritmo para calcular estadsticas elementales de la eleccin. Se tienen en cuenta los votos en blanco y la poblacin electoral total. A INICIO Constante REAL TotalCensoElectoral = 50000 CARACTER Candidato1[15], Candidato2[15], Candidato3[15] REAL VotosCandidato1, VotosCandidato2, VotosCandidato3, VotosEnBlanco,

TotalVotosEleccion, PorcentajeCandidato1,PorcentajeCandidato2, PorcentajeCandidato3, PorcentajeVotosEnBlanco, PorcentajeCiudadanosResponsables, PorcentajeCiudadanosInconcientes; Escribir("Digite Nombre candidato 1: ") Leer(Candidato1) Escribir("Digite Nombre candidato 2: ") Leer(Candidato2) Escribir("Digite Nombre candidato 3: ") Leer(Candidato3) Escribir("Digite votacin de ", Candidato1, ": ") Leer(VotosCandidato1) Escribir("Digite votacin de ", Candidato2, ": ") Leer(VotosCandidato2) Escribir("Digite votacin de ", Candidato3, ": ") Leer(VotosCandidato3) Escribir("Digite votacin en blanco ") Leer(VotosEnBlanco) //A continuacin los clculos necesarios TotalVotosEleccion = VotosCandidato1 + VotosCandidato2 + VotosCandidato3 + VotosEnBlanco PorcentajeCandidato1 = ( VotosCandidato1 / TotalVotosEleccion ) * 100 PorcentajeCandidato2 = ( VotosCandidato2 / TotalVotosEleccion ) * 100 PorcentajeCandidato3 = ( VotosCandidato3 / TotalVotosEleccion ) * 100 PorcentajeVotosEnBlanco = ( VotosEnBlanco / TotalVotosEleccion ) * 100 PorcentajeCiudadanosResponsables=(TotalVotosEleccion/TotalCensoElectoral)*100 PorcentajeCiudadanosInconcientes = 100 - PorcentajeCiudadanosResponsables

Escribir("Porcentaje ", Candidato1, " = ", PorcentajeCandidato1) Escribir("Porcentaje ", Candidato2, " = ", PorcentajeCandidato2) Escribir("Porcentaje ", Candidato3, " = ", PorcentajeCandidato3) Escribir("Porcentaje de votos en blanco = ", PorcentajeVotosEnBlanco) Escribir("Si votaron = ", PorcentajeCiudadanosResponsables, "%") Escribir("NO votaron = ", PorcentajeCiudadanosInconcientes, "%") FIN. 5. Flujograma: Definicin Es un esquema para representar grficamente un algoritmo .Se basan en la utilizacin de diversos smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan por medio de flechas para indicar la secuencia de operacin. Para hacer comprensible los Diagramas a todas las personas , los Smbolos se sometieron a una normalizacin , o lo que es en realidad se hicieron smbolos casi universales, ya que , en un principio cada usuario podra tener sus propios smbolos para representar sus procesos en forma de Diagrama de Flujo. Esto trajo como consecuencia que solo el que conoca sus smbolos, los poda interpretar. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente. A continuacin se mostrara las simbologas mas utilizadas : Simbologia utilizada en los diagramas de flujo Smbolo funcin

Ejemplo: Clculo del Factorial de un Nmero Entero


Anteriormente se analiz el diagrama de flujo para determinar el factorial de un nmero entero. Dicho diagrama de flujo se muestra en la pgina siguiente. Observe que un conjunto de instrucciones del diagrama de flujo se realizan en forma repetitiva mientras se satisface una condicin. En este caso la condicin es contador<numero. Es decir, mientras contador<numero, se ejecutarn las asignaciones: factorial = factorial * contador; contador = contador + 1; El programa en C++ correspondiente a este diagrama de flujo es: #include <iostream.h> #include <stdlib.h> int main() { /* Este programa permite el calculo del factorial de un numero entero */ int numero, factorial contador;

cout<< "Dame un numero entero \n"; cin>>numero; factorial = 1; contador = 1; while (contador <= numero) { factorial = factorial * contador; contador = contador + 1 ; } cout<<El factorial de << numero<< es <<factorial << "\n"; system("PAUSE"); return 0; }

Inicio numero

factorial = 1 contador = 1

Falso

contador < numero

Verdadero

factorial=factorial * contador contador=contador + 1

factorial

Fin

Nota Importante acerca de while y do-while

Es importante mencionar que con la sentencia do-while, las sentencias del ciclo se ejecutan por lo menos una vez, mientras que en la sentencia while las sentencias del ciclo pudieran no ser ejecutadas ni una sola vez, dependiendo de la expresin boleana. Es decir, cuando se ejecuta una sentencia dowhile, la primera vez se ejecutan las sentencias del cuerpo de la sentencia y es hasta entonces que se evala la expresin boleana. El ciclo se repetir slo si la expresin boleana sigue teniendo el valor de verdadero. Por otro lado, en la sentencia while, an la primera vez, lo primero que se evala es la expresin boleana y slo si sta es verdadera las sentencias del ciclo se ejecutarn. En otras palabras, las sentencias while y do-while son equivalentes slo si el ciclo se ejecuta al menos una vez.

Operadores de Incremento y Decremento


Hasta ahora, los operadores aritmticos que se han estudiado (+, -, *, /) involucran dos operandos. Por ejemplo a+b, x*y, etc. Por ello, a dichos operadores se le conocen como operadores binarios. Se introducen aqu los operadores conocidos como operadores unarios. Los ms comunes se representan como ++ (operador incremental) y - (operador decremental). Estos operadores se aplican sobre una sola variable y se aplican sobre variables enteras. El operador ++ incrementa el valor de una variable en uno. Mientras que el operador - disminuye el valor de una variable en uno. Por ejemplo: n++; m--; Son sentencias ejecutables de C++. La primera sentencia hace que el valor de n aumente en uno. La segunda sentencia hace que el valor de m disminuya en uno. Es decir, las sentencias anteriores son equivalentes a: n = n + 1; m= m - 1; Este tipo de operadores se utilizan muy comnmente en ciclos. Por ejemplo, en el programa del clculo del factorial, la segunda sentencia del ciclo: contador = contador +1; se pudo haber expresado como: contador++;

Ciclos Infinitos
Las sentencias while o do-while no terminan su ejecucin hasta que la expresin boleana que se evala (entre parntesis despus de la palabra while) es falsa. Por ello es que el ciclo contiene normalmente alguna asignacin que permite cambiar el valor de verdad de la expresin boleana, de forma que, si al principio la expresin boleana es verdadera, llegar un momento en que su valor cambia a falso. Si la expresin boleana siempre es verdadera el ciclo continuar ejecutndose indefinidamente. En ese caso se dice que se tiene un ciclo infinito. Habr que tener cuidado para evitar dicha situacin.

Indentacin
Existen algunas recomendaciones bsicas para lograr un buen estilo de programacin. Una de ellas es escribir comentarios.

Otra es escribir en grupo a aquellos elementos que son considerados naturalmente como un grupo. Una forma de hacer esto es utilizar una nueva lnea para separar aquellas sentencias que pueden considerarse como separadas. La tercera es que las sentencias encerradas entre las llaves de las sentencias compuestas if-else, while y do-while debera ser indentadas. Esto contribuye en mucho a la claridad del programa.

Ejemplo de un Algoritmo sencillo con su respectivo Flujograma Considere un Algoritmo para leer dos nmeros A y B luego sumarlos y por ltimo imprimir o mostrar el resultado de la suma. Algoritmo : Representacin Grafica : Inicio Leer A Leer B C=A+B Mostrar C Fin

También podría gustarte