Você está na página 1de 34

#include<stdio.

h>include
<math.h>#include<conio
.h>main()
TRABAJO DE INVESTIGACIN
{}intprintfscanfreturn0;f
UNIDAD IV Y V
oatifvoidmainelsenumswi
chbreakcasecharforwhile
a+
+putcharcont#include<st
dio.h>include<math.h>#i
nclude<conio.h>main()
{}intprintfscanfreturn0;f
oatifvoidmainelsenumswi
chbreakcasecharforwhile
a+
+putcharcont#include<st
Kayra Gonzlez

INSTITUTO TECNOLGICO DE CIUDAD MADERO ITCM

TRABAJO DE INVESTIGACIN
UNIDAD IV Y V
MODULARIDAD Y USO DE BIBLIOTECAS DEL LENGUAJE

FECHA DE ENTREGA
25/11/14

GONZLEZ LEIJA KAYRA JAZMN


ING. QUMICA SEMESTRE 1
No. CONTROL 14071410

PROGRAMACIN
M.S.I ARMANDO BECERRA DEL NGEL

INDICE
1

UNIDAD IV
MODULARIDAD
TEMA
PGINA
Introduccin
..
4.1 OPTIMIZACIN DE CDIGO

4.2 DESCOMPOSICIN FUNCIONAL (TOP-DOW)


..

4
..
5
9

4.3 RUTINAS FUNCIONES Y PROCEDIMIENTOS

11

4.4 PASO DE ARGUMENTOS

16

UNIDAD V
USO DE BIBLIOTECAS DE LENGUAJE
TEMA
PGINA
Introduccin

20

5.1 BIBLIOTECA MATEMTICA


.

..
21

5.2 BIBLIOTECA DE NMEROS ALEATORIOS


..

24

5.3 BIBLIOTECA GRFICA


..

26

5.4 BIBLIOTECA DEFINIDA POR EL PROGRAMADOR


..
28

Bibliografa
..

.
30

UNIDAD IV
MODULARIDAD

INTRODUCCIN

En programacin modular, y ms especficamente en programacin orientada a


objetos, se denomina modularidad a la propiedad que permite subdividir una
aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales
debe ser tan independiente como sea posible de la aplicacin en s y de las partes
restantes.
Estos mdulos que se puedan compilar por separado, pero que tienen conexiones
con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la
modularidad de diversas formas.

Brbara Liskovestablece que:


siste en dividir un programa en mdulos que pueden ser compilados de forma separada, pero que tienen conexion

Bertrand Meyer establece:


ograma es til por esta razn, una justificacin ms poderosa para particionar un programa es que crea una s

TEMA

4.1

OPTIMIZACIN DE UN CDIGO

Se realiza despus de la generacin de cdigo de todo el programa o de un


elemento ejecutable del programa (funcin, procedimiento, etc). Y es
dependiente del contexto
Su objetivo es obtener un cdigo
que se ejecuta ms eficientemente
segn los siguientes criterios:

Tiempo
de
ejecucin
(optimizacin
temporal)
Espacio de memoria utilizado
(optimizacin espacial)
Dentro
de
su
funcionamiento
podemos encontrar:

Revisa el cdigo generado a varios niveles de abstraccin y realiza las


optimizaciones aplicables al nivel de abstraccin
Representaciones de cdigo intermedio de ms a menos abstractas
rbol sintctico abstracto: optimizar subexpresiones redundantes, reduccin
de
frecuencia,
etc.
Tuplas o cuadruplas: optimizar en uso de los registros o de las variables
temporales.
Ensamblador/Cdigo mquina: convertir saltos a saltos cortos, reordenar
instrucciones.
Representaciones de cdigo para extraer informacin: grafos.
Las condiciones que debe cumplir:
El cdigo optimizado se ha de comportar igual que el cdigo de partida
excepto por ser ms rpido u ocupar menos espacio.
Buscar transformaciones que no modifiquen el comportamiento del cdigo
segn el comportamiento definido para el lenguaje de programacin. Ejemplo:
Si no se ha definido el orden de evaluacin de los
operandos la siguiente optimizacin es vlida:
B=2*A+(A=c*d);
Pasar a:
A=c*d;
B=A*3;

Optimizacin independiente:
Las optimizaciones locales se realizan sobre el bloque Bsico el cual es un
fragmento de cdigo que tiene una nica entrada y salida, cuyas instrucciones
se ejecutan secuencialmente.
Optimizaciones locales:
Folding: El ensamblamiento es remplazar las expresiones por su resultado
cuando se pueden evaluar en tiempo de compilacin (resultado constante). Ej.
A=2+3+A+C -> A=5+A+C
Propagacin de constantes: Desde que se asigna a una variable un valor
constante hasta la siguiente asignacin, se considera a la variable equivalente
a la constante. Ej PI=3.14 -> PI=3.14 -> PI=3.14
Reduccin de potencia: Se busca sustituir operaciones costosas por otras
ms simples. Ej a=2*a
a=a+a
Reduccin de subexpresiones comunes: Las subexpresiones que
aparecen ms de una vez se calculan una sola vez y se reutiliza el resultado.
Ej. X=C+3+A+5 -> X= 3+5+A+C
Optimizacin dentro de bucles:
7

La optimizacin de bucles es muy importante por las mejoras en tiempo de


ejecucin que se obtienen:
Estrategias de optimizacin dentro de bucles
Expansin de bucles (loop unrolling): La expansin de bucles solo se
puede aplicar a los bucles cuyo nmero de iteraciones se conoce en tiempo de
compilacin.
Se puede aplicar a los bucles for i=1 to 10 do
Reduccin de frecuencia (frequency reduction): Las invariantes de
bucle slo pueden estar formadas por operaciones que son funciones puras.
Su nico efecto es el clculo del resultado
El resultado solo depende de los operandos.
Ej. Invariantes: +. -, *, / , sin, ln, No invariantes: printf, getchar, ++, random
Reduccin de potencia (strength reduction): Reduccin de potencia
aplicada a bucles, Sustituir productos entre variables inductivas e invariantes
de bucle por sumas.
For(i=1; i<10;++i) a[i]=3*i;
Convertir en
for(i=1,j=3;i<10;++i,j+=3) a[i]=j;
Optimizacin global:
Grafo del flujo de ejecucin
Antes de realizar una optimizacin global es necesario crear el grafo de flujo
de ejecucin.
El grafo de flujo de ejecucin representa todos los caminos posibles de
ejecucin del programa.
La informacin contenida en el grafo es til para el programador y el
optimizador
La optimizacin global a partir del anlisis del grafo del flujo de ejecucin
permite

Una propagacin de constantes fuera del bloque bsico.


Eliminacin del cdigo no utilizado
Una mejor asignacin de los registros.
Etc.

Deteccin de Cdigo no Utilizado (Cdigo Muerto): Es cdigo que nunca


se ejecutar.
El cdigo no utilizado son los bloques bsicos donde no llega ninguna arista.
Se quita el bloque y las aristas que salen de l.
Repetir hasta no eliminar ningn bloque bsico.
Expresiones Disponibles (Available expresions): El problema de las
expresiones disponibles consiste en determinar que expresiones estn
disponibles al inicio de cada bloque bsico. Una expresin est disponible en
un punto si el resultado que se obtuvo cuando se calcul an es el mismo que
si se vuelve a calcular en el punto en que estamos.
Alcance de las Definiciones (reaching definitions): El valor de una
variable se define cuando se le asigna un valor. Este valor definido se pierde
cuando se realiza una nueva asignacin. El problema del alcance de las
definiciones es el mismo que el problema de las expresiones disponibles, pero
en el caso de las variables.
Alcance de las Definiciones (reaching definitions): Usos del alcance de
las definiciones, Reutilizacin de copias en registros, asignamos un valor a una
variable. Este se encuentra en un registro del procesador. Si ms adelante
necesitamos el valor de la variable podemos evitar acceder a memoria y
reutilizar el valor que hay en el registro si pertenece al conjunto de las
definiciones. Detectar el uso de variables no inicializadas. Se produce cuando
intentamos leer el valor de una variable no definida.
Propagacin de
constantes. Hay que ver que una variable est definida con una constante y se
podr sustituir por esta cuanto se quiera leer.
Variables Vivas (live variables): Una variable est viva en un punto p
cuando su valor es requerido ms adelante en un camino de ejecucin que
pasa por p. La variable x est viva en la sentencia s si
Hay una sentencia s que usa x
Hay camino de s a s sin asignaciones a x
9

Una sentencia x :=y op z iest muerta si


x est muerta despus de asignacin .
Puede borrarse del programa. Esta
propiedad puede expresarse como
informacin transferida entre sentencias
adyacentes

TEMA

4.2

DESCOMPOSICIN FUNCIONAL (TOP-DOW)

La descomposicin funcional se refiere ampliamente al proceso de


resolucin de una relacin funcional en sus partes constituyentes, de tal
manera que la funcin original se puede reconstruir (es decir,
recompuestos) de las partes en funcin de la composicin. En general,
este proceso de descomposicin se lleva a cabo ya sea con el fin de
hacerse una idea de la identidad de los elementos constitutivos (que
pueden reflejar los procesos individuales de fsica de inters, por
ejemplo), o con el fin de obtener una representacin comprimida de la
funcin global, una tarea que slo es posible cuando los procesos
constitutivos poseen un cierto nivel de modularidad (es decir, la
independencia o no de interaccin).
Top-Down, significa, partir de lo ms general hacia lo ms detallado. Es
un proceso anlogo al de armar un rompecabezas en el sentido de ver
primero la imagen ver primero el concepto o la imagen general, y a
partir de all comenzar a detectar dnde va cada pieza dentro de la
imagen. La diferencia es el recorrido jerrquico y modular que se realiza
en su elaboracin. Es el proceso mediante el cual un problema se
descompone en una serie de niveles o pasos sucesivos de refinamiento
(stepwise). El diseo descendente es una tcnica que permite disear la
solucin de un problema con base en la modularizacin o segmentacin
dndole un enfoque de arriba hacia abajo (Top Down Design). Esta

10

solucin se divide en mdulos que se estructuran e integran


jerrquicamente, como si fuera el organigrama de una empresa.
Un Mdulo es un subsistema que agrupa funcionalmente programas,
objetos, herramientas y, bases de datos segn su funcionalidad y
objetivos vinculantes. Por ejemplo, el objetivo de un mdulo de nmina
es generar el pago a los empleados, el objetivo de un mdulo de
compras es proveer a a la empresa de material necesario para su
funcionamiento y as sucesivamente.

Ejemplo: En el diagrama anterior se muestra la estructura del algoritmo


ALGO, que se auxilia de tres mdulos subordinados, cada uno de los
cuales ejecuta una tarea especfica. En su momento el modulo principal
ALGO invocara o llamara a los mdulos subordinados, es decir, dirigir
su funcionamiento. Un mdulo es un segmento, rutina, subrutina, sub
algoritmo o procedimiento, que puede definirse dentro de un algoritmo
con el fin de ejecutar una tarea especfica y puede ser llamado o
invocado desde el algoritmo principal cuando sea necesario.
El diseo Top-Down fue promovido en la dcada de 1970 por el
investigador de IBM Harlan Mills y Nickaus Wirth. El desarrollo de este
proyecto hizo que se dispersara y se ampliara la idea de hacer los
programas con esta filosofa de trabajo al resto de los desarrolladores de
IBM, as como al resto de la industria del software. Por su parte, Nicklaus
Wirth, desarroll entre otros lenguajes, el lenguaje de programacin
Pascal, escribi un artculo muy importante acerca del Desarrollo de
programas por medio de refinamiento de pasos. Esta idea de disear
programas permaneci como principal corriente de desarrollo hasta fines
de la dcada de 1980, cuando fue desplazada por la programacin
orientada a objetos, sin embargo contina siendo una muy importante
11

ayuda para el desarrollo de los mtodos en los la programacin


orientada a objeto
La solucin a los problemas computacionales puede llegar a ser muy
complicada y compleja. Cuando los programas son de miles de lneas, o
componerse de diversos archivos de cdigo, es imposible mantener
todos los detalles del programa en mente cuando se desarrolla un
algoritmo. El diseo Top-down es una herramienta que presenta en
primer lugar una solucin a un problema general utilizando tres o cuatro
pasos solamente. Cada uno de esos pasos en la primera solucin se
divide en otros sub pasos. Este proceso se repite varias veces, en cada
iteracin se produce una solucin ms detallada al problema original.
Cuando los pasos ya no se pueden subdividir, el algoritmo ha terminado.
TEMA

4.3

RUTINAS, FUNCIONES Y PROCEDIMIENTOS

En programacin a los procedimientos y funciones tambin se les


conoce por el nombre de rutinas, subrutinas o subprogramas. Son
bloques de instrucciones que realizan tareas especficas. Las rutinas se
declaran una sola vez pero pueden ser utilizadas, mediante llamadas,
todas las veces que se quiera en un programa. Una rutina es
independiente del resto del programa por lo que, en principio, facilita el
diseo, el seguimiento y la correccin de un programa. Pueden adems
almacenarse independientemente en colecciones llamadas libreras o
unidades, lo cual permite que sean utilizadas en cualquier programa. De
hecho, existen funciones y procedimientos que vienen ya construidos
para el lenguaje de programacin Turbo Pascal (Cos, Sin, Exp, ReadLn,
WriteLn, ClrScr...), que estn almacenados en distintas unidades
(System, Crt, Graph...) y que el programador puede emplear en sus
programas. Adems, el programador puede construir sus propias
unidades con las constantes, tipos de datos, variables, funciones y
procedimientos que desee incluir.
Los procedimientos y funciones son bloques de cdigo reusables, que
pueden ser invocados en cualquier parte de un programa, mediante
expresiones que les representan. Son algoritmos especficos en un
lenguaje de programacin que resuelven un problema definido. Pueden
ser usados cada vez que es requerido, simplemente colocando la
expresin que les invoca, sin necesidad de reescribir todas las
instrucciones que representan a tal procedimiento o funcin. Por
12

ejemplo, si se desea la raz cuadrada de un nmero, podra usarse la

expresin sqrt(x). La x dentro del parntesis es llamada argumento,


siendo el nmero del cual se desea la raz cuadrada. El argumento
permite especificar la entrada a la funcin cuando el programa se est
ejecutando. Siendo x la variable que almacena el nmero 12 para un
programa, la funcin buscar la raz cuadrada de 12. Cuando la funcin
encuentra la raz cuadrada, devuelve el valor al programa que la invoc.

Los procedimientos tambin realizan una accin especfica basada a menudo


en una serie de parmetros o argumentos. El procedimiento se ejecuta
simplemente con una sentencia que es igual a su identificador seguido de los
parmetros correspondientes, si los tiene, entre parntesis. A diferencia de las
funciones, no tiene sentido situarlos en una expresin porque no devuelven un
valor una vez terminada su ejecucin.
Declaracin de un procedimiento: La forma general de declaracin de un
procedimiento es similar a la de un programa. La cabecera es, en este caso,
obligatoria y comienza por la palabra reservada PROCEDURE y no PROGRAM.
Zona de declaraciones locales (en las subrutinas no pueden declararse
unidades) y el cuerpo de sentencias del procedimiento:

Los parmetros o argumentos son un mecanismo para pasar datos del


programa principal a un procedimiento y viceversa. Los parmetros de la
llamada para ejecutar la rutina se llaman parmetros reales mientras que los
parmetros en la declaracin de la rutina se llaman parmetros formales.

13

Parmetros formales POR VALOR (o de entrada): Los parmetros


formales por valor permiten la introduccin de informacin en el
procedimiento.
Sintaxis: identificador : tipo_dato;
O si hay n parmetros por valor del mismo tipo:
identificador_1,...,identificador_n : tipo_dato;
Los valores son introducidos en la llamada a la subrutina mediante el
parmetro real que puede ser una constante, una variable o una expresin con
un valor determinado. Al empezar a ejecutarse la subrutina se reserva espacio
en memoria para el parmetro formal al que, en un principio, se le asigna el
mismo valor que el parmetro real. Posteriormente los valores que vayan
tomando durante la ejecucin de la subrutina los parmetros real y formal
sern independientes. Una vez terminada de ejecutar la subrutina se deja libre
de uso el espacio de memoria correspondiente al parmetro formal.
Parmetros formales VARIABLES (o de entrada/salida): Los parmetros
formales variables permiten la introduccin y obtencin o salida de informacin
en el procedimiento.
Sintaxis: var identificador_1,...,identificador_n : tipo;
En este caso, la informacin que pasamos no es un valor del parmetro real
sino la direccin de memoria en la que se almacena el valor del parmetro real.
Este espacio de la memoria es compartido con el parmetro formal durante la
ejecucin del procedimiento. Es decir, cualquier cambio en el parmetro formal
afectar al real y viceversa, de forma que el valor final del parmetro formal en
la subrutina lo conserva el parmetro real al terminar de ejecutarse la
subrutina.
Parmetros formales VARIABLES SIN TIPO: Los parmetros formales
variables sin tipo tambin permiten la introduccin y obtencin o salida de
informacin en el procedimiento.
Sintaxis: VAR identificador_1,...,identificador_n;
Los procedimientos que declaran este tipo de parmetros formales se llaman
de forma similar a los anteriores, pero pueden emplear parmetros reales de
cualquier tipo, de forma que los parmetros formales asumen los tipos
correspondientes de aquellos.

14

Un ejemplo de procedimiento con parmetros formales de diversos tipos es el


siguiente:
procedure ec(a,b:integer;var c,d:integer;var e:char;var f,g);
Donde a y b son parmetros por valor; c, d y e son parmetros variables y f y g
son parmetros variables sin tipo.
Procedimientos estndar de salida de datos: Los procedimientos estndar
de salida o escritura de datos durante la ejecucin de un programa son Write y
WriteLn. La salida se realiza hacia la pantalla. La sintaxis de la llamada a
cualquiera de estos procedimientos es:
Write(Ln)(expresion_1, expres_2, expres_n);
expresion_i son constantes, variables o expresiones para evaluar. expresion_i
puede ser cualquiera de los elementos: entero, entero:n, real, real:n, real:n:m,
caracter, caracter:n, cadena, cadena:n, logico o logico:n. Donde entero, real,
carcter, cadena y lgico indican datos (constantes, variables o expresiones)
de dicho tipo; n es un nmero entero que indica la longitud del campo de salida
(ocupar n espacios incluyendo un espacio que se reserva para el signo con los
nmeros reales) y m es un nmero entero que indica el nmero de dgitos que
siguen al punto decimal. Cualquier otra expresin producir un error de
compilacin.
La nica diferencia entre los procedimientos WriteLn y Write se explica a
continuacin. Tras ejecutarse WriteLn el cursor salta al principio (primera
columna) de la siguiente lnea. Esta caractersticas hace que WriteLn slo
puede emplearse para la salida de datos por pantalla o con ficheros
estructurados por lneas, es decir de tipo TEXT, tal y como se explica en el
captulo de archivos. Tras ejecutarse Write el cursor no salta a la siguiente
lnea, quedndose en la columna a continuacin del dato de salida. Con estos
procedimientos pueden escribirse valores de constantes ya sean literales o con
nombre. En el primer caso si son caracteres o cadenas de caracteres el valor
debe ir entre comillas simples.
Procedimientos estndar de entrada de datos: Los procedimientos
estndar de entrada o lectura de datos durante la ejecucin de un programa
son Read / ReadLn. La entrada se realiza va teclado.
La sintaxis de la llamada es: Read(Ln)(var_1, var_2,.., var_n);
Los datos que se van a leer se pueden ir visualizando a la vez por la pantalla.
Los dems elementos var_i son los identificadores de las variables (no valen
constantes, ni expresiones) en las que se quieren almacenar los datos. El
15

procedimiento ReadLn slo puede utilizarse con el teclado o con ficheros de


tipo Text ya que despus de leer el/los dato/s salta al principio de la siguiente
lnea. Esto se ver ms adelante en el captulo de Archivos. Pueden leerse
varios datos con una sola sentencia: los identificadores de las variables irn
separados por comas. En este caso, para que los valores sean ledos
correctamente y almacenados en las variables respectivas, deben ir separados
por un carcter que puede ser un espacio en blanco o un retorno de carro.
Para evitar problemas durante la ejecucin, en cualquier caso, no es
aconsejable utilizar ms de un dato por instruccin. La entrada de datos y la
asignacin en las variables correspondientes slo es vlida despus de pulsar
la tecla de INTRO.
Una funcin es una parte del programa que puede manipular datos y devolver
un valor de un cierto tipo. Se ejecuta al hacer una llamada a dicha funcin
dentro de una expresin. La llamada a una funcin puede incluirse en cualquier
expresin en la que un dato del tipo que devuelve la funcin tenga sentido.
Declaracin de una funcin: La forma de declaracin de las funciones es
anloga a la de los procedimientos. Slo se diferencian en dos detalles.
En primer lugar, la cabecera, en la que hay que indicar el tipo del valor que
devuelve la funcin. Por este motivo la llamada a una funcin debe ir incluida
adecuadamente en una expresin. El tipo de dato que devuelve una funcin
puede ser ordinal, real, cadena o puntero (no valen los dems tipos de dato
estructurados: Array, Record, Set o File).
En segundo lugar, en el cuerpo de la funcin hay que indicar mediante una
sentencia de asignacin el valor que debe devolver la funcin. El primer
trmino de esta sentencia de asignacin es el identificador de la funcin y el
segundo trmino, una constante, variable o expresin compatible con el tipo de
dato que devuelva la funcin. Aparte de esto, todo lo dicho anteriormente para
los procedimientos sirve para las funciones.
Dentro de un programa pueden estar declarados diferentes identificadores de
constantes, tipos de dato, variables, as como de procedimientos y funciones.
Asimismo, en estas rutinas pueden incluirse declaraciones de otros elementos.
Se dice que un identificador es global si est declarado en la seccin de
declaraciones del programa. Se dice que un identificador es local si est
declarado dentro de una rutina, bien como parmetro o bien en la seccin de
declaraciones, y slo est definido y puede utilizarse dentro de la propia rutina.
El identificador asociado al programa en la cabecera es un caso especial de
identificador, ya que no es global: no est declarado en la seccin de
16

declaraciones del programa, no puede referenciarse posteriormente en el


cdigo fuente pero no puede volverse a declarar en la seccin de declaraciones
del programa. Tambin puede definirse un identificador global como aquel que
no est definido dentro de una funcin o procedimiento.
Las normas de utilizacin de identificadores dentro de un programa pueden
resumirse en la siguiente regla:
Dentro de cada bloque o rutina (o en el cuerpo del programa principal) puede
emplearse:
- Lo declarado previamente (localmente en el caso de una rutina o
globalmente en el caso del programa principal) y
- Lo que est declarado previamente en los niveles superiores en los que est
anidada dicha rutina.
El programa principal se sita en el nivel superior, las subrutinas definidas en
el programa principal en el nivel inmediatamente inferior y as sucesivamente.
Se define el mbito de un identificador como el conjunto de los bloques
(cuerpo del programa y/o rutinas) en los que puede ser utilizado.
Por ltimo: La recursividad es la propiedad mediante la cual un subprograma
o rutina puede llamarse a s mismo para realizar una tarea, es decir, se define
en funcin de s mismo. Utilizando la recursividad, la resolucin de un problema
se reduce a uno esencialmente igual pero algo menos complejo. Es una
herramienta muy potente y til en la resolucin de problemas. Por ejemplo,
puede usarse en la definicin matemtica del factorial de un nmero:

TEMA
PASO

4.4
DE
ARGUMENTOS

Un argumento o parmetro es el medio a partir del cual podemos expandir el


mbito de variables locales de funciones, hacia otras funciones y adems
quienes nos permiten establecer comunicaciones entre funciones. Si nos
vemos ante la necesidad de visualizar o modificar el valor de una variable local
en otra funcin que llamaremos, debemos invocar a dicha funcin haciendo

17

referencia de su nombre, seguido de los parmetros o nombres de variables


para las cuales, en teora ampliaramos su mbito.
Las palabras parmetro y argumento, aunque de significado similar, tiene
distintas connotaciones semnticas: Se denominan parmetros los tipos
declarados en el prototipo (que deben corresponder con los declarados en la
definicin). Cuando se realiza una llamada a la funcin, los "valores" pasados
se denominan argumentos. A veces se utilizan tambin las expresiones
argumentos formales, para los parmetros y argumentos actuales para los
valores pasados.
La sintaxis utilizada para la declaracin de la lista de parmetros formales es
similar a la utilizada en la declaracin de cualquier identificador. Ejemplos:

Los argumentos son siempre objetos. Sus tipos pueden ser: escalares;
estructuras; uniones, o enumeraciones; clases definidas por el usuario;
punteros o referencias a estructuras y uniones, o punteros a funciones, a clases
o a matrices. El tipo void est permitido como nico parmetro formal. Significa
que la funcin no recibe ningn argumento. Todos los parmetros de una
funcin tienen mbito del bloque de la propia funcin y la misma duracin
automtica que la funcin.
Argumento por defecto: C++ permite tener valores por defecto para los
parmetros. Esto supone que, si no se pasa el parmetro correspondiente, se
asume un valor predefinido.

Un argumento
por defecto no
puede ser repetido o cambiado en una siguiente declaracin dentro del mismo
mbito. Por ejemplo:

18

La gramtica de C++ exige que los parmetros con valores por defecto deben
ser los ltimos en la lista de parmetros, y que si en una ocasin falta algn
argumento, los que le siguen tambin deben faltar (adoptar tambin los
valores por defecto). Los argumentos por defecto de mtodos (funcionesmiembro de clases) no pueden ser otros miembros a no ser que sean estticos.
Los argumentos por defecto no pueden ser otros argumentos:

Existen cinco formas de pasar un argumento a una funcin (subrutina)


o procedimiento: por valor, por referencia, por resultado, por valorresultado y por nombre.

Paso por referencia: El paso de parmetros por referencia consiste en


proporcionar a la subrutina a la que se le quiere pasar el argumento
la direccin de memoria del dato. En este caso se tiene un nico valor
referenciado (o apuntado) desde dos puntos diferentes, el programa principal y
la subrutina a la que se le pasa el argumento, por lo que cualquier accin sobre
el parmetro se realiza sobre la misma posicin de memoria.
Paso por valor resultado: Es un tipo poco usado en los lenguajes de
programacin actuales. Se basa en que dentro de la funcin se trabaja como si
los argumentos hubieran sido pasados por valor pero al acabar la funcin los
valores que tengan los argumentos sern copiados a las variables que
pertenecan.
Este tipo puede ser simulado en cualquier lenguaje que permita el paso de
valores por referencia de la siguiente forma:

19

Ejemplo de diferencias entre los distintos pasos de parmetros

Argumentos pasados por valor: a = 0

Argumentos pasados por referencia: a = 3

Argumentos pasados por valor-resultado:

Si el compilador copia los resultados de derecha a izquierda: a = 1

Si el compilador copia los resultados de izquierda a derecha: a = 2

Diagrama del funcionamiento de


una subrutina.

Un argumento o parmetro es una variable que puede


recibida por una rutina o subrutina. Una subrutina usa los
asignados a sus argumentos para alterar su
comportamiento en tiempo de ejecucin. La mayor
parte de los lenguajes de programacin pueden definir
subrutinas que aceptan cero o ms argumentos.

ser
valores

20

UNIDAD V
USO DE BIBLIOTECAS DEL LENGUAJE

21

INTRODUCCIN

Todos los compiladores C y C++ disponen de ciertas bibliotecas de funciones


estndar que facilitan el acceso a la pantalla, al teclado, a los discos, la
manipulacin de cadenas, y muchas otras cosas, de uso corriente.
Hay que decir que todas estas funciones no son imprescindibles, y de hecho no
forman parte del C. Pueden estar escritas en C, de hecho en su mayor parte lo
estn, y muchos compiladores incluyen el cdigo fuente de estas bibliotecas.
Nos hacen la vida ms fcil, y no tendra sentido pasarlas por alto.
Algunas bibliotecas tienen sus caractersticas definidas segn diferentes
estndar, como ANSI C o C++, otras son especficas del compilador, otras del
sistema operativo, tambin las hay para plataformas Windows. Las bibliotecas
son aquellos conjuntos de funciones que podemos utilizar.
Una funcin se escribe de una forma muy parecida a una Subrutina o
procedimiento pero cambia la sintaxis o declaracin pero es algo muy sutil.
Existen diferentes tipos de bibliotecas existentes, y funciones que se suelen
manejar dentro de cada una.
Entre los cuales se distinguen los 4 tipos de Bibliotecas:

22

Biblioteca
Grfica

Biblioteca
De Nmeros
Aleatorios.
5.1

Biblioteca
Definida por
el
Programador

Biblioteca
Matemtica

TEMA

BIBLIOTECA MATEMTICA
<math.h>

La
librera
math.h es
un
archivo
de
cabecera
de
la biblioteca
estndar del lenguaje de programacin Cesta diseado para operaciones
matemticas bsicas. Muchas de sus funciones incluyen el uso de nmeros
en coma flotante. C++tambin implementa estas funciones por razones de
compatibilidad y las declara en la cabecera math.
Debe incluir la directiva de pre procesamiento #include <math.h>, adems de
recordar de ligar la biblioteca de matemticas al compilar:
gcc progmat.c -o progmat lm
Un
error
comn
es
el
olvidar
incluir
el
archivo <math.h>.
Una nota importante: si se est programando en C/C++ bajo Linux, y se utiliza
uno de los compiladores nativos de este sistema operativo (gcc o g++), es
necesario incluir, al compilar, la opcin -lm, dado que, de lo contrario, el
compilador generar un error. Por ejemplo, si tenemos un fichero fuente con
funciones de la biblioteca matemtica, llamado mi_fich_fuente_math.c, para
compilarlo ser necesario dar la orden siguiente en la consola de comandos de
Linux:
$
gcc
mi_fich_fuente_math.c
-lm
-o
<nombre_del_ejecutable>
Esto, asimismo, no es necesario si se programa en C/C++ bajo Windows
utilizando la herramienta grfica MS Visual C++.
23

Todas las funciones en las que participan ngulos toman y devuelven radianes.
Funciones matemtica
Se muestra a continuacin una lista de funciones matemticas. Son fciles de
usar y algunas de ellas han sido ya usadas previamente.
Nombre
acos

Descripcin
Arco coseno

Nombre
exp(double x)

asin
atan

Arco seno
Arco tangente

abs
floor

atan2

Arco tangente de
dos parmetros

fmod

ceil

Menor entero no
menor que el
parmetro
Coseno

frexp

cos

cosh
log10
modf

pow(x,y)
sin

Coseno hiperblico
Logaritmo en base
10
Obtiene un valor en
punto flotante
ntegro y en partes
Eleva un valor dado
a un exponente, xy
Seno

ldexp

Descripcin
Funcin exponencia
l, computa ex
Valor absoluto
Mayor entero no
mayor que el
parmetro
Residuo de la
divisin de
flotantes
Fracciona y eleva al
cuadrado.

log
sinh

Tamao del
exponente de un
valor en punto
flotante
Logaritmo natural
Seno hiperblico

sqrt

Raz cuadrada

tan

Tangente

tanh

Tangente
hiperblica

Constantes matemticas
La biblioteca de matemticas define varias constantes (por lo general
desechadas). Siempre es aconsejable usar estas definiciones.
M_E La base de los logaritmos naturales e.
M_LOG2E El logaritmo de e de base 2.
M_LOG10E El logaritmo de e de base 10.
24

M_LN2 El logartimo natural de 2.


M_LN10 El logaritmo natural de 10.
M_SQRT2 La raz cuadrada positiva de 2
M_SQRT1_2 La raz cuadrada positiva de 1/2

Math.h realiza clculos matemticos y conversiones.


Cos, cosl
Sintaxis:
#include <math.h>
double cos(double x);
long double cosl(long double x);
Descripcin: Calcula el coseno de un valor. Cos computa el coseno del
valor de la entrada. El ngulo se especifica en los radianes. Cosl es la
versin doble larga; toma un argumento doble largo y devuelve un
resultado doble largo. Esta funcin puede usarse con bcd y tipos del
complejo.
El Valor de retorno: Si el programa est bien, Cos de un argumento
real devuelve un valor en el rango -1 a 1. Si hay error, estas funciones
pueden modificarse a travs de _matherr (o _matherrl).
pow, powl
Sintaxis:
#include <math.h>
double pow(double x, double y);
long double powl(long double x, long double y);
Descripcin: Calcula x a la potencia y (xy). Powl es la versin larga
doble; toma argumentos dobles y regresa un resultado doble largo. Esta
funcin puede usarse con los bcd y tipos complejos.
El valor de retorno: Si el programa est bien, el pow y powl devuelven
el valor calculado de x elevado a y. A veces los resultados dados son
grandes o son incalculables. Cuando el resultado es correcto pero
grandes o incalculables las funciones devuelven HUGE_VAL (pow) or
_LHUGE_VAL (powl). Los resultados de magnitud excesivamente grande
25

pueden causar el errno inconstante global para ser puesto a ERANGE


Resultado fuera de rango. Si el argumento x pas al pow o usted llama el
pow(0,0).
EDOM Error de Dominio
Error que maneja para estas funciones puede modificarse a travs de las
funciones _matherr y _matherrl.
sqrt, sqrtl
Sintaxis:
#include <math.h>
double sqrt(double x);
long double sqrtl(long double x);
Descripcin: Calcula la raz cuadrada positiva. Sqrt calcula la raz
cuadrada positiva del argumento x. Sqrtl es la versin larga doble; toma
argumentos dobles y regresa un resultado doble largo. Error que maneja
para estas funciones puede ser modificadas a travs de las funciones
_matherr y _matherrl. Esta funcin puede usarse con los bcd y tipos del
complejo.
El Valor de retorno: Si el programa esta bien, sqrt y sqrtl devuelven el
valor calculado, la raz cuadrada de x. Si x es real y positivo, el resultado
es positivo. Si x es real y negativo, el retorno ser inconstante global se
pone a EDOM (Error de Dominio).
TEMA 5.2
BIBLIOTECA DE NMEROS ALEATORIOS
#include <stdlib.h>

abort

abs

atexit

atof

atoi

atol

bsearch

calloc

div

exit

free

getenv

labs

ldiv

malloc

mblen

mbstowcs

mbtowc

qsort

rand

Realloc

srand

strtod

strtol

strtoul

system

wctomb

En esta biblioteca se incluyen rutinas de conversin entre tipos. Nos permiten


convertir cadenas de caracteres a nmeros, nmeros a cadenas de caracteres,
nmeros con decimales a nmeros enteros, etc.
26

Contiene tipos, macros y funciones para la conversin numrica, generacin


de nmeros aleatorios, bsquedas y ordenacin, gestin de memoria y tareas
similares.
Los nmeros aleatorios son tiles en programas que necesitan simular eventos
aleatorios, tales como juegos, simulaciones y experimentos. En la prctica
ninguna funcin produce datos aleatorios verdaderos -- las funciones producen
nmeros pseudo-aleatorios. Los nmeros aleatorios son calculados a partir de
una frmula dada (los distintos generadores usan diferentes frmulas) y las
secuencias de nmeros que son producidas se repiten.
Funcin atoi():
Convierte una cadena de caracteres a un entero. Puede leerse como
conversin de "ASCII to Integer".
Sintaxis: int atoi(const char *s);
La cadena puede tener los siguientes elementos: Opcionalmente un
conjunto de tabuladores o espacios. Opcionalmente un carcter de signo. Una
cadena de dgitos.
El formato de la cadena de entrada sera: [ws] [sn] [ddd]
El primer carcter no reconocido finaliza el proceso de conversin, no se
comprueba el desbordamiento, es decir si el nmero cabe en un int. Si no cabe,
el resultado queda indefinido.
Valor de retorno: atoi devuelve el valor convertido de la cadena de entrada.
Si la cadena no puede ser convertida a un nmero int, atoi vuelve con 0.
Al mismo grupo pertenecen las funciones atol y atof, que devuelven valores
long int y float.

Funcin system ( );
Ejecuta un comando del sistema o un programa externo almacenado en disco.
Esta funcin nos ser muy til para detener el programa antes de que termine.
Si compilas los ejemplos, ejercicios o tus propios programas usando un
compilador de Windows para consola, como Dev-C++, habrs notado que la
consola se cierra cuando el programa termina, antes de que puedas ver los
resultados del programa, para evitar eso podemos aadir una llamada a la
funcin system para ejecutar el comando del sistema "pause", que detiene la
ejecucin hasta que se pulse una tecla.
Funcin abs( );
Devuelve el valor absoluto de un entero.
Sintaxis: int abs(int x);
27

ABS devuelve el valor absoluto del valor entero de entrada, x. Si se llama a abs
cuando se ha incluido la biblioteca "stdlib.h", se la trata como una macro que
se expandir. Si se quiere usar la funcin abs en lugar de su macro, hay que
incluir la lnea:
#undef abs
en el programa, despus de la lnea:
#include <stdlib.h>
Esta funcin puede usarse con "bcd" y con "complejos".
Valor de retorno: Esta funcin devuelve un valor entre 0 y el INT_MAX, salvo
que el valor de entrada sea INT_MIN, en cuyo caso devolver INT_MAX. Los
valores de INT_MAX e INT_MIN estn definidos en el fichero de cabecera
"limit.h".
Funcin rand();
Generador de nmeros aleatorios.
Sintaxis: int rand(void);
La funcin rand devuelve un nmero aleatorio entre 0 y RAND MAX. La
constante RAND_MAX est definida en stdlib.h.
Valor de retorno: Rand devuelve un nmero entre 0 y RAND MAX.
Funcin srand()
Inicializa el generador de nmeros aleatorios.
Sintaxis: void srand(unsigned semilla);
La funcin srand sirve para cambiar el origen del generador de nmeros
aleatorios.
Valor de retorno: srand no devuelve ningn valor.

TEMA

5.3

BIBLIOTECA GRFICA

El lenguaje C no provee de herramientas para realizar salida grfica en un


programa. Sin embargo existen una infinidad de bibliotecas, realizadas por
terceros que proveen de estas facilidades. Dadas las peculiaridades de cada
sistema operativo para manipular el entorno grfico, es muy difcil mantener la
portabilidad de un programa cuando se utilizan rutinas de graficacin. Dado
que este curso pretende ensear a programar en C en forma independiente del
sistema operativo, elegimos la biblioteca g2.
28

EJEMPLO
#include <stdio.h> /* el header genrico de la biblioteca */
#include <g2.h> /* el header especfico para manipular
ventanas de X11 */
#include <g2_X11.h>
int main()
{
int d; /* para identificar el dispositivo */
d = g2_open_X11(100,100); /* abre una ventana de 100 x
100, referenciada por d */
g2_line(d, 10, 10, 90, 90); /* dibuja una linea desde (10,10)
hasta (90,90) */
getchar(); /* espera antes de cerrar la ventana */
Sin embargo C ++ proporciona una biblioteca de funciones graficas (GRAFHISCS.H) como
suplemento a las bibliotecas de los modelos de memoria estndar, incorporado bibliotecas que son
especificas del modelo de memoria. Al utilizar el entorno de desarrollo integrado de c++.se produce
la carga automtica del modelo de memoria adecuado, que con incide con el modelo de memoria
seleccionado (consulte el men que se abre abajo optians/copiler/Medel). La biblioteca grfica, sin
embargo, est separada y no queda incluida automticamente en tiempo de compilacin. Por este
motivo existen otras dos opciones de utilizacin de las funciones graficas con c++; la utilizacin de
los archivos .prj o la incorporacin de GRAFHICS.LIB e una o ms de la biblioteca estndar.
Recuerde que el archivo de cabecera para grficos debe ser referido en cada uno de los cdigos
fuentes antes de utilizar cualquier funcin grfica. En ese caso. La lnea fuente
#include<graphics.h> debera aprender en todo los mdulos del cdigo. Adems, las funciones
graficas no funcionara si se utiliza el modelo de memoria TINY, dada su limitacin de memoria. Los
modelos con ms memoria dejan mayor Cantidad de esta para los programas del usuario

FUNCIONES DE LA LIBRERA GRAFICA DE TURBO C++


arc : Dibuja un arco.
Sintaxis: arc (int x, int y, int ang_comienzo, int ang_final, int radio); (x,y) es el punto central;
ang_comienzo y ang_final son los ngulos de comienzo y final en grados; radio es el radio.
bar : Dibuja una barra.
Sintaxis: bar (int izq, int ar, int der, int ab);
bar3d : Dibuja una barra en 3-D.
Sintaxis: bar3d (int izq, int ar, int der, int ab, int profundidad, int flag_de_encima);
Si flag_de_encima es 0 no se dibuja la cara superior de la barra.
circle : Dibuja un crculo en (x,y) con el radio dado.
Sintaxis: circle (int x, int y, int radio);

29

cleardevice : Borra la pantalla grfica.


Sintaxis: cleardevice (void);
clearviewport : Borra el viewport corriente.
Sintaxis: clearviewport (void);
closegraph : Cierra el sistema grfico.
Sintaxis: closegraph (void);
detectgraph : Determina el controlador y el modo grfico a usar chequeando el hardware.
Sintaxis: detectgraph (int far *graphdriver, int far *graphmode);
drawpoly : Dibuja un polgono.
Sintaxis: drawpoly (int numero_de_puntos, int far
*puntos_de_poligono);
*puntos_de_poligono apunta a numero_de_puntos pares de valores. Cada par
da los valores de x e y para un punto del polgono.
ellipse : Dibuja un arco elptico.
Sintaxis: ellipse (int x, int y, int ang_comienzo, int ang_final, int radiox, int radioy);
(x,y) es el punto central; ang_comienzo y ang_final son los ngulos de comienzo y final en grados;
radiox y radioy son los radios horizontal y vertical.
fillellipse : Dibuja y rellena una elipse.
Sintaxis: fillellipse (int x, int y, int radiox, int radioy);
Usa (x,y) como el punto central y rellena el arco usando el patrn de relleno actual; radiox y radioy
son los radios horizontal y vertical.
fillpoly : Dibuja y rellena un polgono.
Sintaxis: fillpoly(int numpoints, int far *polypoints[]);
*puntos_de_poligono apunta a numero_de_puntos pares de valores. Cada par da los valores de x
e y para un punto del polgono.
floodfill : Rellena una regin definida.
Sintaxis: floodfill (int x, int y, int color_borde);
(x,y) es un punto que reside dentro de la regin a rellenar.

TEMA

5.4

BIBLIOTECA DEFINIDA POR EL PROGRAMADOR

Las funciones que se han utilizado hasta ahora son funciones que el lenguaje
de programacin ha predefinido en sus bibliotecas o libreras. Sin embargo,
tambin es posible que el programador defina y utilice sus propias funciones.
Las funciones definidas por el programador se escriben fuera de la funcin
main. Si se recuerda, uno de los objetivos del uso de las funciones es la
30

descomposicin de problemas complejos y el trabajo en grupo. El siguiente es


un ejemplo de una definicin de una funcin. Se utiliza antes de presentar la
sintaxis formal de modo que nos podamos familiarizar con la terminologa.
El cuerpo de la funcin se encierra entre llaves y en l se escriben las
sentencias que se necesitan ejecutar para lograr el objetivo de la funcin.
Contiene al menos una sentencia return. La sentencia return va seguida del
nombre de una variable o de un valor constante.
return cuadrado; El valor de dicha variable (o el valor de dicha constante)
constituye el valor de regreso de la funcin. El tipo del valor que regresa la
funcin debe ser consistente con el tipo del valor de regreso especificado en el
encabezado de la funcin. Observe que, en este ejemplo, el valor de regreso de
la funcin (tipo de la variable llamada cuadrado) es double, al igual que el tipo
de valor de regreso especificado en el encabezado.
Uso de Funciones Definidas por el Programador
Cuando se utilizan funciones predefinidas es necesario incluir a la biblioteca o
librera que contiene su definicin. Por ejemplo, si se usa la funcin pow, es
necesario incluir math.h
Algo similar es necesario para funciones definidas por el programador. Ese algo
es que, despus de las directivas include pero antes de la funcin main, es
necesario escribir el prototipo de la funcin. El prototipo de la funcin no es
ms que el encabezado de la funcin seguido de punto y coma. El siguiente
ejemplo muestra cmo se podra utilizar en un programa una funcin definida
por el programador.
#include <iostream.h> #include <stdlib.h>
double square(double numero); int main()
/* Prototipo de la funcion*/
{
}
double x,y,z; cin>>x>>y;
z = square(x);/* Llamado a la funcion*/ z = z * y;
cout<<"\n"; cout<<z; cout<<"\n";
system("PAUSE"); return 0;
/* Esta funcion calcula el cuadrado de un numero*/ double
square(double numero)
{
double cuadrado; cuadrado = numero * numero; return cuadrado; {
Las funciones definidas por el programador se escriben fuera de la funcin
main. Si se recuerda, uno de los objetivos del uso de las funciones es la
descomposicin de problemas complejos y el trabajo en grupo. El siguiente es

31

un ejemplo de una definicin de una funcin. Se utiliza antes de presentar la


sintaxis formal de modo que nos podamos familiarizar con la terminologa:
Double square(double numero)
{
Double cuadrado;
Cuadrado = numero * numero;
Return cuadrado;
}
Esta definicin de la funcin square consiste de:
1) El encabezado de la funcin double square (double numero) Observe que el
encabezado no termina con punto y coma. Las partes del encabezado de una
funcin son los siguientes.
a) Una lista de los argumentos de la funcin entre parntesis:
(Double numero) Si se considera a la funcin como un programa pequeo, la
lista de argumentos seran equivalentesa los datos que en un programa se
introducira a travs de la instruccin cin. Es importante que observe que en la
lista de argumentos se indican tanto la lista de los argumentos necesarios
como el tipo de cada uno de ellos.
b) El nombre de la funcin square que puede ser cualquier identificador vlido
en
C++.
c) El tipo de valor que regresa la funcin como resultado. Double
2) El cuerpo de la funcin
{
Double cuadrado;
Cuadrado = numero * numero;
return cuadrado;
}
El cuerpo de la funcin se encierra entre llaves y en l se escriben las
sentencias que se necesitan ejecutar para lograr el objetivo de la funcin.
Contiene al menos una sentencia return. La sentencia return va seguida del
nombre de una variable o de un valor constante. return cuadrado;
El valor de dicha variable (o el valor de dicha constante) constituye el valor de
regreso de la funcin. El tipo del valor que regresa la funcin debe ser
consistente con el tipo del valor de regreso especificado en el encabezado de la
funcin. Observe que, en este ejemplo, el valor de regreso de la funcin (tipo
de la variable llamada cuadrado) es double, al igual que el tipo de valor de
regreso especificado en el encabezado
32

BIBLIOGRAFA:

http://www.alegsa.com.ar/Dic/particion.php#sthash.o0gh9SWu.dpuf
http://www.cvc.uab.es/shared/teach/a25002/Optimizacion%20de%20codigo.pdf
http://www.giaa.inf.uc3m.es/docencia/II/PL1/optimizacion05-06.pdf
http://miguedt.blogspot.mx/2013/01/descomposicion-funcional.html
http://image.slidesharecdn.com/topdown-120611165715-phpapp01/95/topdown-2-728.jpg?cb=1339460332
http://www.mailxmail.com/curso-informatica-ordenador-cientificodesarrollo/diseno-top-down
http://informatica-contenidos.blogspot.mx/2010/04/53.html
http://ocw.upm.es/ciencia-de-la-computacion-e-inteligenciaartificial/fundamentosprogramacion/contenidosteoricos/ocwfundamentosprogramaciontema7.pdf
http://es.wikipedia.org/wiki/Argumento_%28inform%C3%A1tica
%29#Paso_de_argumentos
http://www.ecured.cu/index.php/Par%C3%A1metros_y_argumentos_
%28programaci%C3%B3n%29
http://bibliotecas-del-lenguaje.wikispaces.com/Bibloteca+matematica
http://bibliotecas-dellenguaje.wikispaces.com/uso+de+las+bibliotecas+de+lenguaje
http://www.buenastareas.com/ensayos/Uso-De-Bibliotecas-DeLenguaje/3267776.html#
http://bibliotecas-dellenguaje.wikispaces.com/biblioteca+de+numero+aleatorio
http://bibliotecas-del-lenguaje.wikispaces.com/biblioteca+%3Cgrafica%3E
http://www.buenastareas.com/ensayos/Biblioteca-Definida-Por-Elrogramador/3500579.html#

33

Você também pode gostar