Vous êtes sur la page 1sur 14

Prctica 1: Formato de programas en C.

Introduccin.
Dado que en el desarrollo del presente trabajo se elaborarn algoritmos, los cuales posteriormente se
codificarn en el lenguaje de programacin C, es deseable mostrar el formato general de un programa
en lenguaje C para visualizar las diferentes herramientas que tal lenguaje ofrece de manera estndar y
las que el programador puede desarrollar.
Tambin nos interesa describir la forma de desarrollar un algoritmo utilizando diagramas de flujo. !ara
tal efecto describiremos los elementos que forman tales diagramas.
"e prestar especial atencin a las funciones de la librer#a estndar predefinidas por el propio lenguaje
y se mostrar como el programador puede codificar sus propias funciones para realizar una tarea
espec#fica en la elaboracin de un programa para resolver un problema espec#fico.
Objetivo.
!ara mostrar el formato general de un programa en lenguaje C, se elaborar el algoritmo $en diagrama
de flujo% y la codificacin de un programa en tal lenguaje que solicite y reciba la calificacin de un
usuario, la almacene en una variable y muestre un mensaje de aprobado o reprobado seg&n la
calificacin introducida. "e realizarn dos algoritmos con su respectiva codificacin en C, uno sin
utilizar una funcin definida por el usuario y otro definiendo una funcin que seleccione el mensaje a
mostrar.
Consideraciones tericas.
Algoritmos y diagramas de lujo.
'n algoritmo es una serie de operaciones detalladas y no ambiguas, a ejecutar paso a paso, y que
conducen a la resolucin de un problema.
'n algoritmo es el medio por el que se e(plica cmo puede resolverse un problema paso a paso. "e
puede formular de muchas formas, siempre y cuando no se realice de modo ambiguo.
!ara describir algoritmos de computadoras se han dise)ado lenguajes de programacin. Cada una de las
acciones de las que consta un algoritmo se llama sentencia y stas son escritas en trminos de cierto
lenguaje de programacin. *ntonces un programa de computadora consiste en dos partes esenciales+
una descripcin de acciones que deben ser ejecutadas y una descripcin de los datos que son
manipulados por esas acciones. ,as acciones se describen mediante las sentencias y los datos mediante
declaraciones y definiciones. -./
Caracter!sticas de los algoritmos. "#$
0ormalmente, el n&mero de operaciones que realiza un algoritmo no se conocen de antemano, aunque
ser finito siempre que los datos sean adecuados.
,as caracter#sticas fundamentales de un algoritmo o proceso algor#tmico son+
Debe ser preciso e indicar el orden de realizacin de cada paso.
Debe ser definido. "i se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada
vez.
Debe ser finito, se debe terminar en alg&n momento.
,a definicin de un algoritmo deber#a describir tres partes+ entrada, proceso y salida .
%iagramas de lujo. "#$
'n diagrama de flujo es la representacin grfica de un procedimiento y de la secuencia u orden en
que debe ejecutarse, es decir, es la representacin grfica de la solucin de un problema o de un
procedimiento.
,os diagramas que se realizan durante el desarrollo de una aplicacin informtica deben ser claros,
concisos, esquemticos y, especialmente, independientes del lenguaje de programacin que se va a
utilizar. 1s# mismo deben ser comprensibles para cualquier analista o programador que los e(amine,
procurando no presenten e(cesiva complejidad.
"#mbolos utilizados en diagramas de flujo.
Terminal. 2epresenta el comienzo, 3inicio4, y el final, 3fin4, de un
programa. !uede representar tambin una parada o interrupcin
programada que sea necesario realizar en un programa.
*ntrada5"alida. 2epresenta cualquier tipo de operacin, de
introduccin de datos en la memoria desde los perifricos
3entrada4, o registro de la informacin procesada en un perifrico
3salida4.
!roceso. 2epresenta cualquier tipo de operacin definida que
pueda originar cambio de valor, formato o posicin de la infor6
macin almacenada en memoria+ operaciones aritmticas, de
transferencia de datos, etc.
Decisin. 7ndica operaciones lgicas o de comparacin entre
datos $normalmente dos% y en funcin del resultado de la misma
determina cul de los distintos caminos alternativos se debe se6
guir8 normalmente tiene dos salidas $respuestas "# o 0o% pero
puede tener tres o ms seg&n los casos.
Conector. "irve para enlazar dos partes cualesquiera del diagra6
ma a travs de un conector en la salida y otro conector en la en6
trada. "e refiere a la cone(in en la misma pgina del diagrama.
Conector. "irve para hacer una cone(in entre dos puntos del
diagrama situado en pginas diferentes.
,lamada a subrutina, funcin o a un proceso predeterminado.
'na subrutina o funcin es un mdulo independiente del progra6
ma principal, que recibe una entrada procedente de dicho progre6
ma, realiza una tarea determinada y regresa, al terminar, al pro6
grama principal.

7ndicador de direccin o l#nea de flujo. 7ndica el sentido de eje6
cucin de las operaciones.
,#nea conectora. "irve de unin entre dos s#mbolos de diagrama
&ipos de datos con los 'ue trabaja el lenguaje C. "1$
*l lenguaje C trabaja con dos clases de tipos+ tipos fundamentales y tipos derivados.
Tipos fundamentales.
9ay varios tipos fundamentales de datos. ,os podemos clasificar en+
Tipos enteros+ char, short, int, long y enum.
Tipos reales+ float, double y long double.
:tros+ void.
Cada tipo entero puede ser calificado por las palabras clave signed o unsigned, lo que da lugar a tener
disponibles los siguientes tipos e(tras+
signeg char, unsigned char
signed short, unsigned short
signed int, unsigned int
signed long, unsigned long
char$character ; < byte%. *l tipo char es utilizado para almacenar un valor entero en el rango de 6<=>,
correspondiente a un carcter del cdigo 1"C77. "olamente los valores ? a <=@ son equivalentes a un
carcter. De forma similar el tipo unsigned char puede almacenar valores en el rango de ? a =AA.
short$entero formato corto ; = bytes%. *l tipo short proporciona un entero en el rango de valores de
6B=@C> a B=@C@. De forma similar el tipo unsigned short puede almacenar valores en el rango de ? a
CAABA.
int$entero%. 'n entero es para C un n&mero sin punto decimal. *l rango de valores depende de la
mquina o del compilador que se utilice. *l rango de valores t#picos para este tipo es
6B=@C> a B=@C@ para el tipo int y de ? a CAABA para el tipo unsigned. *l uso de enteros produce un
cdigo compacto y rpido. *n general+ tama)o$short% D tama)o$int%.
long$entero formato largo ; . bytes%. 1l igual que los tipo int, son n&meros sin punto decimal
comprendidos en el rango de+ 6=<.@.>BC.> a =<.@.>BC.@ para el tipo long y de ? a .=E.EC@=EA para
el tipo unsigned long. *n general tama)o$int% D tama)o$long%.
enum. ,a declaracin de un tipo enumerado es simplemente una lista de valores que pueden ser
tomados por una variable de ese tipo. ,os valores del tipo enumerado se representarn con
identificadores, que sern constantes del nuevo tipo.
float$reales en simple precisin ; . bytes%. 'n real en simple precisin es un n&mero que puede tener
un punto decimal y puede estar comprendido en el rango de+ 6B..?=>=B*FB> a 6<.<@A.E.*6B> para
n&meros negativos y <.<@A.E.*6B> a B..?=>=B*FB> para n&meros positivos. 'n n&mero real en simple
precisin no tiene ms de @ d#gitos significativos.
double$reales en doble precisin ; > bytes%. 'n n&mero real en doble presicin es un n&mero que pude
tener un punto decimal y puede estar comprendido en el rango de+
6<.@E@CE*FB?> a 6=.==A?@*6B?> para n&meros negativos
=.==A?@*6B?> a <.@E@CE*FB?> para n&meros positivos
'n n&mero real en doble precisin tiene hasta <C d#gitos significativos.
long double$reales doble precisin formato largo ; <? bytes%. ,os valores para este tipo estn
comprendidos en el rango de+
6<.<>E@B<*F.EB= a 6B.BC=<?B*6.EB= para n&meros negativos
B.BC=<?B*6.EB= a <.<>E@B<*F.EB= para n&meros positivos
'n n&mero real en doble precisin formato largo no tiene ms de <E d#gitos significativos.
Goid. *l tipo void se utiliza para declarar funciones que no retornan un valor o para declarar un puntero
a un tipo no especificado. "i void aparece entre parntesis a continuacin del nombre de una funcin,
no es interpretado como un tipo. *n este caso indica que la funcin no acepta argumentos.
Tipos derivados.
,os tipos derivados son construidos a partir de los tipos fundamentales. 1lgunos de ellos son los
siguientes+ punteros, estructuras, uniones, arrays y funciones.
(entencias. "1$
'na sentencia es la unidad ejecutable ms peque)a de un programa C. ,as sentencias controlan el flujo
u orden de ejecucin. 'na sentencia C consta de una palabra clave $for, Hhile, ifIelse, etc%,
e(presiones, declaraciones o llamadas a funciones.
Toda sentencia simple termina con un punto y coma $ 8 %. Dos o ms sentencias pueden aparecer sobre
una misma l#nea, separadas por un punto y coma.
'na sentencia compuesta o bloque, es una coleccin de sentencias incluidas entre llaves $ J K %. 'n
bloque puede contener otros bloques.
)structura de un programa C. "1$
'n programa fuente C es una coleccin de cualquier n&mero de directrices para el compilador,
declaraciones, definiciones, e(presiones, sentencias y funciones.
Todo programa C debe contener una funcin nombrada main$ %, donde el programa comienza a
ejecutarse. ,as llaves $J K% que incluyen el cuerpo de esta funcin principal, definen el principio y el
final del programa.
'n programa C, adems de la funcin principal main$ %, consta generalmente de otras funciones que
definen rutinas con una funcin espec#fica en el programa.
*l dise)o Top DoHn de programas, consiste en encontrar la solucin de un problema mediante la
aplicacin sistemtica de descomposicin de problemas en subproblemas cada vez ms simples,
aplicando la m(ima de dividir para vencer.
*l empleo de esta tcnica de desarrollo de programas, as# como la utilizacin &nicamente de estructuras
secuenciales, alternativas y repetitivas, nos conduce a la denominada !rogramacin *structurada.
Arc*ivos de cabecera. +a directri, -include
,a directriz Linclude MarchivoN le dice al compilador que incluya el archivo especificado, en el
programa fuente. *sto es necesario porque estos archivos aportan, entre otras declaraciones, las
funciones prototipo de las funciones de la biblioteca estndar que utilizamos en nuestros programas.
%eclaraciones y deiniciones.
Toda variable debe ser declarada antes de ser utilizada. *n general, las variables no son inicializadas
por C, pero si se desea, pueden ser inicializadas en la propia declaracin.
,a definicin de una variable, declara la variable y adems le asigna memoria8 la definicin de una
funcin, declara la funcin y adems incluye el cuerpo de la misma.
,a declaracin o la definicin de una variable, as# como la declaracin de una funcin, pueden
realizarse a nivel interno $dentro de la definicin de una funcin% o a nivel e(terno $fuera de toda
definicin de funcin%. ,a definicin de una funcin, siempre ocurre a nivel e(terno.
Funciones. "1$
'na funcin es una coleccin de sentencias que ejecutan una tarea espec#fica. 'na funcin no puede
contener a otra funcin.
*n la declaracin de una funcin, tambin conocida como funcin prototipo $declaracin forHard%, se
dan sus caracter#sticas pero no se define su contenido y la forma es la siguiente+
tipo de resultado . nombre de la uncin/lista de tipos de los argumentos01
,a definicin de una funcin consta de la cabecera de la funcin y del cuerpo de la funcin encerrado
entre llaves+
tipo de resultado 2 nombre de la uncin/parmetros ormales0
3
declaracin de variables locales
.
.
sentencias
.
.
return/e4presin01
5
,as variables locales declaradas dentro del cuerpo de una funcin, por definicin solamente pueden
utilizarse dentro del mismo. *l tipo de resultado especifica qu tipo de datos retorna la funcin. *ste
puede ser cualquier tipo fundamental, o tipo definido por el usuario, pero no puede ser un arreglo o una
funcin. *l valor que devuelve la funcin a la sentencia de llamada lo hace mediante la sentencia
return, la cual, puede ser o no la &ltima, y puede aparecer ms de una vez en el cuerpo de la funcin. *n
el caso de que la funcin no retorne un valor se omite.
,os parmetros formales de una funcin son las variables que reciben los valores de los argumentos en
la llamada a la funcin8 consisten en una lista de identificadores con sus tipos, separados por comas.
!ara ejecutar una funcin debemos llamarla. ,a llamada a una funcin consta del nombre de la misma
y de una lista de argumentos a pasar llamados parmetros actuales, separados por comas y encerrados
entre parntesis.K
Cuando se llama a una funcin, el valor del primer parmetro actual es pasado al primer parmetro
formal, el valor del segundo parmetro actual es pasado al segundo parmetro formal y as#
sucesivamente. Todos los argumentos, e(cepto los arreglos, son pasados por valor. *sto es, a la funcin
se pasa una copia del argumento, no su direccin.
"i se desea poder alterar los contenidos de los argumentos en la llamada, entonces deben ser pasados
por referencia. *sto es, a la funcin, se le pasa la direccin del argumento y no su valor por lo que el
parmetro formal correspondiente debe ser un puntero. !ara pasar la direccin de un argumento, se
utiliza el operador O.
1 continuacin se muestra la estructura general de un programa C+
directrices 'ue incluyen en el programa librer!as estndar de C
.
.
declaraciones y deiniciones globales
.
.
uncin principal 2 uncin main/ 0 2
3
deiniciones y declaraciones locales . para uncin main/ 0 2
.
.
sentencias6 e4presiones6 llamadas a unciones6 etc.
.
.
5
deiniciones de unciones deinidas por el programador
.
.
)ntrada y salida estndar. "1$ y "7$
,as operaciones de entrada y salida no forman parte del conjunto de sentencias de C, sino que
pertenecen al conjunto de funciones de la librer#a estndar de C. !or ello, todo programa fuente que
utilice funciones de entrada5salida correspondientes a la librer#a estndar de C, necesita de las
funciones prototipo correspondientes a stas, por lo que deber contener la l#nea+
Linclude 3stdio.h4 o Linclude Mstdio.hN
Funcin print/ 0
,a rutina printf$% permite la aparicin de valores numricos, caracteres y cadenas de te(to por pantalla,
con formato.
*l prototipo de la sentencia printf es el siguiente+
print/control6arg16arg#...01
*n la cadena de control indicamos la forma en que se mostrarn los argumentos posteriores. Tambin
podemos introducir una cadena de te(to $ sin necesidad de argumentos %, o combinar ambas
posibilidades, as# como secuencias de escape.
*n el caso de que utilicemos argumentos deberemos indicar en la cadena de control tantos
modificadores como argumentos vayamos a presentar.
*l modificador est compuesto por el caracter 8 seguido por un caracter de conversin, que indica de
que tipo de dato se trata.
,os modiicadores ms utilizados son+
8c 'n &nico caracter
8d 'n entero con signo, en base decimal
8u 'n entero sin signo, en base decimal
8o 'n entero en base octal
84 'n entero en base he(adecimal
8e 'n n&mero real en coma flotante, con e(ponente
8 'n n&mero real en coma flotante, sin e(ponente
8s 'na cadena de caracteres
8p 'n puntero o direccin de memoria
*l formato completo de los modificadores es el siguiente+
8 "signo$ "longitud$ ".precisin$ "l9+$ conversin
(igno+ indicamos si el valor se ajustar a la izquierda, en cuyo caso utilizaremos el signo menos, o a
la derecha $ por defecto %.
+ongitud+ especifica la longitud m(ima del valor que aparece por pantalla. "i la longitud es menor
que el n&mero de d#gitos del valor, ste aparecer ajustado a la izquierda.
Precisin+ indicamos el n&mero m(imo de decimales que tendr el valor.
l9++ utilizamos l cuando se trata de una variable de tipo long y , cuando es de tipo double.
Funcin scan/ 0
,a funcin scanf$% permite entrar datos en la memoria del ordenador a travs del teclado.
*l prototipo de la sentencia scanf es el siguiente+
scan/control6arg16arg#...01
*n la cadena de control indicaremos, por regla general, los modificadores que harn referencia al tipo
de dato de los argumentos. 1l igual que en la sentencia printf los modificadores estarn formados por el
caracter 8 seguido de un caracter de conversin. ,os argumentos indicados sern, nuevamente, las
variables.
,a principal caracter#stica de la sentencia scanf es que necesita saber la posicin de la memoria del
ordenador en que se encuentra la variable para poder almacenar la informacin obtenida. !ara indicarle
esta posicin utilizaremos el s#mbolo ampersand $ : %, que colocaremos delante del nombre de cada
variable. $*sto no ser necesario en los arrays%.
;aterial y e'uipo.
!ara el desarrollo de la presente prctica se utiliz el siguiente equipo+
'na computadora personal con el programa Gisual CFF C.? previamente instalado, aunque
puede ser otro compilador C o CFF que cumpla con la norma 10"7 C.
%esarrollo.
"eg&n -</, para seleccionar el mensaje de aprobado o reprobado utilizamos la sentencia if, la cual toma
una decisin referente a la accin a ejecutar en un programa, basndose en el resultado $verdadero o
falso% de una e(presin. "u formato es el siguiente+
if$e(presin%
sentencia <8
else
sentencia =8
donde e(presin debe ser numrica, relacional o lgica. *l resultado que se obtiene al evaluar la
e(presin es verdadero $no cero% o falso $cero%. P sentencia <5= representan una sentencia simple o
compuesta.
"i el resultado de la e(presin es verdadero, se ejecuta lo indicado en sentencia <. si el resultado de la
e(presin es falso, se ejecutar lo indicado por la sentencia =.
"i el resultado de la e(presin es falso, y la clusula else se ha omitido, la sentencia < se ignora. *n
cualquier caso, la ejecucin contin&a con la sentencia ejecutable.
!or otro lado su definicin en diagramas de flujo -=/ es como sigue+
no si
donde ser recalca lo ya mencionado, si la e(presin es verdadera se ejecuta la sentencia < y si es falsa,
se ejecuta la sentencia =.
e(presin
sentencia < sentencia =
1 continuacin se muestra el algoritmo que solicita la calificacin y muestra el mensaje de aprobado o
reprobado seg&n sea el caso. *ste algoritmo no hace uso de una funcin para la seleccin del mensaje.
si
no
1 continuacin se muestra la codificacin en lenguaje C+
55!rograma que solicita y recibe una calificacin y muestra un mensaje de aprobado
55 o reprobado seg&n sea el caso.
Linclude Mstdio.hN
Linclude Mstdlib.hN
Linclude Mconio.hN
inicio
Declarar la
variable calif
Qorrar
pantalla
"olicitar y
almacenar la
calificacin
en la variable
calif
cal R
C.?
7mprimir
mensaje de
reprobado
7mprimir
mensaje de
reprobado
fin
main$%
J
float calif8
system$SclsS%8
printf$STn7ntroduzca su calificacion+TtTtS%8
scanf$SUfS,Ocalif%8
if$califNVC%
printf$STnTnWXelicidadesY, usted obtuvo una calificacion aprobatoriaTnTnS%8
else
printf$STnTnW,o sentimosY, usted obtuvo una calificacion reprobatoriaTnTnS%8
getch$%8
return ?8
K
1 continuacin se muestra el algoritmo que solicita la calificacin y muestra el mensaje de aprobado o
reprobado seg&n sea el caso pero se hace uso de una funcin para la seleccin del mensaje.
inicio
Declarar la variable
calif y realizar la
declaracin forHard de
la funcin seleccionar
Qorrar pantalla
"olicitar y
almacenar la
calificacin en
la variable calif
,lamar a la
funcin
seleccionar
pasando el
valor de calif
fin
inicio
seleccionar
2ecibir el valor de
calif en la variable
cal
cal R C
7mprimir
mensaje de
reprobado
7mprimir
mensaje de
aprobado
fin de
seleccionar
"u codificacin en C+
<esultados.
Despus de compilar, enlazar y ejecutar ambos programas se muestran los siguientes resultados de dos
ejecuciones para cada programa+
!rimero se muestran dos resultados obtenidos de la ejecucin del programa que no utiliza una funcin
para seleccionar el mensaje+

1 continuacin se muestran dos resultados de la ejecucin del programa que utiliza la funcin
seleccionar para mostrar el mensaje seg&n el caso+
Conclusiones.
,a ejecucin de los dos programas resuelve el problema planteado, por lo que los algoritmos mostrados
mediante diagramas de flujo son correctos.
*l segundo algoritmo y su codificacin muestran de manera sencilla el formato general de los
programas, es decir, para la solucin de un problema se recurre a las funciones definidas por el
programador las cuales resolvern un problema espec#fico. 0aturalmente, se deben utilizar las
funciones de las librer#as estndar de C y por tanto, incluir en el programa fuente mediante la directriz
Linclude el correspondiente archivo de cabecera. *n los dos programas mostrados se utiliz la directiva
Linclude Mstdio.hN para las funciones de entrada y salida printf$ %y scanf$ % respectivamente. Tambin
se incluy la directiva LincludeMstdlib.hN la cual es necesaria para utilizar la funcin system$ %.
!ara la definicin de la funcin seleccionar la cual no retorna valor alguno se utiliz el tipo void. Cabe
mencionar que ese mismo tipo se puede utilizar si una funcin definida por el programador no acepta
argumentos y entonces, en lugar de los parmetros formales se escribe el tipo void.
1mbos programas muestran los mismos resultados aunque los algoritmos sean diferentes en los
aspectos ya mencionados.
Cuestionario y ejercicios propuestos.
<.6 Z1 qu se le llama programacin estructurada[

=.6 Z\u dato se espera con la siguiente sentencia+ scanf$3Ud Uc4, Oa,Ob%8 [
Z\u sucede si primero se introduce el dato B..A@ y por qu[
B.6 Z\u salida se espera con la sentencia+
printf$3*, 2*"',T1D: *"+TnTnU<A.=fU<A.=UfU<?dUAc4, <=..,=..A,<=,C4%8
..6 ZCmo se deber codificar en lenguaje C para que se imprima en pantalla lo siguiente
eeeeeeeeeeeeeeeeeeee<=..?eeeeeeprogramaeeeeeeBeeeecodificacionCeeeee
donde cada e simboliza un espacio en blanco[
A.6 Z!or qu, cuando utilizamos las funciones printf$ % y scanf$ % debemos escribir al inicio de la
codificacin del programa la sentencia LincludeMstdio.hN[

C.6 "i modificamos la funcin seleccionar del segundo programa para que solicite y reciba la
calificacin y sta sea retornada a la funcin main$ %, Zcmo la definir#a[
@.6 ]odifique la codificacin del segundo programa de tal manera que la funcin seleccionar solicite y
reciba la calificacin y adems retorne el valor ? si la calificacin es reprobatoria y el valor < si la
calificacin es aprobatoria. *n la funcin main$ % se debe seleccionar el mensaje a mostrar, seg&n sea el
caso.
=ibliogra!a y reerencias.
-</ Ceballos Xrancisco ^avier
*nciclopedia del lenguaje C
=da. *dicin, 1ddison6_esley 7beroamericana
-=/ Xernndo Girgs
Tcnicas y elementos de programacin.
Tercera edicin revisada. *d. `ustavo `ili, ".1.
-B/ Curso de programacin en C. Tutorial
C _orld
-./ http+55HHH.geocities.com5inf<BA5tutc5Tema?=.htm
Diagramas de flujo

Vous aimerez peut-être aussi