Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Certificado2021/algorimica/algoritmicaBase»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «{{Usuario:ManuelRomero/ProgramacionWeb/Certificado2021/algorimica/nav}}»)
 
(Instrucciones secuenciales)
 
(21 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{Usuario:ManuelRomero/ProgramacionWeb/Certificado2021/algorimica/nav}}
 
{{Usuario:ManuelRomero/ProgramacionWeb/Certificado2021/algorimica/nav}}
 +
<!--__NOEDITSECTION__-->
 +
 +
{|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:2px; border-color:#0066FF;"
 +
| width="100%" valign="top" style="padding: 0; margin:0px;" |
 +
{|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:1px; border-color:#0066FF;"
 +
| width="100%" valign="top" style="padding: 0; margin:0px;" |
 +
<span style="background:#FFFF99">
 +
</span>
 +
[[Imagen:programacionJavaScript.png|center]]
 +
|}
 +
__TOC__
 +
<div class=estilo1>
 +
<div id=parrafo>
 +
===Programando===
 +
*Hacer un programa, como ya hemos comentado, va a ser escribir un algoritmo en un lenguaje concreto de programación
 +
{{MRM_Definicion|Title=Algoritmo|
 +
Es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema}}
 +
*En informática cada operación va a ser una instrucción
 +
*Siempre ante los mismos valores vamos a obtener los mismos resultados
 +
 +
===Algunos conceptos  previas===
 +
<br>
 +
{{MRM_Actividad|Title=Debemos tener en nuestro vocabulario|
 +
;Algoritmo
 +
;Lenguaje de programación
 +
;Niveles de lenguajes
 +
(lenguaje en alto nivel y código ejecutable a través de compiladores e interpretados}}
 +
<br>
 +
 +
= Estructras de control =
 +
<br />
 +
{{MRM_Definicion|Title=Qué son las estructuras de control|
 +
*'''Son herramientas que permiten gestionar el flujo de ejecución de un programa'''.
 +
*''' Determinan el orden en que se ejecutan las instrucciones, dependiendo de condiciones específicas.
 +
*Tenemos las siguientes  estructuras de control son:
 +
 +
*1.- '''''Secuencial''''':
 +
  Las instrucciones se ejecutan una tras otra,
 +
  en el orden en que aparecen en el código.
 +
 +
*2.- '''''Condicional''''':
 +
  Permite ejecutar un conjunto de instrucciones si se cumple una condición,
 +
  o ejecutar otro conjunto de instrucciones si la condición no se cumple.
 +
  Las estructuras condicionales más comunes son las declaraciones
 +
''''' "if", "else if" y "else".'''''
 +
 +
*3.-'''''Bucle (o repetición)''''':
 +
Permite ejecutar un conjunto de instrucciones varias veces
 +
mientras se cumpla una condición.
 +
Las más comunes '''''"for", "while" y "do-while".'''''
 +
 +
 +
}}
 +
<br />
 +
== Estructura secuencial ==
 +
*Consiste en poner una instrucción detrás de otras. El orden de ejecución es secuncial y en orden (Excepción a esta regla los procesadores fuera de orden e instrucciones independientes).
 +
<br/>
 +
[[Archivo:secuencial.png]]
 +
 +
===Un programa===
 +
*Un programa es la implementación de un algoritmo en un lenguaje de programación concreto
 +
*En un programa podemos tener
 +
{{MRM_Puntos clave|Title=Qué contiene un programa|
 +
#'''''Instrucciones''''': Órdenes que implican acciones a realizar
 +
#'''''Estructuras de control''''': Establecen el orden o las condiciones a valorar el flujo de ejecución de
 +
}}
 +
;Tanto las <span style='color:green'>instrucciones</span> como las <span style='color:green'>estructuras de control</span>, necesitan trabajar con <span style='color:green'>valores</span> concretos.
 +
{{MRM_Puntos clave|Title=Las instrucciones y las variables|
 +
#'''''Datos o valores''''': Las instrucciones son acciones que van a realizar operaciones muchas veces sobre datos o valores
 +
#'''''Estos datos o valores''''' pueden ser guardados en '''''variables''''' para ser manipulados durante el programa
 +
}}
 +
 +
=== Instrucciones secuenciales ===
 +
*Básicamente las instrucciones se reducen a un conjunto pequeño de acciones
 +
Menos la instrucción de <span class='resaltado'>inicio y final de bloque</span>,
 +
y <span class='resaltado'>las estructuras de control</span>
 +
el resto establecen acciones y terminarán en un <span class='resaltado'>punto y coma ''''';'''''</span>
 +
*Las prodríamos clasificar en :
 +
{{MRM_Puntos clave|Title=Instrucciones básicas en un lenguaje de programación|
 +
;Inicio/fin
 +
;Declaración (Variables, Constantes, Funciones, Clases, Objetos, Excepciones)
 +
(Dependiendo del lenguaje puede haber más elementos, pero estos son los principales)
 +
;Asignación
 +
;Leer valores del exterior al programa (p.e. un valor del teclado).
 +
;Escribir, el programa muestra resultados ( Por ejemplo la pantalla).
 +
}}
 +
{{Tip|Es muy importante no confundir una '''''instrucción ''''' de una '''''expresión'''''}}
 +
<source lang=php>
 +
$a = 8+5;
 +
#La línea anterior es una instruccion de asignación
 +
#Lo que hay a la derecha del igual es una expresión aritmética
 +
</source>
 +
{{MRM_Puntos clave|Title=Instrucciones Vs Expresiones|
 +
;Instrucción
 +
*Una Instrucción es una acción cocreta que se ejecuta en un programa
 +
*Suelen ir en líneas separadas
 +
*Normalmente va a terminar en ''''';''''' (punto y coma)
 +
;Expresión
 +
*Consiste en unir con operadores, valores para operar
 +
*Los operadores marcan la operación a realizar o evaluar con los valores u operandos
 +
*Una expresión se evalúa (calcula) y nos da como resultado un valor de un determinado tipo
 +
*El tipo del valor que retorna, dependerá del tipo de operador; principalmente:
 +
aritmética si retorna un número (+,-,*,...)
 +
lógica o booleano si retorna un valor lógico (>, <,AND,. ..)
 +
cadena si retorna una cadena de caracteres (Concatenar cadenas, ...))
 +
}}
 +
 +
 +
==== Instrucción inicio/fin de bloque ====
 +
*Un programa es un bloque de instrucciones que tiene un ''inicio'' y un ''fin''. Dentro de este ''bloque'' puede haber muchos bloques. Siempre cada bloque empezará y terminará con una instrucción de inicio /fin bloque respectivamente.
 +
*De forma general, algorítmicamente podríamos establecer esto de la siguiente manera
 +
 +
<source lang=java>
 +
programa MiPrograma
 +
inicio
 +
  bloque_dentro_de_mi_programa
 +
  inicio
 +
    instruciones
 +
  fin
 +
  ...
 +
  instrucciones
 +
fin
 +
</source>
 +
 +
{{MRM_Puntos clave|Title= PHP instruccion inicio fin|
 +
;En PHP el bloque '''inicio''' y '''fin''' está especificado con los caracteres
 +
<source lang=php>
 +
  { //inicio de bloque
 +
  } //fin de bloque
 +
</source>
 +
;Por otro lado el inicio del programa se especifica con las etiquetas
 +
<source lang=php>
 +
<?php //Etiqueta de inicio de script
 +
 +
?>  //Etiqueta de fin de script
 +
</source>
 +
}}
 +
<source lang=java>
 +
function bloque_principal()
 +
{
 +
  function otro_bloque_B()
 +
  {
 +
    //instricciones_bloque_B
 +
  }
 +
  //instrucciones del bloque princial
 +
}
 +
</source>
 +
*El concepto '''''function''''' lo abordaremos posteriormente.
 +
 +
{{MRM_Puntos clave|
 +
Title=La indentación|
 +
Muy importante es la '''''indentación'''''.
 +
*Esto implica que  que '''todas '''las instrucciones de un determinado bloque vayan indentadas a un mismo nivel, con el mismo margen.
 +
*Cada nuevo nivel de bloque aumento la sangría o margen.
 +
*Si cierro el bloque vuelvo a niveles anteriores.
 +
}}
 +
 +
{{nota|Algunos lenguajes como '''Python '''usan directamente la indentación como inidicador de inicio/fin de bloque}}
 +
*De momento usaremos estas etiquetas y de forma coloquial las traduciremos por '''''principio de programa php''''' y '''''final de programa'''''
 +
 +
<!--
 +
==== Instrucción de declaración ====
 +
Sirve para declarar elementos dentro del programa
 +
En un programa se pueden declarar
 +
#variables
 +
#constantes
 +
#subprogramas (funciones, procedimientos. En terminología OO métodos), esto lo veremos mas adelante
 +
 +
 +
*La manera de hacer declaración dependerá del lenguaje de programación utilizado.
 +
{{MRM_Puntos clave|Title=Lenguajes de programación en función de cómo se realiza la delcaración|
 +
;Lenguajes fuertemente tipados
 +
:las variables deben de ser declaradas antes de usarlas.
 +
:Durante la ejecución esa variable no cambia de tipo
 +
<source lang=java>
 +
int edad;
 +
String nombre;
 +
</source>
 +
;Lenguajes débilmente tipados
 +
;Los valores con los que trabaja siempre tienen un tipo.
 +
;Éste no ha de ser declarado antes de ser utilizarlo.
 +
;De forma implícitamete es declarada  el tipo cada vez que asignamos un valor a la variable utilizada.
 +
;Este tipo puede cambiar si asignamos un valor de otro tipo
 +
<source lang=java>
 +
$a = 5; //Ahora la variable $a es de tipo entero
 +
$a = "Nieves"; //Ahora la variable $b es de tipo string
 +
 +
</source>
 +
}}
 +
*El tipo de la variable es utlizado  para saber cuánto espacio de memoria debo reservar para almacer el valor de esa variable.
 +
*Por ejemplo en un entero puede ser que necesite 2 o 4 bytes, pero en un float 8 o 15 bytes, según la precisión
 +
 +
*Respecto a los tipos de variable, dependerá del lenguaje utilizado
 +
*Consideremos el lenguaje '''''php'''''
 +
# ''entero o int'' , en php será de tipo '''''int'''' con valores numéricos sin decimales
 +
# ''real o float'', en php será de tipo '''''float'''' igualmente valores numéricos con decimales.
 +
# ''cadena_caracteres o String'' en php será el tipo '''''string''''' valores con cadenas de caracteres
 +
# ''booleano o boolean'' en php será de tipo '''''booleano''''  o '''''bool'''''igualmente. Valores verdad o falso
 +
# ''null'' Corresponde a un valor que no existe o para especificar el tipo de una variable no tiene valor asignado.
 +
-->
 +
 +
====Identificador====
 +
*Identificador es un nombre que identifica a la variable, constante o función.
 +
*Existen reglas para crear los identificadores y éstas dependen del lenguaje para el que estemos escribiendo código. Por ejemplo en PHP obligatoriamente tienen que empezar por '''$'''.
 +
*En ''php''los identificadores siguen la siguiente expresión regular
 +
$[a..zA..Z|_][a..zA..Z|_|0..9]*
 +
{{MRM_Actividad|Vamos a interpretar esa expresión regular}}
 +
Veamos ejemplos de declaración de variables
 +
{{MRM_Puntos Clave|Identificadores en php
 +
$[a..zA..Z|_][a..zA..Z|_|$|0..9]*
 +
}}
 +
<source lang=java>
 +
//Declaramos tres variables (edad, nombre, raiz) de los tipos que precede (entero, string o cadena de caracteres y real o float)
 +
int edad;
 +
String nombre;
 +
float raiz;
 +
</source>
 +
{{MRM_Pregunta|
 +
;Cómo declararías estas variables en php}}
 +
 +
 +
 +
 +
 +
 +
*Ejemplos de declaración de constantes
 +
*En principio en la constante no necesito saber el tipo con lo que  directamente uso identificador y valor
 +
<source lang=javascript>
 +
const IVA = 3.14;
 +
const MESES = 12;
 +
</source>
 +
<source lang=javaScript>
 +
//Defino una constante
 +
{
 +
const  IVA = 3.14;
 +
const  MESES = 12;
 +
const pi = 3.1416;
 +
 +
define (IDENTIFICADO, valor);
 +
// … mas instrucciones
 +
}
 +
</source>
 +
<!--
 +
Definición de subprogramas.
 +
*Este es un apartado muy importante que trataremos de manera independiente. *Sabemos que puedo escribir un subprograma con una parte del código que semánticamente está muy unido y/o se repite varias veces en  a lo largo del programa.
 +
*Solo por satisfacer curiosidades, sintácticamente un subprograma tiene la siguiente estructura
 +
tipo_valor_retorno idnetificador_subprograma(lista de parámetros)
 +
 +
<source lang=java>
 +
//Defino un método ''subprograma'' para que calcule la edad a partir de la fecha de nacimiento
 +
//Observamos que devuelve un entero
 +
int calculaEdad(fnac)
 +
{
 +
Date fecha = new Date();
 +
int edad;
 +
edad = fnac-fecha;
 +
return edad;
 +
}
 +
</source>
 +
-->
 +
 +
==== Instrucción de asignación ====
 +
Consiste en asignar un valor a una variable
 +
'''a = valor'''
 +
La parte de la izquierda siempre será una variable ''posición de memoria donde almacenaré el valor''
 +
'''valor '''se puede expresar de diferentes maneras:
 +
* '''literal''' Directamente aporto el '''valor''', '''constante o identificador de variable '''que directamente me da el valor.
 +
* '''expresión''' ==> es un predicado con operadores que es evaluado y de su evaluación obtengo un valor. En función de los operadores las expresiones serán de diferente tipo
 +
** '''''expresiones booleanas o lógicas'''''( operador booleano AND, OR, NOT). Su evaluación me da un valor booleano (VEDAD o FALSO)
 +
** '''''expresiones aritméticas'''''operadores (+,-,*,/,MOD,) (SU EVALUACIÓN ME DA UN NÚMERO)
 +
** '''''expresiones de comparación''''' (=,>,<,>=,<=,!=) (Su evaluación me dá un valor booleano VERDAD o FALSO)
 +
*'''''Función o método''''' que retorna dicho valor: Es un bloque de ejecución ''independiente'' que o bien lo escribo yo en otra parte de este bloque o bien ya está disponibles en el conjunto de funciones o bilbiotecas o API que el entorno me ofrece para utilizar directamente. Por ejemplo antes hemos escrito el método '''calculaEdad...'''
 +
 +
==== Instrucciones de leer/escribir ====
 +
*En realidad aquí depende de los lenguajes, algunos como Pascal y Modula tiene dentro del lenguaje una instrucción para visualizar un texto por la pantalla y otra para leerlo del teclado y asignárselo a una variable. Otros (la mayoría), como Java, C, python,... esta funcionalidad nos la brinda una función de una biblioteca que previamente debe ser cargada.
 +
*Otros lenguajes como PHP tienen ambas cosas echo (parte del lenguaje), print función del sistema, ambas para visualizar caracteres por pantalla. En general con cualquier lenguaje podremos:
 +
visualizar(”cadena de caracteres , valor de variable” + variable+”expresion)
 +
*Para leer un valor que el usuario introduzca por el teclado y almacenarlo en una variable
 +
leer(variable);
 +
*Un Ejemplo algorítmicamente quedaría
 +
<source lang=java>
 +
void MiPrograma
 +
principio
 +
visualizar (“Introduce tu edad”);
 +
leer edad;
 +
visualizar (“Tu edad es de”+ edad);
 +
fin
 +
</source>
 +
 +
*En php vamos a usar dos funciones para este cometido, aunque como veremos hay mas.
 +
'''''echo'''''
 +
'''''print'''''
 +
 +
==Estructuras Selectivas==
 +
*Las instrucciones que introducen  las estructuras selectivas permiten ejecutar un bloque de instrucciones o no en función de que ocurra una situación o no ocurra.
 +
*La situación siempre va a ser evaluada como una expresiónn booleana
 +
*La sintaxis de las instrucciones selectivas son
 +
si (condicion) entonces
 +
  bloque
 +
fin_si
 +
<br />
 +
[[Archivo:seleccion_1.png]]
 +
<br />
 +
*Como hemos comenado  ''condición'' es una ''expresión booleana'' que tras evaluarse obtenemos un valor '''''verdadero''''' o '''''falso'''''.
 +
*Este valor en los lenguajes de programación es '''''true''''' o '''''false'''''
 +
*alternativamente a esta estructura de control tenemos el sino
 +
<source lang=javascript>
 +
si (condicion) entonces
 +
  bloque_1
 +
si_no
 +
  bloque_2
 +
fin_si
 +
</source>
 +
*Por ejemplo pedimos dos números para dividir, solo dividimos si el denominador es mayor que 0
 +
[[Archivo:seleccion_2.png|center]]
 +
<br />
 +
*Esta estructura selectiva puede adaptarse a tres situaciones,
 +
 +
{{MRM_Actividad|Title=Situaciones para  utilizar el if|
 +
;If simple
 +
<source lang=php>
 +
if (condicion_booleana)
 +
{ => Inicio de bloque if
 +
  Acciones
 +
} => fin de bloque if
 +
</source>
 +
;If/else (Evalúo una condición con dos posibilidades)
 +
<source lang=php>
 +
if (condicion_booleana)
 +
{ => Inicio de bloque if
 +
  Acciones o instrucciones
 +
} => fin de bloque if
 +
else //Es la situación complementaria
 +
{ => Inicio de bloque else
 +
  Acciones o instrucciones
 +
} => Inicio de bloque else
 +
</source>
 +
;If múltiple (Evalúo una condición con varias posibilidades)
 +
<source lang=php>
 +
if (condicion_booleana_1)
 +
{ => Inicio de bloque if
 +
  Acciones
 +
} => fin de bloque if
 +
elseif(condicion_booleana_2)
 +
{
 +
}
 +
elseif(condicion_booleana_3)
 +
{
 +
}
 +
else //Resto de situaciones
 +
{
 +
}
 +
</source>
 +
}}
 +
 +
 +
 +
===If simple===
 +
*Solo evaluamos una situación
 +
*Podemos ver en la imagen.
 +
[[Imagen:if_simple.png|center|300px]]
 +
{{MRM_Ejemplo|
 +
;Haz un programa que genere dos números y si el denominador es 0 que lo cambie por uno
 +
;Un programa que haga siempre la raíz de un número si el número es negativo, lo convierte a positivo y pone una i
 +
Con expresiones booleanas compuestas
 +
;Genero una nota (1..10)y una edad (14..25) el programa me dirá la nota y la edad. Además si soy mayor de edad y he sacado más de 7 me felicitará con un mensaje.
 +
;Haz un programa que obtener una edad (1..120) y me diga si una persona es niño (1-11), adolescente (12-16) joven(17.19) adulto(20-80) o mayor (81-120)
 +
}}
 +
 +
===If completo (if/else)===
 +
*En este caso comparamos una situación con dos posibles estados
 +
*Siempre va a ocurrir que estemos en un estado u otro
 +
 +
[[Archivo:if_else_2.png|300px]]
 +
 +
{{MRM_Ejemplo|
 +
;Haz un programa que genere un número y me diga si es par o impar
 +
;Un programa que me diga si soy mayor o menor de edad
 +
;Un programa que me diga si un año es o no bisiesto
 +
<source lang=php>
 +
<?php
 +
 +
//Obetenemos un valor aleatorio
 +
$year = rand(1, 5000);
 +
 +
 +
if ($year % 4 == 0) {//Posibles bisiestos (divisibles entre 4
 +
    if (($year % 400 == 0) OR ( $year % 100 != 0)) { // Dentro de ellos si son divsibles
 +
                                                    // entre 400
 +
        echo "El año $year sí es bisiesto";          // O bien no lo son entre 100
 +
    } else {                                       
 +
        echo "El año $year no  es bisiesto";
 +
    }
 +
} else
 +
    echo "El año $year no es bisiesto";
 +
 +
</source>
 +
 +
}}
 +
 +
===If múltiple (if/elseif/elseif/.../else)===
 +
*En este caso ya no solo tenemos dos situaciones posibles, sino tres o más
 +
*La variable a evaluar puede tomar diferentes valores
 +
[[Archivo:if_else_multiple.png|400px]]
 +
{{MRM_Ejemplo|
 +
;Un programa que ponga el mes en letra (un valor de 1 a 12)
 +
}}
 +
 +
{{MRM_Ejemplo|Title=Valida una fecha|
 +
;Un programa que valide una fecha
 +
;Generamos aleatoriamente la fecha
 +
;Mostramos al final la fecha
 +
;Mostramos el error en caso de que se produzca
 +
{{Plegable|hide|Posible solucion|
 +
<source lang=php>
 +
<?php
 +
/**
 +
*
 +
* @param type $year un entero que será la fecha
 +
* @return boolean true o false que nos dirá si
 +
* El año es o no bisiesto
 +
*/
 +
function bisiesto($year) {
 +
    if ($year % 4 == 0) {//Posibles bisiestos
 +
        if (($year % 400 == 0) OR ( $year % 100 != 0)) { //
 +
            return true;
 +
        } else {
 +
            return false;
 +
        }
 +
    } else
 +
        return false;
 +
}
 +
 +
//Obetenemos los valores
 +
$dia = rand(1, 35);
 +
$mes = rand(1, 15);
 +
$year = rand(1, 2500);
 +
//Podríamos poner valores explícitos para verificar situaciones
 +
//$dia = 29;
 +
//$mes = 2;
 +
//$year = 2020;
 +
//Guardo la fecha en un string
 +
$fecha = "$dia/$mes/$year";
 +
 +
//Genero una variable que vamos a usar con doble cometido
 +
//Almacenar la información del error en caso de que se produzca
 +
//Si no hay error tendrá un valor nulo (null)
 +
$error_fecha = null;
 +
 +
 +
//Analizamos la fecha y en caso de que haya un error lo guardamos
 +
//En la variable $error_fecha
 +
switch ($mes) {
 +
    case 1:
 +
    case 3:
 +
    case 5:
 +
    case 7:
 +
    case 8:
 +
    case 10:
 +
    case 12:
 +
        if ($dia > 31)
 +
            $error_fecha = "En mes de 31 días no puedo tener $dias";
 +
        break;
 +
    case 2:
 +
        if (bisiesto($year) == true) {
 +
            if ($dia > 29)
 +
                $error_fecha = "En mes bisiesto no puedo tener $dias";
 +
        }
 +
        else {
 +
            if ($dia > 28)
 +
                $error_fecha = "En mes no bisiesto no puedo tener $dias";
 +
        }
 +
        break;
 +
    case 4:
 +
    case 6:
 +
    case 9:
 +
    case 11:
 +
        if ($dia > 30)
 +
            $error_fecha = "En mes de 31 días no puedo tener $dias";
 +
        break;
 +
    default:
 +
        $error_fecha = "Solo hay 12 meses valor $mes incorrecto ";
 +
}
 +
?>
 +
 +
<!doctype html>
 +
<html lang="en">
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title>Document</title>
 +
    </head>
 +
    <body>
 +
<?php
 +
//Ahora aquí en la parte de html visualizamos la información
 +
//En caso de que haya error lo mostramos
 +
//Si no mostramos solo la fecha
 +
if ($error_fecha == null)
 +
    echo "La fecha $fecha es correcta";
 +
else
 +
    echo "La fecha $fecha es incorrecta por $error_fecha";
 +
?>
 +
    </body>
 +
</html
 +
</source>
 +
}}
 +
}}
 +
 +
 +
<br />
 +
*Para este caso tenemos otra estructura de control llamado '''''switch-case'''''
 +
 +
 +
{{MRM_Actividad|Title=Ejemplo if múltiple|
 +
*Vamos a suponer que queremos comentar una edad en función de los años:
 +
:bebé (0-2)
 +
:niño(3..11)
 +
:adolescente(12-16)
 +
:joven(17..  29)
 +
:adulto(30-65)
 +
:mayor 66..
 +
}}
 +
<source  lang = php>
 +
programa di_situacion_edad
 +
inicio
 +
  int edad
 +
  visualizar 'dime tu edad'
 +
  leer (edad);
 +
  si (edad<=2) entonces
 +
      visualizar 'Que bien, eres un niño');
 +
  fin_si
 +
 +
  si ((edad >=2) and (edad<=11)) entonces
 +
      visualizar 'Que bien, eres un niño');
 +
  fin_si
 +
  si((edad >=12) and (edad<=16)) entonces
 +
      visualizar 'No te enfades demasiado, Ya eres un adolencente');
 +
  fin_si
 +
  si(((edad >=17) and (edad<=29))) entonces
 +
      visualizar 'Ahora eres un joven lábrate el futuro');
 +
  fin_si
 +
  si(((edad >=30) and (edad<=65))) entonces
 +
      visualizar 'Eres un adulto disfruta la vida de forma activa');
 +
  fin_si
 +
  si(edad >65) entonces
 +
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de todo lo que has hecho');
 +
  fin_si
 +
fin
 +
</source>
 +
*En este caso las estructuras de control tienden a complicarse en especial en lenguajes como java o c donde el sino_si no es en realidad mas que otro si con su inicio y fin de bloque correspondiente.
 +
=====Alternativa a la estructura de control si=====
 +
*Si lo que estamos analizando tiene dos situaciones la estructura de control ''si'' vista anteriormente es muy cómoda
 +
*Pero cuando tenemos varias situaciones como es el caso anterior, la edad que estamos analizando tiene  4 posibles situaciones, puede ser muy complejo gestionarlo con el si, para esta situaciones esta la estructura de control '''caso''' u '''opcion''' o '''con'''.
 +
<source lang=javascript>
 +
caso_opcion variable
 +
  caso: valor1
 +
      bloque1
 +
  caso: valor2
 +
      bloque2
 +
  caso: valor3
 +
      bloque3
 +
  caso: valor4
 +
      bloque4
 +
  defecto:
 +
      bloque_otro_caso
 +
fin_caso
 +
</source>
 +
<br/>
 +
[[Archivo:seleccion_3.png]]
 +
<br/>
 +
*Esta estructura de control tiene la limitación de que solo podemos especificar un valor
 +
*Por ejemplo el caso siguiente no se podría hacer
 +
<source lang=javascript>     
 +
programa di_situacion_edad
 +
inicio
 +
  int edad
 +
  visualizar 'dime tu edad'
 +
  leer (edad);
 +
  caso_opcion edad
 +
    caso <=11
 +
        visualizar 'Que bien, eres un niño');
 +
    caso <= 16) entonces
 +
      visualizar 'No te enfades demasiado, Ya eres un adolencente');
 +
    caso <= 29) entonces
 +
      visualizar 'Ahora eres un joven lábrate el futuro');
 +
    caso <= 65) entonces
 +
      visualizar 'Ya eres todo un adulto');
 +
  defecto
 +
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de la vida');
 +
  fin_caso
 +
fin
 +
</source>
 +
*Pero podemos hacer una especie de apaño para poderlo realizar
 +
*Decimos que en la cabecera del caso debe de haber un valor que normalmente es una variable,
 +
*Por lo que sería correcto poner el siguiente código
 +
<source lang=javascript>
 +
caso_opcion (true){
 +
.......
 +
}
 +
</source>
 +
*En él quiero comparar el valor true con cada caso
 +
*Ahora lo que haríamos es poner en cada caso una expresión que me devuelva un booleano
 +
<source lang=javascript>
 +
caso_opcion (true){
 +
      caso (edad<=11):
 +
        visualizar 'Que bien, eres un niño');
 +
    caso (edad<= 16) entonces
 +
      visualizar 'No te enfades demasiado, Ya eres un adolencente');
 +
    caso (edad<= 29) entonces
 +
      visualizar 'Ahora eres un joven lábrate el futuro');
 +
    caso (edad<= 65) entonces
 +
      visualizar 'Ya eres todo un adulto');
 +
  defecto
 +
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de la vida');
 +
  fin_caso
 +
}
 +
</source>
 +
 +
*De esta forma sí que podemos usar el '''''switch''''' para evaluar rangos de valores.
 +
*Este ejemplo no se aprecia la utilidad y ventaja de usar el '''case''' en casos donde hay varias posibles situaciones, no obstante a lo largo del curso seguro que lo experimentamos.
 +
 +
==Estructuras Iterativas o repetitivas==
 +
*Este tipo de estructuras permiten '''repetir''' un bloque de ejecución controlado por una determinada condición
 +
*La condición es una expresión booleana (Se evalúa y me da cierto o falso)
 +
*Mientras se produzca la condición repito el bloque de control.
 +
algorítmicamente sería
 +
[[Archivo:mientras_que.png|400px]]
 +
<source lang=javascript>
 +
mientras (condición) hacer
 +
  bloque_instrucciones
 +
fin_mientras
 +
</source>
 +
*La implementación en php sería
 +
<source lang=javascript>
 +
 +
</source>
 +
===Reglas de oro para realizar bucles===
 +
*En '''''condición''''',  normalmente evaluamos alguna/s variables.
 +
*Debemos tener en cuenta tres reglas de oro para los bucles
 +
 +
<ol>
 +
 +
<li><p>inicializar la variable de control</p>
 +
<p>
 +
Si realizo la comparación y no he inicializado la variable nunca entraré dentro del cueropo del bucle
 +
</p>
 +
 +
<source lang = javascript>
 +
programa Error_mientras_1
 +
inicio
 +
caracter seguir
 +
mientras seguir='s' hacer
 +
  visualizar 'dime tu edad'
 +
  Leer (edad);
 +
  visualizar ' te faltan '+(65-edad)+'años para jubilarte';
 +
  visualizar 'quieres seguir'
 +
  leer (seguir);
 +
fin_mientras
 +
</source>
 +
como vemos en este caso nunca entrare al bloque
 +
</li>
 +
<li><p>actualizar dentro del bucle la variable de control</p>
 +
<p>
 +
Si entro en el cuerpo del bucle y no actualizo la variable de control nunca saldré del bucle
 +
</p>
 +
<source lang=javascript>
 +
programa Error_mientras_2
 +
inicio
 +
int veces;
 +
veces = 1
 +
mientras veces < 10 hacer
 +
  visualizar 'dime tu edad'
 +
  Leer (edad);
 +
  visualizar ' te faltan '+(65-edad)+'años para jubilarte';
 +
fin_mientras
 +
</source>
 +
En este caso nunca saldría del bucle produciéndose una situación de '''bucle infinito'''
 +
</li>
 +
</ol>
 +
#realizar correctamente la condicion
 +
consite en tener cuidado con la condición <, <=...
 +
por ejemplo si quiero visualizar la tabla de multiplicar normal 2*1... 2*10
 +
<source lang=php>
 +
programa Error_mientras_3
 +
inicio
 +
int veces;
 +
int tabla;
 +
veces = 1
 +
visualizar 'dime un número para sacar su tabla de multiplicar'
 +
Leer (tabla);
 +
mientras veces < 10 hacer
 +
  visualizar (tabla +'*'+ veces +'='+tabla*veces);
 +
  veces = veces+1;
 +
fin_mientras
 +
</source>
 +
*Observamos que imprimiría si introducimos el 2
 +
2*1=2 2*2=4,.. 2*9=18
 +
*y nos faltaría el 2*10 por que la condición no debería de ser < estricto sino <=
 +
*Es cierto que de todos este es el error menos malo, pero dependiendo de situaciones puede ser incluso peor que los anteriores, ya que aparentemente tu programa funciona bien, pero el valor que te retorna es incorrecto :(
 +
 +
===Tipos de bucles===
 +
En realidad cualquier situación iterativa se  puede hacer con la estructura '''mientras''' vista anteriormente.
 +
pero existen situaciones en las que ya sabemos de antemano antes de ejecutar el bucle cuantas veces lo vamos a hacer.
 +
#Bucle '''para''' o '''''for'''''
 +
Para esta situaciones esta la estructura de control '''para''' que a continuación exponemos
 +
como en el caso anterior con la tabla de multiplicar
 +
<source lang=javascript>
 +
programa Iteracion_Para
 +
inicio
 +
int veces;
 +
int tabla;
 +
visualizar 'dime un número para sacar su tabla de multiplicar'
 +
Leer (tabla);
 +
para veces = 1 hasta veces = 10 hacer
 +
  visualizar (tabla +'*'+ veces +'='+tabla*veces);
 +
fin_para
 +
</source>
 +
*Como vemos en este caso no tengo que inicializar la variable antes del bucle ni actualizarla dentro
 +
*La inicialización se hace  en la cabecera
 +
*La actualización es transparente al programador (la realiza el cuerpo del bucle)
 +
*El número de veces puede ser una variable, no ha de ser conocido en tiempo de compilación.
 +
*Por ejemplo el siguiente bucle calcula el sumatorio de n números (desde el 1 hasta n: 1+2+3+4+...)
 +
<source lang=javascript>
 +
programa Iteracion_para_2
 +
inicio
 +
  int numNumeros;
 +
  int numero;
 +
  int total = 0;
 +
  visualizar 'dime hasta que número quieres sumar'
 +
  Leer (numNumeros);
 +
  para numero = 1 hasta numero = numNumeros hacer
 +
        total=total+numero
 +
  fin_para
 +
  visualizar 'el sumatorio desde 1 hasta'+numNumeros+'es'+total
 +
fin
 +
</source>
 +
*En php esta estructura de control es la siguiente
 +
<source lang=javascript>
 +
for (var n=0; n>10; n++){
 +
 +
}
 +
</source>
 +
 +
;Bucle hacer
 +
*Hay situaciones en las que sé de antemano que por lo menos una vez sí que se va a ejecutar el cuerpo del bucle.
 +
*En estos casos hacer la primera vez una comparación es innecesario.
 +
*Para ahorrar esta instrucción, se desarrollo la estructura de control hacer ... hasta que, en la cual la condición de evaluación del bucle se hacer al final del cuerpo del bucle.
 +
*Supongamos que le programa quiere visualziar los años para jubilarse de 1 o varias personas.
 +
programa Iteracion_hacer_1
 +
inicio
 +
caracter seguir
 +
hacer
 +
  visualizar 'dime tu edad'
 +
  Leer (edad);
 +
  visualizar ' te faltan '+(65-edad)+'años para jubilarte';
 +
  visualizar 'quieres seguir'
 +
  leer (seguir);
 +
hasta que seguir ='n';
 +
*Como vemos en este caso no hay que inicializar la variable fuera  del bucle, sino que se hace en la primera iteración del bucle.
 +
 +
=LENGUAJES DE PROGRAMACION=
 +
<br/>
 +
{{MRM_Definicion|
 +
Conjunto de '''lexemas'''  que se combinan siguiente unas reglas de construcción o '''sintaxis''' y que tienen un significado definido o '''semántica''' que se emplea para expresar un algoritmo}}
 +
*Dicho ''algoritmo'' es  codificado en un ''lenguaje'', constituyendo un ''programa'' escrito en ese leguaje de alto nivel.
 +
*El programa una máquina computacional no puede ser capaz de ejecutar
 +
*El lenguaje va acompañado de uno o varios  programas (compilador o interprete )que es capaz de generar código máquina a partir del programa expresado en el lenguaje de alto nivel
 +
==Niveles de lenguajes ==
 +
En función de la proximidad de compresión del lenguaje al lenguaje humano se puede hablar de tres niveles de lenguajes de programación.
 +
;Alto nivel
 +
:El lenguaje utiliza lexemas y estructuras sintácticas similares al utilizado en el lenguaje humano
 +
;Bajo nivel
 +
:El lenguaje es más próximo a la máquina. Aunque se pueden utilizar lexemas como es el caso de ensamblador, éstos tienen una traducción directa al código máquina 0's y 1's
 +
;Nivel de lenguaje máquina
 +
Conjunto de 0'1 y 1's que corresponden a códigos binarios que el procesador es capaz de entender y ejecutar
 +
*También es posible encontra lenguajes como 'c' que se consideran de ''nivel medio¡¡, si bien por su expresibidad son lenguajes de alto nivel, el hecho de que tenga la posibilidad de insertar ensamblador o especificar el acceso directo a registros del procesador, hace que se consideren lenguaje de nivel medio
 +
===Proceso de transformación===
 +
Entendemos por tal el hecho de pasar de código de alto nivel a código máquina.
 +
Este proceso puede ser una mera traducción como es el caso de pasar de ensamblador a código máquina, o ser un proceso más complejo.
 +
====Lenguajes compilados====
 +
 +
generando primero el obj que es binario, pero aún falta enlazar librerías y resolver direccionamiento relativo a direecionamiento absoluto. esta tarea la hace el link que genera el .exe
 +
 +
 +
;Lenguajes interpretados
 +
;Java un caso especial: lenguaje semicompilado
 +
;Para que programar
 +
 +
===Ejemplos===
 +
Existen diferentes modos de expresar un algoritmo
 +
Por ejemplo con un ordinograma como la siguiente imagen o seudocódigo como ya hemos visto
 +
 +
[[Archivo:Algoritmo.png|150px|left]]
 +
<br/>
 +
<br/>
 +
 +
 +
*Modulación es una forma de utilziar la programacion estructurada de forma efectiva y organizada
 +
''''DIVIDE Y VENCERAS''''
 +
**Dividir el problema a resolver en partes mas pequeñas o subproblemas.
 +
**Dar solución a cada una de las partes
 +
**Unir las soluciones para solucionar el problema inicial
 +
**Es una filosibía de ''''Divides y vencerás'''
 +
**Es más fácil resolver un problema sencillo que uno complejo
 +
**Es efectivo y práctico
 +
*Me permito afirmar que la programacion Orientada a Objetos en gran parte tiene mucha base en la programación modular
 +
*Veremos como la POO está basado en ''programar clases'' '''futuras instancias de objetos'''
 +
La programación de clases se realiza con programación estructurada y modular, por lo que debemos de saber programar de forma estructurada y modular
 +
</div>
 +
|}
 +
</div>

Última revisión de 16:48 26 oct 2023

Volver



ProgramacionJavaScript.png

Programando

  • Hacer un programa, como ya hemos comentado, va a ser escribir un algoritmo en un lenguaje concreto de programación


Icon define.gif
Algoritmo

Es una lista bien definida, ordenada y finita de operaciones que permite hallar la solución a un problema


  • En informática cada operación va a ser una instrucción
  • Siempre ante los mismos valores vamos a obtener los mismos resultados

Algunos conceptos previas



Icon activity.jpg
Debemos tener en nuestro vocabulario
Algoritmo
Lenguaje de programación
Niveles de lenguajes
(lenguaje en alto nivel y código ejecutable a través de compiladores e interpretados



Estructras de control



Icon define.gif
Qué son las estructuras de control
  • Son herramientas que permiten gestionar el flujo de ejecución de un programa.
  • Determinan el orden en que se ejecutan las instrucciones, dependiendo de condiciones específicas.
  • Tenemos las siguientes estructuras de control son:
  • 1.- Secuencial:
 Las instrucciones se ejecutan una tras otra,
 en el orden en que aparecen en el código.
  • 2.- Condicional:
 Permite ejecutar un conjunto de instrucciones si se cumple una condición, 
 o ejecutar otro conjunto de instrucciones si la condición no se cumple. 
 Las estructuras condicionales más comunes son las declaraciones
 "if", "else if" y "else".
  • 3.-Bucle (o repetición):
Permite ejecutar un conjunto de instrucciones varias veces 
mientras se cumpla una condición. 
Las más comunes "for", "while" y "do-while".




Estructura secuencial

  • Consiste en poner una instrucción detrás de otras. El orden de ejecución es secuncial y en orden (Excepción a esta regla los procesadores fuera de orden e instrucciones independientes).


Secuencial.png

Un programa

  • Un programa es la implementación de un algoritmo en un lenguaje de programación concreto
  • En un programa podemos tener


Icon key points.gif

Qué contiene un programa

  1. Instrucciones: Órdenes que implican acciones a realizar
  2. Estructuras de control: Establecen el orden o las condiciones a valorar el flujo de ejecución de


Tanto las instrucciones como las estructuras de control, necesitan trabajar con valores concretos.


Icon key points.gif

Las instrucciones y las variables

  1. Datos o valores: Las instrucciones son acciones que van a realizar operaciones muchas veces sobre datos o valores
  2. Estos datos o valores pueden ser guardados en variables para ser manipulados durante el programa



Instrucciones secuenciales

  • Básicamente las instrucciones se reducen a un conjunto pequeño de acciones
Menos la instrucción de inicio y final de bloque, 
y las estructuras de control 
el resto establecen acciones y terminarán en un punto y coma ;
  • Las prodríamos clasificar en :


Icon key points.gif

Instrucciones básicas en un lenguaje de programación

Inicio/fin
Declaración (Variables, Constantes, Funciones, Clases, Objetos, Excepciones)
(Dependiendo del lenguaje puede haber más elementos, pero estos son los principales)
Asignación
Leer valores del exterior al programa (p.e. un valor del teclado).
Escribir, el programa muestra resultados ( Por ejemplo la pantalla).


Icon present.gif
Tip: Es muy importante no confundir una instrucción de una expresión


$a = 8+5;
#La línea anterior es una instruccion de asignación
#Lo que hay a la derecha del igual es una expresión aritmética


Icon key points.gif

Instrucciones Vs Expresiones

Instrucción
  • Una Instrucción es una acción cocreta que se ejecuta en un programa
  • Suelen ir en líneas separadas
  • Normalmente va a terminar en ; (punto y coma)
Expresión
  • Consiste en unir con operadores, valores para operar
  • Los operadores marcan la operación a realizar o evaluar con los valores u operandos
  • Una expresión se evalúa (calcula) y nos da como resultado un valor de un determinado tipo
  • El tipo del valor que retorna, dependerá del tipo de operador; principalmente:
aritmética si retorna un número (+,-,*,...)
lógica o booleano si retorna un valor lógico (>, <,AND,. ..)
cadena si retorna una cadena de caracteres (Concatenar cadenas, ...))



Instrucción inicio/fin de bloque

  • Un programa es un bloque de instrucciones que tiene un inicio y un fin. Dentro de este bloque puede haber muchos bloques. Siempre cada bloque empezará y terminará con una instrucción de inicio /fin bloque respectivamente.
  • De forma general, algorítmicamente podríamos establecer esto de la siguiente manera
programa MiPrograma
inicio
  bloque_dentro_de_mi_programa
  inicio
    instruciones
  fin
  ...
  instrucciones
fin



Icon key points.gif

PHP instruccion inicio fin

En PHP el bloque inicio y fin está especificado con los caracteres
  { //inicio de bloque
  } //fin de bloque
Por otro lado el inicio del programa se especifica con las etiquetas
 <?php //Etiqueta de inicio de script
 
 ?>  //Etiqueta de fin de script


function bloque_principal()
{
   function otro_bloque_B()
  { 
    //instricciones_bloque_B
  }
  //instrucciones del bloque princial
}
  • El concepto function lo abordaremos posteriormente.



Icon key points.gif

La indentación

Muy importante es la indentación.

  • Esto implica que que todas las instrucciones de un determinado bloque vayan indentadas a un mismo nivel, con el mismo margen.
  • Cada nuevo nivel de bloque aumento la sangría o margen.
  • Si cierro el bloque vuelvo a niveles anteriores.



(Comment.gif: Algunos lenguajes como Python usan directamente la indentación como inidicador de inicio/fin de bloque)


  • De momento usaremos estas etiquetas y de forma coloquial las traduciremos por principio de programa php y final de programa


Identificador

  • Identificador es un nombre que identifica a la variable, constante o función.
  • Existen reglas para crear los identificadores y éstas dependen del lenguaje para el que estemos escribiendo código. Por ejemplo en PHP obligatoriamente tienen que empezar por $.
  • En phplos identificadores siguen la siguiente expresión regular
$[a..zA..Z|_][a..zA..Z|_|0..9]*


Icon activity.jpg
Actividad
Vamos a interpretar esa expresión regular


Veamos ejemplos de declaración de variables Plantilla:MRM Puntos Clave

//Declaramos tres variables (edad, nombre, raiz) de los tipos que precede (entero, string o cadena de caracteres y real o float)
int edad;
String nombre;
float raiz;



Icon qmark.gif
Pregunta
Cómo declararías estas variables en php




  • Ejemplos de declaración de constantes
  • En principio en la constante no necesito saber el tipo con lo que directamente uso identificador y valor
 const IVA = 3.14;
 const MESES = 12;
//Defino una constante
{
const  IVA = 3.14;
const  MESES = 12;
const pi = 3.1416;
 
define (IDENTIFICADO, valor);
// … mas instrucciones
}

Instrucción de asignación

Consiste en asignar un valor a una variable

a = valor

La parte de la izquierda siempre será una variable posición de memoria donde almacenaré el valor valor se puede expresar de diferentes maneras:

  • literal Directamente aporto el valor, constante o identificador de variable que directamente me da el valor.
  • expresión ==> es un predicado con operadores que es evaluado y de su evaluación obtengo un valor. En función de los operadores las expresiones serán de diferente tipo
    • expresiones booleanas o lógicas( operador booleano AND, OR, NOT). Su evaluación me da un valor booleano (VEDAD o FALSO)
    • expresiones aritméticasoperadores (+,-,*,/,MOD,) (SU EVALUACIÓN ME DA UN NÚMERO)
    • expresiones de comparación (=,>,<,>=,<=,!=) (Su evaluación me dá un valor booleano VERDAD o FALSO)
  • Función o método que retorna dicho valor: Es un bloque de ejecución independiente que o bien lo escribo yo en otra parte de este bloque o bien ya está disponibles en el conjunto de funciones o bilbiotecas o API que el entorno me ofrece para utilizar directamente. Por ejemplo antes hemos escrito el método calculaEdad...

Instrucciones de leer/escribir

  • En realidad aquí depende de los lenguajes, algunos como Pascal y Modula tiene dentro del lenguaje una instrucción para visualizar un texto por la pantalla y otra para leerlo del teclado y asignárselo a una variable. Otros (la mayoría), como Java, C, python,... esta funcionalidad nos la brinda una función de una biblioteca que previamente debe ser cargada.
  • Otros lenguajes como PHP tienen ambas cosas echo (parte del lenguaje), print función del sistema, ambas para visualizar caracteres por pantalla. En general con cualquier lenguaje podremos:
visualizar(”cadena de caracteres , valor de variable” + variable+”expresion)
  • Para leer un valor que el usuario introduzca por el teclado y almacenarlo en una variable
leer(variable);
  • Un Ejemplo algorítmicamente quedaría
void MiPrograma
principio
 visualizar (“Introduce tu edad”);
 leer edad;
 visualizar (“Tu edad es de”+ edad);
fin
  • En php vamos a usar dos funciones para este cometido, aunque como veremos hay mas.

echo print

Estructuras Selectivas

  • Las instrucciones que introducen las estructuras selectivas permiten ejecutar un bloque de instrucciones o no en función de que ocurra una situación o no ocurra.
  • La situación siempre va a ser evaluada como una expresiónn booleana
  • La sintaxis de las instrucciones selectivas son
si (condicion) entonces
 bloque
fin_si


Seleccion 1.png

  • Como hemos comenado condición es una expresión booleana que tras evaluarse obtenemos un valor verdadero o falso.
  • Este valor en los lenguajes de programación es true o false
  • alternativamente a esta estructura de control tenemos el sino
 si (condicion) entonces
  bloque_1
 si_no
  bloque_2
 fin_si
  • Por ejemplo pedimos dos números para dividir, solo dividimos si el denominador es mayor que 0
Seleccion 2.png


  • Esta estructura selectiva puede adaptarse a tres situaciones,



Icon activity.jpg
Situaciones para utilizar el if
If simple
if (condicion_booleana) 
{ => Inicio de bloque if
   Acciones
} => fin de bloque if
If/else (Evalúo una condición con dos posibilidades)
if (condicion_booleana) 
{ => Inicio de bloque if
   Acciones o instrucciones
} => fin de bloque if
else //Es la situación complementaria
{ => Inicio de bloque else
   Acciones o instrucciones
} => Inicio de bloque else
If múltiple (Evalúo una condición con varias posibilidades)
if (condicion_booleana_1) 
{ => Inicio de bloque if
   Acciones
} => fin de bloque if
elseif(condicion_booleana_2)
{
}
elseif(condicion_booleana_3)
{
}
else //Resto de situaciones
{
}





If simple

  • Solo evaluamos una situación
  • Podemos ver en la imagen.
If simple.png


Icon casestudy.gif
Ejemplo
Haz un programa que genere dos números y si el denominador es 0 que lo cambie por uno
Un programa que haga siempre la raíz de un número si el número es negativo, lo convierte a positivo y pone una i
Con expresiones booleanas compuestas
Genero una nota (1..10)y una edad (14..25) el programa me dirá la nota y la edad. Además si soy mayor de edad y he sacado más de 7 me felicitará con un mensaje.
Haz un programa que obtener una edad (1..120) y me diga si una persona es niño (1-11), adolescente (12-16) joven(17.19) adulto(20-80) o mayor (81-120)



If completo (if/else)

  • En este caso comparamos una situación con dos posibles estados
  • Siempre va a ocurrir que estemos en un estado u otro

If else 2.png



Icon casestudy.gif
Ejemplo
Haz un programa que genere un número y me diga si es par o impar
Un programa que me diga si soy mayor o menor de edad
Un programa que me diga si un año es o no bisiesto
<?php
 
//Obetenemos un valor aleatorio
$year = rand(1, 5000);
 
 
if ($year % 4 == 0) {//Posibles bisiestos (divisibles entre 4
    if (($year % 400 == 0) OR ( $year % 100 != 0)) { // Dentro de ellos si son divsibles
                                                     // entre 400
        echo "El año $year sí es bisiesto";          // O bien no lo son entre 100
    } else {                                         
        echo "El año $year no  es bisiesto";
    }
} else
    echo "El año $year no es bisiesto";



If múltiple (if/elseif/elseif/.../else)

  • En este caso ya no solo tenemos dos situaciones posibles, sino tres o más
  • La variable a evaluar puede tomar diferentes valores

If else multiple.png


Icon casestudy.gif
Ejemplo
Un programa que ponga el mes en letra (un valor de 1 a 12)




Icon casestudy.gif
Valida una fecha
Un programa que valide una fecha
Generamos aleatoriamente la fecha
Mostramos al final la fecha
Mostramos el error en caso de que se produzca




  • Para este caso tenemos otra estructura de control llamado switch-case



Icon activity.jpg
Ejemplo if múltiple
  • Vamos a suponer que queremos comentar una edad en función de los años:
bebé (0-2)
niño(3..11)
adolescente(12-16)
joven(17.. 29)
adulto(30-65)
mayor 66..



 
 programa di_situacion_edad
 inicio
   int edad
   visualizar 'dime tu edad'
   leer (edad);
   si (edad<=2) entonces
      visualizar 'Que bien, eres un niño');
   fin_si
 
   si ((edad >=2) and (edad<=11)) entonces
      visualizar 'Que bien, eres un niño');
   fin_si
   si((edad >=12) and (edad<=16)) entonces
       visualizar 'No te enfades demasiado, Ya eres un adolencente');
   fin_si
   si(((edad >=17) and (edad<=29))) entonces
      visualizar 'Ahora eres un joven lábrate el futuro');
   fin_si
   si(((edad >=30) and (edad<=65))) entonces
      visualizar 'Eres un adulto disfruta la vida de forma activa');
   fin_si
   si(edad >65) entonces
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de todo lo que has hecho');
   fin_si
 fin
  • En este caso las estructuras de control tienden a complicarse en especial en lenguajes como java o c donde el sino_si no es en realidad mas que otro si con su inicio y fin de bloque correspondiente.
Alternativa a la estructura de control si
  • Si lo que estamos analizando tiene dos situaciones la estructura de control si vista anteriormente es muy cómoda
  • Pero cuando tenemos varias situaciones como es el caso anterior, la edad que estamos analizando tiene 4 posibles situaciones, puede ser muy complejo gestionarlo con el si, para esta situaciones esta la estructura de control caso u opcion o con.
 caso_opcion variable
  caso: valor1
       bloque1
  caso: valor2
      bloque2
  caso: valor3
      bloque3
  caso: valor4
      bloque4
  defecto:
      bloque_otro_caso
 fin_caso


Seleccion 3.png

  • Esta estructura de control tiene la limitación de que solo podemos especificar un valor
  • Por ejemplo el caso siguiente no se podría hacer
 
 programa di_situacion_edad
 inicio
   int edad
   visualizar 'dime tu edad'
   leer (edad);
   caso_opcion edad
     caso <=11
         visualizar 'Que bien, eres un niño');
    caso <= 16) entonces
      visualizar 'No te enfades demasiado, Ya eres un adolencente');
    caso <= 29) entonces
      visualizar 'Ahora eres un joven lábrate el futuro');
    caso <= 65) entonces
      visualizar 'Ya eres todo un adulto');
   defecto 
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de la vida');
   fin_caso
 fin
  • Pero podemos hacer una especie de apaño para poderlo realizar
  • Decimos que en la cabecera del caso debe de haber un valor que normalmente es una variable,
  • Por lo que sería correcto poner el siguiente código
 caso_opcion (true){
 .......
 }
  • En él quiero comparar el valor true con cada caso
  • Ahora lo que haríamos es poner en cada caso una expresión que me devuelva un booleano
 caso_opcion (true){
       caso (edad<=11):
         visualizar 'Que bien, eres un niño');
    caso (edad<= 16) entonces
      visualizar 'No te enfades demasiado, Ya eres un adolencente');
    caso (edad<= 29) entonces
      visualizar 'Ahora eres un joven lábrate el futuro');
    caso (edad<= 65) entonces
      visualizar 'Ya eres todo un adulto');
   defecto 
      visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de la vida');
   fin_caso
 }
  • De esta forma sí que podemos usar el switch para evaluar rangos de valores.
  • Este ejemplo no se aprecia la utilidad y ventaja de usar el case en casos donde hay varias posibles situaciones, no obstante a lo largo del curso seguro que lo experimentamos.

Estructuras Iterativas o repetitivas

  • Este tipo de estructuras permiten repetir un bloque de ejecución controlado por una determinada condición
  • La condición es una expresión booleana (Se evalúa y me da cierto o falso)
  • Mientras se produzca la condición repito el bloque de control.

algorítmicamente sería Mientras que.png

 mientras (condición) hacer
  bloque_instrucciones
 fin_mientras
  • La implementación en php sería
 

Reglas de oro para realizar bucles

  • En condición, normalmente evaluamos alguna/s variables.
  • Debemos tener en cuenta tres reglas de oro para los bucles
  1. inicializar la variable de control

    Si realizo la comparación y no he inicializado la variable nunca entraré dentro del cueropo del bucle

     programa Error_mientras_1
     inicio
     caracter seguir
     mientras seguir='s' hacer
       visualizar 'dime tu edad'
       Leer (edad);
       visualizar ' te faltan '+(65-edad)+'años para jubilarte';
       visualizar 'quieres seguir'
       leer (seguir);
     fin_mientras

    como vemos en este caso nunca entrare al bloque

  2. actualizar dentro del bucle la variable de control

    Si entro en el cuerpo del bucle y no actualizo la variable de control nunca saldré del bucle

     programa Error_mientras_2
     inicio
     int veces;
     veces = 1
     mientras veces < 10 hacer
       visualizar 'dime tu edad'
       Leer (edad);
       visualizar ' te faltan '+(65-edad)+'años para jubilarte';
     fin_mientras

    En este caso nunca saldría del bucle produciéndose una situación de bucle infinito

  1. realizar correctamente la condicion

consite en tener cuidado con la condición <, <=... por ejemplo si quiero visualizar la tabla de multiplicar normal 2*1... 2*10

 programa Error_mientras_3
 inicio
 int veces;
 int tabla;
 veces = 1
 visualizar 'dime un número para sacar su tabla de multiplicar'
 Leer (tabla);
 mientras veces < 10 hacer
   visualizar (tabla +'*'+ veces +'='+tabla*veces);
   veces = veces+1;
 fin_mientras
  • Observamos que imprimiría si introducimos el 2
2*1=2 2*2=4,.. 2*9=18
  • y nos faltaría el 2*10 por que la condición no debería de ser < estricto sino <=
  • Es cierto que de todos este es el error menos malo, pero dependiendo de situaciones puede ser incluso peor que los anteriores, ya que aparentemente tu programa funciona bien, pero el valor que te retorna es incorrecto :(

Tipos de bucles

En realidad cualquier situación iterativa se puede hacer con la estructura mientras vista anteriormente. pero existen situaciones en las que ya sabemos de antemano antes de ejecutar el bucle cuantas veces lo vamos a hacer.

  1. Bucle para o for

Para esta situaciones esta la estructura de control para que a continuación exponemos como en el caso anterior con la tabla de multiplicar

 programa Iteracion_Para
 inicio
 int veces;
 int tabla;
 visualizar 'dime un número para sacar su tabla de multiplicar'
 Leer (tabla);
 para veces = 1 hasta veces = 10 hacer
   visualizar (tabla +'*'+ veces +'='+tabla*veces);
 fin_para
  • Como vemos en este caso no tengo que inicializar la variable antes del bucle ni actualizarla dentro
  • La inicialización se hace en la cabecera
  • La actualización es transparente al programador (la realiza el cuerpo del bucle)
  • El número de veces puede ser una variable, no ha de ser conocido en tiempo de compilación.
  • Por ejemplo el siguiente bucle calcula el sumatorio de n números (desde el 1 hasta n: 1+2+3+4+...)
 programa Iteracion_para_2
 inicio
   int numNumeros;
   int numero;
   int total = 0;
   visualizar 'dime hasta que número quieres sumar'
   Leer (numNumeros);
   para numero = 1 hasta numero = numNumeros hacer
        total=total+numero
   fin_para
   visualizar 'el sumatorio desde 1 hasta'+numNumeros+'es'+total
 fin
  • En php esta estructura de control es la siguiente
 for (var n=0; n>10; n++){
 
 }
Bucle hacer
  • Hay situaciones en las que sé de antemano que por lo menos una vez sí que se va a ejecutar el cuerpo del bucle.
  • En estos casos hacer la primera vez una comparación es innecesario.
  • Para ahorrar esta instrucción, se desarrollo la estructura de control hacer ... hasta que, en la cual la condición de evaluación del bucle se hacer al final del cuerpo del bucle.
  • Supongamos que le programa quiere visualziar los años para jubilarse de 1 o varias personas.
programa Iteracion_hacer_1
inicio
caracter seguir
hacer 
  visualizar 'dime tu edad'
  Leer (edad);
  visualizar ' te faltan '+(65-edad)+'años para jubilarte';
  visualizar 'quieres seguir'
  leer (seguir);
hasta que seguir ='n';
  • Como vemos en este caso no hay que inicializar la variable fuera del bucle, sino que se hace en la primera iteración del bucle.

LENGUAJES DE PROGRAMACION



Icon define.gif
Definición

Conjunto de lexemas que se combinan siguiente unas reglas de construcción o sintaxis y que tienen un significado definido o semántica que se emplea para expresar un algoritmo


  • Dicho algoritmo es codificado en un lenguaje, constituyendo un programa escrito en ese leguaje de alto nivel.
  • El programa una máquina computacional no puede ser capaz de ejecutar
  • El lenguaje va acompañado de uno o varios programas (compilador o interprete )que es capaz de generar código máquina a partir del programa expresado en el lenguaje de alto nivel

Niveles de lenguajes

En función de la proximidad de compresión del lenguaje al lenguaje humano se puede hablar de tres niveles de lenguajes de programación.

Alto nivel
El lenguaje utiliza lexemas y estructuras sintácticas similares al utilizado en el lenguaje humano
Bajo nivel
El lenguaje es más próximo a la máquina. Aunque se pueden utilizar lexemas como es el caso de ensamblador, éstos tienen una traducción directa al código máquina 0's y 1's
Nivel de lenguaje máquina

Conjunto de 0'1 y 1's que corresponden a códigos binarios que el procesador es capaz de entender y ejecutar

  • También es posible encontra lenguajes como 'c' que se consideran de nivel medio¡¡, si bien por su expresibidad son lenguajes de alto nivel, el hecho de que tenga la posibilidad de insertar ensamblador o especificar el acceso directo a registros del procesador, hace que se consideren lenguaje de nivel medio

Proceso de transformación

Entendemos por tal el hecho de pasar de código de alto nivel a código máquina. Este proceso puede ser una mera traducción como es el caso de pasar de ensamblador a código máquina, o ser un proceso más complejo.

Lenguajes compilados

generando primero el obj que es binario, pero aún falta enlazar librerías y resolver direccionamiento relativo a direecionamiento absoluto. esta tarea la hace el link que genera el .exe


Lenguajes interpretados
Java un caso especial
lenguaje semicompilado
Para que programar

Ejemplos

Existen diferentes modos de expresar un algoritmo Por ejemplo con un ordinograma como la siguiente imagen o seudocódigo como ya hemos visto

Algoritmo.png




  • Modulación es una forma de utilziar la programacion estructurada de forma efectiva y organizada
'DIVIDE Y VENCERAS'
    • Dividir el problema a resolver en partes mas pequeñas o subproblemas.
    • Dar solución a cada una de las partes
    • Unir las soluciones para solucionar el problema inicial
    • Es una filosibía de 'Divides y vencerás
    • Es más fácil resolver un problema sencillo que uno complejo
    • Es efectivo y práctico
  • Me permito afirmar que la programacion Orientada a Objetos en gran parte tiene mucha base en la programación modular
  • Veremos como la POO está basado en programar clases futuras instancias de objetos

La programación de clases se realiza con programación estructurada y modular, por lo que debemos de saber programar de forma estructurada y modular

Obtenido de «https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/ProgramacionWeb/Certificado2021/algorimica/algoritmicaBase&oldid=30698»