Professional Documents
Culture Documents
Figura 1.1
La CPU (Unidad de Procesamiento y Control) es, como su nombre lo indica, la parte
que procesa la informacin haciendo operaciones aritmticas y lgicas, y realiza
operaciones de control, como indicar si se lee informacin del teclado, ratn, discos
duros, la RAM as como indicar si se escribe la informacin a alguno de estos
dispositivos si es que soporta la escritura. Ejemplos de CPU son Icore, Core i3, i5 e i7
de INTEL y A3, A5 A8 y A10 de AMD.
La memoria RAM es el lugar donde estn las instrucciones que dirigen las
operaciones que realiza la CPU y los datos que usa en sus operaciones. Para que un
programa sea ejecutado, se debe cargar en la memoria RAM. Las instrucciones son
rdenes que debe realizar o ejecutar una CPU por ejemplo hay una instruccin que
indica que la CPU debe hacer una suma, una resta, o realizar una ecuacin muy
compleja. Los datos es la informacin que utiliza la CPU al ejecutar sus
instrucciones, por ejemplo el 5 y 6 son datos que se pueden usar en una suma u otra
operacin.
Como dijimos un programa se carga en la memoria RAM y los programas que
generemos en el curso lo harn pero hay un programa que es principal sobre todos los
programas y que se llama Sistema Operativo (SO). El SO es aquel programa que da
la interfaz principal de uso de una computadora adems, administra el uso de los
perifricos conectados a la computadora, la memoria RAM y administra los programas
que se ubican en la memoria RAM. Un ejemplo de SO es Windows 8 y sus diferentes
versiones viejas y nuevas. Otro ejemplo de SO es Linux no importa de qu distribucin
estemos hablando. Otro es el SO de las computadoras de Mac de Apple.
Sistema
Operativo
Programa 1
Programa 2
...
Programa n
Cuando se prende una computadora, la CPU tiene un comportamiento por default que
es ir a Disco Duro y leer una posicin por default y ejecutar la instruccin que
encuentre all. Esta instruccin es la que permite la carga del Sistema Operativo (que
tambin est en el disco duro) a la memoria RAM. Ya cargado el sistema operativo,
ste toma el control de la CPU, perifricos y memoria RAM. Hay muchos procesos y
funciones que se podran explicar en este momento para tratar de dar a entender
cmo es que el SO orquesta estos tres componentes pero es para un curso de SOs.
Lo que nos interesa en este momento es que ejecutaremos o mejor dicho cargaremos
a memoria RAM un programa que nos permite el uso de un lenguaje de programacin
que llamaremos editor y compilador, en el primero crearemos nuestro programa y el
compilador cargara dicho programa en un rea de la memoria RAM asignada por el
SO para ejecutarlo. El SO estar al pendiente de nuestro programa para que no se
salga del rea o segmento que le asigno. Qu significa esto? Que el programa est
en un rea o segmento de memoria RAM debidamente organizada por lo menos
en otras 3 reas o segmentos: un rea de instrucciones, otra de datos y otra
rea de pila. En la figura 1.2 muestra como una parte de la memoria RAM est
ocupada por el Sistema Operativo y el resto por los dems programas. Realmente hay
ms reas identificables en la memoria RAM como es el rea de video, el rea de
controladores para perifricos, etc pero para nuestro curso es suficiente con la
organizacin de la figura 1.2
.
Qu es la memoria RAM? La memoria RAM es una circuitera electrnica que nos
permite tener de manera temporal instrucciones y datos (temporal porque si se apaga
la computadora, todo lo que estaba en la memoria RAM se pierde y habra que volver
a cargar, por eso se llama memoria voltil). La memoria almacena la informacin en
bits, un bit es la presencia de voltaje (un 1) o la ausencia de este (un 0). Ocho bits
forma un byte y la memoria se miden por el nmero de bytes que es capaz de
almacenar. Por ejemplo hay computadoras con un 1Gbyte en memoria RAM, es decir
1,000,000,000 de bytes o de 16 GBytes es decir 16,000,000,000 bytes. Cada byte
tambin est numerado y a esta numeracin se le llama direccin de memoria RAM.
Por ejemplo un programa pudiera empezar en el byte nmero 10,000 o mejor dicho en
la direccin de memoria 10,000 y terminar en la direccin de memoria 20,000. Y a su
vez en la direccin de memoria 10,000 hasta la 15,000 estn las instrucciones
(segmento de instrucciones); de la direccin de memoria 15,001 hasta la 18,000
estn los datos (segmento de datos) y de la direccin de memoria 18,001 hasta la
20,000 es el segmento o rea de pila (El rea de pila la discutiremos en el tema de
funciones).
Num: 1,002
20
1,003
Figura 1.3
En la figura 1.3 son variables A y Num. Ellas nos representan una direccin de
memoria. La direccin de memoria 1,001 para el caso de la variable A, localidad
donde est el dato a; y la variable Num nos representa la direccin de memoria 1,002
pero el dato que est en dicha direccin en un nmero entero, el 20 y estos nmeros
ocupan siempre dos bytes por lo tanto se toma el byte siguiente que es el 1,003.
Usted como programador no requiere saber las direcciones reales, simplemente use
las variables para manipular datos por ejemplo:
Dat1 = 10;
Dat2= 20;
Dat3 = Dat1 +Dat2;
Las operaciones de arriba son fcilmente entendibles; la variable Dat1 y Dat2 se les
asigna los valores 10 y 20 respectivamente y Dat3 vale 30 porque recibe como dato el
resultado de los valores de las variables Dat1 y Dat2. Vea como es fcil hacer
operaciones y asignar valores a variables sin necesidad de saber en qu direccin de
memoria se almacena el 10 y el 20. Esto es transparente para el programador pero es
necesario entender la explicacin de lo que es una variable para entender cmo
funcionan.
En los lenguajes de programacin hay muchos tipos de datos por ejemplo hay datos
que son nmeros enteros (sin decimales), nmeros reales (con decimales) y
alfanumricos, para este ltimo caso tenemos letras, nmeros (pero sin valor
numrico) y signos especiales como @, /, -, +, etc.
Tabla 1.1
El diagrama de flujo de la figura 1.4 muestra 3 partes que debe tener siempre un
diagrama de flujo:
Si volvemos a ver el diagrama de la figura 1.4, veremos que el primer y ltimo smbolo es
el mismo y se utilizar para indicar inicio y fin de un diagrama de flujo. Este diagrama
muestra que es lo que se debe hacer para sumar dos nmeros. Despus del inicio del
diagrama de flujo, el siguiente smbolo, y de acuerdo a la tabla 1.1 indica entrada de datos
desde el teclado, esto quiere decir que el usuario de una computadora usar el teclado
para indicar dos valores a sumar, por ejemplo 5 y 7, y cada una de ellas sern asignadas
a las variables A y B. El tercer smbolo indica una operacin y la operacin es que la
variable Suma se le asignar el valor de A+B, es decir la variable Suma ser igual 11. El
cuarto smbolo indica que el valor asignado a la variable Suma ser mostrado en la
pantalla de la computadora.
Ejercicios
Ahora hagamos otros ejercicios para entender los diagramas de flujo ilustrando procesos
que llevamos a cabo en la vida diaria.
Ejercicio 1. Suponga que va a cambiar el foco de su casa, alcanzable con una silla.
Describa los pasos que debe realizar en un diagrama de flujo. El diagrama debe
considerar que en su casa puede o no haber un foco de repuesto.
Ejercicio 2. Realice un diagrama de flujo donde muestre los pasos a seguir para cruzar
una calle que no tiene semforo.
Ejercicio 3. Suponga que va a preparar una impresora para imprimir y lo que va a revisar
es: que est conectada (si no lo est, hay que conectarla), tenga tinta (sino tiene hay que
ponerle), papel (si no tiene hay que ponerle) y al final prenderla. Considere que se tiene
papel y tinta en caso de que se requiera.
Ejercicio 4. Suponga que un mesero, va a servir tres copas de vino de la nica botella de
una marca que queda en el restaurant. La botella solo tiene vino para esas tres copas. El
mesero debe llenar las copas de tal forma que queden llenas de igual forma. No se puede
pasar el vino de una copa a otra si es que se llega a pasar. Realice un diagrama de flujo
que muestre las acciones a seguir desde el momento de tomar las copas del estante y
abrir la botella hasta el momento en que se termina de llenar las copas.
Ejercicio 5. En un hospital hay enfermeros que apuntan los signos vitales que toman de
los pacientes de una sala de espera, los deben atender hasta terminar con los que tengan
en dicha sala. Los signos vitales son peso y altura, tomadas de una bscula, y presin
arterial. Solo hay dos enfermeros, uno para tomar el peso y la altura de la bscula, y el
otro para la presin arterial. Muestre en un diagrama de flujo el proceso de tomar los
signos vitales.
El cdigo 1.1 contiene comentarios, estos estn resaltados en rojo. Los comentarios
empiezan con // y solo se puede poner el comentario en dicha lnea. Si se requiere que
comentar en ms de una lnea use /* ponga el comentario ocupando las lneas que
requiera y termine con */, vea el ejemplo de lnea 9 y 10. Los comentarios como su
nombre lo indica son solo para documentar lo que hace el programa o el cdigo.
La lnea 1 del cdigo 1.1 indica donde se ponen las libraras, como dijimos se debe usar el
nombre de la librera entre < > y precedida por el #include. En este caso la librera que se
est usando es iostream.
La lnea 2 del cdigo 1.1 indica el uso de un objeto, el objeto std. El uso de los objetos es
muy comn en la programacin orientada a objetos, tema que se ver en el siguiente
curso de programacin. Nosotros usaremos el objeto std y ahondaremos en esto un poco
ms adelante.
La lnea 3 del cdigo 1.1 declara la funcin principal. Lenguaje C trabaja creando
funciones pero la funcin principal es main(). Es principal porque est funcin se ejecuta
por default cuando se ejecuta un programa C, es el punto de inicio de cualquier programa,
desde este podemos ejecutar otras funciones como cos(x).
La lnea 4 del cdigo 1.1 muestra un {, esta llave tiene su par en la lnea 8, }, este par de
llaves forma un bloque de cdigo perteneciente a la funcin main(). Todo el cdigo que
se ponga entre estas llaves es de la funcin main().
La lnea 7 del cdigo 1.1, es la instruccin return, se usa frecuentemente para finalizar
una funcin, puede ponrsele un valor a continuacin de esta instruccin, esto nos servir
para dar a una funcin la facultad de asignacin de valor a una variable al momento en
que finaliza la funcin, caso que veremos en el captulo de funciones. En este caso la
funcin main() est siendo ejecutada por el Sistema Operativo (SO), por ello el valor que
se le ponga a return, se le dar a ste. Qu hace el SO con ste valor? Lo usa para
mandar mensajes de error o lo ignora. Depende de las implementaciones del SO. El
return se le puso el valor 0, el cual indica al SO que el programa finalizo bien. Si
regresamos a la lnea 3, antes de la palabra main(), est la palabra int, que significa
integer (entero), est palabra est relacionado directamente con el valor que se le pone al
return, por ser el 0 un nmero entero, se pone int antes de la declaracin main().
Realicemos un programa que sume dos nmeros. El diagrama de flujo ser el de la figura
1.5.
Inicio
A= 5+6
La suma de
5+6 es: , A
Fin
Figura 1.5
Como dijimos el diagrama de flujo empieza y termina con el mismo smbolo y el resto de
los smbolos nos dice las instrucciones a implementar.
El rectngulo nos indica una operacin, es este caso es la sumatoria 5+6 (5 y 6 son los
datos) el resultado se asigna a la variable A (la variable nos representa una direccin de
memoria RAM para mantener datos).
El siguiente smbolo, despus del rectngulo, nos simboliza una impresin del resultado
en pantalla. Vea que hay una frase entre dobles comillas, a esto lo llamamos cadena de
caracteres, las cuales se imprimirn en pantalla tal como este escrito, en este caso: La
suma de 5+6 es. Fuera de las llaves sigue la variable A, indicando que posterior a la
impresin de la cadena de caracteres se imprimir el valor asignado a la variable A (dicho
de otra forma el valor que est en la direccin de memoria RAM representada por la
variable A).
Por lo tanto se imprimir: La suma de 5+6 es 11. El cdigo 1.2 es el de la figura 1.5
La lnea 5 es la declaracin de las variables. Como dijimos una variable nos representan
direcciones de memoria para nuestros datos, por lo que hay que decir cuntas posiciones
de memoria ( o variables) vamos a requerir para nuestros datos. En este caso solo
requerimos una variable para el resultado, este resultado es un nmero entero por lo que
lo indicamos con el uso del int. Para declarar variables usamos la sintaxis:
Para ilustrar un poco ms lo que se dijo en los dos prrafos anteriores, usaremos el
mismo programa pero con algunos cambios. Vea el diagrama de flujo de la figura 1.6 y su
correspondiente cdigo 1.3
Inicio
B=5
C=6
A= B+C
La suma de,
B,+,C,es: , A
Fin
Figura 1.6
El diagrama de flujo de la figura 1.6 hace lo mismo que el de la figura 1.5 solo que de
forma distinta, ahora los datos 5 y 6 estn cada una en una variable y la suma se realiza
usando las variables.
El cdigo 1.3 es igual pero ilustra la declaracin y uso de mltiples variables. Tambin
vemos como usar el cout<< cuando se requiere imprimir varias cadenas de caracteres y
variables.
Ejercicios
Ejercicio 7: Usando el cout<< imprima en pantalla sus datos personales como se
muestra:
Nombre
Calle
Colonia
Delegacin o municipio
Ciudad y CP.
Para que cada dato aparezca en una lnea diferente realice un salto de lnea con
cout<<end;
Ejercicio 8: Suponga que un objeto recorre una distancia de 10 mts en 2 seg, Realice el
diagrama de flujo y su programa que calcule su velocidad.
Ejercicio 10: Si un auto gasta 1 litro de gasolina cada 13Km, cunta gasolina requiere
para recorrer 234 Km? Si la gasolina cuesta $13.96 pesos el litro, cunto costar el viaje
de 234Km? Realice el diagrama de flujo que resuelva el problema y el programa
correspondiente.
Instruccin cin>>
Como se comento anteriormente, hay perifricos que son de entrada por donde el usuario
da informacin a la computadora y el ms usual es el teclado. La instruccin cin>> obtiene
est informacin y se la asigna a una variable.
A continuacin haremos el programa de sumar dos nmeros pero estos nmeros sern
los asignados por el usuario. Vn los asignados por el usuario. Vea el diagrama de flujo
de la figura 1.7 y el cdigo 1.4.
Vea en la figura 1.7 que despus del smbolo de inicio hay un smbolo de impresin en
pantalla con el mensaje: Sumando 1, esto dar a entender al usuario que deber dar el
primer valor a sumar; el siguiente smbolo es la de dar a la variable B el valor que el
usuario de a travs del teclado. El usuario podr teclear cualquier valor. Se vuelven a
repetir los smbolos para solicitar el sumando 2 y ser asignado a la variable C a travs del
teclado. El resto del proceso es el mismo que en la figura 1.6
Inicio
Sumando 1
Sumando 2
A= B+C
La suma de,
B,+,C,es: , A
Fin
Figura 1.7
Todos los programas que hagamos en este curso, se realizaran a partir de un diagrama
de flujo, primero identificaremos todas las variables que se usan en ese diagrama:
variables para datos de entrada y para datos de salida. El tipo que usaremos para definir
variables depende del dato y de los resultados que esperamos y para ello debemos de
conocer el problema, habr veces que trabajemos datos del tipo nmeros enteros o
nmeros con decimales o caracteres y dependiendo de esto definiremos nuestras
variables para dichos datos. Despus de definir nuestras variables empezamos a
programar el diagrama de flujo, recuerde respetar el orden en que aparecen las
instrucciones a partir del smbolo de INICIO, para ello siga las flechas ya que marcan
que instruccin va a poner primeramente y posteriormente en su programa.
Las variables pueden ser del tipo nmero entero, nmero con decimales o del tipo
carcter. Hasta ahora solo hemos declarado variables enteras con int, para declarar
variables del tipo nmero de decimales se usa float o doubl y para declarar variables que
soporten un dato tipo carcter se usa char. Vea la tabla 1.2
Tipo Uso Rango Nmero de
bytes que
ocupa.
int Para declarar una variable de tipo nmero -32,768 a 32,767 2
entero o para decirle a una funcin que el
return tendr un nmero entero
float Para declarar una variable de tipo nmero 1.2E-38 a 3.4E+38 4
con decimales o para decirle a una funcin
que el return tendr un nmero con
decimales
double Para declarar una variable de tipo nmero 2.3E-308 a 8
con decimales de doble precisin o para 1.7E+308
decirle a una funcin que el return tendr
un nmero con decimales de doble
precisin.
char Para declarar una variable de tipo carcter, Los caracteres 1
la variable simple solo soporta una caracter definidos en la
o para decirle a una funcin que el return tabla de cdigo
tendr un caracter ASCCI.
Cada carcter est
relacionado con un
nmero entre el 0 y
255
Tabla 1.2
La tabla 1.2 muestra los tipos ms importantes, existe el tipo unsigned, la cual se usa
antes de los tipos que define la tabla 1.2, esto hara que la variable del tipo nmero entero
solo soporte decimales y su rango cambiara de 0 a 65,536 . Aunque la tabla no muestra
nmeros negativos al declarar variables tipo float o doubl si los hay.
Ejercicios.
Ejercicio 11: La frmula para calcular la resistencia total de resistencias en paralelo es:
1
=
1 1 1
1 + 2 +
Suponga que tiene 4 resistencias en paralelo, realice el diagrama de flujo que solicite los
cuatro valores de resistencia y calcule la RT. Posteriormente realice el programa en C.
Ejercicio 12: Suponga que un objeto recorre una distancia de X mts en T segundos.
Realice el diagrama de flujo y su programa que pida la distancia y velocidad y calcule su
velocidad.
Ejercicio 13: Suponga que un objeto recorre una distancia de X1 mts en T1 seg,
posteriormente el mismo objeto recorre X2 mts en T2 seg. Realice el diagrama de flujo y
su programa que pida las distancias y tiempos y calcule la primera velocidad, la segunda
y la aceleracin. Recuerde que la velocidad es la diferencia entre dos velocidades entre
las diferencias de tiempo.
Ejercicio 14: Si un auto gasta 1 litro de gasolina cada Y Kms, cunta gasolina requiere
para recorrer Z Km? Si la gasolina cuesta $13.96 pesos el litro, cunto costar el viaje
de Z Km? Realice el diagrama de flujo que solicite al usuario que cantidad de kilmetros
recorre el auto por litro, la cantidad de Km a recorrer en el viaje, calcule e imprima los
valores que solicitan las preguntas. Haga el programa correspondiente.
Ejercicio 15: Realice un diagrama de flujo que solicite los valores a, b y c para calcular
las soluciones de acuerdo a la ecuacin general cuadrtica:
1,2 = ( 2 4)/2
Realice los clculos correspondientes e imprima los resultados.
Captulo 2 Instrucciones de control.
2.- Introduccin
Lo comn en cada una de estas instrucciones es que tienen una expresin entre sus
parntesis que se llama condicin. Vamos a realizar ejemplo de condiciones:
3 > 2 Condicin verdadera, en C, para indicar verdadero se usa cualquier valor diferente
de 0.
3 < 2 Condicin falsa, se usa el 0 para indicar falso.
Si A=10 y B =15.5 entonces la condicin A < B es verdadera.
A continuacin mostramos tabla 2.1 con los operadores relacionales que se pueden usar
para realizar una condicin.
Como comentamos hace rato, la instruccin while ( ) es para repetir las instrucciones que
estn en un bloque de cdigo. La figura 2.1 muestra el diagrama de flujo que representa
la forma de funcionar del while ( ).
F
Condicin Instrucciones fuera del
bloque de cdigo
Instruccin 1
Instruccin 2
.
.
.
Instruccin n
Figura 2.1
El diagrama de flujo de la estructura while( ) puede irse anidando es decir que un while( )
contenga dentro otros while( ).vea la figura 2.2
Figura 2.2
En la figura 2.2 hay 3 while( ), la primera marcada con lnea verde y punteada y con
punto, la segunda marcada con lnea azul y punteada y la tercera marcada con lnea roja
y continua. Vea que todas empiezan con una condicin, cuando esta es verdadera se
entra al bloque de cdigo del while ( ) ejecutando las instrucciones; al final de las
instrucciones, la lnea de flujo regresa a la condicin y cuando finaliza el while( ) (la
condicin es falsa), se termina su bloque de cdigo y continua con la siguiente instruccin.
Si compara el while( ) 1 y el while () 2de la figura 2.2 con el de la figura 2.1 se ver que se
asemejan mucho y es fcil de identificar el estos while( ) pero puede que tenga problemas
para identificar el while ( ) 2. Vea la figura 2.3
Figura 2.3
La figura 2.3 muestra ahora que el while( ) 1 y 2 se pueden sustituir por un smbolo de
proceso y sustituirlo, dejamos las etiquetas de F en la sustitucin para que el lector vea
como la conexin de un proceso se realiza cuando el while ( ) a finalizado tal como se ve
en la figura 2.2 y al final de la ltima instruccin se regresa la lnea de flujo a smbolo de
condicin 1.
INSTR 1
F
COND 1 FIN
INSTR 2
F
COND 2
INSTR 3
F
COND 3
INSTR 4
Ejercicio 1
INCIO
INSTR 1
F F
COND 1 COND 4
F
V
COND 5 INSTR 9
INSTR 2
INSTR 5
V
F
COND 2 INCIO
INSTR 6 INSTR 7
INSTR 3
F
COND 6
F
COND 3
V
V
INSTR 8
INSTR 4
Ejercicio 2
Ejercicio 3: para elaborar diagramas de flujo, todos los siguientes ejercicios solo
requieren el uso de un while( ) :
- Realice un diagrama de flujo de imprima del 1 al 10
- Realice un diagrama de flujo que solicite al usuario un nmero N, calcule 1xN,
2xN, 3xN hasta 10xN e imprima cada resultado.
- Un profesor para evaluar a un alumno suma sus tres calificaciones parciales y
obtiene su promedio. Realice un diagrama de flujo que pida estas tres
calificaciones, los sume, saque el promedio e imprima el resultado; suponiendo
que tiene 5 alumnos, este proceso debe repetirse 5 veces.
- Realice otra vez el programa anterior pero en el diagrama de flujo se debe
preguntar si se evaluar otro alumno, encaso de que el usuario responda con un
s se volver a repetir la solicitud de las calificaciones, sumarlas, obtener el
promedio e imprimirlas. Si responde con otra letra termina el proceso.
Como ejercicio realizaremos el cdigo del diagrama de flujo de la figura 2.2 que
pasaremos a la figura 2.4.
#include <iostream>
int main()
{
INSTR 1;
while( COND 1)
{
INSTR 2;
while(COND 2 )
{
INSTR 3
}
while(COND 3 )
{
INSTR 4;
}
}
return 0;
}
Figura 2.4
Vea en la figura 2.4 como se usa el while( ) a partir del diagrama de flujo de la sintaxis
dada. Vea tambin los sangrados que nos permite identificar los diagramas de bloques de
cdigo que controla cada while( ); esto nos ayuda mucho a encontrar problemas de
parntesis en la compilacin.
2.1.2 Acumuladores.
En programacin hay problemas donde las ecuaciones nos indican que realicemos varias
sumas, multiplicaciones, divisiones o restas u algn otro tipo de operacin y el resultado
de estas operaciones sucesivas, como es lgico, lo tendremos en una sola variable.
Por ejemplo suponga que debemos sumas 10 valores dados por el usuario. Una
alternativa es usar 10 variables para que el usuario asigne valores a cada una de ellas y
se sumen y el resultado este en una 11va variable. Pero esta suma, en programacin, se
puede hacer con dos variables, por lo que propondremos la variable A que ser el
acumulador y la variable B que ser los nmeros que vaya ingresando el usuario.
La tabla 2.1 muestra un acumulador de suma, el valor neutro de la suma es 0, este ser
el valor inicial de A, los valores de B son valores propuestos que podra ingresar el
usuario al programa. Para la repeticin 1 empezamos con el valor inicial A = 0 y el valor
de B = 10 si se suman dar 10 pero, como se muestra en la operacin, la variable que se
le asigna este resultado es la variable A, as que con este nuevo valor se hace la
repeticin 2, con B=15 y A = 10, por lo que la suma es 25 y este valor se da nuevamente
a la variable A. Este proceso se repite 10 veces.
A=0
i=1
F
i<=10 FIN
Dato a sumar
A= A+B
i++
Figura 2.5
Observando la figura 2.5 resalamos tres partes en rojo, la inicializacin de la variable
que se usar en la condicin del while( ), que en este caso es i =1, la misma condicin
que en este caso es i<=10 y la instruccin de fin de while() la cual altera el valor de i
asegurando que en un momento dado el while( ) terminar. Esta forma de manejar el
while( ) se llama por contador porque a travs de un conteo o incremento constante de la
variable i, se define el nmero de veces que el while( ) se repetir.
Tambin existe la opcin de controlar el while( ) por bandera hasta que se d un evento
dentro del ciclo while( ), ste terminar. Por ejemplo la figura 2.6 es un while( ) controlado
por bandera. Esto es porque la variable que controla el while( ) cambiara de valor en un
evento que no puede predecirse cuando va a ocurrir, en este es caso este evento est
condicionado por la necesidad del usuario de los datos a sumar.
INCIO
A=0
i=s
F
i==s FIN
Dato a sumar
A= A+B
Otro dato a
sumar
Figura 2.6
Ejercicio 7:
a) Clculo de un factorial. El factorial de un nmero se define como n! = 1*2*3*4 n.
Realice un diagrama de flujo que solicite al usuario un nmero, se calcule el
factorial y se imprima el resultado. Realice el programa.
b) Clculo de una potencia. La potencia de un nmero se define como
Nx =N*N*Nx veces.
Realice un diagrama de flujo que solicite al usuario la base y el exponente, se
calcule la potencia y se imprima el resultado. Realice el programa.
c) El encargado de una obra para construir un edificio recibe diariamente 7
suministros de arena, los camiones que traen la arena son de diferentes
capacidades (m3), adems cada da tiene un valor inicial de arena al que le
sumar los suministros de arena. Realice un diagrama de flujo que solicite al
usuario la cantidad de arena inicial, la cantidad de arena que llega en cada
suministro, sume estos suministros e imprima la cantidad de arena que tiene al
final del da. Realice el programa.
d) Un almacenista vende bloques a $10.50 pesos c/u, tiene una existencia inicial al
empezar el da, cada vez que vende cierta cantidad de bloques, actualiza su
existencia, registra la venta de tal forma que al final del da indica a su jefe la
cantidad de bloques que quedan y el monto de venta del da. Realice un diagrama
de flujo que solicite al usuario la existencia inicial de bloques, cada vez que vaya a
hacer una venta, solicite la cantidad de bloques vendidos, realice las operaciones
de actualizar existencias de bloques y llevar el registro del monto de las ventas e
imprimir resultados, por ltimo el programa preguntar al usuario si va a realizar
otra venta. Realice el programa.
e) Un agente de un banco siempre les hace una demostracin de las ganancias de
inversiones de 5 aos a sus clientes. El cliente propone una cantidad de inversin
y el agente da tasas de inters anual diferente 5 veces y calcula
Monto=inversin*(interes+1) para cada ao para obtener un resultado de
ganancia. Realice un diagrama de flujo donde se pida la inversin inicial, las tasa
de inters de cada ao 5 veces, se calcule los montos por 5 aos y se impriman
los resultados. Realice el programa.
f) Una fabrica, cada vez que recibe papelera, por ejemplo cajas de plumas, lo
reparte de la siguiente manera: se los da por partes iguales a sus subdirectores,
estos los reparten en partes iguales a los gerentes (los subdirectores tiene igual
nmero de gerentes), los gerentes reparten en partes iguales a los jefes de rea,
(los gerentes tienen igual nmero de jefes de rea) y por ltimo los jefes de rea
reparten en partes iguales a sus empleados (tiene el mismo nmero de empleados
cada jefe de rea). Realice un diagrama de flujo que pida la cantidad inicial de
papelera, pida el nmero de personas al que hay que repartir la papelera de
acuerdo al organigrama establecido, calcule que cantidad de papelera que le toca
a cada empleado e imprima el resultado. Realice el programa.
Ejercicio 8: El diagrama de flujo de la instruccin while( ) siempre usa una variable que
est presente en sus tres partes: Inicializacin, condicin y la instruccin que asegura
finalizar el ciclo while( ). Conteste las siguientes preguntas ayudados del diagrama de flujo
de la figura 2.7.
Inicio
A= 53
F
A> 50 y A<70 Inicio
Valor , A
A=A+3
Figura 2.7
- Indique cul es la inicializacin, condicin y la instruccin fin del while( )
- Qu valores se imprimen en el while ( ) y cuntas veces se ejecutar el while( ).
- Cambie la inicializacin condicin e instruccin de fin del while( ) de la figura 2.7
para que se impriman nmeros nones entre el 80 y el 100
- Qu cambios debe realizar en la inicializacin, condicin y la instruccin del fin
del while( ) del diagrama de flujo de la figura 2.7 para que se repita 11 veces e
imprima los valores negativos pares entre el 0 y el -20?
- Qu pasara si no hubiera una inicializacin de la variable que se usa en la
condicin del while( )?
-
Ejercicio 9: Considera el diagrama de flujo de la figura 2.8 y conteste las siguientes
preguntas
Inicio
A= s
B= 0
C=1
D=100
F
A==s Inicio
Dato
Dat
B= B + Dat
C= C* Dat
D=D -Dat
Otro dato
Figura 2.8.
- Escriba las instrucciones que son la inicializacin, condicin y el fin de while( ).
- Qu variables son acumuladores? Indique si son acumuladores de +, -, * o /.
- Por qu es importante inicializar a B y C en 0 y 1 respectivamente?
- Si quisiera calcular la potencia de XY que tipo de acumulador usara? Escriba el
diagrama de flujo.
- Si quisiera calcular la serie F(x) = 1/(100-x)+1/(100-2x)+1/(100-3x)+ +1/(100-nx)
que tipo de acumuladores usara?
- Diga si la figura 2.7 y 2.8 son controladas por bandera o por contador.
Ejercicio 10: Indique los errores del diagrama de flujo de la figura 2.9.
Inicio
Instr 1
F
Cond 1
V
Instr 3
Frase1
Instr 2
Instr 4 Instr 5
Frase 2
Variable
Fin
Figura 2.9
Como dijimos, el while( ) nos sirve para repetir instrucciones, pero hay situaciones en que
debemos repetir el mismo while( ) por ejemplo, suponga el ejemplo donde un profesor
tiene que dar las tres calificaciones de un alumno, sumarlos, obtener su promedio e
imprimirlo y lo tiene que hacer 5 veces porque tiene 5 alumnos. Ahora aadamos que
tiene 3 grupos y cada grupo de 5 alumnos, se podra solucionar haciendo que se repita el
while( ) 15 veces, pero el requerimiento extra es que se imprima Grupo 1, Grupo 2 y
Grupo 3 cada vez que se empiece obtener las evaluaciones de cada grupo. Por lo tanto
tenemos que repetir 3 veces nuestro while( ) que ejecuta 5 veces el pedir las tres
calificaciones, sumarlas, sacar el promedio e imprimir. Necesitamos anidar un while( ) en
otro while( ) y cada vez que repitamos el while( ) ms interno mandaremos el mensaje del
grupo que se est evaluando. Vea el diagrama de flujo de la figura 2.6
INCIO
i=0
J=1
j<=3 FIN
Grupo, j
F
i<5
V
J++
Calificacin 1
Calif1
Calificacin 2
Calif2
Calificacin 3
Calif1
Suma= Calif1+Calif2+Calif3
Prom=Suma/3
Promedio , Prom
i++
Figura 2.6
Ejercicio 8
a) Realice un diagrama de flujo que imprima del 1 al 10, del 51 al 60, del 101 al 110 y
del 151 al 160. Progrmelo.
b) Realice el programa de flujo del profesor que tiene UN grupo con 5 alumnos, pide
tres calificaciones, la suma, saca promedio y lo imprime pero en lugar de tener 3
variables para las calificaciones use 2 donde una sea un sumador y adems
obtenga el promedio general del grupo.
c) Realice un diagrama de flujo que imprima la tabla de multiplicacin del 2, del 3, del
4, del 5, del 6 y del 7. Progrmelo.
d) Crea una aplicacin que dibuje una escalera de asteriscos. Nosotros le pasamos
la altura de la escalera por teclado. Este es un ejemplo si insertaras un 5 de altura:
h) Crea una aplicacin que dibuje una escalera de nmeros, siendo cada lnea un
nmero. Nosotros le pasamos la altura de la escalera por teclado.
i) Imprima la serie de nmeros pares del 2 al 10, del 52 al 62 y del 102 al 110.
j) Crea una aplicacin que dibuje una escalera de nmeros, siendo cada lnea
nmeros empezando en uno y acabando en el nmero de la lnea. Este es un
ejemplo, si introducimos un 5 como altura:
2.2 Instruccin if( ), diagrama de flujo.
V F
COND 1
INSTR 1 INSTR A
INSTR 2 INSTR B
. .
. .
. .
INSTR N INSTR Z
Figura 2.7
Vea, en la figura 2.7, la trayectoria de las flechas; empieza con una flecha llegando a la
condicin, si la condicin es verdadera realizara el bloque de cdigo del lado izquierdo,
empezando con la instruccin 1, despus la 2 y as hasta la N para terminar el bloque de
cdigo en un conector; s la condicin es falsa se ejecuta el bloque de cdigo de la
derecha, empezando con la instruccin A, despus de la B, hasta la Z y terminando el
bloque de cdigo en el mismo conector que en el caso verdadero. Vea que ya no
regresan a la condicin, simplemente el if( ) ha terminado y se continuar con la
instruccin que este despus de los bloques de cdigo. El bloque de cdigo para el
caso falso es opcional, es decir, lo puede omitir.
V F
COND 1
INSTR 1 F
COND 3
F V
COND 2
INSTR 5
V
INSTR 2 INSTR 3
F
COND 4
INSTR 4
V
F
COND 5
INSTR 6
V
INSTR 7
Fin
Figura 2.8
En la figura 2.8 se observa varios if ( ) anidados, estos if( ) anidados se resaltan con
lneas punteadas, todos estn anidados al if ( ) de la COND 1, y particularmente el if ( )
con COND 5 e INSTR 7 esta anidado al if de COND 4, esto lo resaltamos con el cambio
de lnea punteada. Como se dijo, el bloque de cdigo para el caso falso de la condicin es
opcional y esto lo muestra los if ( ) de la COND 3 y 5, la lnea del bloque de cdigo falso
est vaca.
V F
COND1
INSTR 1 INSTR
COMPLEJA 2
INSTR
INSTR COMPLEJA 3
COMPLEJA 1
INSTR 4
Fin
Figura 2.8
Ejercicio 9.
A continuacin se muestran diversos diagramas de flujo donde hay if( ) y en algunos
casos tambin estn combinados con while( ). Indique en los diagramas los if( ) y while( )
que encuentre.
Inicio
V F F
COND1 COND4
V
INSTR 1
F
F COND5
COND2 INSTR 8
V
V INSTR 9
INSTR 7
INSTR 2
INSTR 10
F
COND3
V
F
V
INSTR 4
INSTR 6 INSTR 11
INSTR 12
Fin
Figura a)
Inicio
F
COND1
INSTR 1 F
COND4 INSTR 12 Fin
F V
COND2 F
COND5
V
INSTR 8
V
INSTR 2
INSTR 9
INSTR 7
F
COND3 INSTR 10
INSTR 3 INSTR 5 F
COND6
INSTR 4 V
INSTR 6
INSTR 11
Figura b)
Inicio
F
COND1
V COND4
V
INSTR 1
F
F COND3
F
COND2 COND4
V
V
V
F INSTR 5
INSTR 2 COND5
INSTR 8
V
F COND3 INSTR 5
COND3 INSTR 9
V INSTR 7
V F
INSTR 10
INSTR 5 COND3
INSTR 3 INSTR 5
V
INSTR 4 F
INSTR 5 INSTR 3
COND6 INSTR 5
INSTR 6
V
INSTR 4
INSTR 11 INSTR 6
INSTR 12 Fin
Figura c)
2.2.1 Instruccin if( ), sintaxis.
La sintaxis del if( ) se muestra a continuacin:
If(condicin)
{ //Bloque de cdigo para el caso verdadero
Instr1;
Instr2;
instrN;
} //Fin del bloque de cdigo del caso verdadero de la condicin
else //Bloque de cdigo para el caso falso. Este bloque es opcional
{
Instr1;
Instr2;
instrM;
}//Fin del bloque de cdigo del caso falso de la condicin
V F
COND 1
INSTR 1 F
COND 3
F V
COND 2
INSTR 5
V
INSTR 2 INSTR 3
F
COND 4
INSTR 4
V
F
COND 5
INSTR 6
V
INSTR 7
Fin
Figura 2.9
int main()
{
If(COND1)
{
INSTR 1;
if( COND 2)
{
INSTR 2;
}
else
{
INSTR 3;
}
INSTR 4;
}
else
{
If(COND3)
{
INSTR5;
}
If(COND4)
{
INSTR6;
}
else
{
If(COND5)
{
INSTR7;
}
}
}
return 0;
}
Vea como las llaves se van sangrando y poniendo al mismo nivel la que abre y cierra y un bloque
de cdigo.
Ejercicio 10. Escriba el cdigo de los diagramas de flujo del ejercicio 10.
Ejercicio 11. Programe los siguientes problemas.
Con un if():
a) Realice un diagrama de flujo donde se pida un nmero y se indica si es par o impar.
b) Realice un diagrama de flujo que indique si el nmero es divisible entre 2 o es divisible
entre 3 o divisible entre 7 o divisible entre 5 y si no fue divisible entre ninguno de los
nmeros anteriores mande un mensaje indicndolo.
c) Realice un diagrama de flujo que indique si un nmero es divisible entre 2 y s lo es,
entonces indique si es divisible entre 5. En otro caso, indique si es divisible entre 3 y s lo
es, entonces indique si es divisible entre 7. En otro caso indique que no hubo divisibilidad
entre ninguno de los nmeros anterior.
d) Realice un diagrama donde se Imprima el siguiente men:
a) rea de un tringulo a partir de los lados.
b) Clculo de las soluciones de una ecuacin de 2do grado.
Si el usuario oprime la a, entonces se pedirn los tres lados y se aplicar la frmula:
= ( )( )( )
Donde = + + ,
Y se dar como resultado el rea calculada.
Si el usuario oprime la b, se usar la ecuacin general de una ecuacin cuadrtica es:
1,2 = ( 2 4)/(2)
El discriminante es la raz de la ecuacin y este si es negativo indicar que la ecuacin
cuadrtica no tiene solucin.
Realice un diagrama de flujo donde se pida los valores de a, b y c, verifique que el
discriminante es positivo para continuar con los clculos y poder dar las dos posibles
raices. En caso de que el discriminante fuese negativo se imprimir el mensaje No se
tiene solucin.
c) Suponga que en una carrera de relevos, participan dos equipos de dos personas. Para
determinar qu equipo gana la carrera, se pide realizar el diagrama de flujo y el programa
correspondiente que registre el tiempo de cada competidor al realizar la prueba, as el
programa indicar el equipo con menor tiempo y de los dos competidores del equipo
ganador quien tuvo el mejor tiempo.
La condicin que se usa en las instrucciones de control de lenguaje C, admiten tambin los
operadores lgicos. Los operadores lgicos son la O, Y y el NO. Vea la tabla 2.3
Operador Tabla de verdad Equivalente en Ejemplo
lenguaje C
O A B AoB || If(a>10 || a==5)
F F F {
F V V a=b+C;
V F V }
V V V
Y A B AoB && If(a>10 && b==5)
F F F {
F V F a=b+C;
V F F }
V V V
NO A NO A ! If(!a>10)
F V {
V F a=b+c;
}
Tabla 2.3
La tabla de verdad nos dice cmo funcionan los operadores lgicos pero antes de revisarla
nosotros debemos entender que el operador Y y O tienen el mismo significado que en la vida
cotidiana cuando las empleamos al momento de hablar. Por ejemplo, Qu diferencia hay en las
dos siguientes oraciones?:
En la primera oracin basta con que Miguel realiza una de las dos actividades para que la oracin
se considere verdadera, incluso si hace las dos premisas que estn en la primer oracin tambin se
considera verdadera. Esto es lo que nos dice la tabla de verdad de la O en la tabla 2.3.
Por otro lado la segunda oracin al usar la Y, indica que para que se considere que Migule dijo la
verdad o la oracin sea verdadera se debern realizar las dos cosas: ir al cine e ir a jugar futboll y
esto es lo que nos dice la tabla de verdad de la Y en la tabla 2.3.
El operador NO, cambia el valor de verdad que tenga, es decir de verdadero a falso y de falso a
verdadero.
Como muestra en cada ejemplo de la tabla 2.3 nos sirve para unir condiciones realizadas con los
operadores relacionales. Por ejemplo si requerimos saber si el valor de la variable N es divisible
entre 5 y 2, podemos escribir el siguiente if( )
If ( N%2==0 && N%5==0)
{
cout<<el nmero es divisible entre 2 y 5;
}
Como la precedencia de la operacin O e Y son iguales, a veces es necesario usar parntesis para
indicar el orden de la evaluacin por ejemplo vea el siguiente problema:
Problema: Una alarma contra asalto para casa u oficinas est compuesta de varios sensores:
Se desea realizar un diagrama de fuljo y el programa correspondiente que simule las condiciones
de trabajo de la alarma, para ello se preguntara por el estado de los sensores y se responder con
una S para indicar que est activado y una N para indicar que no est activado y dependiendo
de esto se imprimir si la alarma est activa o no de acuerdo a los en enunciados.
Solucin: Como vemos los enunciados de las condiciones son enunciados complejos, formados por
enunciados ms simples; como la combinacin de los estados de estos enunciados determina si la
alarma se activara, debemos preguntar por ellos y guardar su estado en una variable como se
muestra a continuacin:
Est activo el sensor de acceso? Variable asociada Acceso
Est activo el sensor que indica que el horario es laboral? Variable asociada HorLaboral
Est activo el sensor de ayuda? Variable asociada SenAyu
Est activo el sensor que indica carga de pila arriba del 30%? Variable asociada PilaCarg
Por lo tanto para que se cumplan las condiciones de nuestro ejemplo, las condiciones quedan:
Acceso==s && HorLaboral ==N => Se abre algn acceso y es un horario no laboral.
SenAyu==s => Se activa el sensor de ayuda
PilaCarg==s && HorLaboral==s? => La carga de la pila est a menos del 30% y es horario
laboral
Como observa las condiciones se hacen buscando cumplir el caso verdadero para cada una de
ellas, pero tambin es vlido buscar el caso falso, tambin de todas.
Como lo estableci el enunciado basta con que se cumpla la primer condicin o la segunda
condicin o la tercer condicin para que se active la alarma por lo tanto se unen con el operador O
(||) como se muestra en el diagrama de flujo de la figura 2.10.
Inicio
Acceso
HorLaboral
SenAyu
PilaCarg
V F
(Acceso==s && HorLaboral ==N )
||
SenAyu==s
||
(PilaCarg==s && HorLaboral)
Alarma activada
Alarma no activada
Fin
Figura 2.10
Ejercicio 12.
a) Suponga que un empleado para justificar una falta debe cumplir con cualquiera de las
siguientes condiciones.
a.1 No debe tener faltas en un mes y tener permiso del jefe inmediato
a.2 Traer comprobante mdico y visto bueno del director de rea.
a.3 Haber cubierto horas extras y traer permiso del jefe inmediato
a.4 Tener permiso del director de rea.
Realice un diagrama de flujo donde se pregunte y se conteste con una S o una N si se tiene o no las
condiciones antes citadas, se evalen y se de cmo resultado un mensaje indicando si se justifica o
no la falta.
b) Para que un ao sea bisiesto debe cumplir una de las siguientes condiciones:
b.1 Debe ser divisible entre 4 y no entre 100
b.2 Debe ser divisible entre 4, 100 y 400
Realice un diagrama de flujo donde se d un nmero, se evalu el nmero dado de acuerdo a las
condiciones citadas y mande un mensaje diciendo si es bisiesto o no.
c) Un investigador para tener derecho a beca, debe cumplir con alguno de las siguientes bases:
c.1 Haber publicado mnimo 2 artculos y haber dirigido mnimo 5 tesis de licenciatura o una de
maestra.
c.2 Haber dirigido mnimo una tesis de doctorado.
c.3 Haber revisado libros o haber dirigido mnimo 5 tesis de licenciatura y tener grado de doctor.
Realice un diagrama de flujo donde se pregunte y se conteste con una S o una N si se tiene o no las
condiciones antes citadas, se evalen y se de cmo resultado un mensaje indicando si tiene
derecho a beca.
d) La sangre se divide en 4 grandes grupos: A, B, AB y O. Para que un receptor pueda recibir sangre
de un donador debe cumplirse con las siguientes reglas:
d.1 Si el receptor es tipo A entonces puede recibir de un donador tipo A o O
d.2 Si el receptor es tipo B entonces puede recibir de un donador tipo O o B
d.3 Si el receptor es AB entonces puede recibir de cualquiera
d.4 Si el receptor es O entonces puede recibir de un donador tipo O
Realice un diagrama de flujo donde se pregunte por el tipo de sangre del receptor y donador,
evale las condiciones de donacin y de cmo resultado la impresin de un mensaje que indique si
se puede llevar a cabo la donacin o no. Para el caso de sangre tipo AB, simbolcela con la letra C.
e) El juego de piedra papel y tijera se puede programar pensando que el programa lo manejan dos
usuarios: U1 y U2. Para que exista un empate el U1 debe tirar lo mismo que le U2, para que el U1
gane entonces debe cumplirse que:
e.1 S el U1 tira papel y el U2 debe tirar piedra.
e.2 S el U1 tira piedra y el U2 debe tirar tijera.
e.3 S el U1 tira tijera y el U2 debe tirar papel.
En otro caso gana el U2.
Realice un diagrama de flujo donde se pida tiro a U1 y a U2 (p = piedra, t = tijera y h = papel),
evale las condiciones anteriores y de cmo resultado la impresin de un mensaje que indique si
empatan o gana usuario 1 o usuario2. Como este juego depende de que los usuarios no se den
cuenta de que tira el otro entonces debemos usar la instruccin getch( )en lugar del cin>>, para
que sea reconocida por su compilador de C, incluya la librera conio.h.
Ejercicio 13. Dados los siguientes diagramas de flujo, realice el cdigo en lenguaje C. Vea el primer
ejemplo.
Inicio
Instr 1
F
Cond 1
V F
F Cond 4
Cond 2
V V
Instr 4 Instr 6
Instr 2
F
F Cond 5
Cond 3
V
V Instr 5
Instr 3
Fin
a)
Inicio
Instr 1
F
Cond 1 Instr 6 Fin
V
F
Cond 2
V
F
Instr 2 Cond 4
V
F
Cond 3 Instr 4
V
F
Instr 3 Cond 5
Instr 5
b)
Inicio
Instr 1
F
Cond 1 Instr 8 Fin
V
F
Cond 2
V
F
Instr 2 Cond 5
V
F
Cond 3 Instr 5
V F
Cond 4
F
Instr 3 V Cond 6
Instr 4 V
Instr 6 Instr 7
c)
Los siguientes ejercicios muestran problemas donde se disean diagramas de flujo con un if ( ) y
un while( ) solamente.