You are on page 1of 7

FUNDAMENTOS DE PROGRAMACION

Procedimientos y funciones
En los programas que hemos hecho hasta ahora too el c!"go se encuentra en el
programa pr"nc"pal #a part"r el main$% Esta estrateg"a resulta pro&lem't"ca cuano
tenemos programas granes( porque al encontrarse too el c!"go en el programa
pr"nc"pal es m's ")*c"l e entener( etectar errores( hacer mo")"cac"ones( etc%
Toos los lengua+es e programac"!n t"enen alg,n mecan"smo que perm"te e)"n"r
&loques e c!"go que se escr"&en aparte el programa pr"nc"pal% Caa &loque real"-a
una c"erta operac"!n con ent"a l!g"ca #por e+emplo( orenar un .ector( o escr"&"r unos
atos en pantalla$( / el programa pr"nc"pal act".a los &loques e c!"go cuano neces"ta
real"-ar esas operac"ones%
Organ"-ar los programas usano &loques hace que el c!"go est0 me+or organ"-ao / sea
m's )'c"l e entener #/ por tanto( e mantener$% Incluso en algunas ocas"ones( el
programa pr"nc"pal act".a un m"smo &loques .ar"as .eces( con lo cual( aunque el c!"go
e+ecuta .ar"as .eces( s!lo ha/ que escr"&"rlo una .e-%
Las funciones en C
En lengua+e C( los &loques se llaman )unc"ones% 1eamos un e+emplo e una )unc"!n /
c!mo se usa%
2
/*Programa 66*/
#include <stdio.h>
#include <conio.h>
//funcion maximo
int maximo (int x, int y)

if (x>y )
return x !
else
return y !
"!
int main ()

int a,#!
int max!
$rintf (%&scri#e los numeros'(n%)!
scanf (%)d )d%,*a,*#)!
max + maximo (a,#)!
$rintf (%&l maximo es )d(n%,max)!

getch()!
return ,!
"
/*Programa 6-*/
#include <stdio.h>
#include <conio.h>
int main ()

int a,#!
int max!
$rintf (%&scri#e los numeros'(n%)!
scanf (%)d )d%,*a,*#)!
if (a>#)
max + a!
else
max + #!
$rintf (%&l maximo es )d(n%,max)!

getch()!
return ,!
"
FUNDAMENTOS DE PROGRAMACION
El cuaro e la "-qu"era muestra el programa or"g"nal( s"n )unc"ones% Too el c!"go
est' en el programa pr"nc"pal% El cuaro e la erecha muestra el programa que usa una
)unc"!n% 3a )unc"!n se llama maximo / se escr"&e antes el programa pr"nc"pal%
3a )unc"!n retorna como resultao el m'4"mo e os .alores enteros% 3a pr"mera l*nea
e la )unc"!n es lo que llamamos cabecera o prototipo de la funcin% En esa l*nea( e
"-qu"era a erecha( lo pr"mero que se "n"ca es que el resultao e la )unc"!n ser' un
n,mero entero% Despu0s ."ene el nom&re e la )unc"!n #en este caso maximo$%
F"nalmente ."ene una l"sta e parmetros formales( que nos "n"ca qu0 t"pos e atos
neces"ta la )unc"!n para real"-ar la tarea as"gnaa% En este caso( la )unc"!n t"ene os
par'metros que son n,meros enteros%
Despu0s e la ca&ecera ."ene el cuerpo e la )unc"!n( en el que se espec")"ca las
operac"ones que ha/ que real"-ar con los atos que se rec"&en como par'metros para
calcular el resultao% 3a sentenc"a return "n"ca que la )unc"!n se term"na en ese
momento / el resultao e la )unc"!n es el .alor que se espec")"ca a la erecha e la
pala&ra return%
En el programa pr"nc"pal( para e+ecutar la )unc"!n lo ,n"co que tenemos que hacer es
escr"&"r el nom&re e la )unc"!n / entre par0ntes"s los .alores que queremos pasarle a la
)unc"!n como par'metros #los enom"namos parmetros reales$% En este caso( pasamos
a la )unc"!n los n,meros enteros conten"os en las .ar"a&les a / # el programa
pr"nc"pal% Puesto que estamos llamano a una )unc"!n( e&emos espec")"car tam&"0n qu0
ha/ que hacer con el resultao e la )unc"!n% En este caso( "n"camos que el resultao e
la )unc"!n se almacena en la .ar"a&le max%
E+erc"c"o5 Programa 67
Escr"&e un programa pr"nc"pal que use la )unc"!n maximo para calcular el ma/or e 8
n,meros enteros( usano el menor n,mero pos"&le e sentenc"as%
9
FUNDAMENTOS DE PROGRAMACION
Procedimientos
A .eces es necesar"o real"-ar una tarea que no prouce n"ng,n resultao% Esa tarea
tam&"0n se puee escr"&"r en )orma e &loque( pero en ese caso( en .e- e llamarla
)unc"!n la llamamos proce"m"ento% F*+ate en el s"gu"ente e+emplo%
En ese e+emplo se ha e)"n"o un proce"m"ento que se llama escribir( que t"ene un
par'metro )ormal e t"po entero% 3o ,n"co que hace el proce"m"ento es escr"&"r el .alor
el par'metro en la pantalla% Puesto que es un proce"m"ento no retorna n"ng,n .alor
#no usa la sentenc"a return$% 3a pr"mera pala&ra e la ca&ecera el proce"m"ento es
.oid% Por ,lt"mo( el programa pr"nc"pal no t"ene que hacer naa con el resultao el
proce"m"ento( porque no ha/ resultao% Por eso( para llamar al proce"m"ento
s"mplemente se escr"&e el nom&re segu"o e la l"sta e par'metros reales%
:
/*Programa 6/...*/
#include <stdio.h>
#include <conio.h>
//funcion maximo
int maximo (int x, int y)

if (x>y )
return x !
else
return y !
"!
//funci0n escri#ir
.oid escri#ir (int r)

$rintf (%&l resultado es )d(n%,r)!


"!
//funcion $rinci$al
int main ()

int a,#!
int max!
$rintf (%&scri#e los numeros'(n%)!
scanf (%)d )d%,*a,*#)!
max + maximo (a,#)!
escri#ir (max)!

getch()!
return ,!
"
FUNDAMENTOS DE PROGRAMACION
Las variables locales
Normalmente( una )unc"!n #o un proce"m"ento$ hace tareas m's comple+as que las que
hace la )unc"!n maximo% Para real"-ar esas tareas la )unc"!n neces"tar' algunas
.ar"a&les e apo/o( que llamaremos .ar"a&les locales% 3as .ar"a&les locales se crean en
el momento en que se act".a la )unc"!n( / esaparecen en el momento en que la )unc"!n
term"na% 1eamos un e+emplo%
3a )unc"!n suma1d calcula la suma e los *g"tos el n,mero entero que rec"&e como
par'metro% Para ello neces"ta las .ar"a&les locales d / suma%
8
/*Programa 62...*/
#include <stdio.h>
#include <conio.h>
//funcion suma1d
int suma1d (int x)

int d, suma!
suma+,!
d + x)3,!
4hile (x >,)

suma + suma 5 d!
x + x/3,!
d + x)3,!
"
return suma!
"!
//funcion $rinci$al
int main ()

int a!
$rintf (%&scri#e el numero'(n%)!
scanf (%)d%,*a)!
$rintf (%6a suma de digitos es )d(n%,suma1d(a))!
getch()!
return ,!
"
FUNDAMENTOS DE PROGRAMACION
Funciones que llaman a otras
1eamos ahora un e+emplo m's comple+o% En la s"gu"ente )"gura tenemos la )unc"!n
es1$rimo( que "n"ca s" el entero que rec"&e como par'metros es pr"mo o no% F*+ate
que la )unc"!n retorna un entero5 true #o lo que es lo m"smo( un 2$ s" el n,mero es
pr"mo( o false #o lo que es lo m"smo( un ;$ s" el n,mero no es pr"mo%
<
*Programa 7,...*/
#include <stdio.h>
#include <conio.h>
//funcion $rimo
int es1$rimo (int x)

int i, encontrado!
i+3!
encontrado + false!
4hile ((i < x) ** 8encontrado)

if ((x)i) ++ ,)
encontrado + true!
if (8encontrado)
i+i53!
"!
if (8encontrado)
return true!
else
return false!
" !
//funcion suma1$rimos
int suma1$rimos (int .ector93,:)

int i, suma!
for (i+,! i<3,! i55)
if (es1$rimo (.ector9i:))
suma + suma5.ector9i:!
return suma!
"!
//funcion $rinci$al
int main ()

int i!
int .93,:!
for (i+,! i<3,! i55)

$rintf (%&scri#e el numero'(n%)!


scanf (%)d%,*.9i:)!
"!
$rintf (%6a suma de $rimos es )d(n%,suma1$rimos(.))!
getch()!
return ,!
FUNDAMENTOS DE PROGRAMACION
Por otra parte( la )unc"!n suma1$rimos calcula la suma e los n,meros pr"mos que
ha/ en el .ector que rec"&e como par'metro% Para ello( usa la )unc"!n es1$rimo%
Por ,lt"mo( el programa pr"nc"pal lee e teclao un .ector e n,meros( / calcula la suma
e los que son pr"mos( usano la )unc"!n suma1$rimos%
1. Pon en funcionamiento este programa. Comprobars que NO funciona bien. En realidad
tiene dos errores muy tontos. usca y corrige esos errores.
Este e+emplo nos muestra5
2% =ue una )unc"!n puee llamar a otras
9% C!mo tra&a+ar con )unc"ones que retornan .eraero o )also
:% Como tra&a+ar con )unc"ones que rec"&en .ectores como par'metro
E!ercicios
>?programa 72@?>
Dao el s"gu"ente programa en C5
int funcio3(int ;3, int ;<)

int #!
if (;3 ++ ;<)
#+;35;<!
else
#+;3*;<!
$rintf(=#+)d(n>,#)!
return #!
"
.oid main()

int a,#,c!
a+ 3,!
#+ 3<!
c+ funcio3(a,#)!
$rintf(=a+)d #+)d c+)d(n>,a,#,c)!
a+ funcio3(3<,#)!
$rintf(=a+)d #+)d c+)d(n>,a,#,c)!
"
Aa- el segu"m"ento el programa / eterm"na qu0 es lo que "mpr"m"r' por pantalla%
6
FUNDAMENTOS DE PROGRAMACION
/*programa 72 */
Ejercicio 2: Escr"&e una )unc"!n llamaa media< que rec"&a os reales / e.uel.a el
real que representa la me"a ar"tm0t"ca e am&os n,meros% Escr"&e luego un programa
ut"l"-ano la )unc"!n el e+erc"c"o anter"or que lea os reales por teclao / e.uel.a la
me"a ar"tm0t"ca e am&os%
>?programa 7:@%?>
Ejercicio 3: Escr"&e un proce"m"ento que escr"&a en pantalla los n pr"meros n,meros
pr"mos% El proce"m"ento rec"&e n como par'metro% Constru/e una )unc"!n para .er s"
un n,mero es pr"mo o no( / usa esa )unc"!n para constru"r el proce"m"ento%
>?programa 78 @%?>
Ejercicio 4: Escr"&e una )unc"!n que rec"&a un n,mero como par'metro / e.uel.a el
n,mero que se o&t"ene al "n.ert"r el oren e los *g"tos el n,mero or"g"nal% Por
e+emplo( s" la )unc"!n rec"&e el n,mero :<6 e.ol.er' el n,mero 6<:%
7

You might also like