Вы находитесь на странице: 1из 42

1

UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERA Y ARQUITECTURA
ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS

INTRODUCCIN A LA INFORMTICA


Aprender a utilizar las Estructuras Repetitivas en el diseo de solucin de problemas y
conocer su sintaxis en el Lenguaje C, para la aplicacin de estas estructuras a nuestros programas.

Introduccin 1
I. Estructuras Repetitivas 2
II. Conceptos Necesarios 2
III. Estructura de Entrada Condicionada 4
IV. Ms Operadores de C 10
V. Estructura Controlada por un Contador 30
VI. Estructura de Entrada Asegurada 38
VII. Ciclos Anidados 41

En nuestra vida cotidiana nosotros podemos realizar tareas o acciones ms de una vez, por ejemplo
para ustedes es casi obligatorio venir a clase todos los das, para nosotros los docentes es
obligatorio venir a trabajar todos los das; as tambin todos los das nos baamos, comemos,
dormimos, etc. Hay otras tareas que no son tan frecuentes pero que tambin se repiten: estudiar
(solo estudiamos unos 2 o 3 das antes de la evaluacin), ir al cine (solo cuando tenemos plata,
tiempo y exhiben la pelcula que nos interesa).

Realizar algunas actividades muchas veces depende de alguna condicin que se nos imponga: por
ejemplo: compilamos un programa las veces que sea necesario hasta que no tenga errores; es
decir, mientras tenga errores no dejamos de compilarlo.

A nuestro alrededor, encontramos problemas que presentan estas caractersticas, por ejemplo: el
clculo de la nota final de los estudiantes de Introduccin a la Informtica, se realizar tantas veces
como estudiantes estn inscritos en la asignatura, el clculo del salario de los empleados de una
empresa se hace una o dos veces al mes dependiendo del tipo de pago (quincenal o mensual) y
desde luego del nmero de empleados, etc. En estos casos, la solucin que se disea para un slo
grupo de datos se debe repetir tantas veces como sea necesario (de acuerdo al nmero de
estudiantes y de empleados para los ejemplos anteriores).

Es muy comn encontrar en los algoritmos operaciones que se deben ejecutar varias veces en
perodos ms o menos espaciados. Si bien las instrucciones (o acciones a realizar) son las mismas,
los datos sobre los que se opera varan.

Para repetir varias veces un proceso determinado haremos uso de los ciclos repetitivos, a los cuales
se les conoce tambin con el nombre de Estructuras Repetitivas, Estructuras Iterativas, Lazos,
Bucles, Loops o simplemente ciclos.


2
Se conoce como estructura iterativa, ciclo, bucle, lazo o estructura repetitiva, al conjunto de bloques
y flechas que nos permite, representar en un flujograma que, una accin (o varias) se puede realizar
una o varias veces (en algunos casos especiales ninguna vez) de acuerdo a una condicin. Al igual
que las estructuras secuenciales y las selectivas, esta estructuras tienen nicamente una flecha de
entrada y una sola flecha de salida.

Las estructuras repetitivas son tres, una fundamental y dos derivadas de sta:
Entrada Condicionada o estructura Mientras, (Estructura Fundamental)

Entrada asegurada o estructura Hacer - Hasta que (Estructura derivada)

Ciclo controlado por contador o estructura Desde _ hasta (Estructura derivada)

Para representar grficamente una estructura repetitiva, haremos uso de los siguientes smbolos o
bloques:



Para trabajar con estructuras repetitivas se hace necesario conocer ciertos conceptos, previo al
estudio de cada estructura, ya que nos servirn para comprender mejor el funcionamiento de cada
una de ellas.

1. Cuerpo del Ciclo:
Esta formado por la accin que se repite en un bucle y puede estar formada por una o ms
estructuras lgicas de control:

Secuenciales (entrada de datos, asignacin/proceso , salida de datos),
Selectivas (simple, doble, anidada, mltiple)
Repetitivas (entrada condicionada, entrada asegurada, controlada
por contador)
Combinacin de las anteriores.


2 Iteracin:
A la ejecucin del cuerpo del ciclo se le conoce como iteracin; dicho de otra forma, una iteracin es
cada una de las ejecuciones (o veces que se repite) del cuerpo del ciclo. Si el cuerpo del ciclo o
accin a repetir, se realiza 5 veces, se dice que se ejecutan 5 iteraciones.


Es el mismo rombo que se utiliza
para las estructuras selectivas,
pero en estructuras repetitivas, las
flechas internas nunca se renen
de nuevo. Con este smbolo se
visualiza y comprende fcilmente
el funcionamiento de las
estructuras repetitivas
Este es el smbolo especial para
representar las tres estructuras
repetitivas, por lo tanto es necesario
aclarar a cual de ellas
representamos, escribiendo dentro
del bloque el nombre de la estructura
utilizada
Figura 1
3
3 Representacin General de Estructuras Iterativas:


4 Variable tipo Bandera:
Una bandera es un tipo de variable que solamente puede almacenar uno de dos valores,
normalmente cero (0) o uno (1), debemos recordar que cero es el valor numrico para falso y uno (o
cualquier otro valor diferente de cero) se considera el valor numrico para cierto.

5 Centinela:
Un centinela es un dato que nos permite realizar una accin determinada, normalmente se utiliza
para ejecutar (o repetir) una accin o cuerpo de ciclo o dejar de hacerlo.

Siempre que evaluamos una condicin (incluso utilizando una estructura selectiva) tenemos incluido
el concepto de centinela: es el valor que nos permite ejecutar una accin determinada.

La mayora de las veces es un dato constante, siempre forma parte de una condicin y es el dato
que aparece al lado derecho de un operador relacional.

a < 8 // 8 es considerado centinela
a < 8 && a >= 2 // Existen dos centinelas 8 y 2

El centinela puede estar en una variable, siendo siempre la variable que est al lado derecho del
operador relacional:

x >= a // La variable a se considera centinela

Puede estar formulado como un proceso matemtico:

x != 2*(a + 8) //En este caso el centinela es el resultado del clculo

Se acostumbra fijar como centinela un nmero que no cumpla con las restricciones del dato o un
valor completamente ilgico para ese dato:

edad == -1 //Aqu el -1 es el centinela
sueldo != 0 //El centinela es el nmero 0

6 Contador:
Es una variable que controla o cuenta el nmero de veces que se repite cierta actividad o proceso.
A esta variable se le debe asignar un nombre o identificador, igual que a cualquier otra variable;
adems, para definir correctamente una variable contador, se debe de indicar lo siguiente:
Valor inicial: Representa el nmero a partir del cual se empieza a contar.
Valor final: Representa el nmero hasta el que se va a contar.
Accin a
repetir
Dentro del smbolo se escribe el tipo
(o nombre) de estructura utilizada:
MIENTRAS, DESDE HASTA
HASTA QUE
Cuerpo
del ciclo
Figura 2
4
Valor de cambio: Indica de cuanto en cuanto se realiza la cuenta (el valor de cambio
siempre es el mismo, es decir constante).

La forma ms comn de contar es de uno en uno, sobre todo si lo que se desea es saber cuntas
veces se repite una accin determinada; pero, no es la nica forma de contar, tambin se puede
tambin contar de dos en dos o de cinco en cinco o de 100 en 100, es ms tambin podemos contar
con fracciones de 0.5 en 0.5 o de 0.01 en 0.01. Estas formas de contar se conocen como
progresivas, el valor de cambio de la variable que controla estas cuentas siempre es positivo y se le
llama incremento, el valor inicial siempre debe ser menor que el valor final para que la accin se
pueda ejecutar, por ejemplo contamos desde 4 (valor inicial) hasta 20 (valor final), de 2 en 2(valor de
cambio).

Existen tambin conteos regresivos, en estas formas de contar el valor de cambio es negativo, se le
conoce como decremento y el valor inicial es siempre mayor que el valor final de la variable
contador; as podemos contar desde 5 hasta 1 por ejemplo, el valor de cambio es -1.

Es importante recordar que independientemente de si el valor de cambio de un contador es
positivo o negativo, ste (el valor de cambio) siempre es constante.

7 Acumulador:
Es una variable que almacena el resultado final de sumar todos los distintos valores que toma una
variable, para definirla, tambin es necesario indicar:
Valor inicial: Representa el valor original o inicial del acumulador
Valor final: El ltimo valor que toma el acumulador
Valor de cambio: Representa cada valor de la variable que se va sumando o acumulando.
Este valor puede ser constante o variable.


Para poder comprender y aplicar la estructura DE ENTRADA CONDICIONADA, conocida tambin
como Estructura MIENTRAS, debemos mencionar que sta es la primera forma que naci para
repetir porciones de un algoritmo a conveniencia del diseador del mismo, por lo tanto se le
distingue como Estructura Fundamental; de esta estructura, se disearon las otras 2 estructuras,
que se conocen como Derivadas.

1. Representacin Grfica
Para representar grficamente una estructura MIENTRAS, vamos a utilizar el smbolo especial que
se mostr en la figura 1, aunque tambin se puede utilizar el rombo, como se muestra a
continuacin:

5


Ntese que en el grfico de la derecha, los caminos o rutas que salen del rombo nunca se unen,
como sucede en la Estructura Selectiva.

2. Funcionamiento de la Estructura Mientras:
Esta estructura, nos permite realizar el cuerpo del ciclo las veces que sea necesario, siempre y
cuando se cumpla una condicin, dicho en otras palabras: Mientras la condicin de como resultado
cierto, el cuerpo del ciclo se realiza (ejecuta o repite).

Al entrar a la estructura se evala la condicin, si el resultado es falso, la accin no se ejecuta, si al
contrario la condicin resulta cierta, se realiza la accin y se regresa a evaluar la condicin de
nuevo. De tal forma que el cuerpo del ciclo puede ser que se ejecute: ninguna vez, una vez o varias
veces, dependiendo del resultado de la condicin, por esta razn, a estos ciclos se les denomina
ciclos con entrada condicionada, se entra al cuerpo del ciclo si la condicin se cumple.


Dentro del cuerpo del ciclo debe existir alguna estructura que modifique el resultado lgico
(de verdadero a falso) de la condicin; si esto no sucede, la estructura repetitiva se quedara
ejecutando el cuerpo del ciclo indefinidamente, ya que para salir de la estructura la condicin debe
Figura 3
NO
SI
Lo que est
dentro de las
lneas punteadas
es la Estructura
Repetitiva
Mientras
Tambin se puede representar con
el rombo, siendo ms fcil de
comprender su funcionamiento as:
Condicin
Accin a
repetir

Accin a
repetir
Cuerpo de
ciclo
Condicin

Falso
Cierto
Entrada a la estructura
Salida de la estructura
Como todas las estructuras
lgicas de control sta tiene
tambin una sola entrada y una
sola salida
Figura 4
6
dar como resultado falso, en este caso el ciclo se denomina bucle infinito o sin fin y el algoritmo
no termina nunca su ejecucin, situacin que DEBE evitarse.

3. Reglas De Funcionamiento:
Las siguientes normas o reglas deben de cumplirse, cuando utilicemos una estructura MIENTRAS:

1. La condicin (expresin lgica) es lo primero que se evala al llegar a la estructura; cuando el
resultado el resultado es Verdadero , se ejecuta el cuerpo del ciclo (y se regresa a evaluarla la
condicin), cuando el resultado es Falso se sigue la flecha de salida de la estructura.

2. Cuando la condicin se evala a Falso , al entrar a la estructura por primera vez, el cuerpo del
bucle no se ejecutar nunca. En este caso se dice que el bucle se ha ejecutado cero veces.

3. Mientras la condicin d cmo resultado Verdadera el cuerpo del ciclo se va a continuar
ejecutando.
4. La nica forma de salir del ciclo MIENTRAS, es obteniendo un resultado de falso en la expresin
lgica.


Ejemplo No. 1
Disee un flujograma que Imprima los n primeros nmeros enteros positivos.

I. Planteamiento del problema
Entrada Salida



Cantidad de
nmeros a
imprimir

Cada uno de los
nmeros
II. Anlisis del Problema
a. Variables de Salida:
Nombre Tipo Descripcin
num entero Representa cada uno de los nmeros a imprimir

b. Datos de Entrada
Variables:
Nombre Tipo Descripcin
n entero Almacena la cantidad de nmeros a imprimir

Constantes: No son necesarias

c. Restricciones: n>0

d. Proceso: Lo que haremos es leer la cantidad de nmeros que vamos a imprimir y
verificar que cumpla la restriccin; luego iniciar con num=1; imprimirlo y aumentarle 1,
mientras num sea menor o igual que n



7
Leer n
n>0 ?
SI: Inicialmente: num =1

Mientras Imprimir num
num<=n num =num +1

NO: Imprimir Error en datos

e. Variables de Proceso: No se han utilizado

III. Diseo de Solucin:


Si No
Si
No
Note que en este
grfico el Si y el
No, se omiten,
slo se sigue la
lgica
No
Si
Inicio
num = 1
num<=n

num
num=num+1
Fin
O tambin:
Inicio
Fin
num =1
num
num=num+1
Numeros Enteros
Positivos
Mientras
num<=n
Error
en
dato
n, Numeros Enteros
Positivos:
Cuantos
nmeros quiere
imprimir
n
n > 0
Cuantos
nmeros
quiere
imprimir
n
n > 0
Error
en
dato
Flujograma 1
Flujograma 2
8

4. Validacin de datos:
Hasta el momento lo que hemos hecho con las restricciones de los datos de entrada es verificar si
se cumplen, utilizando una estructura selectiva, si no lo hacen, terminamos el algoritmo sin hacer
nada o imprimimos un mensaje de Error en los datos . El concepto de validacin de datos
consiste en obtener datos vlidos; es decir, datos que cumplan la o las restricciones, esto lo
logramos con una estructura Mientras.

Por ejemplo, supongamos que tenemos un dato de entrada (que se llama puntos) cuya restriccin es
que debe ser mayor que 5 pero menor o igual a 20, para validar este dato o sea cerciorarnos que el
dato es correcto y que el algoritmo funciona lo podemos hacer as:

Restriccin: puntos >=5 && puntos <=20

Validar este dato, significa que Mientras la restriccin no se cumpla, el dato es incorrecto y
debemos volver a leer el dato; por el funcionamiento de la estructura MIENTRAS (ejecuta la accin
cuando la condicin es cierta), es necesario escribir lo contrario de la restriccin, y esto nos servir
para volver a leer otro otra vez puntos, y evaluar la condicin nuevamente:

Condicin del ciclo Mientras: puntos<5 || puntos >20
Puede tambin escribirse: !(puntos >=5 && puntos <=20)


Figura 5
Observe que la flecha regresa
siempre a evaluar la condicin, NO
ANTES NI DESPUS.

En esta parte de algoritmo no har
ms que pedir datos si no se
cumple la restriccin.

Note tambin que en la condicin se
ha escrito lo contrario de la
restriccin, para que la estructura
MIENTRAS funcione correctamente.
No
Si
Digite el
numero de
puntos
puntos
puntos<5 ||
puntos>20
El dato no es
valido, intente
de nuevo
puntos
.
.
.
.
.
.
9

5 Codificacin En C de la Estructura Mientras
La estructura iterativa de entrada condicionada necesita solamente la palabra reservada while, que
justamente en espaol significa mientras, los parntesis ( ) para encerrar la condicin y las { } para
delimitar el cuerpo del ciclo:

Codificacin Ejemplo



while (condicin)
{
Cuerpo del ciclo;
}

. . .
x =100;
while (x<500)
{
printf(\n %i, x);
x =x +50;
}
. . .

El ejemplo anterior, que imprime n enteros positivos (pg. 6 y 7) escrito en C lo tenemos a
continuacin:

//Programa que genera n numeros enteros positivos, iniciando de 1

#include<stdio.h>
#include<conio.h>
main()
{
int n, num=1;

puts(Cuantos nmeros quiere imprimir?);
scanf(%i, &n);
if (n>0)
{
printf(\n \n \n %i \t NUMEROS ENTEROS POSITIVOS, n);
while (num<=n)
{
printf(\n %i, num);
num =num+1;
}
}
else
puts(Error en datos);

getch();
return 0;
}




10
Agregando la validacin de datos el programa nos queda as:

//Programa que genera n numeros enteros positivos, iniciando de 1
//usando validacin de datos

#include<stdio.h>
#include<conio.h>
main()
{
int n, num=1;

puts(Cuantos nmeros quiere imprimir?);
scanf(%i, &n);

while (n<=0) //Lazo para validar datos, notese que se sustituye la estructura selectiva Doble
{
puts(Error en datos, debe ser positivo);
scanf(%i, &n)
}

printf(\n \n \n %i \t NUMEROS ENTEROS POSITIVOS, n);
while (num<=n)
{
printf(\n %i, num);
num =num+1;
}

getch( );
return 0;
}


Los datos sobre los que actan los operadores se denominan operandos. As en la expresin:

2 +a tenemos un operador: +, y dos operandos: 2 y a

si escribimos completa la expresin tenemos que agregar una variable y otro operador ms:
x = 2 + a;

Los operadores que hemos visto los resumimos en aritmticos (+, -, *, /, %), relacionales (<, <=, >,
>=, !=, ==), lgicos (&&, ||, !) , el de asignacin (=) y el operador condicional (?:).

Tambin los podemos clasificar de acuerdo al nmero de operandos que necesiten en Unuarios o
monoarios, necesitan slo un operando como el signo menos de un nmero negativo: -23, -a, !a y
otros que veremos en la seccin 4.2 de este guin de clase.

Binarios que necesitan 2 operandos como 2+a a%2 x=5 etc.

Terciarios que necesitan 3 operandos, como el condicional que considera cada expresin como
operando, por ejemplo, el operador condicional ?

(a+3>7)? b=a: b=2;

(a+3>7) primer operando b=a segundo operando y b=2 tercer operando.

11
C es un lenguaje rico en operadores, adems de los que ya estudiamos, conoceremos tambin otros
operadores de asignacin (que son binarios), y los operadores de incremento-decremento
(monoarios):

1. Operadores de asignacin:
Ya sabemos que, el operador = asigna el valor de la expresin derecha a la expresin situada a su
izquierda. Y es un operador binario, necesita 2 operandos, el de la izquierda que siempre es una
variable y el de la derecha que puede ser una constante, una variable o una expresin:

a =300; b =a; x =2 +a; total =sqrt(2*x+3/x-(5%2+b));

Adems del operador de Asignacin =, C proporciona cinco operadores de asignacin adicionales
que actan como una nota abreviada para expresiones utilizadas con frecuencia, y que tambin son
operadores binarios:

Smbolo Sentencia
Abreviada
Sentencia No
Abreviada
Descripcin
= a =b a =b

Asigna el valor de b a a.
*= a *=b a =a * b Multiplica a por b y asigna el
resultado a la variable a
/= a /=b a =a / b Divide a entre b y asigna el
resultado a la variable a
%= a %=b a =a % b

Asigna el residuo de a/b a a
+= a +=b a =a +b Suma a y b y lo asigna a la variable
a
- = a -=b a =a - b Resta b de a y asigna el resultado a
la variable a



Con estos nuevos operadores la adicin de 3 a una variable (num) la podemos escribir de las
siguientes formas:

num = num + 3; o bien num+= 3;


2. Operadores de Incremento Decremento.
El lenguaje C ofrece los operadores de incremento (++) y decremento (--) que tiene una sintaxis
abreviada para sumar (incrementar) o restar (decrementar) 1 al valor de una variable, utilizado
comnmente en el uso de contadores. Estos operandos son unuarios, ya que solo necesitan un
operando, y ste debe ser siempre una variable:

++n; --n;
n +=1; n -=1;
n =n +1; n =n 1;
Las tres son lneas que
suman 1 a la variable n
Son sentencias que restan 1 al
valor que tiene la variable n

12
Estos operadores tienen la propiedad de que pueden utilizarse como prefijo (antes del operando) o
como sufijo (despus del operando), el resultado de la expresin puede ser distinto, dependiendo
del contexto.

Si los operadores ++y -- se usan como prefijo, la operacin de incremento o decremento se efecta
antes que la operacin de asignacin; si los operadores ++y estn como sufijos, la asignacin se
efecta en primer lugar y el incremento o decremento despus.

Ejemplos:
Si i es una variable entera cuyo valor es 3, las variables y e i toman los valores sucesivos que se
indican en las sentencias siguientes:

++i; // incrementa i a 4
--i; // le resta 1 a i, i = 3
i++; // incrementa i a 4
i--; // decrementa i en 1, i =3
y = i++; // asigna el valor 3 a y , y 4 a i
y = ++i; // asigna el valor 5 a y , y 5 a i
y = i--; // asigna el valor 5 a y , y 4 a i
y = --i; // asigna el valor 3 a y , y 3 a i

3. Jerarqua de Todos los Operadores
Se debe recordar que con el uso de parntesis se puede romper este orden de prioridades
establecido por el lenguaje C.


Operador Prioridad Asociatividad
Funciones Mayor Izq. der.
++, --, !

Der izq.
- (cambio de
signo)

Der izq
*, /, %






Izq der
+, - Izq der.
>, <, <=, >= Izq der.
==, != Izq der.
&& Izq der.
|| Izq der.
?: Der Izq.
=, +=, -=, *=, /=, %= Menor Der Izq.


El programa de los nmeros enteros de la pgina 10, tambin se puede escribir as:
13
/*Programa que genera e imprime n numeros enteros positivos iniciando de 1*/
#include<stdio.h>
#include<conio.h>
main()
{
int n, num=1;

puts(Cuantos numeros quiere imprimir?);
scanf(%i, &n);

while (n<=0)
{
puts(Error en datos, debe ser positivo);
scanf(%i, &n);
}

printf(\n \n \n %i NUMEROS ENTEROS, n);

while (num<=10)
{
printf( %i \t, num); // Realiza una impresin horizontal
num++; //tambien puede ser num+=1;
}

getch();
return 0;
} /* si quiere ver los diez numeros de manera vertical, un numero por linea
la instruccin printf debe cambiarse por: printf( \n %i , num); */



Ejemplo No. 2
En la empresa XXX se requiere clasificar los diferentes productos que ofrecen. Para ello
mantienen tres diferentes clases de calidad: OPTIMA, NORMAL, y DEFICIENTE.
Disee un programa, utilizando la metodologa completa, que d a conocer el nmero de productos
de cada clase, si se conoce la calidad de cada uno de los 100 existentes en bodega.


I. Planteamiento del Problema
Entrada Salida




Clase de cada producto
Nmero de productos en total
(100)
Numero de calidad optima
Nmero de productos de
calidad normal
Nmero de productos de
calidad deficiente





14
II. Anlisis del Problema
a. Definicin de Variables de Salida
Nombre Tipo Descripcin
opt Entero Representa el nmero de productos con calidad Optima,
nor Entero Contiene el nmero de productos con calidad Normal
def Entero Representa el nmero de productos con calidad Deficiente

Estas tres variables son de tipo contador, ya que irn contando el numero de productos de
cada tipo de calidad, su valor inicial es cero (0), su valor de cambio es uno (1) y su valor final
es lo que necesitamos saber.

b. Definicin de Datos de Entrada.
Variables:
Nombre Tipo Descripcin
clase Entero Representa un cdigo numrico que indica la clase de calidad que tiene
un producto: 1: Optima, 2: Normal, 3: Deficiente

Constantes: El nmero de productos almacenados en bodega se consideran constantes: 100

c. Restricciones: clase >=1 && clase <=3

d. Proceso:
Lo que se har es, leer la calidad (o clase) de cada producto y contabilizarlo segn su
clase; es decir le sumaremos uno (1) a opt, nor o def segn corresponda y esto lo
realizaremos 100 veces, ya que 100 son los productos existentes; por lo que
necesitamos un contador de productos. Como son tres clases distintas, y las hemos
codificado numricamente, utilizaremos para la clasificacin una Estructura de
Seleccin Mltiple:

prod=1; opt=0; nor=0; def=0;


// Aqu se lee y valida clase

Repetir 1 opt++ ( opt=opt+1)
Mientras clase = 2 nor++ ( nor+=1)
prod<=100 3 def++


e. Definicin de Variables de proceso:


III Diseo de Solucin:

Flujograma, en la siguiente pgina
Nombre Tipo Descripcin
prod Entero Cuenta el nmero de productos analizados. Valor inicial =
1; valor de cambio =1 y valor final =100
15



Si
Inicio
prod=1
opt=0
nor=0
No
Si
def =0
prod
<=100
clase
clase<1 ||
clase >3
clase
Digite la
clase del
producto
Esa clase no
existe, intente
de Nuevo
No
Calidad
optima, opt
Calidad
Normal:, nor
Fin
Calidad
Deficiente:, def
prod++
clase
nor++
1
2
3
opt++
def++
Flujograma 3
16
IV.Codificacin de la solucin
/* Programa para Clasificar los productos */
#include <stdio.h>
#include <conio.h>
main()
{
int opt=0, nor=0, def=0,prod=1;
int clase;

printf("\nCLASIFICACION DE PRODUCTOS SEGUN SU CALIDAD\n");
puts("1. Clase de Calidad Optima"); // No estan en el flujograma pero,
puts("2. Clase de Calidad Normal"); // ayudan a la entrada de datos
puts("3. Clase de Calidad Deficiente");
printf("\n\n"); // Deja una linea en blanco
while (prod<=100) // inicia el ciclo de productos
{
printf("Digite la clase del producto \t %i \n", prod);
scanf("%d", &clase);
while (clase<1 || clase >3) //Validacin de la clase de producto
{
puts("Esta clase no existe intente de nuevo");
scanf("%d",&clase);
}
switch (clase)
{
case 1:
opt++;
break;
case 2:
nor++;
break;
case 3:
def++;
break;
}
prod++;
}
printf("\n Calidad Optima: %d", opt);
printf("\n Calidad Normal: %d", nor);
printf("\n Calidad Deficiente: %d", def);
getch();
return 0;
} /*Fin del programa*/

Los anidamientos de estructuras no solo se dan entre las selectivas, en este ejemplo tenemos dos
estructuras mientras anidadas y dentro de la primera (while (prod<=100)), una de seleccin
mltiple. El nico cuidado que se debe de tener es cerrar cada estructura como tiene que ser y
nunca cruzar dos o ms de ellas.




17

Ejemplo 3
Disee un programa C que, dados como datos 25 nmeros enteros, obtenga la suma de los
nmeros impares y el promedio de los nmeros pares.

I. Planteamiento del Problema:

Entrada


Salida
Nmeros enteros
Cantidad de datos
(25)

Suma de todos los nmeros
impares
Promedio de los nmeros pares


II. Anlisis del Problema:
a. Definicin de Variables de Salida
Nombre Tipo Descripcin
to_imp Entero Suma, totaliza o Acumula todos los nmeros impares
p_pares Entero Promedio de todos los nmeros pares

b. Definicin de Datos de Entrada
Variables:
Nombre Tipo Descripcin
num entero Cada uno de los 25 datos enteros

Constantes: Se utiliza el valor fijo 25.

c. Restricciones: No existen, los datos pueden ser negativos, positivos o cero.

d. Proceso:
Lo primero que haremos es clasificar los datos, cada uno de ellos, en par o impar, con la divisin
residual %. Luego se van sumando en 2 variables que acumulen cada tipo de dato; esto lo vamos a
repetir 25 veces. Y al final se calcula el promedio de pares, dividiendo la suma de todos los pares
entre el nmero de datos pares, por lo tanto necesitamos contarlos:
i=1 //cuenta nmero de datos, valor inicial 1
to_imp=0 //acumulada impares, valor inicial=0
to_par=0 //acumula pares, vi:=0
n_par=0 //cuenta pares, vi=0

//recuerde que hay que leer los 25 datos
Es num%2 ==0? //clasifica pares e impares
Repetir Si: to_par+=num //acumula pares
Mientras n_par++ //cuenta pares
i<=25
No: to_imp+=num //acumula impares
i++

p_pares=to_pares/n_par




18
e. Definicin de Variables de Proceso
Nombre Tipo Descripcin
to_par entero Acumula todos los datos pares. Vi=0; Vc=num; Vf es lo que
necesitamos conocer
n_par entero Cuenta el nmero de datos pares, Vi=0; Vc=1; Vf es lo que
necesitamos.
i entero Cuenta el nmero de datos ledos y procesados. Vi=1; Vc=1 y Vf =25
(contamos desde el primer dato hasta el ltimo).

III. Diseo de Solucin:
Flujograma





Si
No
Si No
Inicio
n_par =0
to_par =0
to_imp =0
n_par++
i =1
i<=25
num%2
==0
num
to_par+=num
to_imp+=num
i++
p_pares=to_par/n_par
Suma de impares
=, to_imp
Promedio de pares
=, p_pares
Fin
Flujograma 4
19


IV. Codificacin de la solucin:
/* Programa para sumar impares y promediar pares */
#include <stdio.h>
#include <conio.h>
main()
{
int to_imp, p_pares, num, to_par, n_par, i;
to_imp=0;
to_par=0;
n_par=0;
i=1;
printf("\n SUMA DE NUMEROS ENTEROS PARES Y PROMEDIO DE IMPARES\n\n");

while (i<=25 ) //inicia el ciclo de 25 numeros enteros
{
printf("\n Digite el dato %i \t: ",i);
scanf("%i", &num);
if (num%2==0) //Verifica si el dato es par
{
n_par++;
to_par+=num;
}
else
to_imp+=num;
i++;
}
p_pares =to_par/n_par;
printf("\n Suma de impares =%d", to_imp);
printf("\n Promedio de pares =%d", p_pares);
getch();
return 0;
} /*Fin del programa*/


Ejemplo No. 4
Disee un programa en C que, lea un nmero entero y positivo N para que calcule el resultado de la
siguiente serie:

1 +1 +1 +1 +1 +. . . +1
2 3 4 5 N

I. Planteamiento del problema

Entrada


Salida
Dato entero que
indica el nmero de
trminos a sumar

Valor de la serie

20
II. Anlisis del Problema
a. Definicin de Variables de Salida:
Nombre Tipo Descripcin
serie Real La suma de todos los trminos de la suma, acumulador Vi=0;
Vc=cada trmino y Vf es lo que se necesita conocer

b. Definicin de Datos de Entrada:
Variables:
Nombre Tipo Descripcin
n Entero Nmero de trminos de la serie, denominador mas grande

Constantes: No se utilizan

c. Restricciones: n>0

d. Proceso:
Para sumar todos los trminos en serie, esta variable debe tener un valor inicial de cero,
generar cada trmino y acumularlo en serie. Al observar la serie, cada trmino tiene el mismo
numerador (1), y el denominador va incrementando de uno en uno, siendo el primero 1. La
generacin del trmino y la acumulacin en serie se realizar n veces:

k=1 //contador de trminos
serie=0 //acumulador de trminos

Repetir ter=1/k //generacin de cada trmino
Mientras serie+=ter //acumulacin de los trminos
k<=n k++ //cambia el denominador


e. Definicin de Variables de Proceso:

Nombre Tipo Descripcin
k Entero Contador de tminos generados, sumas realizadas o de
veces que se repite el proceso. Vi=0, Vc=ter; Vf=n
ter Entero Representa cada uno de los trminos a sumar


III. Diseo de la Solucin: En la siguiente pgina
21






Inicio
serie=0
k=1
serie+=ter
ter= 1/k
k++
Mientras
(n<=0)
n
Cuantos
terminos?
Debe ser
un numero
positivo
n
Mientras
(k<=n)
El resultado de
la serie es:,
serie
Fin
Flujograma 5
22
IV. Codificacin de la Solucin:
/* Programa para calcular la serie 1 + 1/2 + 1/3 +...+ 1/N
a partir de un entero positivo N dado*/
#include <stdio.h>
#include <conio.h>
main()
{
int n;
float k, serie, ter;
serie =0.0;
k=1.0; //k debe ser real para que el resultado de la division sea real

printf("\n CALCULAR LA SERIE \n \n \t 1 +1/2 +1/3 +... +1/N");
printf("\n\n Donde,\n \t N: numero de terminos de la serie");
printf("Cuantos terminos? ");
scanf("%d",&n);

while (n<=0) //inicia el ciclo de validacion de n, un entero positivo
{
printf("\nDebe ser un numero positivo: ");
scanf("%d",&n);
}
while (k<=n) //inicia el ciclo para calcular cada termino y acumularlo
{
ter=1/k;
serie+=ter;
k++;
}
printf("El resultado de la serie es =%i",serie);
getch();
return 0;
} /*Fin del programa*/

Ejemplo No. 5
Un profesor de IAI115 tiene en su grupo 80 alumnos inscritos, los cuales realizaron 5 evaluaciones
en todo el ciclo. El docente necesita entregar a la coordinacin un informe que contenga la siguiente
informacin:
Nombre y la nota final de cada estudiante
Nota promedio de todos
Nmero de hombres aprobados.
Nmero de mujeres reprobadas

I. Planteamiento del Problema
Entrada Salida






Nombre de cada estudiante
Notas (5) de cada estudiante
Sexo de cada estudiante
Nmero de estudiantes (80)
Nombre y Nota final de cada
alumno
Promedio del grupo de alumnos
Nmeros de hombres aprobados
Cantidad de mujeres reprobadas
23
II. Anlisis del Problema:
a. Definicin de Variables de Salida
Nombre Tipo Descripcin
n_fin Real Nota final de cada estudiante,
prom Real Nota promedio del grupo.
h_apro Entero Representa el nmero de hombres que aprobaron la
asignatura. Variable tipo contador
m_rep Entero La cantidad de mujeres que reprobaron la asignatura.
Variable tipo contador
Adems, se desplegar el nombre de cada estudiante

b. Definicin de Datos de Entrada:
Variables:
Nombre Tipo Descripcin
nom Alfanum. Nombre de cada estudiante,
nota Real Cada una de las notas de cada estudiante.
sexo Entero Representa el sexo de cada estudiante: 1: Hombre y 2: Mujer
Constantes: Se utilizarn los valores fijos de 80 alumnos y 5 evaluaciones.

c. Restricciones:
nota>=0 && nota<=10
sexo ==1 || sexo ==2

d. Proceso:
Los contadores y acumuladores deben iniciarse con valor cero

Para la nota final de cada estudiante uno se suman (o acumulan las 5 notas) y
luego se divide entre 5.
Por lo tanto, se debe leer cada nota, validarla y despus acumularla; proceso que
se realiza 5 veces por alumno y, al final de las cinco veces se divide entre 5. El
acumulador debe iniciarse con cero para cada alumno.
(Esto se realiza 80 veces).

Para el promedio de todos se suman o acumulan las notas finales de cada alumno
(se hace 80 veces) y se divide entre 80.

Para calcular la cantidad de hombres aprobados y mujeres reprobadas se va a
comparar la nota final de cada estudiante con 6.0 y se incrementa en 1 el contador
que corresponda, segn el sexo del alumno, el sexo se debe leer y validar para
cada alumno. Se repite 80 veces tambin:

a=1 // Contador de alumnos
h_apro=0 // Contador de hombres aprobados
m_rep=0 // Contador de mujeres reprobadas
suma=0 // Acumulador de notas finales







24


e=1 //Contador de notas por estudiante
su1=0 //Acumulador de notas por estudiante
leer nom
leer sexo //sexo tiene restriccin, Validar


leer nota // La nota se debe validar
Repetir Mientras e<=5 su1 =su1 +nota
Repetir e++
Mientras
a<=80 n_fin=su1/5
suma=suma +n_fin

sexo==1? // Verifica si es hombre
Si: n_fin>=6.0?
Si: h_apro++
NO: No hacer nada
No: Es n_fin<6.0?
Si: m_rep++
No: No hacer nada

a =a+1


e. Definicin de Variables de Proceso:
Nombre Tipo Descripcin
a Entero Contador de estudiantes, Vi=1; Vc=1 y Vf=80.
e Entero Contador de cada una de las 5 notas de cada estudiante, Vi=1;
Vc=1; Vf=5
su1 Real Acumulador de las 5 notas de cada estudiante, Vi=0; Vc=nota y Vf
es lo que necesitamos.
suma Real Acumulador de las 80 notas finales, Vi=0; Vc=n_fin y Vf es lo
que estamos buscando.



III Diseo de Solucin:

Flujograma en la siguiente pgina
25

Si
No
Inicio
a=1
suma=0
su1=0
m_rep=0
h_apro=0
a<=8

2
prom=suma/80
prom, h_apro,
m rep
Fin
e=1
Mientras
e<=5
nota
Digite la nota
del estudiante
Debe ser
>=0 y <=10
Mientras
nota<0 || nota>10
Nota del
estudiante:
nota
su1=su1+nota
e++ Flujograma 6
1
nom
26


Si No
Si
n fin=su1/5
suma+=n fin
sexo
Sexo 1 masc.
y 2 feme.
Sexo 1 :
masc. y 2 :

sexo
Mientras
sexo!=1 && sexo!=2
No
No
Si
n_fin
< 6.0
sexo
==1
m_rep++
a++
n_fi
n
h_apro++
a, nom, n_fin
2
Conti. Flujograma 6
1
27
/* Programa que imprime informe para coordinacin*/
#include <stdio.h>
#include <conio.h>
main()
{
int a, h_ apro, m_rep, e, sexo;
char nom[50];
float nota, su1, prom, n_fin, suma;

a=1;
suma=0;
h_apro=0;
m_rep=0;
while (a <=80)
{
su1 =0;
e =1;
puts("\n\n Digite el nombre de estudiante:");
scanf("%s", nom);
while (e <=5)
{
printf("\n Digite la nota %d del estudiante: ",e);
scanf("%f", &nota);
while (nota<0 || nota>10)
{
printf("\n DEBE SER MAYOR O IGUAL QUE CERO Y MENOR O IGUAL QUE DIEZ");
printf("\n Digite la nota %d del estudiante: ",e);
scanf("%f", &nota);
}
su1 =su1+nota;
e++;
}
n_fin =su1/5;
suma +=n_fin;
puts("\n Digite el sexo del estudiante (1:masculino, 2:femenino): ");
scanf(" %d", &sexo);
while (sexo!=1 && sexo!=2)
{
puts("EL SEXO PUEDE SER 1: MASCULINO o 2: FEMENINO");
puts(" Digite el sexo del estudiante as 1: masculino, 2: femenino: ");
scanf("%d", &sexo);
}
if (sexo ==1)
{
if (n_fin >=6.0)
h_apro++;
}
else
if (n_fin <6.0)
m_rep++;
printf("\n %d \t %s \t %2.1f \n", a, nom , n_fin);
a++;
}
prom =suma/80;
printf("\n\n PROMEDIO: %2.1f \n CANTIDAD HOMBRES APROBADOS: %d", prom, h_apro);
printf("\n CANTIDAD MUJ ERES REPROBADAS: %d", m_rep);
getch();
return 0; }
IV. Codificacin de la Solucin:

28
Ejemplo 6
Disee un programa en C que imprima los valores de la funcin f(x)= x
3
, a partir de un valor real
inicial de x, hasta un lmite final, con incrementos de 0.25. El programa debe de imprimir tanto el
valor de x como el de f(x).

I. Planteamiento del Problema

Entrada


Salida
Valor inicial de x
Valor final de x
Incremento de los valores
de x (0.25)
Valor de la funcin
f(x)

II. Anlisis del problema
a. Definicin de Variables de Salida
Nombre Tipo Descripcin
x Real Cada uno de los valores que toma x. Variable
tipo contador.
y Real El valor de la funcin para cada valor de x


b. Definicin de Datos de Entrada
Variables:
Nombre Tipo Descripcin
vi Real El valor inicial de x
vf Real El valor final de x

Constantes: El incremento de x en 0.25

c. Restricciones:
El valor final debe ser mayor que el valor inicial
vi < vf

d. Proceso:
Lo que vamos a hacer es calcular y=pow(x,3); x tomar distintos valores siendo el primero
vi, el ltimo vf y el valor de cambio o incremento es de 0.25, de donde se observa que x es
una variable tipo contador. Por lo tanto el clculo se repite mientras x<=vf:
Los variables vi y vf se deben leer y validar.

Leer vi y vf //Validar de acuerdo a restriccin
x = vi


Repetir y =pow(x,3) //Hay que imprimir x, y
Mientras
x<=vf x+=0.25 // Cambio de valor de x, o incremento de x.


e. Definicin de Variables de Proceso:
No se utilizan
29
III. Diseo de solucin: Flujograma:











Si

No

Inicio
Digite el
valor inicial
y final de x
vi, vf
Mientras
vi>=vf
El valor
inicial debe
ser menor
que el final
vi, vf
x=vi
x<=vf
x+=0.25
y=pow(x,3)
x, y
Fin
Flujograma 7
30
IV. Codificacin de la Solucin:

/*Programa que calcula f(x) */
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float x, y, vi, vf;

puts(Digite el valor inicial y final de x);
scanf(%f %f, &vi, &vf);

while (vi >=vf) //validacion de datos
{
puts(El valor inicial debe ser menor que el final);
scanf(%f %f, &vi, &vf);
}
x=vi;
printf(\n\n \t x \t \t f(x) \n); //Encabezado de la impresion
while (x<=vf)
{
y=pow(x,3);
printf(\n \t %.2f \t \t %0.2f \n, x, y);
x+=0.25;
}

getch();
return 0;
} // Fin de programa

Esta estructura se conoce como Desde - Hasta o ciclo FOR, se utiliza cuando conocemos por
anticipado el nmero exacto de veces que se va a ejecutar el proceso. Al igual que el ciclo
MIENTRAS, la realizacin del cuerpo del ciclo depende de una condicin, que siempre esta
relacionada con el valor final del contador.

Al ejecutarse el ciclo por primera vez, el valor inicial se le asigna a una variable de control (o
contador), se verifica si el valor de la variable de control es menor o igual (o mayor, en el caso de
decremento) que el valor final, y a continuacin se ejecuta el proceso del interior del ciclo; cuando se
termina el cuerpo del ciclo se cambia el valor de la variable contador (segn su valor de cambio); si
la variable de control, es mayor (o menor en caso de cuentas regresivas) que el valor final, entonces
se sale del bucle y continua con la siguiente estructura del flujograma.

1 Representacin Grfica:
Para la representacin grfica de esta estructura se utiliza solamente el smbolo de repeticin, como
se muestra a continuacin:

31

En donde:

Cont : Variable de control (Contador)
Vi : Valor inicial del contador (desde cuanto contamos)
Vf : Valor final del contador (hasta cuanto contamos)
Vc : Valor de cambio del contador (incremento o decremento)
Proceso : Cuerpo del ciclo


2 Funcionamiento:
La estructura desde-hasta funciona como una estructura mientras, asignando el valor inicial al
contador y repitiendo el cuerpo del ciclo mientras ste se encuentre entre el rango de valores
permitidos por el valor final del contador, dentro del cuerpo del ciclo se le cambia el valor al contador
con el incremento o decremento del valor de cambio, sin necesidad de dibujar un bloque que lo
indique, ya que la estructura automticamente lo realiza.

3 Reglas de Funcionamiento:
1. Las variable de control, valor inicial y valor final deben ser todas del mismo tipo : entera (int).
2. Los valores iniciales y finales pueden ser tanto expresiones, constantes o variables.
3. La ltima ejecucin del bucle normalmente ocurre cuando la variable de control es igual al valor
final.
4. El valor de cambio puede ser positivo (incremento) o negativo (decremento).
5. Cuando no se especifica el valor de cambio, el incremento de la variable de control es 1.
6. La variable de control o contador solo se le debe cambiar su valor, despus de realizado el
cuerpo del ciclo y por el valor de cambio indicado, nunca por una asignacin extra.

En esta estructura el valor de cambio siempre es un valor entero (al igual que el valor inicial y el final
y; por lo tanto la variable contador debe ser tambin tipo entero). No podemos tener un valor de
cambio de 0.5. Entonces, si nuestra variable contador debe ser de tipo real, se debe de disear la
solucin con una estructura mientras y no con una desde hasta.


Ejemplo 7
Disee un programa que imprima la suma de los nmeros enteros comprendidos entre 15 y 25



Cont = Vi, Vf, Vc
Proceso a repetir o
cuerpo del ciclo
Figura 5
32
I. Planteamiento del Problema

Entrada de Datos


Salida de datos
Nmero inicial
Nmero final
Suma de los nmero enteros

II. Anlisis del Problema
a) Definicin de Variables de Salida
Nombre Tipo Descripcin
sum entero Representa la sumatoria de cada uno de los
nmeros enteros comprendidos entre los lmites.
Acumulador vi=0; vc=cada nmero, vf=?

b) Definicin de Datos de Entrada
Variables:
Nombre Tipo Descripcin
li entero Representa el lmite inferior del rango de nmeros a
sumar, o nmero inicial
ls entero Representa el lmite superior del rango de nmeros.
En este caso se han considerado los lmites del rango de nmeros a sumar (15 y 25) como
variables, para tener la flexibilidad de cambiarlos a necesidad del usuario, perfectamente se
puede tambin disear una solucin solamente para esos 2 valores.

Constantes: No se utilizan

c) Restricciones:
li <ls, los lmites pueden ser positivos o negativos

d) Proceso:

Leer li y ls // Validar
sum =0 // Inicializacin del acumulador

sum =sum +j se repite desde j =li hasta j <=ls

e) Definicin de Variables de Proceso:

Nombre Tipo Descripcin
j entero Representa cada uno de los nmeros a sumar.
Contador vi =li vc =1 vf =ls





IV. Diseo de Solucin: Flujograma

33



4 Sintxis en Lenguaje C
Para escribir correctamente la estructura desde hasta en C utilizamos la palabra reservada for y los
separadores: ; ( ) { } Su escritura se muestra a continuacin:

for (Expresion1; Expresion2; Expresion3)
{
Cuerpo del ciclo;
}

En donde:
Expresion1: Es la expresin que asigna el valor inicial a la variable contador.

Expresion2: Es una expresin lgica (condicin) que verifica que el valor actual
del contador se encuentre entre los permitidos (vi vf).

Expresion3: Es una expresin de asignacin que cambia el valor del contador


Es importante tomar en cuenta:
1. Las Llaves son necesarias siempre que el cuerpo del ciclo tiene ms de una lnea.

2. Las expresiones 1, 2 y 3 siempre van dentro de parntesis.
Si
Inicio
sum =0
li, ls
li, ls
li > ls
j=li, ls, 1
sum = sum + j
sum
Fin
No
Flujograma 8
34

3. Para conteos progresivos (por Ej.: 1, 2, 3, 4, 5) el valor de cambio es positivo, y el valor inicial
del contador siempre debe ser menor que el valor final del mismo (Vc>0 y Vi<Vf).

4. Para conteos regresivos (como: 5, 4, 3, 2, 1) el valor de cambio es negativo, y el valor inicial
del contador siempre es mayor que el valor final (vc<0 y Vi>Vf).

5. De nuevo, las llaves son necesarias si el cuerpo del ciclo tiene ms de una lnea de programa,
cada lnea termina en punto y coma y se debe respetar la marginacin.


La codificacin del ejemplo 7 se puede escribir utilizando esta esta estructura:

// Programa que calcula la sumatoria de los nmeros que se encuentra entre 2 lmites
#include<stdio.h>
#include<conio.h>
main()
{
int li, ls, sum=0;

puts(digite los limites inferior y superior); // lectura de los limites del rango de nmeros
scanf(%i %i, &li, &ls);

while (li >ls) /* validacion de datos */
{
puts(el primero limite debe ser menor);
scanf(%i %i, &li, &ls);
}

for (j=li; j<=ls; j++) // proceso, sumatoria de los numeros
sum+=j;

/* Impresin del resultado */
printf(\n \n La suma de los enteros es: \t %i, sum);
getch();
return 0;
}






Ejemplo No. 8
Un profesor calific 25 exmenes de sus alumnos y requiere calcular la nota promedio de todos
ellos, la nota ms alta y cuntos aprobaron y reprobaron el examen. Adems se deber imprimir el
nombre y la nota de cada estudiante.






35
I. Planteamiento del Problema

Entrada de Datos


Salida de datos
Nombre de cada
estudiante
Calificacin de cada
estudiante
Nmero de alumnos
(25)
Nota promedio
Nota mayor
Nmero de aprobados
Nmero de reprobados

II. Anlisis del problema
a) Definicin de Variables de Salida
Nombre Tipo Descripcin
prom Real Representa la nota promedio del grupo de alumnos
mayor Real Representa la nota mayor de todos los exmenes
apr Entero Representa el nmero de estudiantes que aprobaron el examen.
Contador vi=0 vc =1 vf =?
rep Entero Representa el nmero de reprobados. Contador vi=0 vc=1 vf=?
Se desplegar el nombre de cada estudiante, junto a su nota.

b) Definicin de Datos de Entrada:
Variables:
Nombre Tipo Descripcin
nom Alfanm Representa el nombre de cada estudiante
nota real Representa la nota de cada estudiante.

Constantes: Se utiliza el valor fijo de 25 alumnos

c) Restricciones: nota >=0 && nota <=10

d) Proceso:
apr =0; rep =0; mayor =0;
suma =0

Leer nom y nota // Validar nota
suma =suma +nota // inicialmente suma =0
nota >mayor ?
Si: mayor =nota //nota mayor
nota >=6 ?
Si: apr =apr+1
No: rep =rep+1

prom =suma/25

e) Definicin de Variables de Proceso:
Nombre Tipo Descripcin
suma real Representa la suma de las 25 notas. Acumulador vi=0 vc=
nota vf =?
i entero Representa el contador de los alumnos, vi =1 vc =1 vf =25.

Se repite desde i=1
hasta i<=25
36

Inicio
rep = 0
apr = 0
suma = 0
mayor = 0
i = 1, 25, 1
nom
nota
Mientras
nota<0 || nota>10
nota
suma = suma + nota
prom = suma/25
mayor, prom
nom, nota
apr, rep
Fin

mayor = nota
Flujograma 9
III Diseo de la Solucin:
Flujograma
nota
>=6
rep = rep+1 apr=apr+1
Si
Si
nota>
mayor
37
IV. Codificacin de la solucin
// Programa que calcula el numero de aprobados y reprobados
#include <stdio.h>
#include <conio.h>

main()
{
int apr=0, rep=0, j;
float nota, suma=0, prom, mayor =-1;
char nom[25];

for(j=1; j<=25; j++) // Inicio del lazo
{
puts("Digite el nombre del alumno:");
gets(nom);
printf("\nIntroduzca la nota: ");
scanf("%f", &nota);

fflush(stdin); // Se utiliza para limpieza del buffer de memoria

while (nota<0 || nota >10) //Validacion de datos
{
puts("La nota debe estar entre 0 y 10: ");
scanf("%f", &nota);
}

suma+=nota;

printf("\n: %s \t : %.2f\n", nom, nota); // Cuenta aprobados y reprobados

if (nota>=6)
apr++;
else
rep++;

if (nota>mayor) // Almacena la nota mayor
mayor =nota;
} //Fin del lazo

prom=suma/25;

printf("\n\n La Nota Promedio del grupo es: \t %.2f", prom);
printf("\n\n Nota mayor del grupo: \t %.2f",mayor);

printf("\n\n\n Numero de Aprobados: \t %d", apr);
printf("\n Numero de Reprobados: \t %d", rep);

getch();
return 0;

} // Fin del programa





38
Tambin se le conoce como estructura Hasta que porque el cuerpo del ciclo se repite hasta que la
condicin de cmo resultado cierto. Esta estructura permite ejecutar (o repetir) el cuerpo del ciclo al
menos una vez, es decir que el nmero de iteraciones puede ser 1, 2 o varias veces.

1 Representacin Grfica
Para ello utilizamos los mismos smbolos de las otras dos estructuras repetitivas, siendo su
representacin grafica es como sigue:

2 Funcionamiento de la Estructura:
En esta estructura el cuerpo del ciclo se ejecuta la primera vez, sin tomar en cuenta ninguna
condicin, de aqu su nombre: ENTRADA ASEGURADA; al finalizar el cuerpo del ciclo, se evala la
condicin, si el resultado es cierto se contina con la siguiente estructura del flujograma; por el
contrario si el resultado es falso, se vuelve a repetir el cuerpo del ciclo.

3 Reglas de funcionamiento
1. La estructura termina con una expresin lgica.
2. Se ejecuta el cuerpo del ciclo una vez, la primera
3. Se evala la condicin: resultado cierto, no se repite mas; resultado falso se repite una vez
mas el cuerpo del ciclo y se evala de nuevo la condicin



Ejemplo No.9
Se tiene un grupo de nmeros enteros positivos, pero se desconoce cuantos son, disee un
algoritmo que imprima:
a. Cuntos nmeros forman el grupo de datos.
b. El promedio de los nmeros pares.
c. Cuntos son los impares.
d. Cuntas veces se repite el nmero cinco.

El primer dato debe ser 10.

No
Si
Condicin
Proceso
Hasta que
condicin
Proceso
Tambin se puede representar as:
Figura 6
39
I Planteamiento del Problema

Entrada de Datos


Salida de datos
Cada nmero entero
a procesar

Cantidad de datos
Promedio de nmeros pares
Nmero de impares
Cuntos 5 hay en el grupo
II Anlisis del Problema
a. Definicin de Variables de Salida
Nombre Tipo Descripcin
datos Entero Representa el nmero total de datos. Contador vi =0; vc=1 vf =?
prom_p Real Representa el promedio de los nmeros pares
cinco Entero Almacena el nmero de veces que se repite el nmero cinco.
Contador vi=0 vc=1 vf=?
imp Entero Almacena nmero de datos impares. Contador vi=0 vc=1 vf=?

b. Definicin de Datos de Entrada
Variables:
Nombre Tipo Descripcin
num Entero Almacena cada uno de los nmeros del grupo de datos, solo
que inicialmente se le asigna el valor de 10, luego se lee

Constantes: No se utilizan

c. Restricciones
num >0 y se utilizar como centinela o condicin de fin de datos

d. Proceso:
Vamos a leer los datos uno a uno y los vamos a ir contando, para saber cuntos
lemos en total; vamos a parar de leer cuando tengamos un dato negativo
con cada dato ledo se verificar si es par, y en tal caso se acumular (sum_p) con
todos los pares que aparezcan, para despus calcular el promedio de pares (prom_p),
En caso de que el dato ledo es impar y se lleva un conteo de ellos (imp). Adems, si
el dato verificaremos que sea igual a 5 para contarlos.
Para calcular el nmero de pares, se debe restar el nmero de impares del total de
datos ledos.

datos =0; cinco =0; imp =0; sum_p =0;

num =10 // el primer dato
datos =datos +1
num % 2 ==0?
Si: sum_p =sum_p +num
No: imp =imp +1
num =5?
Si: cinco++
Leer num

pares=datos imp // Cantidad de nmeros pares
prom_p =sum_p/pares // Calculo del promedio de pares
Se repite Hasta que
num <=0
40
e. Definicin de Variables de Proceso:
Nombre Tipo Descripcin
sum_p Entero Acumula los datos pares: vi=0 vc=num vf=?
pares Entero Cuenta la cantidad de datos pares

III Diseo de Solucin
Flujograma




No
No Si
Inicio
datos=0
sump_p=0
cinco=0
imp=0

num =10
datos = datos+1
prom_p = sum_p/pares
1
datos, prom_p,
cinco, imp
Fin
imp++
num
= = 5
Si
sum_p = sum_p+ num
1
num%2
==0
No
Si
cinco= cinco +1
num
num
<= 0
pares = datos - imp
Flujograma 10
41

4 Sintxis en C
Esta estructura NO tiene codificacin en C, por lo tanto es mejor disear nuestra solucin o
flujograma con una estructura MIENTRAS, desde el principio; pero si en nuestro diseo de solucin
utilizamos un HASTA-QUE, tendremos que cambiarlo un poco para convertir la estructura HASTA-
QUE en un MIENTRAS o en un DESDE-HASTA, segn convenga y as, poder codificar nuestra
solucin.


5 Porque NO utilizamos HASTA QUE en Lenguaje C
C tiene entre sus sentencias de repeticin la formada por las palabras reservadas do y while, pero
durante este ciclo no podemos utilizar esta sentencia, ya que el objetivo principal de esta
asignatura es aprender a disear programas mediante las tcnicas conocidas como
PROGRAMACION ESTRUCTURADA, una de estas tcnicas es la LOGICA ESTRUCTURADA, en
donde se sostiene que todos los programas (por difciles que sean los problemas que resuelvan),
se pueden disear utilizando nicamente las seis estructuras lgicas de control: asignacin,
seleccin, seleccin mltiple, mientras, desde-hasta y hasta que.

La sentencia do-while no funciona como un hasta-que, es un hbrido entre la estructura mientras y
la estructura hasta que, lo cual va en contra del principio bsico de la lgica estructurada como se
demuestra en los siguientes flujogramas.



6 CICLOS ANIDADOS
El cuerpo de un ciclo puede contener cualquier tipo de sentencias: secuenciales, selectivas y
repetitivas. Cuando un ciclo est contenido en el cuerpo de otro ciclo, se denominan ciclos anidados.
Se pueden anidar los tres tipos de estructuras estudiadas anteriormente, ya sea con un mismo tipo
de estructuras o con una combinacin de varias de ellas.

Por ejemplo, los ciclos Hacer mientras y desde hasta pueden estar anidados, entre s, o bien
ciclos Hacer mientras con hasta que o viceversa; como se muestra a continuacin:




Si
NO Si
NO
Condicin
Sentencia do- while,
Proceso Proceso
Estructura HASTA - QUE
Figura 7
Condicin
42




Dos ciclos mientras anidados:

Mientras Condicin 1 Hacer
. . .
.
Mientras Condicin 2 Hacer

Bloque de instrucciones

Fin mientras
. . .
Fin mientras




Un ciclo mientras dentro de un desde hasta

Desde var=vi hasta vf, incrementos vc
. . .

Mientras Condicin 2 Hacer

Bloque de instrucciones

Fin mientras
. . .
Fin desde - hasta

En los ejemplos resueltos anteriormente se han utilizado ciclos anidados.








Introduccin a la Informtica
Ciclo I - 2014

Вам также может понравиться