You are on page 1of 18

Estructura de Datos :Repetitivas y Secuencial

• Estructuras Repetitivas
Las estructuras repetitivas o iterativas son aquellas en las que las acciones se ejecutan un número
determinado de veces y dependen de un valor predefinido o el cumplimiento de una determinada
acción.
Características
• 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 acción un número
determinado o indeterminado de veces
• En una Estructura Repetitiva Mientras (While) se repite una acción mientras se cumpla la
condición que controla el bucle. La característica principal de esta estructura es lque la
condición es evaluada siempre antes de cada repetición.
• La estructura repetitiva Desde(FOR) permite que las instrucciones las cuales contiene en su
ámbito, se ejecuten un número de veces determinado.
Entre las estructuras repetitivas se encuentran:
Mientras (while)

Repetir (repeat)

Estructura Mientras (while)


La estructura repetitiva while, es aquélla en que el cuerpo del bucle se repite mientras se cumple una
determinada condición, su representación gráfica es:

Pseudocódigo en español Pseudocódigo en inglés


Mientras condición hacer while condición do
Acción S1 <Acciones>
Acción S2 :
: End_while
acción Sn
Fin_mientras

Diagrama N-S

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

Diagrama de Flujo – 1er. Ejemplo


2do. Ejemplo
Se presenta algoritmo para el cálculo de la sumatoria de los n primeros términos 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 condición 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 expresión booleana de la condición sea falsa, justo la opuesta de la sentencia mientras.
Pseudocódigo en Español
Pseudocódigo en Inglés
Repetir
Repeat
<acciones> <acciones>
: :
Hasta que <condición>
Until <condición>
Diagrama de Flujo de Repetir

1 er .Ejemplo :
Preguntar un nombre y repetirse en pantalla tantas veces como se desee. (preguntar cantidad de
repeticiones), indicando el número de repetición.
Declaración de variables
Cadena : nom
entero : x, n
Inicio
escribir(‘Nombre : ‘)
leer(nom)
escribir(‘Cuántas veces quieres repetirlo ? : ‘)
leer(n)
para x 1 hasta n hacer
escribir(x’.- ‘, nom)
Fin
2do. Ejemplo
Construir un programa que sume todos los números que introduce el usuario hasta que introduzca el
número cero.
/* declaraciones */
float numero, suma_acumulada;
/*instrucciones*/
comienzo
/* inicialización */
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 expresión que especifica el valor inicial de un índice, otra expresión que
determina cuando se continúa o no el bucle y una tercera expresión que permite que el índice se
modifique al final de cada pasada.
La forma general de esta sentencia es:
for (expresión 1; expresión 2; expresión 3) sentencia
en donde
expresión 1 (expresión de asignación), inicializa algún parámetro (llamado índice) que controla la
repetición del bucle;
expresión 2 (expresión lógica), representa una condición que debe ser satisfecha para que se continúe la
ejecución del bucle;
expresión 3 (expresión monaria o expresión de asignación), modifica el valor del parámetro
inicialmente asignado por la expresión
La ejecución de la sentencia for sucede de la siguiente forma:
1. Se inicializan los parámetros.
2. Se evalúa la expresión lógica.
2.1. Si el resultado es distinto de cero (verdadero), se ejecuta la sentencia, se evalúa la expresión que
da lugar a la progresión de la condición y se vuelve al punto 2.
2.2. Si el resultado de 2, es cero (falso), la ejecución de la sentencia for se da por finalizada y se
continúa en la siguiente sentencia del programa.
En muchas ocasiones se conoce de antemano el número de veces que se desean ejecutar las acciones de
un bucle. En estos casos en el que el número de iteraciones es fija, se debe usar la estructura desde o
para.
La estructura Desde ejecuta las acciones del cuerpo del bucle un número específico de veces y de modo
automático controla el número de iteraciones o pasos a través del cuerpo del bucle.
Pseudocódigo en Español
Pseudocódigo en Inglés
Desde variable(v)= vi Hasta vf hacer For variable (v)= vi To vf Do
<acciones> <acciones>
:
Fin_desde
Donde:
v: Variable índice
vi, vf: Valores inicial y final de la variable
Diagrama de Flujo de la estructura Desde/Para
1er.Ejemplo
Cuenta del 1 al 50 varias veces, con variantes de la instrucción 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
Expansión 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 expansión 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 aquélla en la que una acción (instrucción) 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.
Características
• 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 continuación de otras sin posibilidad
de omitir ninguna y naturalmente, sin bifurcaciones.
• Su representación gráfica es la siguiente:
Estructura Secuencial

....
Pseudocódigo De Una Estructura Secuencial
Inicio
:
:
acciones
:
fin
1er. Ejemplo :
Calcular el salario neto de un trabajador en función del número de horas trabajadas, precio de la
hora de trabajo y considerando unos descuentos fijos al sueldo bruto en concepto de impuestos (20 por
100).
Pseudocódigo
Inicio
{cálculo 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 continuación 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 continuación los cálculos 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 continuación se presenta algoritmo para calcular
estadísticas elementales de la elección. Se tienen en cuenta los votos en blanco y la población 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 votación de ", Candidato1, ": ")


Leer(VotosCandidato1)
Escribir("Digite votación de ", Candidato2, ": ")
Leer(VotosCandidato2)
Escribir("Digite votación de ", Candidato3, ": ")
Leer(VotosCandidato3)
Escribir("Digite votación en blanco ")
Leer(VotosEnBlanco)

//A continuación los cálculos 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: Definición
Es un esquema para representar gráficamente un algoritmo .Se basan en la utilización de diversos
símbolos para representar operaciones específicas. Se les llama diagramas de flujo porque los símbolos
utilizados se conectan por medio de flechas para indicar la secuencia de operación.
Para hacer comprensible los Diagramas a todas las personas , los Símbolos se sometieron a una
normalización , o lo que es en realidad se hicieron símbolos casi universales, ya que , en un principio
cada usuario podría tener sus propios símbolos para representar sus procesos en forma de Diagrama de
Flujo. Esto trajo como consecuencia que solo el que conocía sus símbolos, los podía interpretar.
La simbología utilizada para la elaboración de diagramas de flujo es variable y debe ajustarse a un
patrón definido previamente.
A continuación se mostrara las simbologías mas utilizadas :
Simbologia utilizada en los diagramas de flujo

Símbolo función

Ejemplo: Cálculo del Factorial de un Número Entero


Anteriormente se analizó el diagrama de flujo para determinar el factorial de un número entero. Dicho
diagrama de flujo se muestra en la página siguiente. Observe que un conjunto de instrucciones del
diagrama de flujo se realizan en forma repetitiva mientras se satisface una condición. En este caso la
condición es contador<numero. Es decir, mientras contador<numero, se ejecutarán 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

contador < numero Verdadero


Falso
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 expresión boleana. Es decir, cuando se ejecuta una sentencia do-
while, la primera vez se ejecutan las sentencias del cuerpo de la sentencia y es hasta entonces que se
evalúa la expresión boleana. El ciclo se repetirá sólo si la expresión boleana sigue teniendo el valor de
verdadero. Por otro lado, en la sentencia while, aún la primera vez, lo primero que se evalúa es la
expresión boleana y sólo si ésta es verdadera las sentencias del ciclo se ejecutarán. En otras palabras,
las sentencias while y do-while son equivalentes sólo si el ciclo se ejecuta al menos una vez.

Operadores de Incremento y Decremento


Hasta ahora, los operadores aritméticos 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 más 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 comúnmente en ciclos. Por ejemplo, en el programa del cálculo
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 ejecución hasta que la expresión boleana que se evalúa
(entre paréntesis después de la palabra while) es falsa. Por ello es que el ciclo contiene normalmente
alguna asignación que permite cambiar el valor de verdad de la expresión boleana, de forma que, si al
principio la expresión boleana es verdadera, llegará un momento en que su valor cambia a falso. Si la
expresión boleana siempre es verdadera el ciclo continuará ejecutándose indefinidamente. En ese caso
se dice que se tiene un ciclo infinito. Habrá que tener cuidado para evitar dicha situación.

Indentación
Existen algunas recomendaciones básicas para lograr un buen estilo de programación.
• 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 línea 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 debería 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 números A y B luego sumarlos y por último imprimir o mostrar
el resultado de la suma.
Algoritmo : Representación Grafica :
Inicio
Leer A
Leer B
C=A+B
Mostrar C
Fin

You might also like