0% encontró este documento útil (0 votos)
89 vistas10 páginas

UdeMM Subprogramas

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1/ 10

UdeMM Docente:

Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras


Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
Subprogramas usando Visual C++
Los subprogramas pueden ser:
Procedimientos (void, que no devuelve ningn valor).
Funciones del programador (tipo y return, ya que devuelven un solo valor).
Funciones de biblioteca, que las provee el lenguaje C.
Funciones !P", que las provee #indo$s.
%eremos los dos primeros tipos de subprogramas: los procedimientos y &unciones del
programador.
!dem's del (ec(o que una &unci)n devuelve un valor y los procedimientos ninguno,
en los dos casos mencionados anteriormente, podemos trabajar con variables globales
con las que compartiremos valores entre distintos subprogramas (lo veremos m's
adelante).
%entajas del uso de los subprogramas:
*irven para trabajar en grupo.
*e trabaja con m)dulos.
+'s &'cil de encontrar el error.
,l c)digo es reutili-able.
Programas m's cortos.
Programas m's entendibles.
P'gina .
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
%eremos un ejemplo:
// programa principal que llama a un subprograma que
// calcule el cuadrado y llamamos a una funcin que
// calcula la hipotenusa
#include "stdafx.h"
#include "Math.h"
//este es el prototipo de la funcin cuadrado
//el prototipo puede ser lo mismo que aparece al principio
//de la funcin, pero terminando con un punto y coma
int cuadrado(int z);
//no es necesario en el prototipo ponerle la ariable,
//sino, con el tipo basta
//por e!emplo"
//int cuadrado#int$;
oid main #oid$ %
int x,y;
float hipotenusa;
printf#"ingrese x e y "$;
scanf #"&i &i",'x,'y$;
//llamamos ( eces a la funcin cuadrado,
//pero con distintos argumentos"
//la primera ez con x y la segunda con y
hipotenusa ) sqrt# cuadrado(x) * cuadrado(y) $;
printf#"+n,ados"+nx ) &i+ny ) &i", x, y$;
printf#"+n -ipotenusa ) &.(f+n", hipotenusa$;
.
int cuadrado#int z$%
///sta es una funcin
//antes del nombre del par0metro #tambi1n llamado
//argumento$ anteponemos un tipo, que nuestro
//e!emplo es int, el que se hace equialente al
//alor eniado, que en nuestro e!emplo es x
//y luego y.
int cua;
cua)z2z;
//3a funcin debe retornar un alor.
return cua;
.
La &unci)n puede ser simpli&icada de la siguiente manera
int cuadrado#int z$%
return z2z;
.
P'gina /
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
*i el programa 0main1 est' al &inal de todos los subprogramas, no son necesarios los
prototipos.
,l siguiente ejemplo es el mismo programa que el anterior, sin prototipo, pero los
subprogramas est'n antes que el programa principal (0main1).

#include "stdafx.h"
#include "Math.h"
int cuadrado(int z)%
int cua;
cua)z2z;
return cua;
.
oid main #oid$ %
int x,y;
float hipotenusa;
printf#"ingrese x e y "$;
scanf #"&i &i",'x,'y$;
hipotenusa ) sqrt# cuadrado(x) * cuadrado(y) $;
printf#"+n,ados"+nx ) &i+ny ) &i", x, y$;
printf#"+n -ipotenusa ) &.(f+n", hipotenusa$;
.
P'gina 2
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
,jemplo de una &unci)n adentro de otra.
// /l programa principal llama a una funcin que
// calcula la hipotenusa
// y este a su ez a uno que calcula el cuadrado
#include "stdafx.h"
#include "Math.h"
int cuadrado(int z); //prototipo
float hipo(int h, int i); //prototipo
oid main #oid$ %
int x,y;
int a,b;
float hipotenusa;
printf#"ingrese x e y "$;
scanf #"&i &i",'x,'y$;
a ) cuadrado(x);
b ) cuadrado(y);
hipotenusa ) hipo(x, y);
printf#"+nel cuadrado de x es"+nx ) &i+ny ) &i", a, b$;
printf#"+n-ipotenusa ) &.(f+n", hipotenusa$;
.
int cuadrado(int z)%
return z2z;
.
float hipo#int h, int i$%
float hipotenusa;
hipotenusa ) sqrt# cuadrado(h) * cuadrado(i) $;
return hipotenusa;
.
P'gina 3
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
Variables globales y locales
4na variable global es usada por los distintos subprogramas y mantiene su valor.
4na variable local es una variable de&inida dentro de un subprograma, y tendr' vida y
valores solamente dentro de ese subprograma.
*i (ubiera una variable local con el mismo nombre que una variable global, realmente
son dos variables di&erentes, por m's que tengan el mismo nombre.
,jemplo de variables globales:
///l programa principal llama a una funcin que calcula la
//hipotenusa y este a su ez a uno que calcula el cuadrado
#include "stdafx.h"
#include "Math.h"
float hipo(); //prototipo
int cuadrado(int z); //prototipo
//definimos a x e y como ariables globales
int x ,y ;
oid main# oid $ %
float h;
printf# "ingrese x e y " $;
scanf # "&i &i", 'x, 'y $;
h ) hipo();
printf# "+n-ipotenusa ) &.(f+n", h $;
.
int cuadrado( int z )%
return z2z;
.
float hipo()%
float hipotenusa;
hipotenusa ) sqrt# cuadrado(x) * cuadrado(y) $;
return hipotenusa;
.
5Cuales son las variables globales y cuales son las locales6
Las variables globales son x e y.
La variable local del main es h.
7o (ay variables locales en la &unci)n cuadrado, ya que z es un par'metro o
argumento.
La variable local de la &unci)n hipo es hipotenusa.
P'gina 8
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
,jercicio:
,n el siguiente programa ingresamos dos valores pero nos devuelve un valor que no
corresponde.
Por ejemplo ingresamos 2 y 3 y no devuelve 8.
9escubra el error y justi&:quelo
,n la siguiente p'gina encontrara la respuesta.
#include "stdafx.h"
#include "Math.h"
float hipo();
int cuadrado(int z);
//definimos a x e y como ariables globales
int x ,y ;
oid main #oid$ %
float hipotenusa;
printf#"ingrese x e y "$;
scanf #"&i &i",'x,'y$;
hipotenusa ) hipo();
printf#"+n-ipotenusa ) &.(f+n", hipotenusa$;
.
int cuadrado(int z)%
return z2z;
.
float hipo()%
int x, y;
float hipotenusa;
hipotenusa ) sqrt# cuadrado(x) * cuadrado(y) $;
return hipotenusa;
.
P'gina ;
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
<espuesta del ejercicio de la p'gina anterior.
,l error es que las variables x e y (an sido de&inidas como variables globales y dentro
de la &unci)n 0(ipo1 (an vuelto a ser de&inidas, pero en este caso como variables
locales a esta &unci)n.
Cuando se lo invoca, se usan las variables locales, y como no se le asignaron valores
tienen asignado 0basura1, por lo que vemos un valor e=tra>o.
,n otras versiones de C++, como por ejemplo Visual C++, este programa no compila
porque nos da un error.
P'gina ?
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
@tro ejemplo:
,sta ve- usaremos una matriz global.
,l enunciado del ejercicio es: ingrese n valores y mustrelos en forma contraria al
orden ingresado (los primeros sern los ltimos), o LIFO (Last In First Out).
La variable n se ingresa desde la &unci)n 0fLeoN1.
La matri- se carga desde el procedimiento 0proCarga1.
La salida se e&ectua desde el procedimiento 0proLIFO1.
#include "stdafx.h"
#include "Math.h"
int fLeoN#$;
oid proCarga#int$;
oid proLIFO#int$;
//definimos una matriz global sobredimensionada
int mat!""#;
oid main #oid$ %
int n;
n ) fLeoN#$;
proCarga#n$;
proLIFO#n$;
.
int fLeoN#$ %
int z;
printf#"4ngrese 5" "$;
scanf#"&i",'z$;
return z;
.
oid proCarga#int n$%
int i;
for#i)6;i7n;i**$%
printf#"+n4ngrese un alor para la posicion &i" ",i*8$;
scanf#"&i",'mat9i:$;
.
.
oid proLIFO#int n$%
int i;
for# i)n;8 ; i<)6 ; i;; $%
printf#"+n&i",mat9i:$;
.
printf#"+n"$;
.
P'gina A
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
@bserve que vemos listados los subprogramas.
P'gina B
UdeMM Docente:
Universidad de la Marina Mercante Mg. Prof. Carlos Desmaras
Informtica II / Algoritmos y Estructura de Datos carlosdesmaras@yaoo.com
,n el siguiente ejemplo, pasamos todo un vector a un subprograma, en el que
lo mostraremos por pantalla.
,n otras palabras, el vector esta ve- no va a ser global, sino ser' pasado como
argumento
#include "stdafx.h"
oid procedimiento# int =9: $ ; //>rototipo
oid main #oid$ %
int ector9: ) % 8, (, ?, @ .;
procedimiento# vector $;
.
oid procedimiento# int $# $ %
int i;
for# i)6 ; i7)? ; i** $
printf# "+n>osicion &i" &i", i, =9i: $;
printf# "+n" $;
.
Pasamos al procedimiento el vector llamado 0vector1, y lo recibimos en el
subprograma como 0$#1.
@bserve que a 0$#1 no se le especi&ica la dimensi)n.
La salida es:
8
(
?
@
P'gina .C

También podría gustarte