Sie sind auf Seite 1von 47

APUNTES DE FUNDAMENTOS DE PROGRAMACIN

1. Computadora, diagramas de flujo y estructura bsica de un programa en C.


1.1 Introduccin a la programacin
Programar es hacer que un dispositivo ejecute un conjunto de instrucciones u
rdenes. En este caso el dispositivo ser la computadora y para poder programar
usaremos el lenguaje de programacin C++.
Antes de empezar a discutir un lenguaje de programacin tenemos que aprender que
partes compone una computadora desde un punto de vista que nos ayude a
programar. La figura 1.1 nos muestra dicho modelo.

Perifricos de Salida, Entrada y de E/S.CPU

Memoria (RAM, DRAM, Cache,etc)

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.
Los perifricos son los dispositivos conectados a la CPU a travs de un puerto o
interface, por ejemplo el ratn puede ser conectado a travs de un puerto PS/2 o un
puerto USB, as como el teclado. Los discos duros se conectan a travs de ranuras o
interfaces que estn en la tarjeta madre donde reside la CPU. Esta tarjeta madre tiene
toda la electrnica para conectar los perifricos y memoria a la CPU. Hay perifricos
que son de entrada, es decir, mandan informacin a la CPU por ejemplo el ratn y el
teclado, otros son perifricos de salida, es decir, la CPU manda informacin al
perifrico como por ejemplo un monitor o una impresora y hay perifricos que son de
Entrada y Salida (E/S), es decir, la CPU puede leer o escribir informacin a dicho
perifrico, como es el caso del Disco Duro y memorias USB.
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.
Dijimos que el Sistema Operativo (SO) administra la memoria RAM, Qu significa
esto? Para explicarlo nos apoyaremos de la figura 1.2.

Sistema
Operativo
Programa
1
Programa
2
...
Programa
Figura 1.2 Memoria RAM
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).
Cuando programemos, usaremos variables. Qu es una variable? es una literal o
conjunto de literales que representan una direccin de memoria RAM para el uso
exclusivo de un dato. Vea la figura 1.3.
Variable: Direccin
de memoria
Contenido
de memoria

A: 1,001
Num: 1,002
1,003

RAM

20

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.
1.2 Diagramas de Flujo
Un diagrama de flujo es una representacin grfica de un proceso o algoritmo. Cada
paso del proceso o algoritmo es representado por un smbolo diferente que contiene
una descripcin o instruccin de la etapa de proceso. Los smbolos grficos del flujo
del proceso estn unidos entre s con flechas que indican la direccin u orden de
ejecucin de instrucciones o etapas del proceso. Es importante que ya
establecido dicho orden se siga de forma estricta ya que un cambio de orden o
direccin podra afectar el resultado final.
El diagrama de flujo ofrece una descripcin visual de las actividades implicadas en un
proceso mostrando la relacin secuencial ente ellas, facilitando la rpida comprensin
de cada actividad y su relacin con las dems. Para programacin usaremos los
siguientes smbolos para realizar un diagrama de flujo.
Se utiliza para representar el inicio o el
fin de un algoritmo.

Se utiliza para un proceso


determinado, es el que se utiliza
comnmente para representar una
instruccin, o cualquier tipo de
operacin que origine un cambio de
valor.
Este smbolo es utilizado para
representar una entrada de
informacin, a travs de un perifrico,
para fines de este curso ser una
entrada de informacin a travs del
teclado.
Este es utilizado para la toma de
decisiones, ramificaciones, para la
indicacin de operaciones lgicas o de
comparacin entre datos.

Este es utilizado para enlazar dos


partes cualesquiera de un diagrama a
travs de un conector de salida y un
conector de entrada. Esta forma un
enlace en la misma pgina del
diagrama.

Este es utilizado para enlazar dos


partes de un diagrama pero que no se
encuentren en la misma pagina.

Este smbolo indica salida de


informacin por un por un perifrico,
en nuestro caso ser la impresora.

En este smbolo indica la repeticin de


una secuencia de operaciones o
instrucciones. El nmero de
repeticiones est controlado por los
parmetros que estn en este smbolo.

Inicio; condicin; incremento

Indica la secuencia en que deben


ejecutarse los procesos o
instrucciones

Llamada a una subrutina o funcin.

Tabla 1.1
A continuacin mostramos un ejemplo de un diagrama de flujo:

Figura 1.4
El diagrama de flujo de la figura 1.4 muestra 3 partes que debe tener siempre un
diagrama de flujo:
-

Entrada de informacin a procesar.


Operaciones o procesos
Muestra o almacenamiento de resultados.

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.
Ejercicio 6. A veces a las empresas de paquetera se les solicita entregar un paquete
exclusivamente al destinatario, en caso de que no est el destinatario realizan otros dos
intentos ms. Si en alguno de los intentos encuentran al destinatario, entregan el paquete,
llenan una ficha y la firma el destinatario. Muestre en un diagrama de flujo de este
proceso.
1.3 Estructura bsica de un programa de un programa en lenguaje C.
El cdigo 1.1 muestra la estructura bsica de un programa en lenguaje C. El nmero de
lnea que pusimos al principio es para ayudar a la explicacin y realmente no es
parte de la estructura bsica. Definamos la palabra cdigo: es un conjunto de
instrucciones, libreras, definiciones de variables, directivas y funciones. Las libreras son
archivos que se instalan junto con el programa compilador y definen una serie de
procesos o funciones que pueden ser utilizadas por el programador, esas funciones se

pueden invocar bajo un nombre. La funcin es un proceso especfico, por ejemplo hay
una funcin que se llama cos(x) el cual calcula el coseno del ngulo x y a su vez para
poderla utilizar en el programa se debe insertar la lnea #include <cmath> al principio de
este.

#include <iostream>

//Librerias

using namespace std; //uso del objeto std

3
4
5
6
7
8
9
10

int main() //Nombre de la funcin principal: main


{
//Inicio del bloque de cdigo de la funcin main
//Declaracin de variables
//Intrucciones o bloques de cdigo
return 0;
}
//Fin del bloque de cdigo de la funcin principal main
/* Este cdigo no hace nada pero si se compila,
el compilador no marcara errores*/
Cdigo 1.1

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().
La estructura bsica de un programa en C, siempre debe aparecer en nuestros
programas. La estructura bsica de un programa C no hace nada, requerimos aadir
nuestro cdigo.
1.3.1 Ejemplos de diagramas de flujo y programas en C.
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
1

#include <iostream>

//Librerias

using namespace std; //uso del objeto std

3
4
5
6
7
8
9
10

int main() //Nombre de la funcin principal: main


{
//Inicio del bloque de cdigo de la funcin main
int A; //Declaracin de variables
A = 5+6; //Intrucciones o bloques de cdigo
cout<<La suma de 5+6 es <<A; //Intrucciones o bloques de cdigo
return 0;
}
//Fin del bloque de cdigo de la funcin principal main
Cdigo 1.2

El cdigo de la figura 1.2 es nuevamente la estructura bsica de un programa en lenguaje


C, solo que ahora tenemos el cdigo que realiza las operaciones que seala el diagrama
de flujo de la figura 1.5.
La lnea 6 es la operacin y normalmente se pone tal como aparece en el diagrama de
flujo terminando con un punto y coma (;), la lnea 7 es la impresin a pantalla, esto se
realiza con la instruccin cout<< seguido por lo que quiera imprimirse, s es una cadena
de caracteres, estar entre dobles comillas; s es una variable bastar con solo ponerla; s
es una combinacin de cadenas de caracteres y variables irn separadas por << como en
nuestro ejemplo.
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:
Tipo_de_dato variable1, varible2, variableN;

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.
1

#include <iostream>

//Librerias

using namespace std; //uso del objeto std

3
int main() //Nombre de la funcin principal: main
4
{
//Inicio del bloque de cdigo de la funcin main
5
int A,B,C; //Declaracin de variables
6
B=5;
7
C=6;
8
A = B+C; //Intrucciones o bloques de cdigo
9
cout<<La suma de <<B<<+<<C<< es <<A; //Intrucciones o bloques de
cdigo
10
return 0;
11
}
//Fin del bloque de cdigo de la funcin principal main
12
Cdigo 1.3

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 9: Suponga que un objeto recorre una distancia de 10 mts en 2 seg,
posteriormente el mismo objeto recorreo 10 mts en 1 seg. Realice el diagrama de flujo y
su programa que 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 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.
Es raro que a un programa no se le d informacin. En los ejercicios anteriores no se dio
pero sera ms til el programa si el usuario diera datos diversos para realizar los mismos
clculos, estos datos seran dados por el teclado y almacenados en variables para ser
usadas en operaciones diversas.

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
El cdigo 1.4, la lnea 6 muestra el cout<< para el mensaje: Sumando 1 y la lnea 7 y 9
muestra el uso del cin>>, el cual se pone para el smbolo 3 y 5 del diagrama de flujo de la
figura 1.7 y como se menciono, el cin>>, se usa para que la informacin dada por el

usuario se asignado a una variables, en este caso, a la variable B y C. El resto del


programa no cambia al del cdigo 1.3
1

#include <iostream>

//Librerias

using namespace std; //uso del objeto std

3
4
5
6
7
8
9
11

int main() //Nombre de la funcin principal: main


{
//Inicio del bloque de cdigo de la funcin main
int A,B,C; //Declaracin de variables
cout<<Sumando 1;
cin>>B;
cout<<Sumado 2;
cin>>C;
A = B+C; //Intrucciones o bloques de cdigo
cout<<La suma de <<B<<+<<C<< es <<A; //Intrucciones o bloques de

cdigo
12
return 0;
13
}
//Fin del bloque de cdigo de la funcin principal main
12
Cdigo 1.4
En este momento debemos definir una metodologa en la programacin que nos
ayudara para crear nuestros programas:
Todo programa tiene 3 partes:
a) La entrada de datos.
b) Operaciones o tratamiento de los datos.
c) Mostrar resultados.
El diagrama de flujo lo realizaremos con esta metodologa, realizaremos primeramente la
parte de pedir datos, posteriormente ya teniendo los datos en variables, realizaremos
clculos, operaciones, comparaciones, bsquedas, ordenamientos, etc y por ltimo
mostraremos resultados.
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.

1.3.2 Algo ms de la declaracin de variables.


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

int

float

doubl
e

char

Uso

Rango

Para declarar una variable de tipo nmero


entero o para decirle a una funcin que el
return tendr un nmero entero
Para declarar una variable de tipo nmero
con decimales o para decirle a una funcin
que el return tendr un nmero con
decimales
Para declarar una variable de tipo nmero
con decimales de doble precisin o para
decirle a una funcin que el return tendr
un nmero con decimales de doble
precisin.
Para declarar una variable de tipo carcter,
la variable simple solo soporta una caracter
o para decirle a una funcin que el return
tendr un caracter

-32,768 a 32,767

Nmero de
bytes que
ocupa.
2

1.2E-38 a 3.4E+38

2.3E-308
1.7E+308

Los caracteres
definidos en la
tabla de cdigo
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:

Rt =

1
1 1
1
+ +
R1 R2
Rn

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:
2

b 4 ac
b

r 1,2=
Realice los clculos correspondientes e imprima los resultados.

Captulo 2 Instrucciones de control.


2.- Introduccin
Las instrucciones de control se dividen en dos: instrucciones repetitivas y de decisin.
a) Instrucciones repetitivas en lenguaje C: while( ), do-while( ) y for( )
b) Instrucciones de decisin en lenguaje C: if( )-else y switch()
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.
Operador
==

Significado
Iguales?

!=

Diferentes?

>

Es mayor?

<

Es menor?

>=

Es mayor o igual?

<=

Es menor o igual?

Ejemplo
Si A= 3 y B=3 entonces
A==B es verdadero
Si A = 3 y B=3 entonces
A!=B es Falso
Si Num = 15 y Val = 20 entonces
Num > Val es falso
Si Num = 15 y Val = 20 entonces
Num < Val es verdadero
Si Num = 15 y Val = 15 entonces
Num >= Val es Verdadero
Si Num = 15 y Val = 15 entonces
Num <= Val es Verdadero

Instrucciones fuera del bloque de cdigo

Tabla 2.1
Todas las instrucciones de control usan condiciones y si la condicin es verdadera
ejecutar un bloque de cdigo y cuando la condicin es falsa se ejecuta la instruccin
que continua despus de la llave que finaliza el bloque de cdigo. El bloque de cdigo
es el conjunto de instrucciones que se encuentran entre un par de llaves, { }; normalmente
este par de llaves est a continuacin de la instruccin de control. Slo el if ( ) - else tiene
dos bloques de cdigo una para cuando la condicin es verdadera y otro para cuando la
condicin resulta ser falsa. Recuerde que la definicin
de bloque de cdigo la discutimos
F
cuando hablamos de la funcin main( ), toda funcin tambin tiene un bloque de cdigo
y lo forma el par de llaves que le siguen al main( ) o al nombre de la funcin.

2.1 Instruccin de repeticin while( )


Como comentamos hace rato, la instruccin while ( ) es para repetir las instrucciones que
V
estn en un bloque de cdigo. La figura 2.1 muestra el diagrama de flujo que representa
la forma de funcionar del while ( ).

Condicin

Instruccin 1

Instruccin 2
.
.
.
Instruccin n
Figura 2.1
En la figura 2.1, el bloque de cdigo lo formara la instruccin 1, la instruccin 2, hasta la
instruccin n. El diagrama de flujo muestra una flecha en la parte superior que llega al
smbolo de decisin entonces la condicin se evala. S es verdadera empezar a

ejecutar la instruccin 1, despus la 2 y as hasta la n de acuerdo a las flechas del


diagrama; cuando termine de ejecutar la instruccin n entonces la fecha indica que
regresar al smbolo de decisin y la volver a evaluar la condicin; si sigue siendo
verdadera volver a ejecutar las instrucciones del bloque de cdigo empezando por la 1 y
terminando con la n para despus volver a regresar a la condicin de acuerdo a lo que
marcan las flechas del diagrama de flujo. De esta forma el while( ) funcionar hasta que la
condicin sea falsa, en ese caso ya no se ejecutaran las instrucciones del bloque de
cdigo y se proceder con las instrucciones que siguen y que estn fuera del bloque de
cdigo. En este momento ya finalizo el while( ).
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.
Ejercicio. Resalte los while ( ) existentes de los ejercicios 1 y 2 siguientes.

Ejercicio 1

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.
2.1.1 La sintaxis de la instruccin while( )
La sintaxis nos dice como se usa el while( ) al momento de programarlo en lenguaje C;
en este caso la sintaxis del while( ) es
while(condicin)
{

Instruccin 1;
Intruccin 2;
.
.
.
Instruccin n;
}
Como ejercicio realizaremos el cdigo del diagrama de flujo de la figura 2.2 que
pasaremos a la figura 2.4.

#include <iostream>
using namespace std;
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.

Ejercicio 4: Realice programas en C de los diagramas de flujo de los ejercicios 1 y 2


Ejercicio 5: Realice los programas en C de los diagramas de flujo del ejercicio 3.
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.
Repeticin

Variable B

1
2
3
4
5
6
7
8
9
10

10
15
20
15
5
10
12
8
5
6

Valor de
variable A inicial
0
10
25
45
60
65
70
72
80
85
Tabla 2.1

Operacin
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B
A=A+ B

Valor de
variable A final
10
25
45
60
65
70
72
80
85
91

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.
Ejercicio 6: Realice un acumulador de multiplicacin de 5 valores usando la tabla 2.2
Repeticin
1
2
3
4

Variable X

Valor de
variable Y inicial

Operacin

Valor de
variable Y final

5
Tabla 2.2
Ahora realicemos el diagrama de flujo que implementa el acumulador de suma de la tabla
2.1. El diagrama lo mostramos en la figura 2.5.

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.

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.

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

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.

Figura 2.9

2.1.3 while( ) anidados


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

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:

e) Realice un programa que calcule el factorial del 3, 4, 5, 6, 7, y 8.


f) Crea una aplicacin que dibuje una escalera inversa de asteriscos. Nosotros le
pasamos la altura de la escalera inversa por teclado. Este es un ejemplo:

g) Imprima en pantalla la siguiente tabla:


1
2
3
2
4
6
3
6
9
4
8
12
5
10
15

4
8
12
16
20

5
10
15
20
25

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.


La instruccin if( ) es una instruccin de decisin, es decir, se puede decir en
ejecutar un bloque de cdigo cuando la condicin del if( ) es verdadera o realizar
otro bloque de cdigo cuando es falsa o simplemente no ejecutar nada. A
diferencia de una instruccin de repeticin como el while( ), el if ( ) ejecutara solo
una vez el bloque de cdigo
La figura 2.7 muestra el diagrama de flujo de un if( )

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.
Los if( ) tambin se pueden anidar vea la figura 2.8.

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.
Es importante hacer nfasis de que cada if ( ) encontrado en la figura 2.8 se ajusta al
diagrama de flujo del if ( ) mostrado en la figura 2.7. Para resaltar el if ( ) de la COND 1 de
la figura 2.8, se puede representar todos los if ( ) anidados con un smbolo de instruccin
compleja como se muestra en la figura 2.9, de esta forma vemos ms claramente el if( )
de la COND 1.

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.

Figura a)

Figura b)

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
Como ejercicio realizaremos el cdigo del diagrama de flujo de la figura 2.9.

Figura 2.9
Cdigo de la figura 2.9
#include <iostream>
using namespace std;
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:

A= p ( pa )( pb ) ( pc )
Donde

p=a+b+c donde a , b y c son las medidas de los lados

Y se dar como resultado el rea calculada.


Si el usuario oprime la b, se usar la ecuacin general de una ecuacin
cuadrtica es:

r 1,2=(b b 24 ac)/(2 a)
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.
2.2.2 Operadores lgicos.
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

B
F

V
B
F

V
F

F
V

V
F

AoB

Equivalente en
lenguaje C
||

V
AoB

&&

Ejemplo
If(a>10 || a==5)
{
a=b+C;
}

V
V
Y

A
F

F
F

If(a>10 &&
b==5)
{
a=b+C;
}

V
NO

V
NO A

A
F
V

V
!
V
F

If(!a>10)
{
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?:
Miguel va ir al cine o va ir a jugar futboll
Miguel va ir al cine y a jugar fuboll
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;
}
En este ejemplo se imprimir el mensaje s el valor de la variable N es divisible
entre 2 y 5 por ejemplo si N vale 10, 20, etc.

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

Un sensor de apertura de acceso.


Un sensor de ayuda.
Un sensor que indica que es horario laboral.
Un sensor que indica que la pila de respaldo del sistema tiene carga
arriba del 30%.

La alarma se activara en uno de los siguientes casos:


-

Se abre algn acceso y es un horario no laboral.


Se activa el sensor de ayuda
La carga de la pila est a menos del 30% y es horario laboral

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.

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.
2.3 while ( ) e if ( ) anidados.
Los siguientes ejercicios tiene como finalidad que el estudiante pueda
distinguir los if( ) y los while( ) en el mismo diagrama de flujo.
Ejercicio 13. Dados los siguientes diagramas de flujo, realice el cdigo en
lenguaje C. Vea el primer ejemplo.

a)

b)

c)

Los siguientes ejercicios muestran problemas donde se disean diagramas de


flujo con un if ( ) y un while( ) solamente.
Ejercicio 14. Resuelva los siguientes problemas.
a) Realice un diagrama de flujo donde se est pidiendo repetidamente un
nmero al usuario y se indique si este es par o impar. Despus de dar el
nmero e indicar si es par o impar, se le preguntar al usuario si desea
dar otro nmero si contesta s se repetir el proceso (controlado por
bandera).
b) Realice un diagrama de flujo que usando un acumulador de suma, sume
los nmeros divisibles entre 2 y 3 dentro del rango del 10 al 50 e
imprima el resultado.
c) Suponga que se hizo una encuesta va telefnica a 20 personas para
preguntarles si votaran por el candidato 1 o por el candidato 2 o por el
candidato 3 de unas elecciones. Realice un diagrama de flujo donde se
d una respuesta y dependiendo si es 1, 2 o 3 se aumentar el
acumulador correspondiente asociado al candidato, esta operacin se
realizara 20 veces y al final se darn los resultados de cuantos votos
tuvo cada candidato.
d) En una encuesta se le preguntaron a 15 personas a qu edad empezaron
a trabajar, clasificndolas en tres grupos : 1er grupo los que trabajaron a
una edad menor de 18 aos, 2do grupo los que empezaron a trabajar a
una edad entre 18 y 23 aos y el 3er grupo los trabajaron a una edad
mayor a los 23 aos. Realice un diagrama de flujo donde se le pida se d
la respuesta de cada persona, se verifique en que rango est y aumente
el acumulador asociado. Este proceso se repetir 15 veces para capturar
las 15 respuestas. Al final imprimir los resultados de las estadsticas.
e) Un enfermero toma el peso y la estatura de los pacientes para calcular
su ndice de masa corporal (IMC), si este es menor de 18 entonces la
persona est desnutrida, si est entre 18 y 24.9 su peso es normal, entre
25 y 26.9 sufre de sobre peso y mayor a 27 est obeso. Realice un
diagrama de flujo que pida el peso en Kg y la estatura en mts de un
paciente, calcule el IMC, evale las condiciones anteriores e imprima la
situacin de su peso. Despus se preguntar si desea hacer el clculo de
otro paciente, si se responde con una s se repetir el proceso (control
por bandera). El ndice de masa corporal se calcula de acuerdo a la
siguiente frmula.

IMC=

Peso(kg)
Estatura2 ( Mts)

Das könnte Ihnen auch gefallen