FUNCIONES DEL LENGUAJE FUNCIONES DEL LENGUAJE Expresión escrita.
Funciones en Lenguaje C
-
Upload
gustavo-reina -
Category
Documents
-
view
24 -
download
0
description
Transcript of Funciones en Lenguaje C
REPÚBLICA BOLIVARIANA DE VENEZUELA
UNIVERSIDAD “FERMIN TORO “
BARQUISIMETO-LARA
Integrante:
Jeison Noguera
Barquisimeto; Febrero de 2015.
¿Que son Funciones en Lenguaje C?
Una función es un conjunto de líneas de código que realizan una tarea
específica y puede retornar un valor.
1
Las funciones pueden tomar parámetros que modifiquen su
funcionamiento.
Las funciones son utilizadas para descomponer grandes problemas en
tareas simples y para implementar operaciones que son comúnmente
utilizadas durante un programa y de esta manera reducir la cantidad de
código.
Cuando una función es invocada se le pasa el control a la misma, una
vez que esta finalizó con su tarea el control es devuelto al punto desde el
cual la función fue llamada.
<tipo> [clase::] <nombre> ( [Parámetros] )
{
cuerpo;
}
Ejemplo de una función
Para comenzar, vamos a considerar el caso en el cual se desea crear
la función cuadrado (), que deberá devolver el cuadrado de un número real
(de punto flotante), es decir, cuadrado() aceptará números de punto flotante y
regresará una respuesta como número flotante.
Nota: aunque para la función que veremos el tipo de retorno coincide
con el tipo de parámetro pasado, algunas veces las cosas pueden cambiar,
2
es decir, no es obligatorio que una función reciba un parámetro de un tipo y
que tenga que regresar una respuesta de dicho tipo.
// regresar el cuadrado de un número
double Cuadrado(double n)
{
return n*n;
}
Parámetros
Normalmente, las funciones operan sobre ciertos valores pasados a
las mismas ya sea como constantes literales o como variables, aunque se
pueden definir funciones que no reciban parámetros. Existen dos formas en
C++ de pasar parámetros a una función; por referencia o por valor.
El hecho es que si en una declaración de función se declaran
parámetros por referencia, a los mismos no se les podrá pasar valores
literales ya que las referencias apuntan a objetos (variables o funciones)
residentes en la memoria; por otro lado, si un parámetro es declarado para
ser pasado por valor, el mismo puede pasarse como una constante literal o
como una variable. Los parámetros pasados por referencia pueden ser
alterados por la función que los reciba, mientras que los parámetros pasados
por valor o copia no pueden ser alterados por la función que los recibe, es
decir, la función puede manipular a su antojo al parámetro, pero ningún
cambio hecho sobre este se reflejará en el parámetro original.
3
¿Que son Parámetros por Valor?
La función cuadrado() (ver arriba) es un clásico ejemplo que muestra
el paso de parámetros por valor, en ese sentido la función cuadrado() recibe
una copia del parámetro n. En la misma función se puede observar que se
realiza un calculo ( n*n ), sin embargo el parámetro original no sufrirá cambio
alguno, esto seguirá siendo cierto aún cuando dentro de la función hubiera
una instrucción parecida a n = n * n; o n*=n;.
¿Que son Parámetros por Referencias?
Para mostrar un ejemplo del paso de parámetros por referencia,
vamos a retomar el caso de la función cuadrado, salvo que en esta ocasión
cambiaremos ligeramente la sintaxis para definir la misma. Veamos:
// regresar el cuadrado de un número
double cuadrado2(double &n)
{
n *= n;
return n;
}
Al poner a prueba las funciones cuadrado () y cuadrado2 () se podrá
verificar que la primera de estas no cambia el valor del parámetro original,
mientras que la segunda sí lo hace.
4
¿Que son Variables Lógicas?
Son aquellas que solo pueden tener dos valores (verdadero o falso)
estos representan el resultado de una comparación entre otros datos.
Una variable lógica es una variable que sólo puede tener dos valores
posibles de forma que un valor excluye al otro, es decir que si tiene un valor
el otro no puede ser.
Por ejemplo, sí o no o también 0 o 1. Imaginemos que A es una
variable que almacena la respuesta a la pregunta ¿vienes mañana? que sólo
puede tener dos respuestas sí o no. Si es sí no puede ser no, si es no, no
puede ser sí.
Normalmente la variables lógicas de representan por 0 o 1 de forma
numérica lo que conforma el sistema binario de numeración usado en
sistemas digitales (dentro de los digitales están los computacionales)
¿Que son Variables Globales?
Una variable global es aquella que se define fuera del cuerpo de
cualquier función, normalmente al principio del programa, después de la
definición de los archivos de biblioteca (#include), de la definición de
constantes simbólicas y antes de cualquier función.
5
El ámbito de una variable global son todas las funciones que
componen el programa, cualquier función puede acceder a dichas variables
para leer y escribir en ellas. Es decir, se puede hacer referencia a su
dirección de memoria en cualquier parte del programa.
Una variable global es, en informática, una variable accesible en todos
los ámbitos de un programa informático. Los mecanismos de interacción con
variables globales se denominan mecanismos de entorno global. El concepto
de entorno global contrasta con el de entorno local donde todas las variables
son locales sin memoria compartida (y por ello todas las iteraciones pueden
restringirse al intercambio de mensajes).
El uso de este tipo de variables suele considerarse como una mala
práctica, por el riesgo que conlleva esa deslocalización: una variable global
puede ser modificada en cualquier parte del programa (a menos que resida
en una sección de memoria protegida) y cualquier parte del programa
depende de ella.
Es por ello que una variable global tiene un potencial ilimitado para
crear dependencias, factor éste que aumenta la complejidad. Sin embargo,
en algunas ocasiones, las variables globales resultan muy útiles. Por
ejemplo, se pueden usar para evitar tener que pasar variables usadas muy
frecuentemente de forma continua entre diferentes subrutinas.
El uso de variables globales se desaconseja especialmente para
lenguajes de programación funcionales (como puede ser Scheme). Viola la
transparencia referencial y dificulta la legibilidad del código fuente.
Las variables globales se usan de forma frecuente para pasar
información entre diferentes secciones del código que no comparten una
relación de "función llamadora" - "función llamada", como ocurre con hilos
concurrentes y módulos para el manejo de señales. Los lenguajes de
6
programación donde cada archivo define un espacio de nombres implícito
elminan la mayor parte de los problemas de los lenguajes con nombres de
espacios gloables, aunque pueda haber algunos problemas si no se tiene
cuidado a la hora de encapsular el código. Sin las restricciones adecuadas
(como por ejemplo con un mutex), el código que usa variables globales no
será a prueba de hilos excepto para los valores de sólo lectura en la memoria
protegida.
El uso de variables globales no es aconsejable a pesar de que
aparentemente nos parezca muy útil, esto se debe a varias razones
fundamentales:
Legibilidad menor.
Nos condiciona en muchos casos que el programa sólo sirva
para un conjunto de casos determinados.
El uso indiscriminado de variables globales produce efectos
colaterales. Esto sucede cuando existe una alteración no
deseada del contenido de una variable global dentro de una
función, bien por invocación, bien por olvidar definir en la
función una variable local o un parámetro formal con ese
nombre. La corrección de dichos errores puede ser muy ardua.
Atenta contra uno de los principios de la programación, la
modularidad. El bajo acoplamiento supone no compartir
espacios de memoria con otras funciones, y potenciar el paso
de información (llamadas) para que la función trate la
información localmente.
7
Es fuera de todos los procedimiento o funciones a este tipo de
variables se les llama variables globales y podrán ser usadas por cualquier
función o procedimiento del programa, sin embargo hay que agregarle la
palabra reservada STATIC y a partir del momento en que se declara,
acompañada de dicha palabra reservada static se considera y puede usarse
como variable global.
En programación, no es aconsejable usar muchas variables globales
por varias razones, una de ellas es que variables globales están vivas todo el
tiempo de ejecución del programa y si una global solo la ocupan unos
cuantos procedimientos no tiene caso que este viva para todo el resto, otra
razón es que es peligroso tener variables globales porque todo el conjunto de
procedimiento y funciones que componen un programa tienen acceso o
comparten su valor y se corre el riesgo de que inadvertidamente alguno de
ellos modifique su valor.
Ejemplo 1
#include <stdio.h>
#include <conio.h>
#include <string.h>
// recordar declarar primero proc y funciones
void proc1();
// variables globales
float base, altura, area;
void main() {
clrscr();
8
//capturando datos
printf("dame base: ");scanf("%f",&base);
printf("dame altura: ");scanf("%f",&altura);
//llamando procedimiento
proc1();
}
void proc1(){
// area de operaciones
area = base * altura / 2;
// area de construccion de pagina de salida
printf(" area =%0.2f",area);
getchar();getchar();
}
Ejemplo 2
Ejemplo de una variable global en C++:
#include <iostream>
int global = 3; // Esta es la variable global.
void ChangeGlobal()
{
global = 5; // Se referencia la variable global en una función.
9
}
int main()
{
std::cout << global << '\n'; // Se referencia la variable global en una
segunda función.
ChangeGlobal();
std::cout << global << '\n';
return 0;
}
Librerías utilizadas en C
Una biblioteca (o librería) C es una colección de bibliotecas utilizadas
en el lenguaje de programación C.
10
Las bibliotecas más comunes son la librería estándar de C y la ISO y
estándar ANSI C provee las especificaciones de los estándares, las cuales
son ampliamente compartidas entre bibliotecas. La biblioteca ANSI C
estándar incluye rutinas para la entrada y salida de archivos, alojamiento de
memoria y operaciones con datos comunes como funciones matemáticas,
funciones de cadenas y funciones de hora y fecha.
Otros juegos de bibliotecas C son aquellas utilizadas para desarrollar
sistemas Unix, las cuales proveen interfaces hacia el núcleo. Estas funciones
son detalladas en varios estándares tales como POSIX y el Single UNIX
Specification.
Ya que muchos programas han sido escritos en el lenguaje C existe
una gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas
en C debido a que C genera código objeto rápido; los programadores luego
generan interfaces a la biblioteca para que las rutinas puedan ser utilizadas
desde lenguajes de mayor nivel, tales como Java, Perl y Python.
Las librerias son un grupo de archivos que tienen una funcionalidad
pre-construida por terceros, y que puede ser usadas por cualquier ejecutable.
Las librerías contienen en su interior variables y funciones. Veamos cómo
usarlas con algunas de las librerías más comunes:
#include <iostream.h>
#include <math.h>
#include <time.h>
Donde “ <iostream.h> ” contiene las funciones de ingresar y mostrar
datos.
Donde “ <math.h> ” contiene las funciones matematicas comunes.
11
Donde “ <time.h> ” contiene las funciones para tratamiento y
conversión entre formatos de fecha y hora.
Si usamos la biblioteca “ <iostream.h> “ tenemos que, las funciones
más comunes que vamos a usar son de entrada / salida de datos. Y las
operaciones más comunes como suma/resta/multiplicacion/division.
Si usamos la biblioteca “ <math.h> “ tenemos que, las funciones más
comunes que vamos a usar son de cálculos matemáticos y conversiones. Y
posee operaciones como hallar coseno/hallar raiz cuadrada/hallar la
potencia/entre otras.
Si usamos la biblioteca “ <time.h> “ tenemos que, las funciones más
comunes que vamos a usar son de tratamiento y operaciones usando la hroa
y fecha como base. Y posee operaciones como calcular el número de veces
que se dió click con el mouse durante la ejecución del programa/hallar un
numero aleatorio/entre muchas opciones mas
iostream.h
Declara en el C++ básico los datos de (I/O).
Funciones
Cin : Declara los datos de entrada para alas variables
Cout : Muestra los datos que uno desea que se vean en la
pantalla.
stdio.h
Define los tipos y macros necesitados para el paquete definido de I/O
normal en Kernighan y Ritchie, extendido bajo el Sistema de UNIX V.
12
Define el estándar de I/O predefinido vierte stdin, stdout, stdprn, y
stderr, y declara I/O de datos.
Funciones
gets
Sintaxis:
#include <stdio.h>
char *gets(char *s);
Description:
Recibe una cadena del “stdin” (cadena estándar de entrada).
Gets colecciona una cadena de caracteres terminados por una nueva
línea desde la cadena estándar de entrada “stdin” y lo pone en s. La
nueva línea es reemplazada por un carácter nulo (\0) en s.
Gets permite las cadenas de la entrada para contener ciertos
caracteres del “whitespace o espacio en blanco” (los espacios,
etiquetas). Gets vuelve cuando encuentra una nueva línea; a toda la
nueva línea la copia en s.
El Valor de retorno:
Si el programa esta bien, Gets devuelve s al argumento de la cadena.
Si hay error, Gets devuelve NULO
putchar
Sintaxis:
13
#include <stdio.h>
int putchar(int c);
Descripción:
putchar(c) es un macro definido para putc(c, stdout).
El Valor de retorno:
Si el programa esta bien, putchar devuelve el carácter c.
Si hay error, putchar devuelve EOF.
math.h
Math.h realiza cálculos matemáticos y conversiones.
Cos, cosl
Sintaxis:
#include <math.h>
double cos(double x);
long double cosl(long double x);
Descripción:
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 versión doble larga; toma un argumento doble largo y
devuelve un resultado doble largo.
14
Esta función puede usarse con “bcd” y tipos del complejo.
El Valor de retorno:
Si el programa esta bien, Cos de un argumento real devuelve un valor
en el rango -1 a 1
Si hay error, estas funciones pueden modificarse a través 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);
Descripción:
Calcula x a la potencia y (xy).
Powl es la versión larga doble; toma argumentos dobles y regresa un
resultado doble largo.
Esta función 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.
15
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 pueden causar el
error 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 través de
las funciones _matherr y _matherrl.
sqrt, sqrtl
Sintaxis:
#include <math.h>
double sqrt(double x);
long double sqrtl(long double x);
Descripción:
Calcula la raíz cuadrada positiva.
Sqrt calcula la raíz cuadrada positiva del argumento x.
Sqrtl es la versión larga doble; toma argumentos dobles y regresa un
resultado doble largo. Error que maneja para estas funciones puede
ser modificadas a través de las funciones _matherr y _matherrl.
16
Esta función 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
raíz 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).
string.h
Declara varios cadenas-manipulación y memorias de rutinas de
manipulación.
Strcpy
Sintaxis:
#include <string.h>
char *strcpy(char *dest, const char *src);
Descripción:
Copia de una cadena a otra.
Copia las cadenas del src al dest, se detiene después que el carácter
nulo haya terminando de moverse.
El Valor de retorno:
el strcpy devuelve el dest.
Strcmp
Sintaxis:
17
#include <string.h>
int strcmp(const char *s1, const char *s2);
Descripción:
Compara de una cadena a otra.
Strcmp realiza una comparación sin firmar de s1 al s2, empieza con el
primer carácter de cada cordón y continúa con los caracteres
subsecuentes hasta que los caracteres correspondientes difieren o
hasta el fin que alcance la cadena.
El Valor de retorno:
Si el s1 es... el strcmp devuelve un valor que es...
menos del s2 <0
igual que el s2 == 0
mayor que el s2> 0
conio.h
Declara varias funciones usadas llamando la consola del sistema
operativo las rutinas de I/O.
Clrscr
Sintaxis:
#include <conio.h>
void clrscr(void);
Descripción:
Aclara el modo de texto de la ventana.
18
clrscr aclara el texto de la actual y lugares del cursor en la esquina
izquierda superior o en la posición (1,1).
El Valor de retorno:
Ninguno.
Clreol
Sintaxis:
#include <conio.h.>
void clreol(void);
Descripción:
Aclara el final de la línea en la ventana de texto.
clreol aclara todos los caracteres donde el cursor se posicione hasta el
fin de la línea dentro de la ventana de texto actual, sin mover el cursor.
El Valor de retorno:
Ninguno.
Gotoxy
Sintaxis:
#include <conio.h>
void gotoxy(int x
int y);
Descripción:
Posiciona el cursor en la ventana del texto.
19
Gotoxy mueve el cursor a la posición dada en la ventana del texto
actual. Si las coordenadas no son valías entonces la función gotoxy se
ignora. Un ejemplo de esto es si gotoxy(40,30) cuando (35,25) es la
correcta posición del fondo de la ventana. Ningún argumento de
gotoxy puede ser el cero.
El Valor de retorno:
Ninguno.
Switch
Sintaxis:
switch ( <switch variable> ) {
case <constant expression> : <statement>; [break;]
default : <statement>;
}
Descripción:
Use la declaración switch para pasar el mando a un caso que
empareja el <el interruptor inconstante>. A que el punto las
declaraciones que siguen el caso emparejando evalúa.
Si ningún caso satisface la condición que el caso predefinido evalúa.
Evitar evaluar cualquier otro caso y abandonar el mando del
interruptor, termine cada caso break.
20
iomanip.h
Declara la I/O de las cadenas en C++ y contiene los macros por crear
a los manipuladores del parametro.
Incluye:
iostream.h
#include <stdio.h>clearerr fclose feof ferror fflush fgetc fgetposfgets fopen formato fprintf fputc fputs freadfreopen fscanf fseek fsetpos ftell fwrite getcgetchar gets perror printf putc putchar putsremove rename rewind scanf setbuf setybuf sprintfsscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf
#include <stdlib.h>
abort abs atexit atof atoi atol bsearchcalloc div exit free getenv labs ldivmalloc mblen mbstowcs mbtowc qsort rand Reallocsrand strtod strtol strtoul system wctomb
#include <string.h>
memchr memcmp memcpy memmove memset strcat strchrstrcmp strcoll strcpy strcspn strerror strlen strmcatstrmcmp strmcpy strpbrk strrchr strspn strstr strtokstrxfrm
#include <ctype.h>
tolower toupper
21
#include <locale.h>
localeconv setlocale #include <math.h>
Acos Asin atan atan2 ceil cos coshExp Fabs floor fmod frexp ldexp loglog10 modf pow sin sinh sqrt tantanh
#include <setjmp.h>
longjmp setjmp
#include <signal.h>
raise signal
#include <time.h>
asctime clock ctime difftime Gmtime localtime mktimestrftime time
Otras librerias que no tienen funciones asociadas. Pero tienen macros
constantes y/o estructuras.
#include <assert.h>
#include <errno.h>
#include <float.h>
#include <limits.h>
#include <stdarg.h>
#include <stddef.h>
RESUMEN DE LIBRERIAS
22
assert.h Contiene una macro para el diagnóstico dentro de los
programas.
ctype.h Contiene varias funciones para comprobación de tipos y
transformación de caracteres.
errno.h Contiene varias macros usadas para informar de errores.
limits.h Contienen varias macros que definen constantes para el
tamaño de tipo enteros.
float.h Contienen varias macros que definen constantes para el
tamaño de tipo flotante.
locale.h Contienen varias macros, funciones y tipos para unidades
locales, como unidad monetaria, tiempo, dígitos, etc.
math.h Contiene una macro y varias funciones matemáticas.
setjmp.h Contienen declaraciones que proporcionan una forma de
evitar la secuencia normal de llamada y regreso de funciones.
signal.h Contiene un tipo, dos funciones y varias macros para
manejar condiciones excepcionales que aparecen durante la
ejecución, tal como una señal de interrupción de una fuente
externa o un error en la ejecución.
stdarg.h Contiene un tipo y tres macros que proporcionan recursos
para recorrer una lista de argumentos de función de tamaño y tipo
desconocido.
stddef.h Contiene varios tipos y macros que también están
definidas en otras librerías, como size_t.
stdio.h Contiene tipos, macros y funciones para la realización de
tareas de E/S.
stdlib.h Contiene tipos, macros y funciones para la conversión
numérica, generación de números aleatorios, búsquedas y
ordenación, gestión de memoria y tareas similares.
23
string.h Contiene tipos, macros y funciones para la manipulación
de cadenas de caracteres.
time.h Contiene tipos, macros y funciones para la la manipulación
de información sobre fechas y horas.
Tipos: char, int, float, long, long long, short, double, void.
CADENAS DE FORMATO
d, i entero decimal con signo
o entero octal sin signo
u entero decimal sin signo
x entero hexadecimal sin signo (en
minúsculas)
X entero hexadecimal sin signo (en
mayúsculas)
f Coma flotante en la forma [-]dddd.dddd
e Coma flotante en la forma [-]d.dddd
e[+/-]ddd
g Coma flotante según el valor
E Como e pero en mayúsculas
G Como g pero en mayúsculas
c un carácter
s cadena de caracteres terminada en '\0'
24
% imprime el carácter %
p puntero
SECUENCIA DE ESCAPE
\a Alerta
\b Espacio atrás
\f Salto de página
\n Salto de línea
\r Retorno de carro
\t Tabulación horizontal
\v Tabulación vertical
\\ Barra invertida
\' Comilla simple
\" Comillas dobles
\OOO Visualiza un carácter cuyo código ASCII es OOO en octal
\xHHH Visualiza un carácter cuyo código ASCII es HHH en
hexadecimal
25
Funcionabilidad de la Función System, que pertenece a la librería
<stlib.h>
Colores de Fondo
0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Púrpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro
Colores de Fuente
a = Verde claro
b = Aguamarina claro
c = Rojo claro
d = Púrpura claro
e = Amarillo claro
f = Blanco brillante
26