Funciones en Lenguaje C

33
REPÚBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD “FERMIN TORO “ BARQUISIMETO-LARA Integrante: Jeison Noguera Barquisimeto; Febrero de 2015. 1

description

Funciones en Lenguaje C

Transcript of Funciones en Lenguaje C

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

Page 2: Funciones en Lenguaje C

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

Page 3: Funciones en Lenguaje C

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

Page 4: Funciones en Lenguaje C

¿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

Page 5: Funciones en Lenguaje C

¿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

Page 6: Funciones en Lenguaje C

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

Page 7: Funciones en Lenguaje C

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

Page 8: Funciones en Lenguaje C

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

Page 9: Funciones en Lenguaje C

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

Page 10: Funciones en Lenguaje C

}

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

Page 11: Funciones en Lenguaje C

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

Page 12: Funciones en Lenguaje C

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

Page 13: Funciones en Lenguaje C

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

Page 14: Funciones en Lenguaje C

#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

Page 15: Funciones en Lenguaje C

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

Page 16: Funciones en Lenguaje C

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

Page 17: Funciones en Lenguaje C

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

Page 18: Funciones en Lenguaje C

#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

Page 19: Funciones en Lenguaje C

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

Page 20: Funciones en Lenguaje C

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

Page 21: Funciones en Lenguaje C

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

Page 22: Funciones en Lenguaje C

#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

Page 23: Funciones en Lenguaje C

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

Page 24: Funciones en Lenguaje C

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

Page 25: Funciones en Lenguaje C

% 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

Page 26: Funciones en Lenguaje C

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