domingo, 5 de enero de 2014

Java Nº02 -Pseudocodigo, es tu amigo.

TUTORIAL DE PROGRAMACIÓN
--


Escribir en pseudocódigo consiste en crear un primera aproximación al programa más o menos como te da la gana. Lo bueno de trabajar con pseudocodigo es que podemos ser tan obtusos como queramos, que si nosotros mismos podemos entender lo que hemos dicho estará bien.


Ejemplos sencillos de Pseudocódigo:

   Programa -> Sumar 3 a un número 
  Inicio
  Decir lo que hace el programa   
  Pedir un numero   
  Sumarle tres   
  Mostrar el resultado   
  Fin

   Programa -> Determinar el área de un circulo (A=Pi*r^2) 
   Inicio   
   Decir lo que hace el programa   
   Pedir el radio   
   Area=3,14*radio*radio   
   Mostrar el area   
   Fin
  
   Programa -> Diseña un algoritmo que lea la edad de dos personas y diga quien es más joven, la primera o la segunda. Ten en cuenta que ambas pueden tener la misma edad.
   Inicio   
   Decir lo que hace el programa   
   Pedir la edad de la primera persona   
   Pedir la edad de la segunda persona
   Si la edad de la 1ª > la edad de la 2ª   ->   Mostrar "la segunda persona es la más joven."
   Si la edad de la 2ª > la edad de la 1ª   ->   Mostrar "la primera persona es la más joven."
   Si ambas edades son iguales   ->   Mostrar "ambas personas tienen la misma edad."   Fin
 
Cuando se sabe un poco de programación un programa como los anteriores se pueden hacer inmediatamente, pero es conveniente empezar con un pseudocódigo cuando vayamos a atacar algo complejo, que en un primer momento se nos resista o ahora que estamos empezando a ver esto.
No hay reglas a la hora de trabajar esto, pero es conveniente seguir algunos criterios que nos permitan pasar rápidamente del pseudo al código.

Aquí 
tenéis un Tutorial de Pseudocógo-básico con todas las reglas que se recomiendan, pero básicamente lo que hay que tener en cuenta es lo siguiente:


Cuando se trabaja con código diferenciamos entre "cosas" y "lo que hacemos con ellas", es decir, diferenciamos entre "variables" y "acciones".En el primer ejemplo anterior (sumar 3 a un número) vemos que "el número" es una variable y que "sumar" es la acción que tiene lugar.
Además de la variable número vamos a declarar otra que llamaremos "resultado" para guardar en ella la operación resultado=número+3. Para que nuestro pseudocodigo tenga buen aspecto vamos a declarar primero todas las variables, después escribiremos el resto del código y terminaremos mostrando el resultado. Quedaría así:

   Programa -> Sumar 3 a un número 

   Inicio


   variables: número, resultado


   Decir lo que hace el programa   
   Pedir "número"   
   resultado=número+3


   Mostrar "resultado"


   Fin

¿A tiene mejor pinta que lo que habíamos hecho antes? Los otros dos tendrían este aspecto:

   Programa -> Determinar el área de un circulo (A=Pi*r^2) 


   Inicio


   Variables: radio, area


   Decir lo que hace el programa   
   Pedir el radio   
   area=3,14*radio*radio      
   Mostrar  area

   Fin

   Programa -> Diseña un algoritmo que lea la edad de dos personas y diga quien es más joven, la primera o la segunda. Ten en cuenta que ambas pueden tener la misma edad.

   Inicio


   variables: edad1, edad2


   Decir lo que hace el programa   
   Pedir la edad de la primera persona   
   Pedir la edad de la segunda persona


   Si (edad1 > edad2)  ->   Mostrar "la segunda persona es la más joven."      
   Si (edad2 > edad1)  ->   Mostrar "la primera persona es la más joven."

   Si ambas edades son iguales   ->   Mostrar "ambas personas tienen la misma edad."

   
   Fin


¿Qué podemos usar en nuestros prográmas? Vamos a verlo:


-- VARIABLES --


Vamos a ver las clases de variables que podemos utilizar. Tenemos 2 tipos: 

   -Numéricas: 1, 455, 4.34, pi,  \sqrt{2} \,, e...   -Alfanuméricas: hola, 23 años, Pepe...

Las numéricas son valores, mientras que las alfanuméricas son texto.


-- OPERACIONES --

Las operaciones que se pueden realizar se pueden clasificar en las siguientes clases:

   - Relacionales    - Aritméticas    - Alfanuméricas    - Lógicas 

-RELACIONALES: Los operadores relacionales se utilizan para formar expresiones que al ser evaluadas producen un valor verdadero o falso. Los operadores son:

Signo                      Operador

                           Mayor que
                           Menor que 
                           Igual a
 <=                           Menor o igual que 
>=                           Mayor o igual que
 <>                           Distinto

Ejemplos: 


Ejemplo                  Resultado 

25 <= 25                  Verdadero 
25 <> 25                  Falso
25 <> 4                    Verdadero 
50 <= 100                Verdadero 
500 >= 1                  Verdadero 
1 = 6                        Falso


ARITMÉTICAS: serían las matemáticas:


+         Suma
-          Resta
*          Multiplicación
/          División
 ^          Potencia
MOD    Devuelve el resto de una división
etc.



ALFANUMERICAS: Se puede operar con texto, por ejemplo se pueden unir "Hola" y "Pepe" para formar "Hola Pepe" o hacer cosas como contar las letras de un texto, pero en pseudocódigo no creo que merezca la pena por el momento desarrollar esto. Ya lo explicaré cuando estemos programando en java.


LÓGICAS:  Los operadores lógicos combinan sus partes de acuerdo con las reglas del álgebra de Boole para producir un nuevo valor que se convierte en el valor de la expresión, puede ser verdadero o falso. No te preocupes que lo explico ahora.

Signo                   Significado 

OR                       Suma lógica (O) 
AND                     Producto lógico (Y) 
NOT                     Negación (NO) 


Los resultados de las operaciones serían:

-OR
         Falso OR Falso = Falso
         Verdad OR Falso = Verdad
         Falso OR Verdad = Verdad
         Verdad OR Verdad = Verdad


Es decir, el resultado de un OR solo es Falso si las dos partes del mismo son falsas, desde que una sea verdad el resultado es Verdad.


-AND


      Verdad AND Verdad = Verdad
      Verdad AND Falso = Falso
      Falso AND Verdad = Falso
      Falso AND Falso = Falso
   
Es decir, para que se cumpla (X AND Y = Verdad) X e Y tienen que ser Verdad, todas las demás opciones tienen como resultado Falso.


-NOT


      NOT Verdad = Falso
      NOT Falso = Verdad


Es decir, NOT lo que hace es cambiar el estado; de verdad a falso y de falso a verdad. 



ASIGNACIONES


Veamos ahora las asignaciones. A una variable se le puede dar, asignar, un valor. Volviendo al ejemplo Nº1 (Sumar 3 a un número).

Cuando decimos:

   Pedir número 


Estaríamos resumiendo algo como esto:

   Mostrar "Introduce un número:"  
   número = (Lo que meta el usuario por el teclado)

Y al calcular el resultado lo que ponemos es:

   Resultado = número + 3

Haciendo esto estamos guardando en la variable un valor. No hace falta que diga que de entrada solo podemos guardar tantos valores como variables tengamos y que cuando guardas un nuevo valor el viejo se borra y se pierde si no lo guardamos en otro sitio.

CONDICIONALES

Vamos a echarle un ojo a las condicionales. Veremos 2 clases: "Si" y "Según sea".



-"Si"-


Son las estructuras que vimos ya en el ejemplo Nº3 (Compara la edad de dos personas).

Si (condición) -> Se hace esto

Las condicionales permiten que se realice una parte del programa solo si se cumple una condición.
Veamos las posibilidades del ejemplo:

   Inicio

   variables: edad1, edad2

   Decir lo que hace el programa   
   Pedir la edad de la primera persona   
   Pedir la edad de la segunda persona
   Si (edad1 > edad2)  ->   Mostrar "la segunda persona es la más joven."      
   Si (edad2 > edad1)  ->   Mostrar "la primera persona es la más joven."
   Si ambas edades son iguales   ->   Mostrar "ambas personas tienen la misma edad."   

   Fin
----
Supuesto 1) Persona 1 = 15 años y persona 2 = 10 años.
          El programa se ejecuta y va realizando las ordenes según las va encontrando. En primer lugar nos haría saber qué es lo que hace, luego nos pediría la primera edad (15) y después la segunda (10). Llegados a este punto pasaría a evaluar las condiciones. Como la primera es cierta nos diría que "la segunda persona es la más joven.". Pasaría a evaluar la 2ª condición, vería que es falsa y no haría nada. Comprobaría la 3ª, tampoco haría nada, y terminaría. 

Supuesto 2) Persona 1 =15 años y persona 2 = 20 años
          Cuando el programa se ejecute y irá realizando las ordenes según las va encontrando. En primer lugar nos haría saber qué es lo que hace, luego nos pediría la primera edad (15) y después la segunda (20). Llegados a este punto pasaría a evaluar las condiciones. Como la primera es falsa no haría nada y pasaría a evaluar la 2ª condición, vería que es ahora verdadera y devolvería "la primera persona es la más joven.". Comprobaría la 3ª, no haría nada, y terminaría. 

Supuesto 3) Persona 1 = 15 años y persona 2 = 15 años.
          En este caso entraría por el tercer condicional y nos mostraría que "ambas personas tienen la misma edad."

Una de las posibilidades de las condicionales es añadir un "Si no" para ejecutar un trozo de 
código en caso de que no se cumpla la primera condición.
Os habréis dado cuenta de que si se cumple que la Persona 1 es mayor que la persona 2, lo contrario o si ambas tienen la misma edad, no tiene sentido seguir evaluando las otras opciones... ¿así que por qué lo íbamos a hacer? 
Podemos mejorar nuestro código escribiéndolo así:

   Inicio

   variables: edad1, edad2


   Decir lo que hace el programa   
   Pedir la edad de la primera persona   
   Pedir la edad de la segunda persona


   Si (edad1 > edad2)      
      Mostrar "la segunda persona es la más joven."   
   Si no         
      Si (edad2 > edad1)             
         Mostrar "la primera persona es la más joven."         
      Si no               
         Si ambas edades son iguales                  
            Mostrar "ambas personas tienen la misma edad."

   Fin


Así solo se comprueba el 2º condicional si el primero el falso y el 3 si los otros dos son falsos.

Nota que indico con la sangría (la posición del texto en cada linea) qué parte del código está dentro de cada Si. Si no te queda claro así puedes poner un fin-si cuando se termina ese pedazo. Así:

   Si (edad1 > edad2)      
      Mostrar "la segunda persona es la más joven."
   Si no
         Si (edad2 > edad1)             
            Mostrar "la primera persona es la más joven."
         Si no               
            Si ambas edades son iguales                 
               Mostrar "ambas personas tienen la misma edad."
               fin-si
        fin-si
   fin-si   



-"Segun sea"-

Podemos conseguir algo similar al "Si" con la estructura "Segun sea", que tiene este aspecto:

   Inicio    

   Variable: número
   

   Mostrar Lo que hace el programa y pedir que se introduzca un número
   Leer número     

   Según sea numero 

      Caso = 1          Lo que queramos poner aquí


      Caso = 2          Pues lo mismo, lo que quieras


      Caso = 3      ... pillas la idea?


Fin

Vemos que según sea el valor de
número se entrará por un caso u otro. Y al igual que antes con el fin-si, si os ayuda a verlo más claro podéis poner un fin-caso o un fin-según. Es la magia del pseudocódigo, si quieres lo pones y si no no pasa nada :)

--

...Y ya se ha hecho demasiado largo por hoy. Con esto más o menos terminamos lo que son las estructuras secuenciales y condicionales. Lo más básico de todo. 
No os preocupéis si no lo tenéis muy claro ahora mismo, con hacer 2 ejemplos veréis que no es complicado.

Os propongo algunos ejercicios que podéis hacer más o menos rápido y que os ayudarán a empezar a comprender todo esto:

 
Estructuras Secuenciales y Condicionales

  • Diseña un algoritmo que calcule el IVA (16%) de un producto dado su precio de venta sin IVA.
  • Realizar un algoritmo que sirva para convertir pulgadas a centímetros. (Recuerda que 1 pulgada = 2.54 centímetros).
  • Diseñar un algoritmo que calcule el área de un triángulo en función de su base y su altura.
  • Diseña un algoritmo que pida el valor del lado de un cuadrado y muestre el valor de su perímetro y el de su área. 
  • Diseña un algoritmo que pida el valor de los dos lados de un rectángulo y muestre el valor de su perímetro y el de su área.
  • Diseña un algoritmo que, dado un número entero, muestre por pantalla el mensaje "El número es par." cuando el número sea par y el mensaje "El número es impar." cuando sea impar. (Una pista: un número es par si el resto de dividirlo por 2 es 0, e impar en caso contrario.)
  • Diseña un algoritmo que, dado un número entero, determine si éste es el doble de un número impar. (Ejemplo: 14 es el doble de 7, que es impar.)
  • Diseña un algoritmo que, dados dos números enteros, muestre por pantalla uno de estos mensajes: "El segundo es el cuadrado exacto del primero.", "El segundo es menor que el cuadrado del primero." o "El segundo es mayor que el cuadrado del primero.", dependiendo de la verificación de la condición correspondiente al significado de cada mensaje.
  • Diseña un algoritmo que, dados cinco números enteros, determine cuál de los cuatro últimos números es más cercano al primero. (Por ejemplo, si el usuario introduce los números 2, 6, 4, 1 y 10, el programa responderá que el número más cercano al 2 es el 1.)
  • Diseña un algoritmo que lea un carácter cualquiera desde el teclado, y muestre el mensaje "Es una MAYUSCULA" cuando el carácter sea una letra mayúscula y el mensaje "Es una MINUSCULA" cuando sea una minúscula. En cualquier otro caso, no mostrará mensaje alguno. (Considera únicamente letras del alfabeto inglés.) Pista: aunque parezca una obviedad, recuerda que una letra es minúscula si está entre la ’a’ y la ’z’, y mayúscula si está entre la ’A’ y la ’Z’.

Si 
queréis que resuelva alguno podéis pedirlo.
En la próxima entrada: -Pseudocodigo 2: Estructuras Iterativas (¡Es lo mismo 8 que 80!)

Saludos :)


1 comentario:

  1. Puedes resolver este ,gracias .

    Diseña un algoritmo que, dados cinco números enteros, determine cuál de los cuatro últimos números es más cercano al primero. (Por ejemplo, si el usuario introduce los números 2, 6, 4, 1 y 10, el programa responderá que el número más cercano al 2 es el 1.)

    ResponderEliminar