PROGRAMACIÓN.

 PROGRAMACIÓN
Enlaces de interés:






ÍNDICE:
1.- CONCEPTOS BÁSICOS.
2.- MI PRIMER PROGRAMA: "HOLA MUNDO"
3.- ELEMENTOS DEL LENGUAJE.

4.- ESTRUCTURAS ALGORÍTMICAS.
5.- ARREGLOS
6.- FUNCIONES.








1.- CONCEPTOS BÁSICOS:


1.- ACTIVIDAD INICIAL:
Vamos a romper el hielo haciendo un programa sencillo en Scratch que dibuje un TRIÁNGULO EQUILATERO para ello fijate en la siguiente figura:


ACTIVIDADES:
1.- Una vez hecho el triángulo rectángulo, dibuja ahora una estrella de triángulos y luego un rosetón de estrellas. En este último, cambia de escenario y añade algo de música.







TÉRMINOS FUNDAMENTALES EN PROGRAMACIÓN:
Ahora que ya has hecho un programa sencillo, vamos a ver algo de teoría para  entender su vocabulario:

1.- PROGRAMA: Una secuencia de instrucciones y operaciones que realiza la computadora para resolver un problema específico.
Los primeros programas se ejecutaban de principio a fin, salvo que en algún instante se indicase que se debería saltar a otra posición del programa:

 10 PRINT "Hola"
 20 GOTO 10



Pero esta forma de programar complicaba la lectura del código a medida que el tamaño  del programa fue aumentando. Como  alternativa se desarrolló lo que se conoce como programación ESTRUCTURADA donde se permitía que fragmentos de un programa se pudieran repetir o que el programa se pudiera descomponer en bloques denominados "SUBRUTINAS".  Con el paso del tiempo se han diseñado otras metodologías más apropiadas para programas de miles de instrucciones, como es el caso de la programación ORIENTADA A OBJETOS.


2.-INSTRUCCIÓN: Una orden que  le damos al computador.


3.- COMPUTADORA: Es un dispositivo electrónico funcionando como un sistema donde se procesan unos datos (input) para obtener unos resultados (output). Físcicamente se organiza en unos dispositivos de entrada, una CPU (UC,UAL/ALU,Memoria) y unos dispositivos de salida.


4.- MEMORIA: La CPU utiliza la memoria de la computadora para guardar información mientras trabaja con ella. Puede ser INTERNA (RAM o volátil y ROM o de sólo lectura) y EXTERNA o auxiliar donde se guardan los programas o datos que el usuario desee.


5.- LENGUAJE: Es el medio (símbolos, caractéres, reglas (programas)) que utilizamos para comunicarnos con las computadoras para realizar operaciones de entrada/salida, cálculo, manipulación de textos y datos, lógica computacional, gestión y almacenamiento, etc. Para utilizar correctamente un lenguaje de programación es conveniente saber previamente su sintáxis.



6.- TIPOS DE PROGRAMAS:



7.- LENGUAJE MÁQUINA: Es el lenguaje que entiende las computadoras sin necesidad de traducción, por lo que la CPU puede comprender y ejecutar directamente el programa. Las instrucciones en este lenguaje utiliza la unidad de memoria más pequeña, el BIT.
El código del ordenador se basa en asignar a cada caracter (letra, signo, número, etc) una combinación de 8 ceros y unos conocido como BYTE ( 8 bits = byte) mediante un código que se llama ASCII. Por ejemplo la letra A se representa con lo combinación siguiente: 01100001.

8.- LENGUAJE ENSAMBLADOR: También llamados de BAJO NIVEL es aquel cuyas instrucciones se escriben en códigos alfabéticos conocidos como mnemotécnicos para las direcciones y operaciones simbólicas. Este tipo de lenguajes son muy complicados y por tanto poco usados. Aquí tienes un ejemplo: MOV AX,A ADD AX,B MOV C,AX.

9.- LENGUAJE DE ALTO NIVEL: Son aquellos en los que las instrucciones o sentencias son escritas con un lenguaje parecido al nuestro a través de palabras en inglés que facilitan la escritura y lectura del programa (Visual Basic, Pascal, Logo, C++, Java, Clipper, Ada, Smalltalk, etc.).



10.- PROGRAMA INTERPRETADO: Son aquellos cuyas instrucciones se analizan y se ejecutan por el propio programa directamente. En éstos, el programa se escribe (CÓDIGO FUENTE), y el ordenador va leyedo cada instrucción , la traduce y la ejecuta para lo que es necesario traducir el programa mediante el traductor o INTÉRPRETE. A este grupo pertenecen el legendario Basic, el  Perl, HTML, y los llamados Script (en este último caso, los navegadores de Internet son los intérpretes de estos programas).


11.- PROGRAMA COMPILADO: Son aquellos programas que necesitan de otro programa (software) que se encargue de traducir las instrucciones del CÓDIGO FUENTE para que el ordenador lo entienda. Se genera así otro archivo que es el que se ejecuta tantas veces como se desee (.exe .com). A este grupo pertenecen los lenguajes como el C, Pascal, ADA, etc.


12.-CODIGO FUENTE: Conjunto de caractéres con el que está escrito el programa.


13.-CODIFICACIÓN: Es la operación de escribir el código fuente necesario para solucionar un problema específico. Es pues, el conjunto de instrucciones que se escriben en un lenguaje de programación específico.


14.-DEPURACIÓN: Es el proceso de identificación y eliminación de aquellos errores que se hayan cometido en la codificación de un determinado programa. 


15.-ALGORITMO: Es el conjunto de pasos organizados necesarios para dar solución a un problema específico.

Ejemplo de Algoritmo: Pasos que se siguen si quiero ver una película de vídeo.
  1.  Elijo una película de las de mi colección.
  2.  Compruebo SI TV y vídeo están conectados a la red (y procedo).
  3.  SI la TV está apagada, la enciendo, SI NO, pues no. Y lo mismo con el vídeo.
  4.   Introduzco la película en el vídeo. Dejo el estuche sobre el vídeo.
  5.   SI la TV no está en el canal adecuado, la cambio, SI NO, pues no.
  6.   Cojo los mandos a distancia (el del TV y el del vídeo).
  7.   Me pongo cómodo.
  8.   Pulso PLAY en el mando del vídeo.

  Fíjate bien en unos detalles que son fundamentales y que aparecen en este algoritmo:

  •    La descripción de cada paso no me lleva a ambigüedades, los pasos son absolutamente explícitos y no inducen a error.
  •   El número de pasos es finito. Tienen un INICIO Y UN FIN.


    Antes de empezar a codificar el programa debemos pues saber como vamos a resolver el problema mediente el conocimiento previo del algoritmo que vamos utilizar


   Para escribir el algoritmo existen dos formas:
  • - Mediante un DIAGRAMA DE FLUJO
  • - Mediante un PSEUDOCÓDIGO.  
  

16.-DIAGRAMA DE FLUJO: Es una forma de respresentación esquemática y gráfica de las operaciones que realiza un algoritmo.  Un diagrama de flujo, también llamado Flujograma de Procesos o Diagrama de Procesos, representa la secuencia o los pasos lógicos para realizar una tarea mediante unos símbolos.


   Un ejemplo para cocinar un huevo para otra persona sería:
  1.    - Pregunto si quiere el huevo frito.
  2.    - Si me dice que si, lo frio, si me dice que no, lo hago hervido.
  3.    - Una vez cocinado le pregunto si quiere sal en el huevo.
  4.    - Si me dice que no lo sirvo en el Plato. Si me dice que si le hecho sal y después lo sirvo en el plato.

FORMAS BÁSICAS DE UN DIAGRAMA DE FLUJO:



NOTA: Si uno tiene experiencia puede prescindir del algoritmo escrito, pero siempre tendremos que tenerlo en mente para hacer el diagrama de flujo sin equivocarnos.


Para especificar el principio y el fin del programa pondremos:

Inicio
    Aquí iría el programa en pseudocódigo
Fin



Las 3 órdenes que más utilizaremos en pseudocódigo son:
  • ESCRIBIR. Por ejemplo la pantalla con la instrucción document.write('Hola');.
  • LEER. Por ejemplo, desce el teclado y que guarde este dato en una variable.
  • CALCULAR.


17.- PSEUDOCÓDIGO: Es una forma de representación descriptiva de las operaciones que realiza un algoritmo usando un lenguaje libre lo más cercano al nuestro.


18.-SCRIPT: Son pequeños programas (SUBRRUTINAS) que se incorporan dentro de otro programa y que son interpretados por el navegador. Se pueden escribir dentro del código fuente entre las etiquetas <script> </script> o se pueden utilizar un archivo externo con extensión .js desde cualquier editor de texto planos.  

SCRIPT MEDIANTE ETIQUETAS:
<script language="Javascript">
alert("Hola, que tal")
</script>


SCRIPT MEDIANTE UN ARCHIVO EXTERNO:
<script language="Javascript" src="misrutinas.js"></script>



19.- METODOLOGÍA ALGORÍTMICA: son los pasos necesarios para llevar a buen puerto la implementación de una solución algorítmica y que pasa por
  1. DEFINIR de una forma clara y precisa el problema a solucionar, 
  2. ANÁLISIS del problema donde se definan a priori los datos de entrada, la información de salida, así como los métodos y fórmulas que se usarán para su procesamiento. 
  3. DISEÑO del algoritmo para implementar con éxito el código futuro necesario, para ello se establecerá convenientemente el punto de partida, depurar dobles interpretaciones, acotar el tamaño y optimizar el tiempo y los recuros necesarios para su ejecución. Hay que tener en cuenta que un programa escrito por una persona, generalmente es usado por otra, por lo que su codificación debe sser clara y podrá requerir de:
  4. DOCUMENTACIÓN que complemente su entendimiento (comentarios internos, documentación externa, manual del usuario).

20.- EXPRESIONES DEL PROGRAMA:






2.- MI PRIMER PROGRAMA:
"HOLA MUNDO"

Existen multitud de lenguajes de programación. Algunos son de propósito general (sirven para crear cualquier cosa) y otros están especialmente diseñados para cierto tipo de tareas, por lo que pueden resultar menos adecuados para hacer otras distintas. Por ejemplo, existen lenguajes específicos para realizar cálculos matemáticos, para representaciones, para programar robots, etc.

Los más extendidos son:  C, C++, C#, Java, JavaScript, PHP, Pyton.


O incluso,  del ámbito educativo, como el ya conocido SCRATCH:





El primer programa que se suele crear para comenzar a trabajar con un lenguaje de programación consiste en escribir algo en pantalla, como por ejemplo el  saludo "hola mundo".  Vamos a ver este primer programa en distintos lenguajes de programación:


A.-MI PRIMER PROGRAMA EN BASIC:
CLS
PRINT "Hola, mundo"

Tutorial: http://jm00092.freehostia.com/cqb/indetal.htm
Compilador Online:  http://www.quitebasic.com/


B.-MI PRIMER PROGRAMA EN HTML5:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>"HOLA MUNDO"</h1>
</body>
</html>



TUTORIAL Y EDITOR ONLINE CON EJEMPLOS EN HTML:http://www.w3schools.com/html/default.asp



C.-MI PRIMER PROGRAMA EN JS:
<html>
<head>
</head>
<body>
<script type="text/javascript">
document.write('Hola Mundo');
</script>
</body>
</html>




IDE Online JS:
https://www.tutorialspoint.com/try_javascript_online.php


D.-MI PRIMER PROGRAMA EN JS CON INTERACCIÓN:
<!DOCTYPE html>
<html>
<body>
<h1>What Can JavaScript Do?</h1>
<p id="demo">JavaScript can change HTML content.</p>
<button type="button" onclick="document.getElementById('demo').innerHTML = 'Hello JavaScript!'">Click Me!</button>
</body>
</html>


IDE Online de JS:
https://www.tutorialspoint.com/try_javascript_online.php
Tutorial y pruebas Online de JS:

http://www.w3schools.com/js/tryit.asp?filename=tryjs_intro_inner_html



E.-MI  PRIMER PROGRAMA EN C:
#include <stdio.h>
int main(){
    printf("Hello, World!\n");
    return 0;
} 
 
IDE Y COMPILADOR ONLINE EN C:
https://www.tutorialspoint.com/compile_c_online.php




F.-MI PRIMER PROGRAMA EN C++: 
#include <iostream>
using namespace std;
int main() {
    cout << "Hola Mundo" << endl;
    return 0;
}

En C++ se pueden crear programas más avanzados, a cambio, los programas son más completos. En este caso necesariamos las siguientes instrucciones:
COMPILADOR ONLINE:
https://www.tutorialspoint.com/compile_cpp_online.php


G.-MI  PRIMER PROGRAMA EN PASCAL:  

Program HelloWorld(output);
begin
  writeln('Hello, world!');
end.


IDE Y COMPILADOR ONLINE:
https://www.tutorialspoint.com/compile_pascal_online.php



H.-EJEMPLO DE MI  PRIMER PROGRAMA EN CSS:
<!DOCTYPE html>
<html>
<head>
<style>
p {
    color: red;
    text-align: center;
}
</style>
</head>
<body>
<p>Hello World!</p>
<p>These paragraphs are styled with CSS.</p>
</body>
</html>


http://www.w3schools.com/css/tryit.asp?filename=trycss_syntax1


I.-MI PRIMER PROGRAMA EN VISUALBASIC:
Module Module1
    Sub Main()
        Dim años As Integer
        Dim dias As Integer
        Console.Write("Hola Mundo. ¿Cuantos años tienes?:")
        años = Console.ReadLine()
        dias=años+365 
        Console.Write("Llevas vividos:")
        Console.Write(dias)
        Console.ReadKey()
    End Sub
End Module



IDE Online VisualBasic:
https://www.tutorialspoint.com/compile_vb.net_online.php

Otro IDE VisualBasic:
http://www.tutorialesprogramacionya.com/visualbasicya/

CODIGO ONLINE: http://ideone.com/


J.-MI PRIMER PROGRAMA ARDUINO:
int led = 13
void setup() {
  pinMode(led, OUTPUT);
}
void loop() {
  digitalWrite(led, HIGH);   
  delay(1000);              
  digitalWrite(led, LOW);    
  delay(1000);              
}



H.-MI PRIMER PROGRAMA EN PROCESSING:
print("Tutorial Processing");
print("Hola mundo");



El hola mundo gráfico con processing:
line(20,20,80,80);
//y ahora compara con la siguiente instrucción
line(40,15,90,95);




ACTIVIDAD:
1.- Diseña un programa que calcule el ÁREA DE UN TRIÁNGULO.





Otra forma de muestra. En este caso los datos se asignan dentro del propio programa (sin interactividad)



Solución con Scrath. Con asignación de variables dentro del programa:

Y solución en Scratch con interactividad:



Solución en QUITE_BASIC (COMPILADOR ONLINE:  http://www.quitebasic.com/
10 cls
15 REM AREA DE UN TRIANGULO EN QUITEBASIC
20 input "Introduce la base:";b
30 input "Introduce la altura";h
40 let a=((0.5)*b*h)
50 print "El Area del triangulo es="
60 print a







3.-ELEMENTOS DEL LENGUAJE:


RESUMEN:
a) LOS COMENTARIOS:
REM
// 
/*                     */

b) LOS DATOS. Variables y Constantes:
int pinLed=13;
int n=10;
boolean pulsado=true;
string nombre;
int lado=100; //en este caso declaramos y asignamos

c) CONTADORES Y ACUMULADORES:
i++;     // contador: i=i+1
i--;      // i=i-1 
S+=n      // suma acumulativa: S=S+n  
S-=a     // S=S-a 


d) CONDICIONALES y sus OPERADORES:
                         If n==1 && pulsador==true {
                            instrucciones
                          }

Operadores:
aritméticos: ( )       ^         *        +           -        mod
relacionales:       ==          !=            >      
lógicos        &&       ||           !


e) BUCLES CON FOR:          
                 for(i=1;i<=10;i++){
                        instrucciones
                   }


f) BUCLES CON WHILE:
f.1.)WHILE (es un if de repetición mientras cumpla condición):

While (n<=0) {
   input "escribe un número positivo";n
   if (n<=0); {
   print "Ese número no es positivo";
   }
}


f.2.) DO....WHILE (aquí pasa siempre una vez mínimo): 

 do {
   input "escribe un número positivo";n
   if (n<=0); {
   print "Ese número no es positivo"
   }
} while n<=0


g) LAS TABLAS (ARRAYS):
                       int datos[5]
                       for (i=0; i<=4; i++){
                           input ("Dime el dato";i+1;datos[i]);
                       }
                       for (i=4; i>=0; i--){
                          print ("El dato ";i+1;" es: ";datos[i]);
                        }

 


ACTIVIDADES:

ESTRUCTURA SECUENCIAL
  1. Área de un  triángulo.
  2. Área de una circunferencia.
  3. Velocidad de un coche en Km/hr,  introduciendo metros y segundos por el teclado. 
  4. Calcular el precio total de la compra de un producto que cuesta 100eros, al que hay que añadir el IVA al 21% y hacerle un descuento final del 10%. 
  5. Calcular el % de hombres y mujeres que hay en tu clase clase introduciendo por el teclado en número de estos.
  6. Hipotenusa de un triángulo rectágulo.

ESTRUCTURA CONDICIONAL:
  1.  RAIZ cuadrada de un número.
  2.  Introducido un número indicar si es PAR o IMPAR.  if (n%2==0);
  3.  Dados dos números introducidos por el teclado A,B decir si el primero es MÚLTIPLO del segundo.
  4.  Calcular la EDAD de una persona tras introducir su fecha nacimiento (día/mes/año).
  5.  MAYOR DE DOS números introducidos desde el teclado.
  6.  ORDENAR ascendentemente dos números introducios por el teclado.
  7.  ORDENARr ascendentemente tres números introducios por el teclado.
  8.  El número de PULSACIONES que debe tener una persona por cada nºsegundos de ejercicios aeróbico viene registrado por la fórmula: n_pulsaciones=(220-edad)/nºsegundos. Si bien en las mujeres 220 se sustituye por 210. Calcular las pulsaciones para 10 segundos de ejercicios.
  9. Dada tres notas introducidas por el teclado indicar si un alumno está "APROBADO" si su media aritmética es mayor de cinco. 
  10. Dada una función y=ax^2+bx+c (donde a,b,c introduces desde teclado). Calcular RAICES.
  11. Calcular el importe total de compra en una tienda de informática dependiendo del tipo de descuento que se le aplica a una pesona. Si compra menos de 5 ordenadores un 10%, si compra entre 5 y 10 ordenadores un 20% de descuento y si compra entre 10 o más ordenadores un 30%. Para ello introduce desde el teclado el número de ordenadores que compra sabiendo que el coste de uno de ellos es de 500euros.
  12. Un juego de preguntas a las que se responde como "si" o "no" gana quien responda bien las tres preguntas siguientes. Si se responde mal a cualquiere de ellas ya no se pregunta más y termina el juego.
    a) ¿Colón descubrió América?

    b) ¿La reconquista de Toledo fué en 1218?

    c) ¿The Doors fué un grupo de rock Americano?
  13.  Dados dos números enteros positivos N y D, se dice que D es un divisor de N si el resto de dividir N entre D es 0. Se dice que un número N es perfecto si la suma de sus divisores (excluido el propio N) es N. Por ejemplo 28 es perfecto, pues sus divisores (excluido el 28) son: 1, 2, 4, 7 y 14 y su suma es 1+2+4+7+14=28. Hacer un organigrama que dado un número N nos diga si es o no perfecto.
  14. Un año es bisiesto si es múltiplo de 4, exceptuando los múltiplos de 100, que sólo son bisiestos cuando son múltiplos además de 400, por ejemplo el año 1900 no fue bisiesto, pero el año 2000 si lo será. Hacer un organigrama que dado un año A nos diga si es o no bisiesto.


ESTRUCTURA DE REPETICIÓN Y CONDICIONAL:
  1. TABLA MULTIPLICAR de un número introducido por el teclado.
  2. Imprimir los números PARES de un número N introducido por teclado.
  3. PROMEDIO de 5 notas introducidas por el teclado. 
  4. Introducidas 10 notas de clase de un alumno, calcular la MEDIA e indicar la nota más alta.
  5. CONTAR los números del 10 al 1 y al final escriba: "FIN".
  6. SUMA de una progresión aritmética: 1+2+3+.....+n.
  7. SUMA de una progresión aritmética: 1/1+1/2+1/3+....+1/n.
  8. SUMA de una progresión aritmética: 1/1^2+1/2^2+1/3^2+....+1/n^2.  (en este caso, comprueba según Euler que seis veces esta suma es la cuadratura de un círculo de diámetro la unidad).
  9. Dado un número N decir si es primo. 
  10. Calcular los números PRIMOS que hay hasta un número N.
  11. Dado un número N calcular su divisores. (ej. 18={1,2,3,6,9,18} (18%9=0)
  12. Imprime en pantalla una SUCESIÓN del tipo: 2,4,6,8...hasta un N introduciodo por el teclado.
  13. Imprime en pantalla una SUCESIÓN del tipo: 3,5,7,9...hasta el número N.
  14. Imprime en pantalla una SUCESIÓN del tipo: 2,3,5,9,17..hasta el número N.{a(i-1)*2-1}
  15. Imprime en pantalla una SUCESIÓN del tipo: 2/4,5/7,10/12...hasta el número N.{(i^2+1)/(i^2+3))
  16. FACTORIAL de un número.
  17. Imprimir y contar los MÚLTIPLOS que hay hasta un número N introducido por teclado.
  18. Imprimir y  contar los números MÚLTIPLOS de 2 o 3 que hay hasta 100.
  19. SUMA PARES Y MULTIPLICAR IMPARES. Introducidos 10 números cualesquiera, que sume los pares y multiplique sus impares.
  20. Dado un N, descomponerlo en sus PRIMOS. Ej.18/2,9/3,3/3,1/1: 18=2*3^2
  21. RELOJ. Simula un reloj HH:MM:SS
  22. Obtener un listado de los númerosCAPICÚAS de tres cifras. Bucles Anidados: (for i=1 to 9; n=101*i; for j=0 to 9; c=n+j*10;)
  23. CONTRASEÑA. Crea un programa que pida al usuario una contraseña, tantas veces como sea necesario, hasta que se introduzca en número 1234.
  24. TODAS LA TABLAS DE MULTIPLICAR. Elabora un programa que escriba las diez tablas de multiplicar. 
  25. ADIVINAR UN NUMERO. Elabora un programa donde el usuario deberá adivinar un número entre 1 y 100 en seis intentos. En cada intento, el programa deberá avisar al usuario si se ha pasado o se ha quedado corto. Al final del programa se deberá indicar el número de intentos. 
  26. Calcular la siguiente suma: 100+98+96+...+0 en este orden utilizando la instrucción WHILE.
  27. Encontrar el menor número de un conjunto de N datos con la instrucción DO WHILE.
  28. Confeccionar una quiniela futbolística utilizando la instrucción aleatoria RND: (n=int(RND*3; if n=0 then print "x", ...etc.). 

TABLAS (ARRAYS): VECTORES Y MATRICES.
  1.  Elabora un programa que pida al usuario las componentes de dos vectores en el plano y calcule su diferencia.
  2. Ordenar ascendentemete 10 números introducios por el teclado.
  3. Pedir al usuario la componente (x,y) de una fuerza y posteriormente indicar su vector y su módulo.
  4. Elabora una tabla que almacene los números de días que contiene cada mes de un año no bisiesto. Posteriormente, el usuario podrá indicar un mes y el programa mostrará por pantalla los días que tiene.
  5. Elabora un programa que pida al usuario una matriz de 3x3 y de como resultado su determinante.
  6. Calcular el promedio de 20 valores almacenados en un array. Determinar además el mayor, imprimir el promedio, y una lista de valores mayores al promedio.
  7.  Almacenar 10 números en un vector, almacenarlos en otro vector en orden inverso e imprimir el vector resultante.
  8. Almacenar 10 números y alamacenar en otro vector sus cuadrados. Imprimir los dos vectores.
  9. Almacenar 20 números e imprimir cuantos son positivos, negativos o neutros. Imprimir la cantidad de cada uno de ellos.


EJERCICIOS. MATRICES.
1) Hacer un algoritmo que almacene números en una matríz de 5*6. Imprimir la suma de los números almacendos en la matriz.
2) Hacer matriz 10x10 y determine la posición del número mayor almacenado donde todos sus números son diferentes.
3) Matriz 5x5 que calcule la suma por columnas e imprima la mayor.
4) Hacer un algoritmo que llene una matriz 10x10 donde se almacene en la diagonal principal unos y en las demás posiciones ceros (sin introducir nada previo o desde el teclado).
5) Un dueño de 10 tiendas de deporte vende 5 artículos diferentes a un determinado precio. Hacer el pseudocódigo que indique la venta total en el día para cada tienda, la venta total para cada uno de los artículos y la venta total de todas las tiendas. 
6) Una matriz de 30x5 determina las notas 30 alumnos en los cinco exámenes de matemáticas. Diseña el algoritmo que determine el promdio de notas de cada alumno, la nota máxima obtenida y el número de notas suspensas.






3.-ELEMENTOS DEL LENGUAJE: PROFUNDIZACIÓN.
A) LOS COMENTARIOS  
Poner comentarios es útil a la hora de revisar el programa y dar algo de luz al mismo, sobre todo si tiene un algoritmo difícil de interpretar por los iniciados.
Por norma general existen dos formas de poner comentarios. Mediante // en una sóla línea do mediante apertura y cierre con /* si se va a ocupar más de una línea.


// Esto será un comentario y no hará nada en el programa

/* Cuando se quieren hacer comentarios de varias líneas 
podemos usar este tipo
*/


B) LOS DATOS 
Los datos son los input del proceso que por sí sólos carecen de significado o información.

Un dato puede ser un simple carácter, tal como "b", un valor entero tal como "34", la posición del ratón, un número decimal, una frase, una lista, etc.Tipos:
  • NUMÉRICOS: int, float, byte.
  • LÓGICOS: boolean.
  • CADENAS: String.
  • CARÁCTER: char.
  • ARREGOS (vector, matriz).
  • REGISTROS
  • ARCHIVOS
  • APUNTADORES
  • COLOR

Los datos numéricos o alfanuméricos que no cambien durante la ejecución de un programa se les llama CONSTANTES.

//datos
45, 2.0E2, AF, "AF", "Juan está con Ana", 012, -12.23, "-1", SI, "Si", i,

// constante
pi=3.1416


//Ejemplo de datos en processing necesarios ser declarados primero

boolean a;     //true o false
byte b;          //-128 a 127
char c;          // un carácter
color d;
float e;          //un número con decimales
int f;              //entero
string g;      //una cadena de caracteres

a=false;  //y ahora se asignan datos a la las variables
println (a);
b=-32;
println(b);
c=´f´;
println(c);
d=color(233,127,23);
println(d);
e=983.234 //en processing como en EEUU los decimales después del punto
f=78;
println(f); g="hola mundo";
println(g);

Ejemplo de datos con Arduino:
int ledPin=13;    //int es tipo de caja, ledPin el nombre de la caja,13 valor asignado.


 EJEMPLO de datos tipo texto en Scratch:

B) LAS VARIABLES

Es un espacio en la memoria que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede variar la ejecución del programa. Es necesario darle un nombre para poder identificarla dentro del programa, esto se conoce como DECLARAR LA VARIABLE.

Por lo general (pero depende de cada lenguaje) podrán comenzar por una letra (mayúsculas o minúsculas), no deben contener espacios en blanco, pueden contener letras, dígitos, carácter subrayado después de la primera letra y la longitud total es de hasta 8 caracteres. Un ejemplo de estos tipos de identificadores para DECLARAR para los datos, variables o constantes de un programa, son estos:
Nombre
Num_hras
Calif2

Una vez declarada la variable, se debe ASIGNAR un valor mediante el operador "=". En ocasiones se puede declarar y asignar la variable en la misma sentencia.

int ancho; //declaración de la variable
ancho=200; //asignación del valor a la variable o también:
int ancho=200; //declaración y asignación de un valor a la variable


En informática, es habitual que la capacidad de un tipo  de datos sea limitada. Es por ello que se debe optimizar los recursos asingando a cada variable la capacidad de memoria que vaya a utilizar. En el caso de que nos equivoquemos y nos quedemos cortos en un momento determinado, el compilador a la hora de mostrar el programa mostraría un resultado incorrecto, puesto que se ha podido "desbordar" el rango de datos admisibles asingando a la variable.

Ejemplo de resultado con DESBORDAMIENTO:
int n=12345
producto= n*n   //donde producto saldría igual a -1938485248.


TIPOS DE VARIABLES POR SU CONTENIDO:
  • NUMÉRICAS: int (4 bytes, desde -32767 hasta +32767), byte , float),
  • LÓGICAS/BOOLEANAS, 
  • ALFANUMÉRICAS (String),

TIPOS DE VARIABLES POR SU USO:
  • DE TRABAJO: suma=a+b/c
  • CONTADORES: se usan para llevar el control del número de ocasiones en que se realiza una operación. Ej: i, j 
  • ACUMULADORES: se usan para llevar una suma acumulativa de una serie de valores. 

y según su uso las hay de TRABAJO, CONTADORES, ACUMULADORES.


Ejemplo de variables en processing:
  • int  //integer, son numeros enteros, sin decimales.
  • float  //números que pueden contener decimales 23.4
  • char // carácter
  • string  //es una cadena de caracteres, una frase como "La casa es de color azul"
  • boolean //solo toma dos valores true o false
  • color  //es un color que puede adoptar un pixel en processing.

Ejemplo de declaraciones y asignaciones de variables:

area= pi*radio^2; // en este caso las variables son radio, area y pi representa una constante.
iva=0.21; a=2.0E2; b=0xF0; c=012; //número real, notación científica, hexadecimal, octal
valor= -25; // dato numérico negativo
valor= true;
nombre="ana"; //entre comillas para diferenciarlos de nombres o descriptores del propio programa.
letra="z"; dato="34"; //cadena
suma=a+b/c;
i=i+1; //contador
a=a+b; //acumulador
clave = " adacadabra 4rjT";
VariableNumerica= Edad + 2 ; //su valor es el valor de la variable Edad (numérica) +2 VariableBooleana = true; //en este caso sería de valor 1


//EJEMPLO VARIABLES CON PROCESSING
int ancho;
ancho=200;
int alto;
alto=100;
size (ancho, alto);

//EJEMPLO VARIABLES CON PROCESSING

int x=80;
int y=120;
int tamano=50;
rect(x,y,tamano,tamano);


//VARIABLES EN QUITE_BASIC
100 LET A = "ABC123"
110 LET A1 = 17
120 LET A2 = 4711
130 LET A$ = "ABC123"
But this does not work:
100 LET ABC = "ABC123"

En la mayoría de los programas las variables se declaran poniendo "var" delante y dandoles un valor inicial: var Edad = 15; var Texto = "Hola";
Una vez declarada la variable, se podrá  meter un valor en cualquier parte del programa.
Edad = 5;
Nombre = "Juan";


Algunas varialbes vienen predefinidas por el propio lenguaje:
mouse_x  //es la variable que tiene el valor de la posición x del ratón en cada momento
hspeed   //es la velocidad horizontal



LA INTERACTIVIDAD con las variables:



ACTIVIDADES:

1.- DIBUJA  UN CUADRADO DE TAMAÑO VARIABLE. 





 Como veremos más adelante, este programa peca de tener que repetir muchas veces la misma instrucción por lo que su  código correcto sería el siguiente:

O de esta otra forma. Indica las diferencias entre estos dos programas:




2º)JS. Abre una ventana en el explorador y escribe en la caja de direcciones:
javascript:nombre="juan";window.alert(nombre)
javascript:nombre="juan";window.alert("Mi nombre: "+nombre)


2º) EJEMPLO DE VARIABLES CON PROCESSING:
//escribe este código en processing y analiza su resultado
int ancho=200;
int alto=100;
boolean valor=true;
float numero=12.34564  //Processing en un programa de EEUU yusa el punto para los decimales.
string frase="Buenos días";
size (ancho, alto);
text (frase, 10, 10);
print (numero);



3º) EJEMPLO
//escribe este código en processing y analiza su resultado
println ("Esto es una nueva línea");
string a=" Esto es una prueba";
println (a);
int b=142;
print (b);
boolean c=true;
print (c);
float d=3.1415;
println (d);


Variables globales y/o locales.
En muchos lenguajes, si queremos que la variable se use en todo el programa deberemos nombrarla como una variable global, en caso contrario, si no la definimos como global, por defecto el lenguaje la considerará una variable local.

Una variable local al salir del lugar donde la hemos asignado un valor, perderá ese valor y ya no existirá (al salir de un algoritmo, de un trozo de programa, del objeto, de una estructura IF, etc.).

En la mayoría de los lenguajes se pone la palabra global, un punto y detrás el nombre de la variable, de esta forma, esta variable la podemos usar en todas las partes del programa.
global.pepe  //de esta forma podemos identificar esta variable que será distinta de la variable pepe.



Variables del sistema
Existen variables que no tenemos que declarar, por que son del sistema, accesibles y preparadas para directamente para nuestro uso.En processing por ejemplo tenemos: width, heigth, mousX, mouseY.

//ejemplo con processing 
size(300,300);
ellipse(width/2,height/2,width-20,heigh-20);
//y si cambiamos  la primera linea, no hace falta cambiar la segunda:
size(150,140);
ellipse(width/2,height/2,width-20,heigh-20);

 


B) LOS OPERADORES. 
 Son los elementos que relacionan de forma diferente los valores de una o varias variables y o constantes permitiendo manipular su contenido.






Tipos de operadores:
  • ARITMÉTICOS: con la siguiente prioridad: paréntesis ( ), potenciación ^, producto *, división /, resto mod, suma +, y resta -.
  • RELACIONALES: >,<,=,  >=, <=, < >, igual a = =, distinto de !=; //todos ellos darán true/false.
  • LÓGICOS:And &&, Or | |, Not !
  • CONTROL: incremental ++. decremental --.

2/3;  4*3;  12 mod 7;  //aritméticos, mod es módulo y calcula el residuo de la división entera






EJEMPLO de operadores con processing:
int a=22; int b=12; int c=14;
print (min(a,b,c); //aquí hemos anidado dos funciones print y min.
a++; b--;
print (a,b);
i++ :: i=i+1
i-- :: i=i-1
i+=a :: i=i+a (p.e. i+=25)
i-=a :: i=i-a (p.e. i-=7)


ACTIVIDADES: 1.- Calcula el resultado de las siguientes expresiones teniendo en cuenta la disposición de sus operadores:
4+2*5=
23*2/5=
3+5*(10-(2+4))=
a=10; b=20; c=30;
a+b>c //falso
a-b<c // verdadero
a*b<>c //verdadero
a>b or b>c  //falso
a>b and b>c // falso
not (a=b) //verdadero
t<30 //no es lógico porque t representa diferentes operandos

Varnumerica: Pepe, Mari ,Juan //Declaramos las variables que usaremos;
Pepe=2;
Mari=3;
Juan = Pepe + Mari; // Juan tiene ahora el valor numérico de 5.

2.- Escribe un programa que realice un contador de números del 1 al 10
10 REM CONTADOR DE 10 NUMEROS
15 CLS
20 FOR I=1 TO 10
25 CLS
30 PRINT I;
40 PAUSE (500)
60 NEXT I
70 PRINT "__FIN"




2.- Escribe un código que realice la suma acumulativa de una progresión aritmética del 1 al 10.

QUITE_BASIC: http://quitebasic.com
10 REM SUMA ARITMETICA 10 PRIMEROS NUMEROS
20 CLS
30 FOR I=1 TO 10
40 LET S=S+I
50 NEXT I
60 PRINT "LA SUMA DE LOS 10 PRIMEROS NÚMEROS ES:";
70 PRINT (S)




4.- ESTRUCTURAS ALGORÍTMICAS DE CONTROL:



Las estructuras de control de un programa son la forma de trabajo que usa para realizar las operaciones que buscan la solución al problema. Son del tipo:

  1. SECUENCIALES
  2. CONDICIONALES
  3. CÍCLICAS (bucles).


4.1.-ESTRUCTURA SECUENCIAL:






En este caso las instrucciones son ejecutadas una después de la otra de tal forma que la salida de una es la entrada de la siguiente y así sucesivamente hasta el final del proceso. Es una secuendia lineal de ejecución de las instrucciones.
  inicio
         Acción1
        Acción2
         ...
  Fin

En el inicio se IDENTIFICAN y ASIGNAN las variables que el programa usará. Entre las instrucciones encontraremos LECTURA de datos, y ESCRITURA de salida.

En processing esto se ejecuta en la primera sentencia de la forma:

void setup( ) {
//aquí el código sólo se ejeuta una vez 
}




ACTIVIDADES DE ESTRUCTURAS SECUENCIALES:
1.- Calcula la superficie de una circunferencia:


PSEUDOCÓDIGO:
numerica: radio, area; //Declaración de variables;
inicio
Escribir “dame el radio del circulo”;
Leer radio // asignación del valor de la variable radio por el usuario por medio del teclado;
area =3.14159*radio*radio; //nosotros asignamos el valor de la variable área con su fórmula;
Escribir “el área del circulo es:” //OJO En los texto SI PODEMOS Y DEBEMOS PONER ACENTOS;
Escribir area; // nos muestra en la pantalla el valor de la variable area resultado de la fórmula anterior;
fin

QUITE_BASIC: http://quitebasic.com
10 REM AREA CIRCUNFERENCIA
20 CLS
30 INPUT "INTRODUCE EL RADIO";R
40 LET A=PI*R*R
50 PRINT "EL AREA DE SU CIRCUNFERENCIA ES: ";A

2.- Hipotenusa de un triángulo.
QUITE_BASIC: http://quitebasic.com
10 REM HIPOTENUSA
20 CLS
30 INPUT "INTRODUCE UN LADO";A
40 INPUT "INTRODUCE EL OTRO LADO";B
50 LET H=SQR(A*A+B*B)
60 PRINT "SU HIPOTENUSA ES: ";H



EJERCICIOS de ESTRUCURAS SECUENCIALES.
Escribe el pseudocógico y diagrama de flujo de estos ejercicios:

  1. Calcular el beneficio obtenido si inviertes una cantidad de dinero al 2% de interés en un mes.
  2. Calcular el nuevo salario de un trabajador si se lo han subido un 10%.




4.2.-ESTRUCTURAS CONDICIONALES: "IF".





En esta estructura se compara una variable con otro/s valor/es y según su resultado se ejecute una u otra instrucción. Pueden ser SIMPLES (si...entonces...fin), DOBLES (si...entonces y si no entonces...fin), MÚLTIPLES (si.. entonces, si no... entonces, si no... entonces... fin). Son muy útiles para indicar qué pasos se deben de dar según se cumpla o no una determinada condición.

if <condición> entonces
        acción1
        acción2
 else
        acción1
        acción2
fin_If

o  también:

if (condición1 && condición2) {Se cumple esto} else {se cumple esto otro}
if (condición1 | condición2) {Se cumple esto}

En processing el código se escribe así:
if (condición) {
}
else {
}





LOS  OPERADORES DE COMPARACIÓN CON LAS ESTRUCTURAS DE CONDICIÓN:






EJEMPLOS DE ESTRUCTURAS CONDICIONALES CON DIAGRAMA DE FLUJO:

 1.- Interpreta el siguiente Sketch y  explica que es  lo que hace este programa:

2) Interpreta el siguiente código y explica su resultado:



3) Realiza un programa que indique si un alumo  está aprobado o suspenso en base a la siguiente secuencia de instrucciones.





 4.) Realiza un programa que calcule le  promedio  entre tres notas  de 22 alumnos diferentes.




 5) Realiza el programa  que resuelva una tabla de multiplicar pedida por el teclado.






6) Realiza un programa que  en función de la nota  obtenida haya un premio.





EJEMPLOS DE ESTRUCTURAS CONDICIONALES CON PSEUDOCÓDIGO.
1) RAIZ CUADRADA. El pseudocódigo para cacular  la raiz cuadrada de un número introducido por el teclado.
numericas: numero, raiz
fin declaración de variables
inicio
Escribir 'introduce un numero'
Leer numero
InicioSI
SI numero >= 0 ENTONCES:
raiz = raiz_cuadrada(numero);
Escribir 'la raíz cuadrada es:' + raiz;
SINO Escribir 'lo siento, no puedo calcular la raíz cuadrada de un numero negativo'
finSI
fin


EJEMPLO DE ESTRUCTURA CONDICIONAL CON PROCESSING:
 1) Escribe el código de processing para que cuando se presione el botón derecho del ratón se dibujen retángulos al mover el cursor,y caso contrario círculos.
void setup ( ) {
       size (400, 400);
       stroke (0,0,255);
       fill (250,10,250);
}
void draw(){
       background (240,240,10);
       if (mousePressed){
                      rect (mouseX, mouseY, 40,40);   //dibuja rectángulos
       } 
       else{
              ellipse  (mouseX,mouseY,40,40);     //dibuja círculos
       }
}


4.2.2.-ESCTRUCTURA CONDICIONAL: SWITCH.
Para analizar varios valores posibles de una misma variable, se puede emplear la sentencia switch. En este caso, cada uno de los posibles valores se indica tras la palabra case, seguido de dos puntos (:)
Las órdenes a ejecutar en cada caso deben terminar con break. También se puede indicar que hacer en caso de que no se cumpla niguno de los casos preestablecidos usando el bloque default opcional.

switch (numero)
{
case 1: print "uno";
 break;
case 2: print "dos";
default: print "valor incorrecto"
}






4.2.3.- ESTRUCTURAS CÍCLICAS O DE REPETICIÓN:FOR( ).

Observa el siguiente programa.  Como puedes ver su código se puede simplificar mediante  un  bucle de repetición. 

Para optimizar este tipo de repeticiones se utilizan las secuencias con la instrucción de bucle con  FOR.



Este tipo de estructuras son una especie de estructura condicional pero en esta ocasión, las condiciones no se deberán comprobar una sola vez, sino de forma repetida.

Son estructuras donde un grupo de instrucciones son repetidas varias veces hasta una determinada condición.


En lenguaje de programación real las estructuras FOR se forman:
for ( i = 1 ; i<= 3000 ; i = i + 1) //  i es la variable iniciadora, <=es la condición y i+1 actualización.
for ( i = 1 ; i<= 3000 ; i++)   //i++ significa lo mismo que i = i +1, es

¿Y si quisiéramos poner un paso decreciente? Es decir que el valor de i fuera disminuyendo cada vez que se repite el bucle. Pues muy sencillo poniendo i = i - 1 //i--

A la variable que "lleva" la cuenta de las veces que el bucle se ha ejecutado, se le he llamado VARIABLE CONTADOR.


La estructuras FOR tienen la peculiaridad, que la variable contador esta dentro del bucle y no hace falta asignarle el valor (ni definirla) fuera del bucle, y además, al llegar el programa al bucle siempre se realizarán las instrucciones que hay dentro del bucle, una cantidad de veces que nosotros fijemos.




EJEMPLO BUCLE FOR:


El ordenador se ha portado mal, y como castigo, le vamos a hacer imprimir por pantalla 3000 veces la frase "Prometo ser bueno". ¿Cómo lo hacemos? ¿Escribimos 3000 veces la instrucción pertinente? ¡Se supone que el castigo es para la máquina, no para uno mismo!

Veamos como sería el pseudocódigo:
inicio
Inicio Bucle Desde i=1 hasta i<=3.000 i=i+1;
      Escribir 'Prometo ser bueno';
fin desde;
fin


Como vemos la variable i (llamada contador) no se define antes del bucle, al entrar en el bucle i valdrá 1 (toma el valor inicial que le pongamos en el primer igual, en nuestro caso i= 1. Después le decimos hasta que valor de i se repetirá el bucle, en nuestro caso hasta que i valga menos o igual a 3000. Posteriormente ponemos cuanto aumenta la variable, en nuestro caso añadimos 1 al valor de la variable i; i = i + 1. Al final ponemos las órdenes que queramos que haga el programa cada vez que haga el bucle; en nuestro caso escribir en pantalla "Prometo ser bueno". Como ves la primera vez que entra el programa en el bucle i vale 1, después i vale 2 (se le suma 1) y después escribe la fase. Antes de salir del bucle vuelve a evaluar la condición para ver si la sigue cumpliendo, si es así vuelve hacer el bucle entero. ¿Es así? Pues claro porque i=2 sigue siendo menor de 3000.
Pero ojo la segunda vez que hace el bucle i tomará el valor de 3, ya que le sumará 1 al valor que tenía, y recuerda que como ya hizo el bucle una vez ahora i = i + 1 será 3; ya que i = 2 +1.
Ves que cada vez que hace una vez el bucle el valor de i aumenta 1. Esto es lo que se llama "el paso". Podríamos hacer el bucle con paso 2 simplemente haciendo i = i +2.
Bueno siguiendo con el bucle, resulta que este bucle se repetirá hasta que i valga igual a/o menor de 3000. Bueno pues en todas esas repeticiones el ordenador escribirá la frase: Prometo ser bueno.

EJEMPLO DEL BUCLE FOR CON PROCESSING
1) CIRCULOS CONCENTRICOS
size(400,400);
int i,a;
a=0;
for (i=0; i<10; i++) {
ellipse (200, 200, 380-a, 380-a);
a=a+20; //de esta forma los círculos se podrán decrementar cada vez más.

}
2) Mofifica el aterior código para que dibuje más circunferencias y que modifique el color del círculo de manera gradual usando el bucle.



ACTIVIDADES CON FOR:
1)  Diagrama de Flujo para sumar los primeros 100 números.



Una modificación propuesta sería que los números sean introducidos desde el teclado. Hagamoslo  con  10 números cualesquiera introducidos desde el teclado.
   Explicación:
   - En I contamos los números que quedan por sumar.
   - En S calculamos la suma.
   - A se emplea para leer temporalmente cada número.

   Vamos a ver paso a paso como funciona. Supongamos que los datos son: 7, -1, 8, 5, ...  veamos todos los (pasos):
  1.  I=10 (números a sumar)
  2.  S=0 (suma, inicialmente 0)
  3.  Leer A. El primero es 7, luego A=7 
  4. S=S+A=0+7=7
  5.  I=I-1=100-1=99 (6) ¿I=0? ® NO
  6. Leer A, ahora A=-1
  7. S=S+A=7-1=6
  8. I=I-1=99-1=98
  9. ¿I=0? ® NO. Cuando I=0 habremos sumado los 10 números y pasaremos a:
  10.  Escribir S que será la suma.


2). Hacer un diagrama de flujo que simule un reloj.



3) Calcular el promedio de un alumnos que tiene 7 materias calificadas.
inicio
  suma=0
  leer nom
  hacer para i=0 hasta 7
          leer nota
          sum=sum+nota
  fin_para
  prom=sum/7
  escribe prom
fin

4) Leer 10 números y escribir su cubo y su cuarta.
Inicio 
 Hacer para n=1 hasta 10
            leer num
             cubo= num*num*num
             cuarta=num^4
             imprimir num,cubo,cuarta
 fin_para
Fin

5) Leer 10 números e imprimir solo los positivos.
Inicio
     Hacer para i=1 hasta 10 
           leer num
           si num>0 entonces
                imprimir num
           fin_si
      Fin_para
Fin

6) Leer 10 números e imprimir cuantos han sido positivos, negativos o neutros.
Inicio
  pos=0
  neg=0
  neu=0
  Hacer para i=0 hasta 10
          leer num
          si num=0 entonces
                                    neu=neu+1
                                    si no
                                         si num>0 entoces
                                                     pos=pos+1
                                                     si no 
                                                           neg=neg+1
                                          fin_si 
           fin_si 
    fin_para
    imprimir pos,neg,neu
 Fin
   
7) Dada el conjunto de notas de una clase de 10 alumnos. Escribe el algorítmo para calcular la media y la calificación más alta del grupo.
  Inicio
    sum=0 
    nota_max=0
    Hacer para i=1 hasta 10 
               leer nota
               suma=suma+nota
               si nota>0 entonces
                   nota_max=nota
               fin_si
     fin_para
     media=suma/20
     imprimir media,nota_max
   Fin

8) Tabla de multiplicar de un número cualquiera.
Inicio
  leer num
  hacer para i=1 hasta 10 
        producto=num*i
        imprimir num,"*",i,"=",producto
 fin_para
Fin.

9) Reloj digital.
Inicio
 hacer para h=1 hasta 23
     hacer para m=1 hasta 59
         hacer para s=1 hasta 59
           imprimir h,m,s
        fin_para
    fin_para
  fin_para
fin


4.4.-BUCLE REPETIR HASTA: WHILE. Si se desea que una sección se repita mientras se cumpla una cierta condición, se deberá utilizar la sentenica while en vez de la if.
En este bucle la la condición se comprueba al principio, tal y como se hace con if. Pero en esta ocasión se repetirá tantas veces como se venga a seguir cumpliendo la condición.


Mientras <condición>
  acción1
  acción2
Fin_mientras

Por ejemplo,  se pide desde el programa un número positivo y no saldrá del bucle hasta que así sea.

While (numero<=0)
{
 input "escribe un número positivo";numero
 if (numero<=0);
     {
       print "Ese número no es positivo";
     }
  }




4.4.2.BUCLE HACER HASTA: DO_WHILE.
Es una estructura donde las instrucciones se repiten varias veces hasta que deje de cumplirse una determinada condición. En este bucle, siempre se realizará una vez las sentencias que se indiquen en su interior, puesto que la condición se comprueba al final.

Hacer mientras <condición>
  acción1
  acción2
Fin_mientras

Por ejemplo,  se pide desde el programa un número positivo y no saldrá del bucle hasta que así sea.

do
{
 input "escribe un número positivo";numero
 if (numero<=0);
     {
       print "Ese número no es positivo";
     }
  }
while numero<=0



5.- LOS ARREGLOS (ARRAYS)
Un array o tabla es una estructura de datos que se almacena bajo el mismo nombre de variable a un conjunto de datos del mismo tipo. Sus datos son almacenados en posiciones contiguas de memoria y para hacer referencia a sus elementos es necesario utilizar un índice que especifica la posición que ocupa cada elemento dentro del conjuto. Pueden ser VECTORES (unidimensionales) o MATRICES (bidimensionales o multidimensionales).
En un vector los n elementos que configuran el conjunto recibe el nombre de longitud o tamaño del vector. Para hacer referencia a un elementos se usa el nombre común a todos ellos, seguido de un índice entre CORCHETES.

int nom_vector[i] 
 //contendrá desde un primer elemento nom_vector[0] hasta un último nom_vector[i]

Es habitual recorrer esos "i" valores con la ayuda de bucle for.

//para introducir datos en el array
hacer para i=1 hasta 10
 leer vec[i]   //de esta forma podemos llenar el array de 10 elementos.
fin_para

// por ejemplo vec[0]=7, vec[1]=3; .... hasta vec[9]=3;

hacer mientras i<=10
 leer vec[i]   //otra forma de leer el array
fin_para

i=1
repetir
 leer vec[i]   //otra forma de leer el array
hasta que i>10

Por ejemplo, en el siguiente ejemplo se pide al usuario cinco datos y,  a continuación, el programa los muestra en le orden inverso al que se introdujeron. Veamos su pseudocódigo:

int datos[5]
for (i=0; i<=4; i++)
{
input ("Dime el dato";i+1;datos[i]);
}
for (i=4; i>=0; i--)
{
print ("El  dato ";i+1;" es: ";datos[i]);
}





EJEMPLO DE ARRAY CON PROCESSING.
 //Pulsanso botón izdo del ratón memoriza su  posición sin dibujar nada
// pulsanddo botón dcho, dibuja una línea por donde pasó el ratón
int mediciones=1000;                                                    //máximo valor de  posición del ratón
int [] pantalla_x= new int [mediciones];                     //array almacena posición x del ratón
int [] pantalla_y= new int [mediciones] ;                   // array almacena posición y del ratón
int puntero=0;                           //puntero determinará el número de posición que vamos leyendo
void setup () {
  size (800,600); //crea una ventana de dibujo
   backgroud (240,240,10);
}
void draw (){
inf (mousePressed && (mouseButton == LEFT)) {
   background (240,240,10);
   if (puntero<medicones) {
      pantalla_x[puntero]=mouseX;
      pantalla_y[puntero]=mouseY;  //almacenamos la posción del ratón

      puntero++;                                 //al incrementar el puntero, redireccionalmos el siguiente array

      }
}
if (mousePressed && (mouseButton==RIGHT)) {    //al pulsar el botón dcho del ratón

  int a;                                                                              // dibujamos las líneas almacenadas

  for (a=0; a< (puntero-1); a++) {
  line (pantalla_x [a+1], pantalla_y [a+1], pantalla_x [a], pantalla_y[a]);
  }
  for (a=0; a<(puntero); a++) {                                      //una vez dibujado  se limpia

   pantalla_x[a]=pantalla_y[a]=0;                                //arrays para un  nuevo ciclo

  }
  puntero=0;  //puntero a cero para iniciar desde el principio
}
}

EJEMPLOS JAVASCRIPT. ARRAYS CON 10 NÚMEROS ALEATORIOS.

//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
 //los siguientes caracteres sirven para saltar instrucciones si el navegador no soporta javascript

<!--
function rellenar(vector)
{
var largo, valor, ind;
largo = vector.length;
for(ind = 0; ind < largo; ind++)
   {
    valor = Math.random()*20;
    vector[ind] = Math.round(valor);
   }
}
// -->
</SCRIPT>
// Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var lista=new Array(10);
rellenar(lista);
document.write(lista);
// -->
</SCRIPT>

Comentarios: En este programa es interesante observar como los valores dados al argumento dentro de la función permanecen al finalizar ésta, de forma que la variable lista antes de pasar por la función estaba vacía y despues de ejecutarse rellenar posee valores numéricos aleatorios. Esto ocurre así porque ese argumento es un objeto Array, es el único caso en que JavaScript usa paso de argumentos por referencia. Otro punto es que esta función no usa return ya que no devuelve ningún valor. El resto del código es muy simple: un bucle for() para recorrer la matriz e irle dando valores calculados con el método random del objeto Math redondeados al entero mas próximo mediante el método round.



EJEMPLOS JS. ARRAY BUSCAR EN UNA LISTA.

//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function buscarItem(lista, valor){
var ind, pos;
for(ind=0; ind<lista.length; ind++)
   {
    if (lista[ind] == valor)
      break;
    }
pos = (ind < lista.length)? ind : -1;
return (pos);
}
// -->
</SCRIPT>
    //Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var lista1 = new Array('Juan', 'Pedro', 'Luis', 'María', 'Julia');
var cad = 'María';
var pos = buscarItem(lista1, cad);
if (pos >=0)
   document.write(cad+' está en la posición '+ pos );
else
   document.write(cad+ ' no está.');
// -->
</SCRIPT>

Comentarios:La lista se construye como un Array en el que almacenamos nombres. La variable cad contiene el nombre que deseemos buscar. La función funciona con dos argumentos: la lista de nombres y el valor a buscar, en ella hacemos un bucle para recorrer la variable lista hasta encontrar el nombre buscado, si lo encontramos detenemos el bucle con la instrucción break. Si el bucle ha terminado sin encontrar el nombre la variable ind será igual a la longiutd del Array (recuerda que los índices van desde 0 a la longitud del array menos 1), mientras que si se ha encontrado el nombre su valor será menor que esa longitud.. Observa la sentencia despues del bucle: en pos ponemos el valor del ind si se ha encontrado el nombre y si no ponemos -1, es la forma abreviada de usar una sentencia if...else.



MATRICES.
Un array de i*j elementos organizados en dos dimensiones donde i es el número de filas y j el de columnas.

mat[i,j]

 ejemplo i,j=4
[1,1][1,2][1,3][1,4]

[2,1][2,2][2,3][2,4]
[3,1][3,2][3,3][3,4]
[4,1][4,2][4,3][4,4]

hacer para i=1 hasta 4
  hacer para j=1 hasta 4
    leer mat[i,j]
  fin_para
fin



6.- FUNCIONES.
Las funciones son como subprogramas que se utiliza para un propósito específico.
Una función es un conjunto de instrucciones que se agrupan para realizar una tarea concreta y que se pueden reutilizar fácilmente.
Hay veces que dentro de un programa varias instrucciones se repiten muchas veces, sobre en todo en programas muy largos. Para no tener que repetirlas una y otra vez las agrupamos dentro de una función y cada vez que queramos activarlas solo tendremos que "llamar" o "invocar" a la función en la parte del programa que la necesitemos.


function nombre_funcion() {
instrucciones de la función
}


En matemáticas una función es una operación qeu toma uno o varios valores (ARGUMENTOS) y devuelve un resultado. Ej. f(x)= x/(1-x^2). De momo similar ocurre en programación.


función f(x)
   f=x/(1+x^2)
   devolver
fin
Inicio
  imprimir "esto es una función"
  leer n
  resultado=f(n)   //llamada de la función.
  imprimir "El resultado es:";resultado
Fin

El nombre de la función se utiliza para llamar o invocar a esa función cuando queramos que se ejecute. El concepto es el mismo que con las variables, a las que se les asigna un nombre único para poder utilizarlas dentro del código.
Después del nombre de la función, se incluyen dos paréntesis cuyo significado se detalla más adelante. Por último, los símbolos { } se utilizan para encerrar todas las instrucciones que pertenecen a la función (de forma similar a como se encierran las instrucciones en las estructuras if ).

Veamos un ejemplo:

numero1 = 5;
numero2 = 9;
function suma() {
  resultado = numero1 + numero2;
  Escribe "El resultado es " + resultado;
}

Para "llamar" o "invocar" a la función dentro del programa solo tendremos que escribir su nombre de la siguiente forma:

suma();

Fijate que hemos declarado las variables que usará la función antes de la función. También podríamos ponerlas después de la función, pero siempre antes de llamar a la función.

Cada vez que el programa lea suma(); realizará la función. Normalmente las funciones que vamos a utilizar en el programa se definen al principio del programa, para eso debemos tener muy claro qué funciones necesitaremos.

La mayoría de las veces si las variables solo se usan y existen dentro de la función se ponen dentro de los paréntesis iniciales (que hasta ahora no usamos). Esto se llama poner "ARGUMENTOS" a la función. Las variables (pueden ser constantes) que necesitan las funciones para trabajar se llaman "los argumentos de la funcion". OJO estas varibales solo existen dentro de la función y no las podremos utilizar en otra parte del programa, por eso se llaman variables locales. Mira el ejemplo:

function sumar(x,y){
var total = x + y;
alert(total);
}
sumar(1,2);
sumar(5,7);

Primero realiza la suma dando valores x=1 e y=2 y luego hace otra suma con diferentes valores para x e y (5 y 7).

En este caso las variables no las declaramos antes de la función (ni en ningún sitio), son variables que solo contiene la función. Para cambiar el valor de las variables se hace llamando a la función y poniendo sus valores.

OJO las varibales x,y y total no se podrán utilizar en otra parte del programa, ya que sol locales.

EJERCICIOS.FUNCIONES.
1) Diseña un algoritmo que lea un número y mediante una función indique se en positivo o negativo.
2.- Diseña un  programa que nos  indique si  un número es primo.
http://www.prometec.net/funciones/





 EJEMPLO FUNCIONES EN JAVASCRIPT.

JS.FUNCIÓN ESPAR.
function esPar(num)
{
var resto;
resto = num % 2;
if (resto == 0)
alert("Estes es un número par")
else
alert("Este es un número impar")
}

JS. FUNCIÓN SUMA
 //Escribimos en la sección Head:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function sumar(sum1, sum2)
{
    var resultado;
    resultado = sum1 + sum2;
    return resultado;
}
-->
</SCRIPT>
// Y escribimos en la sección body:
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
document.write("4 + 10 = "+ sumar(4, 10) ); /*Mostrar resultado*/
-->
</SCRIPT>


Comentario: En este sencillo ejemplo creamos las función mediante la palabra clave function a la que sigue el nombre en este caso sumar. Entre paréntesis escribimos los nombres que damos a los argumentos que usa la función: sum1 y sum2 en el ejemplo. Cuando llamemos a la función entre paréntesis escribiremos dos valores que se guardarán en estas variables. También vemos como crear una variable usando la palabra clave var seguida del nombre de la variable, en el ejemplo resultado. El símbolo = es el operador asignación con el que guardamos la suma en la variable resultado. Por último usamos return para devolver el resultado al programa que usa la función sumar. Los símbolos /* y */ encierran cualquier comentario personal para clarificar el programa.
En el cuerpo de la página usaremos document.write para mostrar en una ventama emergente el resultado de la suma. Una última observación que será común para todos los ejemplos: observa como todo lo que sea código JavaScritp se encierra entre las etiquetas <Script....> y </script>, esto le indica al navagador que debe ejecutar instrucciones de programa. Igualmente verás los símbolos <!-- y --> como sabes es la manera que usa HTML para señalar los comentarios, y en este caso se usa para que los navegadores que no soportan JavaScript se salten el código.




JS. FUNCIÓN SALUDAR
//Sección HEAD
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function saludar(){
var tiempo = new Date();
var hora, cad="son las ";
with (tiempo){
hora = getHours();
cad += hora + ":" + getMinutes()+":"+getSeconds();
}
if (hora < 12)
     cad = "Buenos días, "+ cad;
else if (hora < 18)
     cad = "Buenas tardes, "+ cad;
else
     cad = "Buenas noches, " + cad;
return cad
}
// -->
</SCRIPT>
   // Sección BODY
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
document.write(saludar());
-->
</SCRIPT>

Comentarios:  En este ejemplo usamos el objeto Date para determinar la hora del día, a continuación extraemos la hora del objeto tiempo y construimos una cadena cad con la hora, minuto y segundo del día para el saludo. La variable hora la comparamos con las 12 y las 18 mediante sentencias if...else anidadas. Si es antes de las 12 (hora < 12) el saludo a escribir será la cadena "Buenos días, son las..." seguido de la hora completa que está almacenada en la variable cad, si no es antes de las 12 comprobamos si es antes de las 18 si es así la cadena es "Buenas tardes son las..." y si no se da ninguno de los casos anteriores debe ser por la noche. Observa el uso de la estructura with que permite trabajar con los elementos de un objeto sin tener escribir su nombre y el punto separador (tiempo.getDate() etc). Observa también como modificamos la variable cad anteponiéndole al valor que guarda (la hora completa) el prefijo con el saludo adecuado.


JS. FUNCION PROMEDIO.
//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function media()
{
  var total=0, res, numDatos, item;
  numDatos = arguments.length;
  for (item = 0; item < numDatos; item++)
    {
     total += arguments[item];
    }
  res = total/numDatos;
  return res;
}
-->
</SCRIPT>
//    Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
document.write( media( 3,50,40,25,10) );
-->
</SCRIPT>

Comentarios: Se crea la función como es habitual con function. Se declaran las variables que se van a usar, en esta ocasión al mismo tiempo inicializamos el valor de una de ellas, total, que va a almacenar la suma de los datos.
Guardamos en numDatos el número de argumentos pasados mediante la propiedad length de la propiedad arguments del objeto Function.
Mediante un bucle for recorremos la matriz argumentos y vamos acumulando en total los datos pasados a la función. Observa el uso del operador += que suma al contenido de la variable total el valor del elemento arguments[item].
Calcula la media dividieno total por el numDatos y por último devuelve el resultado almacenado en res..
Este código podría ser mas corto pero he preferido detallarlo lo mas posible para ilustrar el uso de operadores y hacer el programa mas claro.


JS. FUNCION ECUACION 2º
//Primero recordemos que las soluciones venían dadas por la expresión:
//x = (-b ± Vb2 - 4ac)/2·a
//Veamos como podemos resolver esto con Javascript:
//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function discrim(a, b, c)
{
return (b*b - 4*a*c)
}
function soluciones(a, b, c, sol)
{
var disc = discrim(a,b,c)
if (disc < 0)
   alert("Sin solución real")
else
   {
   sol[0] = (-b + Math.sqrt(disc))/(2*a)
   sol[1] = (-b - Math.sqrt(disc))/(2*a)
   }
}
-->
</SCRIPT>
//Sección Body
//Ecuación 2·x2 - 10·x  + 12 = 0
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var soluc = new Array(2)
soluciones(2,10,12)
document.write( "Soluciones "+soluc[0]+" y "+soluc[2]);
-->
</SCRIPT
>
   
Comentarios:  Observa el uso de un objeto (el Array para las soluciones, soluc) para lograr que el último argumento de la función soluciones( ) sea pasado por referencia, es decir, para que los cambios que se hagan en el dentro de la función se mantengan al terminar ésta.


JS. FUNCION EXTRAER PARTE DE UN TEXTO
//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function extraer(texto, etqini, etqfin)
{
var ind0, ind1, parte ="";
ind0 = texto.indexOf(etqini);
if (ind0 >=0)
{
ind1 = texto.indexOf(etqfin);
if (ind1>ind0)
parte = texto.substring(ind0+etqini.length, ind1);
}
return parte;
}
// -->
</SCRIPT>
//Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var cadena = "Esta cadena es la que, /*en el ejemplo*/, se va a procesar";
document.write(cad);
document.write('<br>Cadena extraida:<br>');
document.write(extraer(cadena, '/*','*/'));
// -->
</SCRIPT>

Comentarios: En este ejemplo vemos como extraer de un texto una parte delimitada por etiquetas. En primer lugar buscamos la posición de la etiqueta de inicio, etqini, que guardamos en ind0; si existe esta etiqueta (ind0 >= 0) buscamos la etieuta de ifnal, etqfin, que debe estar despues de la de inicio, por eso comparamos (ind1> ind0). Por último extraemos los caracteres comprendidos entre el final de la etqini (ind0+ longitud de etqini) y el inicio de la etqfin usando el método substring.


JS. FUNCION COMPROBAR SINTAXIS EMAIL (si tiene @ y el punto)
//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function checkemail(email)
{
var ind1, ind2, ind3;
ind1 = email.indexOf('@');
ind2 = email.indexOf('.');
ind3 = email.lastIndexOf('@');
if ((ind1<=0) || (ind2<ind1) || (ind3 != ind1))
      return "No es correcto";
else
     return "Correcto";
}
// -->
</SCRIPT>
// Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var dire = "javascript@ciudadfutura.com";
document .write(dire+"  "+checkemail(dire));
dire= "jrasr@rest.est@es";
document.write(dire+"  "+checkemail(dire));
-->
</SCRIPT>



JS. FUNCION CALCULO DEL IVA DE UN ARTÍCULO CREADO CON OBJETOS.
//Sección Head
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
function iva()
{
return Math.round(this.valor*0.16);
}
function total(reb)
{
var precio = this.iva()+ this.valor;
precio = precio - precio*reb/100;
return Math.round(precio);
}
function obj_articulo(desc, cod, precio)
{
this.desc = desc;
this.codigo = cod;
this.valor = precio;
this.iva = iva;
this.pvp = total;
}
// -->
</SCRIPT>
    //Sección Body
<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">
<!--
var item = new obj_articulo("Raton PS2", "PerRt-01", 500);
document.write('Artículo: ' + item.desc + " ("+item.codigo+")"+ " <br>");
document.write("Precio: " +item.valor + " Ptas<br>");
document.write("IVA: " + item.iva() + " Ptas<br>");
document.write("Precio venta: "+ item.pvp(10)+ " Ptas (Dto 10%)<br>");
// -->
</SCRIPT>

Comentarios: Este ejemplo ilustra como crear un Objeto con sus propiedades y métodos. La función obj_articulo es el constructor del objeto mientras que las funciones iva() y total(reb) son métodos para ese objeto. El argumento de la segunda indica un posible descuento. Estas funciones son simples operaciones aritméticas y no requieren mas explicación. En cuanto al constructor las propiedades (desc, codigo, valor) se asignan directamente usando this para referirnos al propio objeto. Para los métodos se hace exactametne igual pero asignándole funciones (iva, total). Tenemos un método que usa argumentos y otro sin ellos, es decir este ejemplo presenta todas las posibilidades en creación de objetos y podría ser la base para crear una lista de la compra una de cuyas propiedades serían un objeto del tipo aquí definido.


JS. CONTADOR DE DIAS HASTA NAVIDAD.
<script language="javascript">
//Fechas inicial y final
var Hoy=new Date()
var Nav=new Date(Hoy.getFullYear(), 11, 25)
var mseg_dia=1000*60*60*24
var dias
if (Hoy.getMonth()==11 && Hoy.getDate()>25)
    Nav.setFullYear(Nav.getFullYear()+1)
dias = Math.ceil((Nav.getTime()-Hoy.getTime())/(mseg_dia))
document.write("Quedan "+dias+" días hasta Navidad")
</script>

Comentarios: Un perfecto ejemplo de uso de las funciones de fecha proporcionadas por Javascript. Primero declaramos las variables a usar en el script: Hoy para la fecha actual y Nav para la fecha final, en este caso 25 de Dic. Recordemos que para Javascript el mes 0 es Enero y el 11 es Diciembre.
Si estamos despues del 25 de Diciembre, cambiamos Nav a la navidad del año siguiente.La variable mseg_dia es el número de milisegundos que tiene un día. Al restar las fechas el resultado sale en milisegundos, para pasarlos a dias hay que dividir por mseg_dia.Y ya solo queda escribir la frase del contador, por ejemplo que Quedan xx días para la Navidad.


LINK: JS. OTROS EJEMPLOS.http://javascript.espaciolatino.com/scripts/index.htm