Sie sind auf Seite 1von 3

PRACTICADEFUNCIONES

Comobienoshanexplicadoyaenclasedeteora,losmdulospuedencontenertodotipode
elementos del lenguaje: declaraciones de variables, constantes, estructuras, procedimientos,
etc.
Losprocedimientosayudanasimplificarymodularizarelcdigo:
Dividiendoentrozosmspequeosymanejables
Dividiendounprogramaenunconjuntodetareaslgicas
Especificandounatareaquesenecesitaenrepetidasocasiones
Unprocedimientoesunbloquedeinstruccionesincluidoentreunainstruccindedeclaracin
deltipoSUBoFUNCTIONyunadeclaracinENDSUBoENDFUNCTION.
LostiposdeprocedimientosenVBson:
Function:procedimientosquedevuelvenunvaloralserinvocados
o P.e. solucion = area ( x, y) (siendo la funcin que se invoca area la cual
devuelveunvalorqueseasignaalavariablesolucion
o P.e.. dato = Inputbox(Dame un valor entero) (la funcin es Inputbox y
devuelveunvalorquesealmacenaenlavbledato
Sub:procedimientosquenodevuelvenningnvalor
o P.e.Randomize()(sirveparamoverelbombodenaleatorios)
o P.e. ejercicio4_3_1() (es un procedimiento que permite hacer el ejercicio
4_3_1)
Todoprocedimiento(seadeltipoSUBoFUNCTION)puedepasrselevalores(ovariablescon
datos)parautilizarendichocdigo,peroslolosdeltipoFUNCTIONpuedendevolverunvalor
ensuinvocacin.
Algo a tener en cuenta al trabajar con los procedimientos anteriores es el mbito de las
variables, puesto que cuando se declara una variable es nicamente conocida dentro del
procedimiento que se declara (a excepcin de las que se declaran en el mbito del Module,
prcticanoaconsejableparahacerquelosprocedimientosseanlosmsgeneralesposiblesy
nodependandevariablesespecficasdelprogramadondesecrean).
Porlodichoantesexistelaposibilidaddequelosvalores(variables)queselepasanadichos
procedimientossepuedanmodificarenellosaunsiendovariableslocales,esdecir,declaradas
enprocedimientosajenosalosquesetrabaja.Esdecir,cuandosedefineunprocedimientoen
ladeclaracindequevariablesselepuedenpasar(omsbienqutipodedatorecibirn),se
debeespecificareltrminoByVal(pordefectosinoseponenada)oByRefparadiferenciar
sisetrabajadirectamenteconlavariablequeselepasaosecreaunacopianueva.
Lasdefinicionesdelosprocedimientosseran:
Sub[nombre]([parmetros])
o P.e.Subarea(Byvalvasinteger,Byvalzasinteger)
Function[nombre]([parmetros])as[tipo]
o P.e.Functionarea(Byvalvasinteger,Byvalzasinteger)asDouble

EJEMPLO 1. Se piden 4 datos positivos>0 y se almacenan en un vector. Despus se


implementa un procedimiento que calcula el elemento mayor del vector y una funcin que
devuelvalaposicindelelementomayor.
Modulefunciones
Submain()
Dimdatos(3)AsInteger

Fori=0ToUBound(datos)
do
datos(i)=InputBox("dameelvalor("&i&")")

ifdatos(i)<=0then

msgbox(ERROR:Datos>0)

endif

loopuntildatos(i)>0
Next

hallar_mayor(datos)procedimientoquenodevuelvenada
MsgBox("laposicindelelementomayores:"&posicion_mayor(datos))
EndSub
Subhallar_mayor(ByValvalores()AsInteger)
DimmaximoAsIntegervblelocalenesteprocedimiento
maximo=valores(0)matrizqueesunacopiadelaoriginaldatos
Fori=0ToUBound(valores)
Ifmaximo<valores(i)Then
maximo=valores(i)
EndIf
Next
MsgBox("Elvalormayordelvectores:"&maximo)visualizamosalusuarioelmayor
EndSub
Functionposicion_mayor(ByValvalores()AsInteger)AsInteger
Dimmaximo,posicionAsInteger
maximo=valores(0)
Fori=0ToUBound(valores)
Ifmaximo<valores(i)Then
maximo=valores(i)estalneanohacefalta
posicion=i
EndIf
Next
Returnposiciondevolvemoslavariablequecontienelaposicindelelementomayor
EndFunction
EndModule

a) Modificarelprogramaparaquelesolicitealusuarioeltamaodelvectorylocree.
b) Que hara falta modificar si queremos que a la funcin posicion_mayor se le pase
tambinelvalormayorqueseobtuvoenelprocedimientohallar_mayor
c) Visualizarelvalorparmsgrandedelvectorysuposicinenl.Paraellocrearuna
funcinqueselepaseelvectorqueintroduceelusuarioydevuelvaenunstringelpar
ms grande y su posicin. P.e. Mensaje a mostrar El par ms grande es y su
posicines

EJEMPLO 2. Solicitar al usuario un valor entero positivo. A continuacin debe hacer los
siguientesclculosymostrarlosenesteorden:

1.Visualizarsiesparoimparyencasodeserimpar,indicarsiesprimo.
2.Visualizarelsumatorio(elegir1imparesoo2pares)
3.Visualizarelfactorialdelnmero
4.Almacenarenunvector:

Posicin(0).elvalordelusuario

Posicin(1).Par(0),Impar(1)yPrimo(2)

Posicin(2).elvalordelsumatorio

Posicin(3).elvalordelfactorial
5.Visualizartodoslosdatosalavez

Modulefunciones_ej2
Submain()
DimdatoAsInteger'vbleparaguardareldatodelusuario
DimelegirAsByte'vblequeguardaopcinsumatorio1impar,2paro0Todo
Dimvector(3)AsLong'vbleparaalmacenartodoslosdatos
'vector(0).elvalordelusuario
'vector(1).Par(0),Impar(1)yPrimo(2)
'vector(2).elvalordelsumatorio
'vector(3).elvalordelfactorial
Do
dato=InputBox("Dameunvalorpositivo>0")
Ifdato<=0Then
MsgBox("Error.Datonovlido")
EndIf
LoopUntildato>0
'Visualizarsiespar,imparoprimo
MsgBox("Eldatointroducidoes:"&par_impar_primo(dato))
'Visualizarelsumatorio
Do
elegir=InputBox("Sumatoriodepares(2),impares(1)oSumatoriototal(0)")
Ifelegir<0Orelegir>2Then
MsgBox("Error.Datonovlido")
EndIf
LoopUntilelegir>=0Andelegir<=2
MsgBox("Elsumatoriodeimparesdelnmeroes:"&sumatorio(dato,elegir))
'Visualizarelfactorial
MsgBox("Elfactorialdelnmeroes:"&factorial(dato))
'Almacenardatosanterioresenelvector

(faltacompletarelcdigo)
'Visualizartodoslosdatosalavez
MsgBox("Losdatoscalculadosson:"&vbCrLf&datos_juntos(vector))
EndSub
Functionpar_impar_primo(valorAsInteger)AsString
EndFunction
Functionsumatorio(valorAsInteger,par_impar_todoAsByte)AsInteger
EndFunction
Functionfactorial(valorAsInteger)AsLong
EndFunction
Functiondatos_juntos(vector()Aslong)AsString
EndFunction
EndModule

Pararealizardichosclculossedeberimplementarelcdigodelasiguientemanera:

Par,imparoprimo.implementarunafuncinqueselepasecomoparmetroelvalor
delusuarioydevuelvaenunstringlapalabraPARIMPARoPRIMO
Sumatorio. Implementar una funcin que se le pasen dos parmetros: el valor del
usuarioytipodesumatorio(Par2,impar2ototal0)ydevuelvedichasuma.
Factorial. Implementar una funcin que se le pase como parmetro el valor del
usuarioydevuelvaelfactorialdelnmero
Visualizartodoslosdatosalavez.implementarunafuncinque selepaseelvector
creadoconlosvaloresydevuelvaenunstringlosdatosjuntosseparadorporVbtab