Professional Documents
Culture Documents
JavaScript, al igual que Flash, Visual Basic Script, es una de las mltiples maneras que han
surgido para extender las capacidades del lenguaje HTML (lenguaje para el diseo de pginas de
Internet). Al ser la ms sencilla, es por el momento la ms extendida. JavaScript no es un lenguaje
de programacin propiamente dicho como C, C++, Delphi, etc. Es un lenguaje script u orientado a
documento, como pueden ser los lenguajes de macros que tienen muchos procesadores de texto y
planillas de clculo. No se puede desarrollar un programa con JavaScript que se ejecute fuera de
un Navegador.
JavaScript es un lenguaje interpretado que se embebe en una pgina web HTML. Un lenguaje
interpretado significa que a las instrucciones las analiza y procesa el navegador en el momento
que deben ser ejecutadas.
Nuestro primer programa ser el famoso "Hola Mundo", es decir un programa que muestre en el
documento HTML el mensaje "Hola Mundo".
<html>
<head>
</head>
<body>
<script language="javascript">
document.write('Hola Mundo');
</script>
</body>
</html>
El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad
languaje con la cadena javascript:
<script language="javascript">
</script>
Para imprimir caracteres sobre la pgina debemos llamar al comando 'write' del objeto document.
La informacin a imprimirse debe ir entre comillas y encerrada entre parntesis. Todo lo que
indicamos entre comillas aparecer tal cual dentro de la pgina HTML.
Es decir, si pedimos al navegador que ejecute esta pgina mostrar el texto 'Hola Mundo'.
Cada vez que escribimos una instruccin finalizamos con el caracter punto y coma.
ES IMPORTANTISIMO TENER EN CUENTA QUE JavaScript es SENSIBLE A MAYUSCULAS Y
MINUSCULAS. NO ES LO MISMO ESCRIBIR:
document.write que DOCUMENT.WRITE (la primera forma es la correcta, la segunda forma
provoca un error de sintaxis).
Nos acostumbraremos a prestar atencin cada vez que escribamos en minsculas o maysculas
para no cometer errores sintcticos. Ya veremos que los nombres de funciones llevan letras en
maysculas.
PROBLEMAS PROPUESTOS
Realizar un programa que muestre su nombre y su edad en una pgina HTML.
Emplear el comando write del objeto document para imprimir.
Tener en cuenta que si queremos que cada dato quede en una fila distinta de la pgina debemos
insertar la marca <br> (salto de linea en HTML), es decir debemos disponer: document.write('<br>')
02. Variables.
Una variable es un depsito donde hay un valor. Consta de un nombre y pertenece a un tipo
(nmerico, cadena de caracteres, etc.).
Tipos de variable:
Una variable puede almacenar:
Valores Enteros (100, 260, etc.)
Valores Reales (1.24, 2.90, 5.00, etc.)
Cadenas de caracteres ("Juan", "Compras", "Listado", etc.)
Valores lgicos (true,false)
Existen otros tipos de variables que veremos ms adelante.
Las variables son nombres que ponemos a los lugares donde almacenamos la informacin. En
JavaScript, deben comenzar por una letra o un subrayado (_), pudiendo haber adems dgitos
entre los dems caracteres. Una variable no puede tener el mismo nombre de una palabra clave
del lenguaje.
Una variable se define anteponindole la palabra clave var:
var dia;
se pueden declarar varias variables en una misma lnea:
var dia, mes, anio;
a una variable se la puede definir e inmediatamente inicializarla con un valor:
var edad=20;
o en su defecto en dos pasos:
var edad;
edad=20;
Eleccin del nombre de una variable:
Debemos elegir nombres de variables representativos. En el ejemplo anterior los nombres dia,
mes, anio son lo suficientemente claros para darnos una idea acabada sobre su contenido, una
mala eleccin de nombres hubiera sido llamarlas a,b y c. Podemos darle otros buenos nombres.
Otros no son tan representativos, por ejemplo d, m, a. Posiblemente cuando estemos resolviendo
un problema dicho nombre nos recuerde que almacenamos el dia, pero pasado un tiempo lo
olvidaramos.
Impresin de variables en una pgina HTML.
Para mostrar el contenido de una variable en una pgina utilizamos el objeto document y llamamos
a la funcin write.
En el siguiente ejemplo definimos una serie de variables y las mostramos en la pgina:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var nombre='Juan';
var edad=10;
var altura=1.92;
var casado=false;
document.write(nombre);
document.write('<br>');
document.write(edad);
document.write('<br>');
document.write(altura);
document.write('<br>');
document.write(casado);
</script>
</body>
</html>
Cuando imprimimos una variable, no la debemos disponer entre simples comillas (en caso de
hacer esto, aparecer el nombre de la variable y no su contenido)
Los valores de las variables que almacenan nombres (es decir, son cadenas de caracteres) deben
ir encerradas entre comillas simples. Los valores de las variables enteras (en este ejemplo la
variable edad) y reales no deben ir encerradas entre comillas. Cada instruccin finaliza con un
punto y coma.
Las variables de tipo boolean pueden almacenar solo dos valores: true o false.
El resultado al visualizar la pgina debe ser 4 lneas similares a stas:
Juan
10
1.92
false
Es decir que se muestran los contenidos de las 4 variables. Una variable es de un tipo determinado
cuando le asignamos un valor:
var edad=10;
Es de tipo entera ya que le asignamos un valor entero.
var nombre='juan';
Es de tipo cadena.
Para mostrar el contenido de una variable en una pgina debemos utilizar la funcin 'write' que
pertenece al objeto document. Recordemos que el lenguaje JavaScript es sensible a maysculas y
minsculas y no ser lo mismo si tipeamos:
Document.Write(nombre);
Esto porque no existe el objeto 'Document' sino el objeto 'document' (con d minscula), lo mismo
no existe la funcin 'Write' sino 'write', este es un error muy comn cuando comenzamos a
programar en JavaScript
(Tener en cuenta que para que el navegador IExplorer muestre los mensajes de error debemos ir
a Herramientas --> Opciones de Internet --> pestaa "Opciones Avanzadas" y en la seccin
"Examinar" desmarcar la casilla de "Deshabilitar la depuracin de secuencia de comandos"...) Con
Mozilla FireFox podemos ver los errores luego de producidos mediante Herramientas --> Consola
JavaScript.)
PROBLEMAS PROPUESTOS
Confeccionar una programa en JavaScript que defina e inicialice una variable real donde almacenar
el sueldo de un operario y otra de tipo cadena de caracteres donde almacenaremos el nombre.
Imprimir cada variable en una lnea distinta en pantalla.
Ejemplo de otro algoritmo con estructura secuencial: Realizar la carga de dos nmeros por teclado
e imprimir su suma y su producto:
<html>
<head>
<script language="JavaScript">
var valor1;
var valor2;
valor1=prompt('Ingrese primer nmero:','');
valor2=prompt('Ingrese segundo nmero','');
var suma=parseInt(valor1)+parseInt(valor2);
var producto=valor1*valor2;
document.write('La suma es ');
document.write(suma);
document.write('<br>');
document.write('El producto es ');
document.write(producto);
</script>
</head>
<body>
</body>
</html>
Lo primero que debemos tener en cuenta es que si queremos que el operador + sume los
contenidos de los valores numricos ingresados por teclado, debemos llamar a la funcin parseInt
y pasarle como parmetro las variables valor1 y valor2 sucesivamente. Con esto logramos que el
operador ms, sume las variables como enteros y no como cadenas de caracteres. Si por ejemplo
sumamos 1 + 1 sin utilizar la funcin parseInt el resultado ser 11 en lugar de 2, ya que el operador
+ concatena las dos cadenas.
Cuando empleamos el operador * para el producto, ya no es obligatorio utilizar la funcin parseInt
(es decir, slo para el operador + debemos utilizarla).
En JavaScript, como no podemos indicarle de qu tipo es la variable, requiere mucho ms cuidado
cuando operamos con sus contenidos.
Este problema es secuencial ya que ingresamos dos valores por teclado, luego hacemos dos
operaciones y por ltimo mostramos los resultados.
PROBLEMAS
1 - Realizar la carga del lado de un cuadrado, mostrar por pantalla el permetro del mismo (El
permetro de un cuadrado se calcula multiplicando el valor del lado por cuatro).
2 - Escribir un programa en el cual se ingresen cuatro nmeros, calcular e informar la suma de los
dos primeros y el producto del tercero y el cuarto.
3 - Realizar un programa que lea cuatro valores numricos e informar su suma y producto.
4 - Se debe desarrollar un programa que pida el ingreso del precio de un artculo y la cantidad que
lleva el cliente. Mostrar lo que debe abonar el comprador.
La funcin prompt retorna un string por lo que debemos convertirlo a entero cuando queremos
saber cual de los dos valores es mayor numricamente. En el lenguaje JavaScript una variable
puede ir cambiando el tipo de dato que almacena a lo largo de la ejecucin del programa.
Ms adelante veremos qu sucede cuando preguntamos cul de dos string es mayor.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos
actividades por la rama del verdadero y del falso.
La estructura condicional compuesta tiene la siguiente codificacin:
if (<condicin>)
{
<Instruccion(es)>
}
else
{
<Instruccion(es)>
}
Es igual que la estructura condicional simple salvo que aparece la palabra clave else y
posteriormente un bloque { } con una o varias instrucciones.
Si la condicin del if es verdadera se ejecuta el bloque que aparece despus de la condicin, en
caso que la condicin resulte falsa se ejecuta la instruccin o bloque de instrucciones que
indicamos despus del else.
PROBLEMAS
1 - Realizar un programa que lea por teclado dos nmeros, si el primero es mayor al segundo
informar su suma y diferencia, en caso contrario informar el producto y la divisin del primero
respecto al segundo.
2 - Se ingresan tres notas de un alumno, si el promedio es mayor o igual a 4 mostrar un mensaje
'regular', sino 'reprobado'.
3 - Se ingresa por teclado un nmero positivo de uno o dos dgitos (1..99) mostrar un mensaje
indicando si el nmero tiene uno o dos dgitos (recordar de convertir a entero con parseInt para
preguntar posteriormente por una variable entera).Tener en cuenta qu condicin debe cumplirse
para tener dos dgitos, un nmero entero.
<html>
<head>
</head>
<body>
<script language="javascript">
var nota1,nota2,nota3;
nota1=prompt('Ingrese 1ra. nota:','');
nota2=prompt('Ingrese 2da. nota:','');
nota3=prompt('Ingrese 3ra. nota:','');
//Convertimos los 3 string en enteros
nota1=parseInt(nota1);
nota2=parseInt(nota2);
nota3=parseInt(nota3);
var pro;
pro=(nota1+nota2+nota3)/3;
if (pro>=7)
{
document.write('promocionado');
}
else
{
if (pro>=4)
{
document.write('regular');
}
else
{
document.write('reprobado');
}
}
</script>
</body>
</html>
Analicemos el siguiente programa. Se ingresan tres string por teclado que representan las notas de
un alumno, se transformas a variables enteras y se obtiene el promedio sumando los tres valores y
dividiendo por 3 dicho resultado. Primeramente preguntamos si el promedio es superior o igual a 7,
en caso afirmativo por la rama del verdadero de la estructura condicional mostramos un mensaje
que indique 'Promocionado' (con comillas indicamos un texto que debe imprimirse en pantalla).
En caso que la condicin nos de falso, por la rama del falso aparece otra estructura condicional,
porque todava debemos averiguar si el promedio del alumno es superior/ igual a cuatro o inferior a
cuatro.
Los comentarios en JavaScript los hacemos disponiendo dos barras previas al comentario:
//Convertimos los 3 string en enteros
Si queremos disponer varias lneas de comentarios tenemos como alternativa:
/*
linea de comentario 1.
linea de comentario 2.
etc.
*/
Es decir encerramos el bloque con los caracteres /* */
PROBLEMAS
1 - Se cargan por teclado tres nmeros distintos. Mostrar por pantalla el mayor de ellos.
2 - Se ingresa por teclado un valor entero, mostrar una leyenda que indique si el nmero es
positivo, cero o negativo.
3 - Confeccionar un programa que permita cargar un nmero entero positivo de hasta tres cifras y
muestre un mensaje indicando si tiene 1, 2, 3 cifras. Mostrar un mensaje de error si el nmero de
cifras no es 1, 2 3.
4 - De un postulante a un empleo, que realiz un test de capacitacin, se obtuvo la siguiente
informacin: nombre del postulante, cantidad total de preguntas que se le realizaron y cantidad de
preguntas que contest correctamente. Se pide confeccionar un programa que lea los datos del
postulante e informe el nivel del mismo segn el porcentaje de respuestas correctas que ha
obtenido, y sabiendo que:
Nivel superior: Porcentaje>=90%.
Nivel medio: Porcentaje>=75% y <90%.
Nivel regular: Porcentaje>=50% y <75%.
Fuera de nivel: Porcentaje<50%.
ingrese un valor entre 1 y 5. Luego mostrar en castellano el valor ingresado. Mostrar un mensaje
de error en caso de haber ingresado un valor que no se encuentre en dicho rango.
<html>
<head>
</head>
<body>
<script language="javascript">
var valor;
valor=prompt('Ingrese un valor comprendido entre 1 y 5:','');
//Convertimos a entero
valor=parseInt(valor);
switch (valor) {
case 1: document.write('uno');
break;
case 2: document.write('dos');
break;
case 3: document.write('tres');
break;
case 4: document.write('cuatro');
break;
case 5: document.write('cinco');
break;
default:document.write('debe ingresar un valor comprendido entre 1 y
5.');
}
</script>
<A href="pagina2.html">Ver segundo problema</a>
</body>
</html>
Debemos tener en cuenta que la variable que analizamos debe ir despus de la instruccin switch
entre parntesis. Cada valor que se analiza debe ir luego de la palabra clave 'case' y seguido a los
dos puntos, las instrucciones a ejecutar, en caso de verificar dicho valor la variable que analiza el
switch.
Es importante disponer la palabra clave 'break' al finalizar cada caso. La instrucciones que hay
despus de la palabra clave 'default' se ejecutan en caso que la variable no se verifique en algn
case. De todos modos el default es opcional en esta instruccin.
Plantearemos un segundo problema para ver que podemos utilizar variables de tipo cadena con la
instruccin switch.
Ingresar por teclado el nombre de un color (rojo, verde o azul), luego pintar el fondo de la ventana
con dicho color:
<html>
<head>
</head>
<body>
<script language="javascript">
var col;
col=prompt('Ingrese el color con que se quiere pintar el fondo de la
ventana
(rojo, verde, azul)' ,'');
switch (col) {
case 'rojo': document.bgColor='#ff0000';
break;
<head>
</head>
<body>
<script language="javascript">
var x;
x=1;
while (x<=100)
{
document.write(x);
document.write('<br>');
x=x+1;
}
</script>
</body>
</html>
Para que se impriman los nmeros, uno en cada lnea, agregamos la marca HTML de <br>.
Es muy importante analizar este programa:
La primera operacin inicializa la variable x en 1, seguidamente comienza la estructura repetitiva
while y disponemos la siguiente condicin ( x <= 100), se lee MIENTRAS la variable x sea menor o
igual a 100.
Al ejecutarse la condicin, retorna VERDADERO, porque el contenido de x (1) es menor o igual a
100. Al ser la condicin verdadera se ejecuta el bloque de instrucciones que contiene la estructura
while. El bloque de instrucciones contiene dos salidas al documento y una operacin. Se imprime
el contenido de x y seguidamente se incrementa la variable x en uno.
La operacin x = x + 1 se lee como "en la variable x se guarda el contenido de x ms 1". Es decir,
si x contiene 1 luego de ejecutarse esta operacin se almacenar en x un 2.
Al finalizar el bloque de instrucciones que contiene la estructura repetitiva, se verifica nuevamente
la condicin de la estructura repetitiva y se repite el proceso explicado anteriormente.
Mientras la condicin retorne verdadero, se ejecuta el bloque de instrucciones; al retornar falso la
verificacin de la condicin, se sale de la estructura repetitiva y contina el algoritmo, en este caso,
finaliza el programa.
Lo ms difcil es la definicin de la condicin de la estructura while y qu bloque de instrucciones
se va a repetir. Observar que si, por ejemplo, disponemos la condicin x >=100 ( si x es mayor o
igual a 100) no provoca ningn error sintctico pero estamos en presencia de un error lgico
porque al evaluarse por primera vez la condicin retorna falso y no se ejecuta el bloque de
instrucciones que queramos repetir 100 veces.
No existe una RECETA para definir una condicin de una estructura repetitiva, sino que se logra
con una prctica continua, solucionando problemas.
Una vez planteado el programa debemos verificar si el mismo es una solucin vlida al problema
(en este caso se deben imprimir los nmeros del 1 al 100 en la pgina), para ello podemos hacer
un seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la
ejecucin:
x
1
2
3
4
.
.
100
101 Cuando x vale 101 la condicin de la estructura
repetitiva retorna falso, en este caso finaliza el
diagrama.
La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variable que se
incrementa o decrementa con valores constantes durante la ejecucin del programa. El contador x
nos indica en cada momento la cantidad de valores impresos en la pgina.
Importante: Podemos observar que el bloque repetitivo puede no ejecutarse si la condicin retorna
falso la primera vez.
La variable x debe estar inicializada con algn valor antes que se ejecute la operacin x = x + 1.
Probemos algunas modificaciones de este programa y veamos qu cambios se deberan hacer
para:
1 - Imprimir los nmeros del 1 al 500.
2 - Imprimir los nmeros del 50 al 100.
3 - Imprimir los nmeros del -50 al 0.
4 - Imprimir los nmeros del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100).
PROBLEMA
1 - Realizar un programa que imprima 25 trminos de la serie 11 - 22 - 33 - 44, etc. (No se ingresan
valores por teclado).
2 - Mostrar los mltiplos de 8 hasta el valor 500. Debe aparecer en pantalla 8 -16 -24, etc.
7 - Desarrollar un programa que permita cargar 5 nmeros enteros y luego nos informe cuntos
valores fueron pares y cuntos impares.
Emplear el operador "%" en la condicin de la estructura condicional.
if (valor%2==0)
El operador "%" retorna el resto de la divisin valor / 2. Por ejemplo: 12 % 2, retorna 0; 13 % 2,
retorna 1, porque el resto de dividir 13 en 2 es 1.
</html>
En este problema por lo menos se carga un valor. Si se carga un valor menor a 10 se trata de un
nmero de una cifra, si es mayor a 10 pero menor a 100 se trata de un valor de dos dgitos, en
caso contrario se trata de un valor de tres dgitos. Este bloque se repite mientras se ingresa en la
variable 'valor' un nmero distinto a 0.
PROBLEMAS
1 - Realizar un programa que acumule (sume) valores ingresados por teclado hasta ingresa el
9999 (no sumar dicho valor, solamente indica que ha finalizado la carga). Imprimir el valor
acumulado e informar si dicho valor es cero, mayor a cero o menor a cero.
2 - En un banco se procesan datos de las cuentas corrientes de sus clientes. De cada cuenta
corriente se conoce: nmero de cuenta, nombre del cliente y saldo actual. El ingreso de datos debe
finalizar al ingresar un valor negativo en el nmero de cuenta.
Se pide confeccionar un programa que lea los datos de las cuentas corrientes e informe:
a) De cada cuenta: nmero de cuenta, nombre del cliente y estado de la cuenta segn su saldo,
sabiendo que:
Estado de la cuenta 'Acreedor' si el saldo es >0.
'Deudor' si el saldo es <0.
'Nulo' si el saldo es =0.
b) La suma total de los saldos acreedores.
3 - Se realiz un censo provincial y se desea procesar la informacin obtenida en dicho censo. De
cada una de las personas censadas se tiene la siguiente informacin: nmero de documento, edad
y sexo ('femenino' o 'masculino')
Se pide confeccionar un programa que lea los datos de cada persona censada (para finalizar
ingresar el valor cero en el nmero de documento) e informar:
a) Cantidad total de personas censadas.
b) Cantidad de varones.
c) Cantidad de mujeres.
d) Cantidad de varones cuya edad vara entre 16 y 65 aos.
Por ltimo, hay que decir que la ejecucin de la sentencia break dentro de cualquier parte del bucle
provoca la salida inmediata del mismo.
Sintaxis:
for (<Inicializacin> ; <Condicin> ; <Incremento o Decremento>)
{
<Instrucciones>
}
Esta estructura repetitiva tiene tres argumentos: variable de inicializacin, condicin y variable de
incremento o decremento.
Funcionamiento:
- Primero se ejecuta por nica vez el primer argumento .
Por lo general se inicializa una variable.
- El segundo paso es evaluar la (Condicin), en caso de ser verdadera se
ejecuta el bloque,
en caso contrario contina el programa.
- El tercer paso es la ejecucin de las instrucciones.
- El cuarto paso es ejecutar el tercer argumento (Incremento o
Decremento).
- Luego se repiten sucesivamente del Segundo al Cuarto Paso.
Este tipo de estructura repetitiva se utiliza generalmente cuando sabemos la cantidad de veces que
deseamos que se repita el bloque.
Ejemplo: Mostrar por pantalla los nmeros del 1 al 10.
<html>
<head>
</head>
<body>
<script language="javascript">
var f;
for(f=1;f<=10;f++)
{
document.write(f+" ");
}
</script>
</body>
</html>
Inicialmente f se la inicializa con 1. Como la condicin se verifica como verdadera se ejecuta el
bloque del for (en este caso mostramos el contenido de la variable f y un espacio en blanco).
Luego de ejecutar el bloque pasa al tercer argumento del for (en este caso con el operador ++ se
incrementa en uno el contenido de la variable f, existe otro operador -- que decrementa en uno una
variable), hubiera sido lo mismo poner f=f+1 pero este otro operador matemtico nos simplifica las
cosas.
Importante: Tener en cuenta que no lleva punto y coma al final de los tres argumentos del for. El
disponer un punto y coma provoca un error lgico y no sintctico, por lo que el navegador no
avisar.
PROBLEMAS
1 - Confeccionar un programa que lea 3 pares de datos, cada par de datos corresponde a la
medida de la base y la altura de un tringulo. El programa deber informar:
a) De cada tringulo la medida de su base, su altura y su superficie.
b) La cantidad de tringulos cuya superficie es mayor a 12.
2 - Desarrollar un programa que solicite la carga de 10 nmeros e imprima la suma de lo ltimos 5
valores ingresados.
3- Desarrollar un programa que muestre la tabla de multiplicar del 5 (del 5 al 50).
4 - Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos muestre la tabla de
multiplicar del mismo (los primeros 12 trminos)
Ejemplo: Si ingreso 3 deber aparecer en pantalla los valores 3, 6, 9, hasta el 36.
5 - Realizar un programa que lea los lados de 4 tringulos, e informar: a) De cada uno de ellos, qu
tipo de tringulo es: equiltero (tres lados iguales), issceles (dos lados iguales), o escaleno
(ningn lado igual)
b) Cantidad de tringulos de cada tipo.
c) Tipo de tringulo del que hay menor cantidad.
6 - Escribir un programa que pida ingresar coordenadas (x,y) que representan puntos en el plano.
Informar cuntos puntos se han ingresado en el primer, segundo, tercer y cuarto cuadrante. Al
comenzar el programa se pide que se ingrese la cantidad de puntos a procesar.
7 - Se realiza la carga de 10 valores enteros por teclado. Se desea conocer: a) La cantidad de
valores negativos ingresados.
b) La cantidad de valores positivos ingresados.
c) La cantidad de mltiplos de 15.
d) El valor acumulado de los nmeros ingresados que son pares.
8 - Se cuenta con la siguiente informacin:
Las edades de 50 estudiantes del turno maana.
Las edades de 60 estudiantes del turno tarde.
Las edades de 110 estudiantes del turno noche.
Las edades de cada estudiante deben ingresarse por teclado.
a) Obtener el promedio de las edades de cada turno (tres promedios).
b) Imprimir dichos promedios (promedio de cada turno).
c) Mostrar por pantalla un mensaje que indique cual de los tres turnos tiene un promedio de
edades mayor.
15. Funciones
En programacin es muy frecuente que un determinado procedimiento de clculo definido por un
grupo de sentencias tenga que repetirse varias veces, ya sea en un mismo programa o en otros
programas, lo cual implica que se tenga que escribir tantos grupos de aquellas sentencias como
veces aparezca dicho proceso.
La herramienta ms potente con que se cuenta para facilitar, reducir y dividir el trabajo en
programacin, es escribir aquellos grupos de sentencias una sola y nica vez bajo la forma de una
FUNCION.
Un programa es una cosa compleja de realizar y por lo tanto es importante que est bien
ESTRUCTURADO y tambin que sea inteligible para las personas. Si un grupo de sentencias
realiza una tarea bien definida, entonces puede estar justificado el aislar estas sentencias
formando una funcin, aunque resulte que slo se le llame o use una vez.
Hasta ahora hemos visto como resolver un problema planteando un nico algoritmo.
Con funciones podemos segmentar un programa en varias partes.
Frente a un problema, planteamos un algoritmo, ste puede constar de pequeos algoritmos.
Una funcin es un conjunto de instrucciones que resuelven una parte del problema y que puede
ser utilizado (llamado) desde diferentes partes de un programa.
Consta de un nombre y parmetros. Con el nombre llamamos a la funcin, es decir, hacemos
referencia a la misma. Los parmetros son valores que se envan y son indispensables para la
resolucin del mismo. La funcin realizar alguna operacin con los parmetros que le enviamos.
Podemos cargar una variable, consultarla, modificarla, imprimirla, etc.
Incluso los programas ms sencillos tienen la necesidad de fragmentarse. Las funciones son los
nicos tipos de subprogramas que acepta JavaScript. Tienen la siguiente estructura:
function <nombre de funcin>(argumento1, argumento2, ..., argumento n)
{
<cdigo de la funcin>
}
Debemos buscar un nombre de funcin que nos indique cul es su objetivo (Si la funcin recibe un
string y lo centra, tal vez deberamos llamarla centrarTitulo). Veremos que una funcin puede variar
bastante en su estructura, puede tener o no parmetros, retornar un valor, etc.
Ejemplo: Mostrar un mensaje que se repita 3 veces en la pgina con el siguiente texto:
'Cuidado'
'Ingrese su documento correctamente'
'Cuidado'
'Ingrese su documento correctamente'
'Cuidado'
'Ingrese su documento correctamente'
La solucin sin emplear funciones es:
<html>
<head>
</head>
<body>
<script language="javascript">
document.write("Cuidado<br>");
document.write("Ingrese su documento correctamente<br>");
document.write("Cuidado<br>");
<html>
<head>
</head>
<body>
<script language="javascript">
function mostrarComprendidos(x1,x2)
{
var inicio;
for(inicio=x1;inicio<=x2;inicio++)
{
document.write(inicio+' ');
}
}
var valor1,valor2;
valor1=prompt('Ingrese valor inferior:','');
valor1=parseInt(valor1);
valor2=prompt('Ingrese valor superior:','');
valor2=parseInt(valor2);
mostrarComprendidos(valor1,valor2);
</script>
</body>
</html>
El programa de JavaScript empieza a ejecutarse donde definimos las variables valor1 y valor2 y no
donde se define la funcin. Luego de cargar los dos valores por teclado se llama a la funcin
mostrarComprendidos y le enviamos las variables valor1 y valor2. Los parmetors x1 y x2 reciben
los contenidos de las variables valor1 y valor 2.
Es importante notar que a la funcin la podemos llamar la cantidad de veces que la necesitemos.
PROBLEMAS
1 - Elaborar una funcin a la cual le enviemos tres enteros y muestre el menor.
2 - Confeccionar una funcin a la cual le enve tres enteros y los muestre ordenados de menor a
mayor.
return "dos";
else
if (x==3)
return "tres";
else
if (x==4)
return "cuatro";
else
if (x==5)
return "cinco";
else
return "valor incorrecto";
}
var valor;
valor=prompt("Ingrese un valor entre 1 y 5","");
valor=parseInt(valor);
var r;
r=convertirCastellano(valor);
document.write(r);
</script>
</body>
</html>
Podemos ver que el valor retornado por una funcin lo indicamos por medio de la palabra clave
return. Cuando se llama a la funcin, debemos asignar el nombre de la funcin a una variable, ya
que la misma retorna un valor.
Una funcin puede tener varios parmetros, pero slo puede retornar un nico valor.
La estructura condicional if de este ejemplo puede ser remplazada por la instruccin switch, la
funcin queda codificada de la siguiente manera:
function convertirCastellano(x)
{
switch (x)
{
case 1:return "uno";
case 2:return "dos";
case 3:return "tres";
case 4:return "cuatro";
case 5:return "cinco";
default:return "valor incorrecto";
}
}
Esta es una forma ms elegante que una serie de if anidados. La instruccin switch analiza el
contenido de la variable x con respecto al valor de cada caso. En la situacin de ser igual, ejecuta
el bloque seguido de los 2 puntos hasta que encuentra la instruccin return o break.
Ejemplo 2: Confeccionar una funcin que reciba una fecha con el formato de da, mes y ao y
retorne un string con un formato similar a: "Hoy es 10 de junio de 2003".
<html>
<head>
</head>
<body>
<script language="javascript">
function formatearFecha(dia,mes,ao)
{
var s='Hoy es '+dia+' de ';
switch (mes) {
case 1:s=s+'enero ';
break;
case 2:s=s+'febrero ';
break;
case 3:s=s+'marzo ';
break;
case 4:s=s+'abril ';
break;
case 5:s=s+'mayo ';
break;
case 6:s=s+'junio ';
break;
case 7:s=s+'julio ';
break;
case 8:s=s+'agosto ';
break;
case 9:s=s+'septiembre ';
break;
case 10:s=s+'octubre ';
break;
case 11:s=s+'noviembre ';
break;
case 12:s=s+'diciembre ';
break;
} //fin del switch
s=s+'de '+ao;
return s;
}
document.write(formatearFecha(11,6,2006));
</script>
</body>
</html>
Analicemos un poco la funcin formatearFecha. Llegan tres parmetros con el da, mes y ao.
Definimos e inicializamos una variable con:
var s='Hoy es '+dia+' de ';
Luego le concatenamos o sumamos el mes:
s=s+'enero ';
Esto, si el parmetro mes tiene un uno. Observemos como acumulamos lo que tiene 's' ms el
string 'enero '.
En caso de hacer s='enero ' perderamos el valor previo que tena la variable s.
Por ltimo concatenamos el ao:
s=s+'de '+ao;
Cuando se llama a la funcin directamente, al valor devuelto se lo enviamos a la funcin write del
objeto document. Esto ltimo lo podemos hacer en dos pasos:
var fec= formatearFecha(11,6,2006);
document.write(fec);
Guardamos en la variable 'fec' el string devuelto por la funcin.
PROBLEMAS
1 - Confeccionar una funcin a la cual le enve tres enteros y retorne el mayor de ellos.
2 - Elaborar una funcin a la cual le enve el valor del lado de un cuadrado y me retorne su
permetro.
3 - Desarrollar una funcin que retorne la cantidad de dgitos que tiene una variable entera
positiva.
4 - Elaborar una funcin que reciba tres enteros y retorne el promedio.
5 - Confeccionar una funcin que solicite la carga de 5 valores por teclado y retorne su suma.
<BODY>
</BODY>
</HTML>
En este problema hemos creado un objeto de la clase Date. Luego llamamos una serie de mtodos
que nos retornan datos sobre la fecha y hora actual del equipo de computacin donde se est
ejecutando el navegador.
Es bueno notar que para llamar a los mtodos disponemos:
<nombre de objeto>.<nombre de mtodo>(parmetros)
var sueldos;
sueldos=new Array(5);
cargar(sueldos);
calcularGastos(sueldos);
</SCRIPT>
</BODY>
</HTML>
Recordemos que el programa comienza a ejecutarse a partir de las lneas que se encuentran fuera
de la funciones:
var sueldos;
sueldos=new Array(5);
cargar(sueldos);
calcularGastos(sueldos);
Lo primero, definimos una variable y posteriormente creamos un objeto de la clase Array,
indicndole que queremos almacenar 5 valores.
Llamamos a la funcin cargar envindole el vector. En la funcin, a travs de un ciclo for
recorremos las distintas componentes del vector y almacenamos valores enteros que ingresamos
por teclado.
Para conocer el tamao del vector accedemos a la propiedad length de la clase Array.
En la segunda funcin sumamos todas las componentes del vector, imprimimos en la pgina los
valores y el total de gastos.
Ejemplo 2: Crear un vector con elementos de tipo string. Almacenar los meses de ao. En otra
funcin solicitar el ingreso de un nmero entre 1 y 12. Mostrar a qu mes corresponde y cuntos
das tiene dicho mes.
<HTML>
<HEAD></HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
function mostrarFecha(meses,dias)
{
var num;
num=prompt('Ingrese nmero de mes:','');
num=parseInt(num);
document.write('Corresponde al mes:'+meses[num-1]);
document.write('<br>');
document.write('Tiene '+dias[num-1]+' das');
}
var meses;
meses=new Array(12);
meses[0]='Enero';
meses[1]='Febrero';
meses[2]='Marzo';
meses[3]='Abril';
meses[4]='Mayo';
meses[5]='Junio';
meses[6]='Julio';
meses[7]='Agosto';
meses[8]='Septiembre';
meses[9]='Octubre';
meses[10]='Noviembre';
meses[11]='Diciembre';
var dias;
dias=new Array(12);
dias[0]=31;
dias[1]=28;
dias[2]=31;
dias[3]=30;
dias[4]=31;
dias[5]=30;
dias[6]=31;
dias[7]=31;
dias[8]=30;
dias[9]=31;
dias[10]=30;
dias[11]=31;
mostrarFecha(meses,dias);
</SCRIPT>
</BODY>
</HTML>
En este problema definimos dos vectores, uno para almacenar los meses y otro los das. Decimos
que se trata de vectores paralelos porque en la componente cero del vector meses almacenamos
el string 'Enero' y en el vector dias, la cantidad de das del mes de enero.
Es importante notar que cuando imprimimos, disponemos como subndice el valor ingresado
menos 1, esto debido a que normalmente el operador de nuestro programa carga un valor
comprendido entre 1 y 12. Recordar que los vectores comienzan a numerarse a partir de la
componente cero.
document.write('Corresponde al mes:'+meses[num-1]);
PROBLEMAS
1 - Desarrollar un programa que permita ingresar un vector de 8
elementos, e informe:
El valor acumulado de todos los elementos del vector.
El valor acumulado de los elementos del vector que sean mayores a 36.
Cantidad de valores mayores a 50.
Esta clase no est construido para que tengamos nuestras variables Math, sino como un
contenedor que tiene diversas constantes (como Math.E y Math.PI) y los siguientes mtodos
matemticos:
Mtodo
Descripcin
Expresin de
ejemplo
Resultado
del
ejemplo
abs
Valor absoluto
Math.abs(-2)
sin, cos,
tan
Math.cos(Math.PI)
-1
asin, acos,
atan
Math.asin(1)
1.57
exp, log
Math.log(Math.E)
ceil
Math.ceil(-2.7)
-2
floor
-3
round
Math.round(-2.7)
-3
min, max
Math.min(2,4)
pow
Math.pow(2,3)
sqrt
Raz cuadrada
Math.sqrt(25)
random
Math.random()
Ej. 0.7345
Ejemplo: Confeccionar un programa que permita cargar un valor comprendido entre 1 y 10. Luego
generar un valor aleatorio entre 1 y 10, mostrar un mensaje con el nmero sorteado e indicar si
gan o perdi:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var selec=prompt('Ingrese un valor entre 1 y 10','');
selec=parseInt(selec);
var num=parseInt(Math.random()*10)+1;
if (num==selec)
document.write('Gan el nmero que se sorte es el '+ num);
else
if (pos!=-1)
document.write ('Est el nombre Pablo en la variable nombre');
toUpperCase()
Convierte todos los caracteres del String que invoca el mtodo a maysculas:
cadena1=cadena1.toUpperCase();
Luego de esto, cadena1 tiene todos los caracteres convertidos a maysculas.
toLowerCase()
Convierte todos los caracteres del String que invoca el mtodo a minsculas:
cadena1=cadena1.toLowerCase();
Luego de esto, cadena1 tiene todos los caracteres convertidos a minsculas.
Ejemplo: Cargar un string por teclado y luego llamar a los distintos mtodos de la clase String y la
propiedad length.
<html>
<head>
</head>
<body>
<script language="JavaScript">
var cadena=prompt('Ingrese una cadena:','');
document.write('La cadena ingresada es:'+cadena);
document.write('<br>');
document.write('La cantidad de caracteres son:'+cadena.length);
document.write('<br>');
document.write('El primer caracter es:'+cadena.charAt(0));
document.write('<br>');
document.write('Los primeros 3 caracteres son:'+cadena.substring(0,3));
document.write('<br>');
if (cadena.indexOf('hola')!=-1)
document.write('Se ingres la subcadena hola');
else
document.write('No se ingres la subcadena hola');
document.write('<br>');
document.write('La cadena convertida a maysculas
es:'+cadena.toUpperCase());
document.write('<br>');
document.write('La cadena convertida a minsculas
es:'+cadena.toLowerCase());
document.write('<br>');
</script>
</body>
</html>
PROBLEMAS
1 Ingresar una serie de nombres por teclado hasta que se digite la
palabra Fin, y mostrar cuntos nombres se ingresaron.
Fin o FIN.
Suponemos que conoce las marcas para la creacin de formularios en una pgina web:
<html>
<head>
</head>
<body>
<script language="JavaScript">
var contador=0;
function incrementar()
{
contador++;
alert('El contador ahora vale :' + contador);
}
</script>
<form>
<input type="button" onClick="incrementar()" value="incrementar">
</form>
</body>
</html>
A los eventos de los objetos HTML se les asocia una funcin, dicha funcin se ejecuta cuando se
dispara el evento respectivo. En este caso cada vez que presionamos el botn, se llama a la
funcin incrementar, en la misma incrementamos la variable contador en uno. Hay que tener en
cuenta que a la variable contador la definimos fuera de la funcin para que no se inicialice cada
vez que se dispara el evento.
La funcin alert crea una ventana que puede mostrar un mensaje.
PROBLEMA
Crear un formulario con tres botones con las leyendas "1", "2" y "3". Mostrar un mensaje indicando
qu botn se presion.
Para hacer ms clara la funcin guardamos en dos variables auxiliares los contenidos de los
controles de tipo TEXT. Hay que tener en cuenta que a nuestra pgina la accedemos por medio del
objeto: document, luego, al formulario que hemos creado, lo accedemos por el NAME que le dimos
al formulario, en este caso: form1, luego, a cada control que contiene el formulario, lo accedemos
nuevamento por su NAME, es decir: nombre y edad respectivamente. Por ltimo, para acceder a las
cadenas cargadas debemos indicar la propiedad value.
PROBLEMAS
1 - Crear un programa que permita cargar un entero en un text y al presionar un botn nos muestre
dicho valor elevado al cubo (emplear la funcin alert).
2 - Cargar dos nmeros en objetos de tipo text y al presionar un botn, mostrar el mayor.
3 - Cargar un nombre y un apellido en sendos text. Al presionar un botn, concatenarlos y
mostrarlos en un tercer text (Tener en cuenta que podemos modificar la propiedad value de un
objeto TEXT cuando ocurre un evento).
En este problema debemos observar que cuando ingresamos caracteres dentro del campo de
edicin slo vemos asteriscos, pero realmente en memoria se almacenan los caracteres tipeados.
Si queremos mostrar los caracteres ingresados debemos acceder a:
document.form1.text1.value
Normalmente, a este valor no lo mostraremos dentro de la pgina, sino se perdera el objetivo de
este control (ocultar los caracteres tipeados).
Si necesitamos saber la cantidad de caracteres que tiene un string accedemos a la propiedad
length que retorna la cantidad de caracteres.
if (document.form1.text1.value.length<5)
PROBLEMA
1 - Disponer dos campos de texto tipo password. Cuando se presione un
botn mostrar si las dos claves ingresadas son iguales o no (es muy
comn solicitar al operador el ingreso de dos veces de su clave para
validar si la tipe correctamente, esto se hace cuando se crea una
password para el ingreso a un sitio o para el cambio de una existente).
Tener en cuenta que podemos emplear el operador == para ver si dos
string
son iguales.