Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/INAEM2019/algorimica/algoritmicaBase»
(→If completo (if/else)) |
(→If múltiple (if/elseif/elseif/.../else)) |
||
(11 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 15: | Línea 15: | ||
===Programando=== | ===Programando=== | ||
*Hacer un programa, como ya hemos comentado, va a ser escribir un algoritmo en un lenguaje concreto de programación | *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 | *En informática cada operación va a ser una instrucción | ||
*Siempre ante los mismos valores vamos a obtener los mismos resultados | *Siempre ante los mismos valores vamos a obtener los mismos resultados | ||
Línea 22: | Línea 22: | ||
===Algunas conceptos previas=== | ===Algunas conceptos previas=== | ||
<br> | <br> | ||
− | {{ | + | {{MRM_Definiciones|algoritmo,Lenguaje de programación, niveles de lenguajes, compiladores, interpretados}} |
<br> | <br> | ||
= Estructras de control = | = Estructras de control = | ||
− | + | == 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). | 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/> | <br/> | ||
Línea 91: | Línea 91: | ||
*El concepto '''''function''''' lo abordaremos posteriormente. | *El concepto '''''function''''' lo abordaremos posteriormente. | ||
− | {{ | + | {{MRM_Puntos clave| |
Title=La indentación| | Title=La indentación| | ||
Muy importante es la '''''indentación'''''. | Muy importante es la '''''indentación'''''. | ||
Línea 147: | Línea 147: | ||
*En ''php''los identificadores siguen la siguiente expresión regular | *En ''php''los identificadores siguen la siguiente expresión regular | ||
$[a..zA..Z|_][a..zA..Z|_|0..9]* | $[a..zA..Z|_][a..zA..Z|_|0..9]* | ||
− | {{ | + | {{MRM_Actividad|Vamos a interpretar esa expresión regular}} |
Veamos ejemplos de declaración de variables | Veamos ejemplos de declaración de variables | ||
− | {{ | + | {{MRM_Punto Clave|Identificadores en php |
$[a..zA..Z|_][a..zA..Z|_|$|0..9]* | $[a..zA..Z|_][a..zA..Z|_|$|0..9]* | ||
}} | }} | ||
Línea 233: | Línea 233: | ||
'''''print''''' | '''''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. | *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 situación siempre va a ser evaluada como una expresiónn booleana | ||
Línea 319: | Línea 319: | ||
;Un programa que me diga si soy mayor o menor de edad | ;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 | ;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> | ||
}} | }} | ||
Línea 325: | Línea 343: | ||
*En este caso ya no solo tenemos dos situaciones posibles, sino tres o más | *En este caso ya no solo tenemos dos situaciones posibles, sino tres o más | ||
*La variable a evaluar puede tomar diferentes valores | *La variable a evaluar puede tomar diferentes valores | ||
− | [[Archivo:if_else_multiple.png| | + | [[Archivo:if_else_multiple.png|400px]] |
{{MRM_Ejemplo| | {{MRM_Ejemplo| | ||
;Un programa que ponga el mes en letra (un valor de 1 a 12) | ;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''''' | *Para este caso tenemos otra estructura de control llamado '''''switch-case''''' | ||
− | * | + | {{MRM_Actividad|Title=Ejemplo if múltiple| |
− | <source | + | *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 | programa di_situacion_edad | ||
inicio | inicio | ||
Línea 339: | Línea 467: | ||
visualizar 'dime tu edad' | visualizar 'dime tu edad' | ||
leer (edad); | leer (edad); | ||
− | si (edad<= | + | si (edad<=2) entonces |
visualizar 'Que bien, eres un niño'); | visualizar 'Que bien, eres un niño'); | ||
fin_si | fin_si | ||
− | si(edad <= 16) entonces | + | |
+ | 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'); | visualizar 'No te enfades demasiado, Ya eres un adolencente'); | ||
fin_si | fin_si | ||
− | si(edad <= 29) entonces | + | si(((edad >=17) and (edad<=29))) entonces |
visualizar 'Ahora eres un joven lábrate el futuro'); | visualizar 'Ahora eres un joven lábrate el futuro'); | ||
fin_si | fin_si | ||
− | si(edad <= 65) entonces | + | si(((edad >=30) and (edad<=65))) entonces |
− | visualizar ' | + | visualizar 'Eres un adulto disfruta la vida de forma activa'); |
fin_si | fin_si | ||
si(edad >65) entonces | si(edad >65) entonces | ||
− | visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de | + | visualizar 'Eres mayor, !Cuantas cosas has hecho!, Disfruta de todo lo que has hecho'); |
fin_si | fin_si | ||
fin | fin | ||
Línea 428: | Línea 560: | ||
*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. | *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 | *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) | *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. | *Mientras se produzca la condición repito el bloque de control. | ||
algorítmicamente sería | algorítmicamente sería | ||
+ | [[Archivo:mientras_que.png|400px]] | ||
<source lang=javascript> | <source lang=javascript> | ||
mientras (condición) hacer | mientras (condición) hacer | ||
Línea 442: | Línea 575: | ||
</source> | </source> | ||
− | + | ===Reglas de oro para realizar bucles=== | |
*En '''''condición''''', normalmente evaluamos alguna/s variables. | *En '''''condición''''', normalmente evaluamos alguna/s variables. | ||
*Debemos tener en cuenta tres reglas de oro para los bucles | *Debemos tener en cuenta tres reglas de oro para los bucles | ||
Línea 506: | Línea 639: | ||
*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 :( | *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. | 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. | pero existen situaciones en las que ya sabemos de antemano antes de ejecutar el bucle cuantas veces lo vamos a hacer. | ||
Línea 568: | Línea 701: | ||
=LENGUAJES DE PROGRAMACION= | =LENGUAJES DE PROGRAMACION= | ||
<br/> | <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}} | 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. | *Dicho ''algoritmo'' es codificado en un ''lenguaje'', constituyendo un ''programa'' escrito en ese leguaje de alto nivel. |
Última revisión de 05:42 24 ene 2019
ContenidoProgramando
Algunas conceptos previasEstructras de controlEstructura secuencialConsiste 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).
Un programa
Instrucciones secuenciales
Instrucción inicio/fin de bloqueUn 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.
programa MiPrograma
inicio
bloque_dentro_de_mi_programa
inicio
instruciones
fin
...
instrucciones
fin
function bloque_principal() { function otro_bloque_B() { //instricciones_bloque_B } //instrucciones del bloque princial }
(: Algunos lenguajes como Python usan directamente la indentación como inidicador de inicio/fin de bloque)
Instrucción de declaraciónSirve para declarar elementos dentro del programa En un programa se pueden declarar
Identificador
$[a..zA..Z|_][a..zA..Z|_|0..9]*
Veamos ejemplos de declaración de variables Plantilla:MRM Punto 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;
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ónConsiste 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:
Instrucciones de leer/escribir
visualizar(”cadena de caracteres , valor de variable” + variable+”expresion)
leer(variable);
void MiPrograma principio visualizar (“Introduce tu edad”); leer edad; visualizar (“Tu edad es de”+ edad); fin
echo print Estructuras Selectivas
si (condicion) entonces bloque fin_si
si (condicion) entonces bloque_1 si_no bloque_2 fin_si
If simple
If completo (if/else)
If múltiple (if/elseif/elseif/.../else)
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
Alternativa a la estructura de control si
caso_opcion variable caso: valor1 bloque1 caso: valor2 bloque2 caso: valor3 bloque3 caso: valor4 bloque4 defecto: bloque_otro_caso fin_caso
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
caso_opcion (true){ ....... }
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 }
Estructuras Iterativas o repetitivas
mientras (condición) hacer bloque_instrucciones fin_mientras
Reglas de oro para realizar bucles
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
2*1=2 2*2=4,.. 2*9=18
Tipos de buclesEn 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.
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
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
for (var n=0; n>10; n++){ }
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';
LENGUAJES DE PROGRAMACION
Niveles de lenguajesEn función de la proximidad de compresión del lenguaje al lenguaje humano se puede hablar de tres niveles de lenguajes de programación.
Conjunto de 0'1 y 1's que corresponden a códigos binarios que el procesador es capaz de entender y ejecutar
Proceso de transformaciónEntendemos 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 compiladosgenerando 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
EjemplosExisten diferentes modos de expresar un algoritmo Por ejemplo con un ordinograma como la siguiente imagen o seudocódigo como ya hemos visto
'DIVIDE Y VENCERAS'
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 |