Beruflich Dokumente
Kultur Dokumente
Andrs Arcia Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Universidad de Los Andes
27/05/05
Programacin Digital I
Aspectos importantes: Un programa en C consta de una o varias funciones. Un programa siempre debe contener la funcin main. La ejecucin de un programa siempre comienza por la funcin main. Una funcin puede no devolver ningn valor, puede devolver un slo valor, o puede devolver varios valores.
27/05/05 Programacin Digital I
Notacin utilizada para definir funciones que devuelven un solo valor. El tipo_resultado (tipo de valor devuelto por la funcin), la lista de parmetros formales, la declaracin de variables locales y la sentencia devolver son opcionales. NOTA IMPORTANTE: Una definicin de una funcin no puede estar incluida en otra pero una funcin puedeI acceder a otras funciones. 3 Programacin Digital 27/05/05
Los identicadores usados como nombre_parmetro_formal son locales a la funcin. Si la denicin de una funcin no contiene parmetros formales se tiene: tipo_resultado funcin nombre_funcin ()
27/05/05
Programacin Digital I
27/05/05
Programacin Digital I
Sentencia devolver
La sentencia devolver, detiene el flujo de ejecucin de una funcin para retornar a la lnea inmediata siguiente desde donde fue llamada. El tipo de esta expresin debe ser el mismo que el tipo de la funcin definida en tipo_resultado. Si la funcin no tiene asociado un tipo_resultado entonces se omite la sentencia devolver. En otros lenguajes de programacin a este tipo de funciones se les llama procedimiento. Pueden incluirse una o mas sentencias devolver en una Programacin Digital I 27/05/05 misma funcin.
Recordar.
Cuando se llama a una funcin desde alguna parte especfica del programa, se ejecutan sus sentencias. Una vez ejecutada la funcin completa, se devuelve el control a la parte del programa desde donde se realiz la llamada. Generalmente una funcin devuelve un slo valor, aunque se pueden escribir funciones que no devuelven ningn valor o que devuelven varios valores.
27/05/05
Programacin Digital I
tipo_resultado: entero nombre_funcin: cuadrado lista_parmetros_formales: e de tipo entero Declaracin_variables_locales: No hay variables locales devolver: resultado de la evaluacin de la expresin e * e
27/05/05
Programacin Digital I
tipo_resultado: entero nombre_funcin: mayor lista_parmetros_formales: x de tipo entero, y de tipo entero y z de tipo entero Declaracin_variables_locales: max de tipo entero devolver: valor de la variable max
Programacin Digital I
10
27/05/05
Programacin Digital I
11
27/05/05
Programacin Digital I
12
fin_procedimiento
27/05/05
Programacin Digital I
13
Llamadas a funciones
Ejemplos:
F = factorial(5); determinado // Funcion de un tipo
F = factorial(a)/factorial(a - b);// Funcion de un tipo determinado if (esBisiesto(anyo) == true) condicin // Dentro de una
27/05/05
Programacin Digital I
14
15
Programacin Digital I
16
27/05/05
Programacin Digital I
17
27/05/05
Programacin Digital I
18
int main ( )
Nombre_funcin
27/05/05
Programacin Digital I
19
27/05/05
Programacin Digital I
21
Sentencia return
Sentencia que devuelve el valor obtenido como resultado de la ejecucin de una funcin. Ejemplo
int cuadrado (int e) { return (e * e); }
27/05/05
Programacin Digital I
22
Funciones en C: Ejemplo 1
Algoritmo
entero funcin mayor (entero x, entero y, entero z) entero max Inicio max = x Si (y > max) entonces max = y fin_si Si (z > max) max = z fin_si devolver max fin_funcin
Codicacin
int mayor (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return (max); }
27/05/05
Programacin Digital I
23
Funciones en C Ejemplo 2
Codicacin
// Funcion factorial long int factorial (int n) { long int f; int i; f = 1; i = 0; while (i < n) { i++; f = f * i; } return (f);
Corrida en fro
Para la llamada x = factorial(5)
i=0, f=1 i=1, f=1 i=2, f=2 i=3, f=6 i=4, f=24 i=5, f=120
27/05/05
Programacin Digital I
24
Funciones en C: Ejemplo 3
#include <stdio.h> int a; // a es global void f1 (int b, int c) { // k es local int k; k = b * b; printf(k = %i\n, k); a = k + c; // a es global printf(a = %i\n, a); }
// b y c diferentes a las de // f1 void f2 (int b, int c) { int k; // k local diferente // a la de f1 k = b + 2; printf(k = %i\n, k); a = k * a * c; // a global printf(a = %i\n, a); } void main () { f1(1,2); a++; f2(3,4); }
25
27/05/05
Programacin Digital I
Funciones en C: Ejemplo 4
// Calcular los cuadrados de los enteros del 1 al 10
#include <stdio.h> int cuadrado (int e) { return (e * e); } void main () { int x; for (x = 1; x <= 10; x++) printf(%i,cuadrado(x)); }
27/05/05
Programacin Digital I
26
Funciones en C: Ejemplo 5
// Convertir un caracter en minuscula a // mayuscula #include <stdio.h> #include <ctype.h> int minusc_mayusc (int c1) { int c2; c2 = toupper(c1); return (c2); } void main () { int may, min, x; for (x = 1; x <= 10; x++) { printf(Introduzca una letra minuscula\n); scanf(%i,&min); may = minusc_mayusc(min); printf(%c\n,may); } }
27/05/05 Programacin Digital I 27
Prototipos de funciones en C
En los ejemplos descritos anteriormente, las funciones definidas por el programador siempre han precedido a la funcin main. Cuando la funcin main precede a las funciones definidas por el programador se utilizan prototipos.
<tipo_funcin> <nombre_funcin> (tipo_param_1, , tipo_param_n);
27/05/05
Programacin Digital I
28
Funciones en C: Ejemplo 1
#include <stdio.h> void bar(); // Prototipo // de la funcion bar void foo(); // Prototipo de la // funcion foo int gMiVar = 10; // gMiVar es global int main() { // Llamada a una funcion // dentro de otra foo(); return 0; void bar() { printf("gMiVar = %i", gMiVar); } void foo() { // Llamada a una funcion dentro // de otra bar(); }
27/05/05
Programacin Digital I
29
Funciones en C: Ejemplo 2
#include <stdio.h> void bar(int p) { printf("p = %i", p); } void foo() { // Llamada a una funcion dentro // de otra bar(); } void main( ) { int miVar = 10; // Llamada a una funcion // dentro de otra } bar(miVar);
30
27/05/05
Programacin Digital I
Ejercicios
Explicar el significado de cada uno de los siguientes prototipos de funciones:
int f(int); double f1(double, int); char f2(void)
Escribir una llamada a apropiada para cada una de las siguientes funciones:
float formula(float x) { float y; y = 3 * x - 1; return (y); } } void escribir(int a, int b) { int c; c = sqrt(a * a + b * b); cout << c = << c << end;
27/05/05
Programacin Digital I
31
Ejercicios
Escribir una funcin (algoritmo y codificacin) que reciba como parmetro un nmero y devuelva como resultado un valor de tipo lgico que indique si el nmero es o no par. Escribir una funcin (algoritmo y codificacin) que reciba como parmetro dos nmeros y devuelva como resultado un valor de tipo lgico que indique si el primer nmero es mltiple del segundo. Utilizando la funcin factorial, escribir una funcin (algoritmo y codificacin) que calcule el nmero combinatorio dado por la n! frmula siguiente:
m! x (n - m)!
27/05/05
Programacin Digital I
32
Ejercicios
Escribir una funcin (algoritmo y codificacin) que reciba los valores de x y n como parmetros de entrada y devuelva el valor de xn como salida. Escribir una funcin (algoritmo y codificacin) que imprima la pirmide 1 121 12321 1234321 La declaracin de la funcin ser la siguiente:
void piramide (int niveles)
Ejercicios
Escribir una funcin de nombre Siguiente tal que, recibiendo un nmero primo mayor que uno, devuelva el nmero primo inmediatamente siguiente y superior a dicho nmero primo. Por ejemplo, si se invoca siguiente(7), la funcin devolver el nmero 11. Escriba una funcin que reciba como parmetros las dos coordenadas cartesianas (x, y) de un punto del plano y devuelva como resultado un nmero del 1 al 4 que indique el cuadrante al cual pertenece al punto (no considere los ejes de coordenadas). Escribir una funcin que reciba como parmetros de entrada dos instantes de tiempo expresados en horas, minutos y segundos y devuelva como resultado un 1 o un 2segn el Programacin Digital 27/05/05 primer instante de tiempo sea anteriorI al segundo o viceversa.
34
Ejercicios
Sea el siguiente programa incompleto:
#include <stdio.h> void main (void) { int x1, x2, suma; printf(Introduce dos valores: \n); scanf(%i%i,&x1,x2); suma = suma_intervalo (x1, x2); printf(La suma de los valores del intervalo es: %i, suma); }
27/05/05
Completar el programa escribiendo la funcin suma_intervalo que calcula la suma de todos los nmeros enteros comprendidos entre los dos parmetros de entrada, ambos inclusive.
Programacin Digital I
35
Ejercicios
Escribir una funcin
void maxmin (int x1, int x2, Pint max, Pint min);
que reciba como parmetros de entrada dos nmeros enteros x1 y x2 y devuelva a travs de los parmetros de salida max y min el mximo y el mnimo, respectivamente, de ambos nmeros. Modificar la funcin anterior para que calcule tambin el valor medio de ambos nmeros. El nuevo prototipo de la funcin ser ahora el siguiente:
void maxmin (int x1, int x2, Pint max, Pint min, Pint media);
que reciba como parmetro de entrada un carcter y devuelva un valor lgico true si dicho carcter es una letra del alfabeto, y false en caso contrario.
27/05/05 Programacin Digital I 36