Está en la página 1de 42

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERÍA Y ARQUITECTURA ESCUELA DE INGENIERÍA DE SISTEMAS INFORMÁTICOS

INTRODUCCIÓN A LA INFORMÁTICA

DE SISTEMAS INFORMÁTICOS INTRODUCCIÓN A LA INFORMÁTICA Aprender a utilizar las Estructuras Repetitivas en el
DE SISTEMAS INFORMÁTICOS INTRODUCCIÓN A LA INFORMÁTICA Aprender a utilizar las Estructuras Repetitivas en el
DE SISTEMAS INFORMÁTICOS INTRODUCCIÓN A LA INFORMÁTICA Aprender a utilizar las Estructuras Repetitivas en el

Aprender a utilizar las Estructuras Repetitivas en el diseño de solución de problemas y conocer su sintaxis en el Lenguaje C, para la aplicación de estas estructuras a nuestros programas.

la aplicación de estas estructuras a nuestros programas. Introducción 1 I. Estructuras Repetitivas 2

Introducción

1

I. Estructuras Repetitivas

2

II. Conceptos Necesarios

2

III. Estructura de Entrada Condicionada

4

IV. Más Operadores de C

10

V. Estructura Controlada por un Contador

30

VI. Estructura de Entrada Asegurada

38

VII. Ciclos Anidados

41

de Entrada Asegurada 38 VII. Ciclos Anidados 41 En nuestra vida cotidiana nosotros podemos realizar tareas

En nuestra vida cotidiana nosotros podemos realizar tareas o acciones más de una vez, por ejemplo para ustedes es casi obligatorio venir a clase todos los días, para nosotros los docentes es obligatorio venir a trabajar todos los días; así también todos los días nos bañamos, comemos, dormimos, etc. Hay otras tareas que no son tan frecuentes pero que también se repiten: estudiar (solo estudiamos unos 2 o 3 días antes de la evaluación), ir al cine (solo cuando tenemos plata, tiempo y exhiben la película que nos interesa).

Realizar algunas actividades muchas veces depende de alguna condición 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 características, por ejemplo: el cálculo de la nota final de los estudiantes de Introducción a la Informática, se realizará tantas veces como estudiantes estén inscritos en la asignatura, el cálculo 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 número de empleados, etc. En estos casos, la solución que se diseña para un sólo grupo de datos se debe repetir tantas veces como sea necesario (de acuerdo al número de estudiantes y de empleados para los ejemplos anteriores).

Es muy común encontrar en los algoritmos operaciones que se deben ejecutar varias veces en períodos más o menos espaciados. Si bien las instrucciones (o acciones a realizar) son las mismas, los datos sobre los que se opera varían.

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

1

Se conoce como estructura iterativa, ciclo, bucle, lazo o estructura repetitiva, al conjunto de bloques

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 acción (o varias) se puede realizar una o varias veces (en algunos casos especiales ninguna vez) de acuerdo a una condición. 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 gráficamente una estructura repetitiva, haremos uso de los siguientes símbolos o bloques:

haremos uso de los siguientes símbolos o bloques: Es el mismo rombo que se utiliza para

Es el mismo rombo que se utiliza para las estructuras selectivas, pero en estructuras repetitivas, las flechas internas nunca se reúnen de nuevo. Con este símbolo se visualiza y comprende fácilmente el funcionamiento de las estructuras repetitivas

fácilmente el funcionamiento de las estructuras repetitivas Este es el símbolo especial para representar las tres

Este es el símbolo especial para representar las tres estructuras

repetitivas, por lo tanto es necesario

aclarar

representamos, escribiendo dentro del bloque el nombre de la estructura utilizada

ellas

a

cual

de

Figura 1

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

1. Cuerpo del Ciclo:

Esta formado por la acción que se repite en un bucle y puede estar formada por una o más

estructuras lógicas de control:

Secuenciales (entrada de datos, asignación/proceso , salida de datos),

Selectivas

Repetitivas

(simple, doble, anidada, múltiple)

(entrada condicionada, entrada asegurada, controlada por contador)

Combinación de las anteriores.

2 Iteración:

A la ejecución del cuerpo del ciclo se le conoce como iteración; dicho de otra forma, una iteración es cada una de las ejecuciones (o veces que se repite) del cuerpo del ciclo. Si el cuerpo del ciclo o acción a repetir, se realiza 5 veces, se dice que se ejecutan 5 iteraciones.

2

3

Representación General de Estructuras Iterativas:

Acción a repetir
Acción a
repetir
Cuerpo del ciclo
Cuerpo
del ciclo
Estructuras Iterativas: Acción a repetir Cuerpo del ciclo Figura 2 Dentro del símbolo se escribe el

Figura 2

Dentro del símbolo se escribe el tipo

(o nombre) de estructura utilizada:

MIENTRAS, DESDE – HASTA ó HASTA QUE

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 numérico para falso y uno (o cualquier otro valor diferente de cero) se considera el valor numérico para cierto.

5 Centinela:

Un centinela es un dato que nos permite realizar una acción determinada, normalmente se utiliza para ejecutar (o repetir) una acción o cuerpo de ciclo o dejar de hacerlo.

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

La mayoría de las veces es un dato constante, siempre forma parte de una condición y es el dato que aparece al lado derecho de un operador relacional.

a < 8

a < 8

&&

a >= 2

// 8 es considerado centinela // 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 matemático:

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

Se acostumbra fijar como centinela un número que no cumpla con las restricciones del dato o un valor completamente ilógico para ese dato:

edad == -1 sueldo != 0

//Aquí el -1 es el centinela //El centinela es el número 0

6 Contador:

Es una variable que controla o “cuenta” el número 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; además, para definir correctamente una variable contador, se debe de indicar lo siguiente:

Valor inicial:

Valor final:

Representa el número a partir del cual se empieza a contar.

Representa el número hasta el que se va a contar.

3

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 más común de contar es de uno en uno, sobre todo si lo que se desea es saber cuántas veces se repite una acción determinada; pero, no es la única forma de contar, también se puede también contar de dos en dos o de cinco en cinco o de 100 en 100, es más también 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 acción se pueda ejecutar, por ejemplo contamos desde 4 (valor inicial) hasta 20 (valor final), de 2 en 2(valor de cambio).

Existen también 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, también es necesario indicar:

Valor inicial:

Valor final:

Valor de cambio: Representa cada valor de la variable que se va sumando o acumulando. Este valor puede ser constante o variable.

Representa el valor original o inicial del acumulador

El último valor que toma el acumulador

del acumulador El último valor que toma el acumulador Para poder comprender y aplicar la estructura

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

1. Representación Gráfica

Para representar gráficamente una estructura MIENTRAS, vamos a utilizar el símbolo especial que

se mostró en la figura 1, aunque también se puede utilizar el rombo, como se muestra a continuación:

4

Mientras Acción a repetir
Mientras
Acción a
repetir

También se puede representar con el rombo, siendo más fácil de comprender su funcionamiento así:

NO Condición SI Acción a repetir
NO
Condición
SI
Acción a
repetir
funcionamiento así: NO Condición SI Acción a repetir Lo que está dentro de las líneas

Lo

que

está

dentro

de

las

líneas punteadas es la Estructura Repetitiva

Figura 3

Nótese que en el gráfico 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 condición, dicho en otras palabras: Mientras la condición de como resultado cierto, el cuerpo del ciclo se realiza (ejecuta o repite).

Al entrar a la estructura se evalúa la condición, si el resultado es falso, la acción no se ejecuta, si al contrario la condición resulta cierta, se realiza la acción y se regresa a evaluar la condición 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 condición, por esta razón, a estos ciclos se les denomina ciclos con entrada condicionada, se entra al cuerpo del ciclo si la condición se cumple.

, se entra al cuerpo del ciclo si la condición se cumple. Entrada a la estructura

Entrada a la estructura

ciclo si la condición se cumple. Entrada a la estructura Condición Cierto Cuerpo de ciclo Falso
Condición Cierto Cuerpo de ciclo
Condición
Cierto
Cuerpo de
ciclo
Falso
Falso

Como todas las estructuras lógicas de control ésta tiene también una sola entrada y una sola salida

Salida de la estructura

Figura 4

Dentro del cuerpo del ciclo debe existir alguna estructura que modifique el resultado lógico (de verdadero a falso) de la condición; si esto no sucede, la estructura repetitiva se quedaría ejecutando el cuerpo del ciclo indefinidamente, ya que para salir de la estructura la condición debe

5

dar como resultado falso, en este caso el ciclo se denomina bucle infinito o sin fin y el algoritmo no termina nunca su ejecución, situación que DEBE evitarse.

3. Reglas De Funcionamiento:

Las siguientes normas o reglas deben de cumplirse, cuando utilicemos una estructura MIENTRAS:

1. La condición (expresión lógica) es lo primero que se evalúa al llegar a la estructura; cuando el resultado el resultado es “Verdadero”, se ejecuta el cuerpo del ciclo (y se regresa a evaluarla la condición), cuando el resultado es “Falso” se sigue la flecha de salida de la estructura.

2. Cuando la condición se evalúa 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 condición dé cómo 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 expresión lógica.

Ejemplo No. 1 Diseñe un flujograma que Imprima los n primeros números enteros positivos.

I. Planteamiento del problema

Entrada

enteros positivos. I. Planteamiento del problema Entrada • Cantidad de números a imprimir Salida • Cada

Cantidad de

números a

imprimir

Salida

problema Entrada • Cantidad de números a imprimir Salida • Cada uno de los números II.

Cada uno de los números

II. Análisis del Problema

a. Variables de Salida:

Nombre

Tipo

Descripción

num

entero

Representa cada uno de los números a imprimir

b. Datos de Entrada Variables:

Nombre

Tipo

Descripción

n

entero

Almacena la cantidad de números a imprimir

c.

d.

Constantes: No son necesarias

Restricciones:

n>0

Proceso:

verificar que cumpla la restricción; luego iniciar con num=1; imprimirlo y aumentarle 1, mientras num sea menor o igual que n

Lo que haremos es leer la cantidad de números que vamos a imprimir y

6

Leer n ¿ n>0 ?

e. Variables de Proceso:

SI:

NO:

Inicialmente:

num = 1

? e. Variables de Proceso: SI: NO: Inicialmente: num = 1 Mientras num<=n Imprimir num num

Mientras

num<=n

Imprimir num num = num + 1

Imprimir “Error en datos”

No se han utilizado

III. Diseño de Solución:

Inicio “Cuantos números quiere imprimir” n
Inicio
“Cuantos
números quiere
imprimir”
n

O también:

Inicio
Inicio
“Cuantos números quiere imprimir” n
“Cuantos
números
quiere
imprimir”
n
No Si n > 0 num = 1 “Error en dato”
No
Si
n > 0
num = 1
“Error
en
dato”
n No Si n > 0 num = 1 “Error en dato” “Numeros Enteros Positivos” Mientras

“Numeros Enteros

Positivos”

= 1 “Error en dato” “Numeros Enteros Positivos” Mientras num<=n num num=num+1 Si n > 0
Mientras num<=n num num=num+1
Mientras
num<=n
num
num=num+1
Si n > 0 num = 1 No n, “Numeros Enteros Positivos:” num<=n num
Si
n > 0
num = 1
No
n, “Numeros Enteros
Positivos:”
num<=n
num
1 No n, “Numeros Enteros Positivos:” num<=n num num=num+1 “Error en dato” No Si Fin Flujograma
1 No n, “Numeros Enteros Positivos:” num<=n num num=num+1 “Error en dato” No Si Fin Flujograma

num=num+1

“Error en dato”
“Error
en
dato”
No
No
Si

Si

num<=n num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que
num<=n num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que
num<=n num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que
num<=n num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que
Fin
Fin

Flujograma 1

num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que en
num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que en
num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que en
num num=num+1 “Error en dato” No Si Fin Flujograma 1 Fin Flujograma 2 Note que en
Fin
Fin
Flujograma 2 Note que en este gráfico el Si y el No, se omiten, sólo
Flujograma 2
Note que en este
gráfico el Si y el
No, se omiten,
sólo se sigue la
lógica

7

4.

Validación 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 validación de datos consiste en obtener datos válidos; 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 restricción 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í:

Restricción:

puntos >=5 && puntos <= 20

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

Condición del ciclo Mientras:

Puede también escribirse:

puntos<5

||

puntos > 20

!(puntos >=5 && puntos <= 20)

. . . “Digite el numero de puntos” puntos No puntos<5 || puntos>20 Si “El
.
.
.
“Digite el
numero de
puntos”
puntos
No
puntos<5 ||
puntos>20
Si
“El dato no es
valido, intente
de nuevo”
puntos

Observe que la flecha regresa

siempre a evaluar la condición, NO

ANTES NI DESPUÉS.

En esta parte de algoritmo no hará más que pedir datos si no se cumple la restricción.

Note también que en la condición se ha escrito lo contrario de la restricción, para que la estructura MIENTRAS funcione correctamente.

. . .
.
.
.

Figura 5

8

5

Codificación En C de la Estructura Mientras

La estructura iterativa de entrada condicionada necesita solamente la palabra reservada while, que justamente en español significa mientras, los paréntesis ( ) para encerrar la condición y las { } para delimitar el cuerpo del ciclo:

Codificación

 

Ejemplo

 

. x = 100; while (x<500)

.

.

while (condición)

 

{

 

{

Cuerpo del ciclo;

 

printf(“\n %i”, x); x = x + 50;

}

 

}

.

.

.

El ejemplo anterior, que imprime n enteros positivos (pág. 6 y 7) escrito en C lo tenemos a continuación:

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

#include<stdio.h>

#include<conio.h>

main()

{

int n, num=1;

puts(“Cuantos números 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;

}

9

Agregando la validación de datos el programa nos queda así:

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

#include<stdio.h>

#include<conio.h>

main()

{

int n, num=1;

puts(“Cuantos números 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;

}

%i”, num); num = num+1; } getch( ); return 0; } Los datos sobre los que

Los datos sobre los que actúan los operadores se denominan operandos. Así en la expresión:

2 + a

tenemos un operador: ‘+’, y dos operandos:

‘2’

y

‘a’

si escribimos completa la expresión tenemos que agregar una variable y otro operador más:

x = 2 + a;

Los operadores que hemos visto los resumimos en aritméticos (+, -, *, /, %), relacionales (<, <=, >, >=, !=, ==), lógicos (&&, ||, !) , el de asignación (=) y el operador condicional (?:).

También los podemos clasificar de acuerdo al número de operandos que necesiten en Unuarios o monoarios, necesitan sólo un operando como el signo menos de un número negativo: -23, -a, !a y otros que veremos en la sección 4.2 de este guión 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 expresión como operando, por ejemplo, el operador condicional ?

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

(a+3>7) primer operando

b=a segundo operando

10

y

b=2 tercer operando.

C es un lenguaje rico en operadores, además de los que ya estudiamos, conoceremos también otros operadores de asignación (que son binarios), y los operadores de incremento-decremento (monoarios):

1. Operadores de asignación:

Ya sabemos que, el operador = asigna el valor de la expresión derecha a la expresión 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 expresión:

a = 300;

b = a;

x = 2 +a;

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

Además del operador de Asignación =, C proporciona cinco operadores de asignación adicionales que actúan como una nota abreviada para expresiones utilizadas con frecuencia, y que también son operadores binarios:

Símbolo

Sentencia

Sentencia No

 

Descripción

 

Abreviada

Abreviada

 

=

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 adición 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 comúnmente 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

líneas

que

Son sentencias que restan 1 al valor que tiene la variable n

suman 1 a la variable n

11

Estos operadores tienen la propiedad de que pueden utilizarse como prefijo (antes del operando) o como sufijo (después del operando), el resultado de la expresión puede ser distinto, dependiendo del contexto.

Si los operadores ++ y -- se usan como prefijo, la operación de incremento o decremento se efectúa antes que la operación de asignación; si los operadores ++ y – están como sufijos, la asignación se efectúa en primer lugar y el incremento o decremento después.

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. Jerarquía de Todos los Operadores

Se debe recordar que con el uso de paréntesis se puede romper este orden de prioridades establecido por el lenguaje C.

 

Operador

Prioridad

Asociatividad

 

Funciones

Mayor

Izq.– der.

 

++,

--, !

   

Der – izq.

 

-

(cambio de

Der – izq

 

signo)

 

*,

/, %

Izq – der

 

+, -

Izq – der.

 

>, <, <=, >=

Izq – der.

 

==,

!=

Izq – der.

 

&&

Izq – der.

 

||

Izq – der.

 
 
 

?:

 

Der – Izq.

=,

+=, -=, *=, /=, %=

Menor

Der – Izq.

El programa de los números enteros de la página 10, también se puede escribir así:

12

/*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 impresión horizontal

 

num++;

//tambien puede ser num+=1;

 

}

getch();

 

return 0;

 

}

/* si quiere ver los diez numeros de manera vertical, un numero por linea

 

la instrucción 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. Diseñe un programa, utilizando la metodología completa, que dé a conocer el número de productos de cada clase, si se conoce la calidad de cada uno de los 100 existentes en bodega.

I.

Planteamiento del Problema

 

Entrada

I. Planteamiento del Problema   Entrada • Clase de cada producto • Número de productos en

Clase de cada producto

Número de productos en total

(100)

Salida

producto • Número de productos en total (100) Salida • Numero de calidad optima • Número

Numero de calidad optima

Número de productos de calidad normal

Número de productos de calidad deficiente

13

II.

Análisis del Problema

a. Definición de Variables de Salida

Nombre

Tipo

Descripción

opt

Entero

Representa el número de productos con calidad Optima,

nor

Entero

Contiene el número de productos con calidad Normal

def

Entero

Representa el número de productos con calidad Deficiente

Estas tres variables son de tipo contador, ya que irán 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. Definición de Datos de Entrada.

Variables:

Nombre

Tipo

Descripción

clase

Entero

Representa un código numérico que indica la clase de calidad que tiene un producto: 1: Optima, 2: Normal, 3: Deficiente

Constantes: El número de productos almacenados en bodega se consideran constantes: 100

c. Restricciones:

d. Proceso:

clase >=1

&&

clase <= 3

Lo que se hará es, leer la calidad (o clase) de cada producto y contabilizarlo según su clase; es decir le sumaremos uno (1) a opt, nor o def según 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 numéricamente, utilizaremos para la clasificación una Estructura de Selección Múltiple:

Repetir

Mientras

prod<=100

prod=1;

opt=0;

nor=0;

def=0;

// Aquí se lee y valida clase 1 clase = 2 3
// Aquí se lee y valida clase
1
clase =
2
3

opt++

( ó opt=opt+1)

nor++

(ó nor+=1)

def++

e. Definición de Variables de proceso:

Nombre

Tipo

Descripción

prod

Entero

Cuenta el número de productos analizados. Valor inicial = 1; valor de cambio = 1 y valor final = 100

III Diseño de Solución:

Flujograma, en la siguiente página

14

Inicio prod=1 opt=0 nor=0 def =0 No prod <=100 “Calidad Si optima”, opt “Digite la
Inicio
prod=1
opt=0
nor=0
def =0
No
prod
<=100
“Calidad
Si
optima”, opt
“Digite la
clase del
producto”
“Calidad
Normal:”, nor
clase
“Calidad
clase<1 ||
No
Deficiente:” def
clase >3
Si
Fin
“Esa clase no
existe, intente
de Nuevo”
clase
clase
1
opt++
2
nor++
3
def++
prod++
Flujograma 3

15

IV.Codificación de la solución

/* 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"); puts("2. Clase de Calidad Normal");

// No estan en el flujograma pero, // ayudan a la entrada de datos

puts("3. Clase de Calidad Deficiente"); printf("\n\n"); while (prod<=100)

// Deja una linea en blanco // inicia el ciclo de productos

{

printf("Digite la clase del producto \t %i \n", prod); scanf("%d", &clase); while (clase<1 || clase >3)

//Validación 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 selección múltiple. El único cuidado que se debe de tener es cerrar cada estructura como tiene que ser y nunca cruzar dos o más de ellas.

16

Ejemplo 3 Diseñe un programa C que, dados como datos 25 números enteros, obtenga la suma de los números impares y el promedio de los números pares.

I. Planteamiento del Problema:

Entrada

los números pares. I. Planteamiento del Problema: Entrada • Números enteros • Cantidad de datos (25)

Números enteros

Cantidad de datos

(25)

Salida
Salida

Salida

Salida
• Números enteros • Cantidad de datos (25) Salida • Suma de todos los números impares

Suma de todos los números impares

Promedio de los números pares

II. Análisis del Problema:

a. Definición de Variables de Salida

Nombre

Tipo

Descripción

to_imp

Entero

Suma, totaliza o Acumula todos los números impares

p_pares

Entero

Promedio de todos los números pares

b. Definición de Datos de Entrada Variables:

Nombre

Tipo

Descripción

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 división 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 número de datos pares, por lo tanto necesitamos contarlos:

i=1

//cuenta número 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

Repetir

Mientras

i<=25

¿Es num%2 == 0?

Si:

to_par+=num

n_par++

No: to_imp+=num i++

p_pares= to_pares/n_par

17

//recuerde que hay que leer los 25 datos

//clasifica pares e impares //acumula pares //cuenta pares

//acumula impares

e. Definición de Variables de Proceso

Nombre

Tipo

Descripción

to_par

entero

Acumula todos los datos pares. Vi=0; Vc=num; Vf es lo que necesitamos conocer

n_par

entero

Cuenta el número de datos pares, Vi=0; Vc=1; Vf es lo que necesitamos.

i

entero

Cuenta el número de datos leídos y procesados. Vi=1; Vc=1 y Vf =25 (contamos desde el primer dato hasta el último).

III. Diseño de Solución:

Flujograma

Inicio

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

Flujograma

4

18

IV.

Codificación de la solución:

/* 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

Diseñe un programa en C que, lea un número 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

2 3 4 5 N I. Planteamiento del problema Entrada • Dato entero que indica el

Dato entero que indica el número de términos a sumar

del problema Entrada • Dato entero que indica el número de términos a sumar 19 Salida

19

Salida

del problema Entrada • Dato entero que indica el número de términos a sumar 19 Salida

Valor de la serie

II.

Análisis del Problema

a. Definición de Variables de Salida:

Nombre

Tipo

Descripción

serie

Real

La suma de todos los términos de la suma, acumulador Vi=0; Vc=cada término y Vf es lo que se necesita conocer

b. Definición de Datos de Entrada:

Variables:

Nombre

Tipo

Descripción

n

Entero

Número de términos de la serie, denominador mas grande

Constantes: No se utilizan

c. Restricciones:

d. Proceso:

n>0

Para sumar todos los términos en serie, esta variable debe tener un valor inicial de cero, generar cada término y acumularlo en serie. Al observar la serie, cada término tiene el mismo numerador (1), y el denominador va incrementando de uno en uno, siendo el primero 1. La generación del término y la acumulación en serie se realizará n veces:

 

k=1

//contador de términos

 
  serie=0 //acumulador de términos

serie=0

//acumulador de términos

Repetir

ter= 1/k

//generación de cada término

Mientras

serie+=ter

//acumulación de los términos

k<=n

k++

//cambia el denominador

e. Definición de Variables de Proceso:

Nombre

Tipo

Descripción

k

Entero

Contador de téminos generados, sumas realizadas o de veces que se repite el proceso. Vi=0, Vc=ter; Vf=n

ter

Entero

Representa cada uno de los términos a sumar

III. Diseño de la Solución: En la siguiente página

20

Inicio

serie=0 k=1 “¿Cuantos terminos?” n Mientras (n<=0) “Debe ser un numero positivo” n
serie=0
k=1
“¿Cuantos
terminos?”
n
Mientras
(n<=0)
“Debe ser
un numero
positivo”
n
Mientras (k<=n) ter= 1/k serie+=ter k++
Mientras
(k<=n)
ter= 1/k
serie+=ter
k++
n Mientras (k<=n) ter= 1/k serie+=ter k++ “El resultado de la serie es:”, serie Fin Flujograma
“El resultado de la serie es:”, serie Fin
“El resultado de
la serie es:”,
serie
Fin

Flujograma 5

21

IV.

Codificación de la Solución:

/* Programa para calcular la serie 1 + 1/2 + 1/3 + a partir de un entero positivo N dado*/ #include <stdio.h> #include <conio.h> main()

+

1/N

{

 

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 coordinación un informe que contenga la siguiente información:

Nombre y la nota final de cada estudiante

Nota promedio de todos

Número de hombres aprobados.

Número de mujeres reprobadas

I. Planteamiento del Problema Entrada

de mujeres reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre •

Salida

reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre • y Nota
reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre • y Nota
reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre • y Nota
reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre • y Nota
reprobadas I. Planteamiento del Problema Entrada Salida • Nombre de cada estudiante Nombre • y Nota

Nombre de cada estudiante

Nombre

y

Nota

final

de

cada

Notas (5) de cada estudiante

alumno

Sexo de cada estudiante

Número de estudiantes (80)

22

Promedio del grupo de alumnos

Números de hombres aprobados

Cantidad de mujeres reprobadas

II.

Análisis del Problema:

a. Definición de Variables de Salida

Nombre

Tipo

Descripción

n_fin

Real

Nota final de cada estudiante,

prom

Real

Nota promedio del grupo.

h_apro

Entero

Representa el número de hombres que aprobaron la asignatura. Variable tipo contador

m_rep

Entero

La cantidad de mujeres que reprobaron la asignatura. Variable tipo contador

Además, se desplegará el nombre de cada estudiante

b. Definición de Datos de Entrada:

Variables:

Nombre

Tipo

Descripción

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 utilizarán los valores fijos de 80 alumnos y 5 evaluaciones.

c. Restricciones:

d. Proceso:

nota>=0 && nota<=10 sexo == 1 || sexo == 2

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 después 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, según el sexo del alumno, el sexo se debe leer y validar para cada alumno. Se repite 80 veces también:

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

23

Repetir Mientras e<=5

Repetir

Mientras

a<= 80

e=1

//Contador de notas por estudiante

su1=0

//Acumulador de notas por estudiante

leer nom

leer sexo

//sexo tiene restricción, Validar

leer nom leer sexo //sexo tiene restricción, Validar leer nota su1 = su1 + nota e++

leer nota su1 = su1 + nota e++

n_fin= su1/5 suma= suma + n_fin

¿sexo==1?

// La nota se debe validar

// Verifica si es hombre

Si:

¿n_fin>=6.0?

No:

Si: h_apro++ NO: No hacer nada ¿Es n_fin<6.0? Si: m_rep++ No: No hacer nada

a =a+1

e. Definición de Variables de Proceso:

Nombre

Tipo

Descripción

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 Diseño de Solución:

Flujograma en la siguiente página

24

Inicio

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

25

1 n fin=su1/5
1
n fin=su1/5
suma+=n fin

suma+=n fin

suma+=n fin
suma+=n fin
“Sexo 1 masc. y 2 feme. sexo Mientras sexo!=1 && sexo!=2 “Sexo 1 : masc.
“Sexo 1 masc.
y 2 feme.
sexo
Mientras
sexo!=1 && sexo!=2
“Sexo 1 :
masc. y 2 :
sexo
No Si sexo ==1 No Si No Si n_fin n_fi < 6.0 n m_rep++ h_apro++
No
Si
sexo
==1
No
Si
No
Si
n_fin
n_fi
< 6.0
n
m_rep++
h_apro++
Si sexo ==1 No Si No Si n_fin n_fi < 6.0 n m_rep++ h_apro++ a, nom,
Si sexo ==1 No Si No Si n_fin n_fi < 6.0 n m_rep++ h_apro++ a, nom,
Si sexo ==1 No Si No Si n_fin n_fi < 6.0 n m_rep++ h_apro++ a, nom,

a, nom, n_fin

a++ 2
a++
2

Conti. Flujograma 6

26

/* Programa que imprime informe para coordinación*/ #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)

IV. Codificación de la Solución:
IV. Codificación de la Solución:

{

 

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 MUJERES REPROBADAS: %d", m_rep); getch();

return 0; }

27

Ejemplo 6 Diseñe un programa en C que imprima los valores de la función f(x)= x 3 , a partir de un valor real

inicial de x, hasta un límite final, con incrementos de 0.25. valor de x como el de f(x).

El programa debe de imprimir tanto el

I. Planteamiento del Problema

Entrada

de imprimir tanto el I. Planteamiento del Problema Entrada  Valor inicial de x  Valor

Valor inicial de x

Valor final de x

Incremento de los valores de x (0.25)

II. Análisis del problema

de los valores de x (0.25) II. Análisis del problema a. Definición de Variables de Salida

a. Definición de Variables de Salida

Salida

del problema a. Definición de Variables de Salida Salida  Valor de la función f(x) Nombre

Valor de la función f(x)

Nombre

Tipo

Descripción

 

x Real

Cada uno de los valores que toma x. tipo contador.

Variable

 

y Real

El valor de la función para cada valor de x

b. Definición de Datos de Entrada Variables:

Nombre

Tipo

Descripción

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 cálculo se repite mientras x<=vf:

Los variables vi y vf se deben leer y validar.

x<=vf: Los variables vi y vf se deben leer y validar. Repetir Mientras x<=vf Leer vi

Repetir

Mientras

x<=vf

Leer vi y vf x = vi

//Validar de acuerdo a restricción

y = pow(x,3)

//Hay que imprimir x, y

x+=0.25

// Cambio de valor de x, o incremento de x.

e. Definición de Variables de Proceso:

No se utilizan

28

III.

Diseño de solución: Flujograma:

Inicio

“Digite el valor inicial y final de x” vi, vf Mientras vi>=vf “El valor inicial
“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
No
x<=vf
Si
y=pow(x,3)
Fin
x, y
x+=0.25

Flujograma 7

29

IV.

Codificación de la Solución:

/*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 while (x<= vf)

x \t \t f(x) \n”);

//Encabezado de la impresion

{

y=pow(x,3);

printf(“\n \t %.2f \t \t %0.2f \n”, x, y);

 

x+=0.25;

}

getch(); return 0;

}

// Fin de programa

} getch(); return 0; } // Fin de programa Esta estructura se conoce como Desde -

Esta estructura se conoce como Desde - Hasta o ciclo FOR, se utiliza cuando conocemos por anticipado el número exacto de veces que se va a ejecutar el proceso. Al igual que el ciclo MIENTRAS, la realización del cuerpo del ciclo depende de una condición, 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 continuación se ejecuta el proceso del interior del ciclo; cuando se termina el cuerpo del ciclo se cambia el valor de la variable contador (según 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 Representación Gráfica:

Para la representación gráfica de esta estructura se utiliza solamente el símbolo de repetición, como se muestra a continuación:

30

Cont = Vi, Vf, Vc Proceso a repetir o cuerpo del ciclo
Cont = Vi, Vf, Vc
Proceso a repetir o
cuerpo del ciclo

En donde:

Figura 5

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 automáticamente 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 ejecución 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, después de realizado el cuerpo del ciclo y por el valor de cambio indicado, nunca por una asignación 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 también 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 diseñar la solución con una estructura mientras y no con una desde – hasta.

Ejemplo 7 Diseñe un programa que imprima la suma de los números enteros comprendidos entre 15 y 25

31

I.

Planteamiento del Problema

Entrada de Datos

I. Planteamiento del Problema Entrada de Datos • Número inicial • Número final Salida de datos

Número inicial

Número final

Entrada de Datos • Número inicial • Número final Salida de datos • Suma de los
Entrada de Datos • Número inicial • Número final Salida de datos • Suma de los
Entrada de Datos • Número inicial • Número final Salida de datos • Suma de los
Entrada de Datos • Número inicial • Número final Salida de datos • Suma de los
Entrada de Datos • Número inicial • Número final Salida de datos • Suma de los

Salida de datos

Suma de los número enteros

II.

Análisis del Problema

 

a)

Definición de Variables de Salida

 
 

Nombre

Tipo

Descripción

sum

entero

Representa la sumatoria de cada uno de los números enteros comprendidos entre los límites. Acumulador vi=0; vc=cada número, vf=?

b) Definición de Datos de Entrada Variables:

 

Nombre

Tipo

Descripción

li

entero

Representa el límite inferior del rango de números a sumar, o número inicial

ls

entero

Representa el límite superior del rango de números.

 

En este caso se han considerado los límites del rango de números a sumar (15 y 25) como variables, para tener la flexibilidad de cambiarlos a necesidad del usuario, perfectamente se puede también diseñar una solución solamente para esos 2 valores.

Constantes: No se utilizan

 

c)

Restricciones:

 

d) Proceso:

li < ls,

los límites pueden ser positivos o negativos

Leer li y ls sum = 0

sum = sum + j

// Validar // Inicialización del acumulador

0 sum = sum + j // Validar // Inicialización del acumulador se repite desde j

se repite

desde

j = li

hasta j <= ls

e)

Definición de Variables de Proceso:

 

Nombre

Tipo

Descripción

j

entero

Representa cada uno de los números a sumar.

Contador vi = li

vc = 1

vf = ls

IV.

Diseño de Solución:

Flujograma

32

Inicio sum =0 li, ls No li > ls Si li, ls j=li ls 1
Inicio
sum =0
li,
ls
No
li > ls
Si
li,
ls
j=li
ls
1
sum = sum + j
sum
Fin

Flujograma 8

4 Sintáxis 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 continuación:

for (Expresion1; Expresion2; Expresion3)

{

Cuerpo del ciclo;

}

En donde:

Expresion1:

Es la expresión que asigna el valor inicial a la variable contador.

Expresion2:

Es una expresión lógica (condición) que verifica que el valor actual del contador se encuentre entre los permitidos (vi –vf).

Expresion3:

Es una expresión de asignación que cambia el valor del contador

Es importante tomar en cuenta:

1. Las Llaves son necesarias siempre que el cuerpo del ciclo tiene más de una línea.

2. Las expresiones 1, 2 y 3 siempre van dentro de paréntesis.

33

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 más de una línea de programa, cada línea termina en punto y coma y se debe respetar la marginación.

La codificación del ejemplo 7 se puede escribir utilizando esta esta estructura:

// Programa que calcula la sumatoria de los números que se encuentra entre 2 límites

#include<stdio.h>

#include<conio.h>

main()

{

int li, ls, sum=0;

puts(“digite los limites inferior y superior”); scanf(“%i %i”, &li, &ls);

// lectura de los limites del rango de números

while (li > ls)

/* validacion de datos */

{

 

puts(“el primero limite debe ser menor”); scanf(“%i %i”, &li, &ls);

}

for (j=li; j<=ls; j++) sum+=j;

// proceso, sumatoria de los numeros

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

}

Ejemplo No. 8 Un profesor calificó 25 exámenes de sus alumnos y requiere calcular la nota promedio de todos ellos, la nota más alta y cuántos aprobaron y reprobaron el examen. Además se deberá imprimir el nombre y la nota de cada estudiante.

34

I.

Planteamiento del Problema

Entrada de Datos

• Nombre de cada estudiante • Calificación de cada estudiante • Número de alumnos
• Nombre
de
cada
estudiante
• Calificación
de
cada
estudiante
• Número
de
alumnos

(25)

de cada estudiante • Número de alumnos (25) Salida de datos • Nota promedio • Nota
de cada estudiante • Número de alumnos (25) Salida de datos • Nota promedio • Nota
de cada estudiante • Número de alumnos (25) Salida de datos • Nota promedio • Nota
de cada estudiante • Número de alumnos (25) Salida de datos • Nota promedio • Nota
de cada estudiante • Número de alumnos (25) Salida de datos • Nota promedio • Nota

Salida de datos

Nota promedio

Nota mayor

Número de aprobados

Número de reprobados

II. Análisis del problema

a) Definición de Variables de Salida

Nombre

Tipo

Descripción

prom

Real

Representa la nota promedio del grupo de alumnos

mayor

Real

Representa la nota mayor de todos los exámenes

apr

Entero

Representa el número de estudiantes que aprobaron el examen. Contador vi= 0 vc = 1 vf =?

rep

Entero

Representa el número de reprobados. Contador vi=0

vc=1

vf=?

Se desplegará el nombre de cada estudiante, junto a su nota.

b) Definición de Datos de Entrada:

Variables:

Nombre

Tipo

Descripción

nom

Alfanúm

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; suma = 0

rep = 0;

mayor = 0;

Leer nom y nota

suma = suma + nota

¿ nota > mayor ? Si: mayor = nota

¿ nota >= 6 ?

Si:

apr = apr+1

No:

rep = rep+1

prom = suma/25

// Validar nota // inicialmente suma = 0

//nota mayor

e) Definición de Variables de Proceso:

= 0 //nota mayor e) Definición de Variables de Proceso: Se repite desde i=1 hasta i<=25

Se repite desde i=1 hasta i<=25

Nombre

Tipo

Descripción

 

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.

35

Inicio III Diseño de la Solución: Flujograma mayor = 0 rep = 0 apr =
Inicio
III
Diseño de la Solución:
Flujograma
mayor = 0
rep = 0
apr = 0
suma = 0
i = 1
25
1
nom
nota
Mientras
nota<0 || nota>10
prom = suma/25
nota
mayor, prom
suma = suma + nota
apr, rep
nom, nota
Fin
Si
nota
>=6
rep = rep+1
apr=apr+1
Si
nota>
mayor
mayor = nota

Flujograma 9

36

IV.

Codificación de la solución

// 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) mayor = nota;

// Almacena la nota mayor

}

//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

37

También se le conoce como estructura Hasta – que porque el cuerpo del ciclo se

También se le conoce como estructura Hasta – que porque el cuerpo del ciclo se repite hasta que la

condición de cómo resultado cierto.

Esta estructura permite ejecutar (o repetir) el cuerpo del ciclo al

menos una vez, es decir que el número de iteraciones puede ser 1, 2 o varias veces.

1 Representación Gráfica

Para ello utilizamos los mismos símbolos de las otras dos estructuras repetitivas, siendo su representación grafica es como sigue:

Proceso No Condición Si
Proceso
No
Condición
Si
También se puede representar así: Hasta que condición Proceso
También se puede representar así:
Hasta que
condición
Proceso

Figura 6

2 Funcionamiento de la Estructura:

En esta estructura el cuerpo del ciclo se ejecuta la primera vez, sin tomar en cuenta ninguna condición, de aquí su nombre: ENTRADA ASEGURADA; al finalizar el cuerpo del ciclo, se evalúa la condición, si el resultado es cierto se continúa 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 expresión lógica.

2. Se ejecuta el cuerpo del ciclo una vez, la primera

3. Se evalúa la condición: resultado cierto, no se repite mas; resultado falso se repite una vez mas el cuerpo del ciclo y se evalúa de nuevo la condición

Ejemplo No.9 Se tiene un grupo de números enteros positivos, pero se desconoce cuantos son, diseñe un algoritmo que imprima:

a. Cuántos números forman el grupo de datos.

b. El promedio de los números pares.

c. Cuántos son los impares.

d. Cuántas veces se repite el número cinco.

El primer dato debe ser 10.

38

I

Planteamiento del Problema

Entrada de Datos

I Planteamiento del Problema Entrada de Datos • Cada número entero a procesar II Análisis del

Cada número entero a procesar

II Análisis del Problema

Cada número entero a procesar II Análisis del Problema Salida de datos • Cantidad de datos
Cada número entero a procesar II Análisis del Problema Salida de datos • Cantidad de datos
Cada número entero a procesar II Análisis del Problema Salida de datos • Cantidad de datos
Cada número entero a procesar II Análisis del Problema Salida de datos • Cantidad de datos
Cada número entero a procesar II Análisis del Problema Salida de datos • Cantidad de datos

Salida de datos

Cantidad de datos

Promedio de números pares

Número de impares

Cuántos 5 hay en el grupo

a. Definición de Variables de Salida

Nombre

Tipo

Descripción

datos

Entero

Representa el número total de datos. Contador vi =0; vc= 1

vf =?

prom_p

Real

Representa el promedio de los números pares

cinco

Entero

Almacena el número de veces que se repite el número cinco. Contador vi=0 vc=1 vf=?

imp

Entero

Almacena número de datos impares. Contador vi=0

vc=1

vf=?

b. Definición de Datos de Entrada Variables:

Nombre

Tipo

Descripción

num

Entero

Almacena cada uno de los números 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

d. Proceso:

y se utilizará como centinela o condición de fin de datos

Vamos a leer los datos uno a uno y los vamos a ir contando, para saber cuántos leímos en total; vamos a parar de leer cuando tengamos un dato negativo

con cada dato leído se verificará si es par, y en tal caso se acumulará (sum_p) con todos los pares que aparezcan, para después calcular el promedio de pares (prom_p),

En caso de que el dato leído es impar y se lleva un conteo de ellos (imp). Además, si el dato verificaremos que sea igual a 5 para contarlos.

Para calcular el número de pares, se debe restar el número de impares del total de datos leídos.

datos = 0;

cinco = 0;

imp = 0;

sum_p = 0;

num = 10 datos = datos +1

// el primer dato

¿num % 2 == 0? Si: sum_p = sum_p + num

No:

imp = imp + 1 ¿num = 5?

Si:

cinco++

Leer num

Se repite Hasta que num <= 0

pares= datos – imp prom_p = sum_p/pares

// Cantidad de números pares // Calculo del promedio de pares

39

e. Definición de Variables de Proceso:

Nombre

Tipo

 

Descripción

 

sum_p

Entero

Acumula los datos pares:

vi=0

vc=num

vf=?

pares

Entero

Cuenta la cantidad de datos pares

 

III Diseño de Solución

Flujograma

Inicio datos=0 sump_p=0 cinco=0 imp=0 num =10 datos = datos+1 No Si num%2 ==0 imp++
Inicio
datos=0
sump_p=0
cinco=0
imp=0
num =10
datos = datos+1
No
Si
num%2
==0
imp++
sum_p = sum_p+ num
No
Si
num
= = 5
cinco= cinco +1
num
No
num
<= 0
Si
1
1
1
pares = datos - imp
pares = datos - imp

pares = datos - imp

pares = datos - imp
pares = datos - imp
pares = datos - imp
pares = datos - imp
pares = datos - imp
+1 num No num <= 0 Si 1 1 pares = datos - imp prom_p =
prom_p = sum_p/pares

prom_p = sum_p/pares

prom_p = sum_p/pares
datos, prom_p, cinco, imp Fin
datos, prom_p,
cinco, imp
Fin

Flujograma 10

40

4

Sintáxis en C

Esta estructura NO tiene codificación en C, por lo tanto es mejor diseñar nuestra solución o flujograma con una estructura MIENTRAS, desde el principio; pero si en nuestro diseño de solución utilizamos un HASTA-QUE, tendremos que cambiarlo un poco para convertir la estructura HASTA- QUE en un MIENTRAS o en un DESDE-HASTA, según convenga y así, poder codificar nuestra solución.

5

Porque NO utilizamos HASTA QUE en Lenguaje C

C

tiene entre sus sentencias de repetición 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 diseñar programas mediante las técnicas conocidas como PROGRAMACION ESTRUCTURADA, una de estas técnicas es la LOGICA ESTRUCTURADA, en donde se sostiene que todos los programas (por difíciles que sean los problemas que resuelvan), se pueden diseñar utilizando únicamente las seis estructuras lógicas de control: asignación, selección, selección múltiple, mientras, desde-hasta y hasta que.

La sentencia do-while no funciona como un hasta-que, es un híbrido entre la estructura mientras y

la estructura hasta que, lo cual va en contra del principio básico de la lógica estructurada como se

demuestra en los siguientes flujogramas.

Sentencia do- while,

en los siguientes flujogramas. Sentencia do- while, Proceso Condición NO Si Estructura HASTA - QUE Proceso
Proceso Condición NO
Proceso
Condición
NO
Si
Si

Estructura HASTA - QUE

Proceso Condición Si
Proceso
Condición
Si
NO
NO

Figura

7

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 combinación 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 continuación:

41

Dos ciclos mientras anidados:

Mientras Condición 1 Hacer . . . . Mientras Condición 2 Hacer Bloque de instrucciones
Mientras Condición 1 Hacer
.
.
.
.
Mientras Condición 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 Condición 2 Hacer

Bloque de instrucciones

Fin mientras

.

. Fin desde - hasta

En los ejemplos resueltos anteriormente se han utilizado ciclos anidados.

Introducción a la Informática Ciclo I - 2014

42