Bienvenidos a un nuevo curso. Ahora estoy en el ciclo de grado superior: Desarrollo de aplicaciones multiplataforma. Y voy a ser parte del experimento de la formación dual. Estaré haciendo practicas durante un año, y a la vez finalizando la formación.

Deseadme suerte.

miércoles, 15 de octubre de 2014

Diseño descendente

0

Solución
algoritmo primos_entre_dos_numeros
variables
     min, max, primo: entero;
principio
     leerEntero(teclado, min);
     leerEntero(teclado, max);
     primo:=siguiente_primo(min);
     mientras que primo<=max hacer
          escribirEntero(pantalla, primo);
          primo:=siguiente_primo(primo+1);
     fmq
fin

solución 2
funcion siguiente_primo (numero: entero) devuelve entero
     precondición: nuevo es un número natural.
     Postcondición: devuelve el menor primo p que cumple p>=numero
}
variables
     resultado: entero;
principio
     resultado:=numero;
     mientras que (NOT es_primo(resultado)) hacer
          resultado:=resultado+1;
     fmq
fin

solución 3
funcion es_primo (numero: entero) devuelve booleano
{
precondición: número es un número natural.
postcondición: devuelve VERDAD o FALSO en función de que numero sea primo o no
}
variables
     primo: booleano;
     i: entero;
principio
     i:=2;
     primo:=VERDAD;
     mientras que (i<numero&&primo)hacer
          si(8numero MOD i)=0) entonces
               primo:=FALSO;
          fsi
          i=i+1;
    fmq
    devolver primo
fin

Procedimientos
Un procedimiento es un subprograma que realiza operaciones aobre uno o más valores que se han pasado como parámetros y puede utilizar alguno de eelos para alterarlo y devolver datos en ellos al programa o subprograma que lo invocó.
No tiene un valor asociado. La forma de devolver información al programa es a través de los parámetros.
Puede devolver más de un resultado, uno o ninguno.
Sus parémetros pueden ser de entrada, salida o entrada/salida.

Declaración de procedimientos: sintaxis y semántica
procedimiento <nombre de procedimiento> (<lista de parámetros formales>)
variables
     <definición de variables locales>
principio
     <acciones>
fin

La semántica es similar a la de una función, pero no se devuelve ningún valor y hay que especificar la clase de parámetro formal (E, S o E/S).

Ejemplo de declaración
procedimiento intercambiar (E/S p: entero, E/S q: entero)
variables
     x: entero;
principio
     x:=p;
     p:=q;
     q:=x;
fin

Uso de procedimientos
<nombre de procedimiento> (<lista de parámetros actuales>);
Recordad que los parámetros actales, en función de que sean de E, S o E/S tienen que cumplir ciertos requisitos:
- Como parámetro de entrada me sirve cualquier expresión (igual que en las funciones).
- Como parámetro de salida o entrada/salida necesito poner obligatoriamente una variable que será donde el procedimiento me devolverá el dato correspondiente al terminar si es de salida, o modificara el dato que le pase, si es de entrada/salida.

Ejercicio
Escribe un algoritmo, que haciendo uso del procedimiento intercambiar mostrado anteriormente, solicite de teclado 3 números, los guarde en las variables a, b y c, y los ordene de mayor a menor, de forma que el mayor finalmente se encuentre en la variable a y el menor en la c. Finalmente tiene que mostrar los valores de las variable ordenador por pantalla.

Ejemplo de uso de procedimeintos
algoritmo ordena_de_mayor_a_menor
variables
     a,b,c: entero;
principio
     escribirCadena(pantalla, "Introduzca tres números enteros.");
     leerEntero(teclado, a);
     leerEntero(teclado, b);
     leerEntero(teclado, c);
     si a>b
           intercambiar(a,b), (En a tengo el mayor de a y b);
    fsi
    si <c
          intercambiar(a,c); (en a tengo el mayor de los tres)
    fsi
    si b=c
          intercambio(b,c); (así ordeno los dos números menores que me faltaban)
    fsi
    escibirCadena(pantalla, "Los numeros ordenador de mayor a menor son:");
    escribirEntero(pantalla, a);
    escribirEntero(pantalla, b);
    escribirEntero(pantalla, c);
fin

Invocación: procedimientos vs funciones
Una invocación a un procedimiento es una acción y por tanto puede aparecer sola como una instrucción completa: "hacer tal cosa".
Una invocación a una función es una expresión o parte de una expresión, no constituye por si misma una instrucción. Tiene que ir asignada a una variable, o aparecer en algún sitio en el que el dato resultado se utiliza para algo.

Precondición y postcondición
La precondición es la condición que deben cumplir los valores que recibe el procedimiento o función para sus parámetros E o E/S cuando es innovado por el algoritmo principal u otro procedimiento o función.
La postcondición es la condición que deben cumplir los valores que devolveremos en los parámetros S o E/S o como resultado de la evaluación de una función, cuando este subalgoritmo termine, al algoritmo o subalgoritmo invocante.
Un procedimiento o función es correcto si cumpliéndose la precondición para cualquier valor válido en los parámetros e o e/s queda garantizado que se cumplirá la postcondición.

Continuación Tema 5

Subprogramas en c
¿Existen en C los procedimientos? NO
¿Existen en C las funciones ( Tal cual las hemos visto)? NO
¿Qué existe pues? La gran chapuza desde un punto de vista formal: las funciones procedimentales (todo en uno, las llamaremos funciones en adelante) que es un instrumento de lo más flexible para escribir subprogramas.
- Devuelven un valor (como las funciones)
- Admiten parámetros E, S y/o E/S (como los procedimental)

Funcipones en programas
Un programa en C consta de una o más funciones:
- Tiene que tener necesariamente una función main:
void main ()
- Pueden tener otras funciones declaradas que serán usadas por main o por otras funciones que sean usadas en main o en funciones usadas en main, o en funciones que sean usadas por funciones en main, o... Es convenientemente declarar una función antes de usarla, para que al compilador la reconozca cuando se encuentre una invocación a ella.
Una función  (en sentido estricto) en C:
- int factorial (int n)
Un procedimiento es C:
- void intercambiar (int *a, int *b)
- También admite además de las funciones que hayamos podido declarar en el fichero, funciones que haya en las librerías:
librerías del propio compilador: stdio.h, string.h, ctype.h, math.h, stidlib.h, time.h... Para usarlas: #include <stdio.h>
librerías creadas `por el usuario: Para usarlas #include "miliib.h"

Declaración de una función en C
<tipo función> <nombre función> (<lista de parámetros formales>)
{
/*Declaración de variables locales*/
/*Instrucciones*/
return(<expresión>);
}
como <tipo función> sirve cualquier tipo que se os pueda ocurrir (y otros que todavía ni conocéis) más el tipo void que indica que la función no devuelve nada.
return sólo hay que utilizarlo si el tipo no es void.

Parametros en funciones
Tenemos tres tipos de parámetros: E, S, E/S.
C y otros lenguajes de programación sólo disponen de dos mecanismos para pasar parámetros:
- Por valor: Sirve para parámetros de E.
- Por referencia: Sirve para parámetros S o E/S.

Paso de parámetros por valor
El valor de la variable que se pasa como parámetro o el resultado de evaluar la expresión que se ha puesto (parámetro actual) es copiado a una variable local de la función C.
Como esa variable local muere cuando termina de ejecutarse la función, no sirve para devolver nada.

main ()
{
....
a=7;
f=mi_funcion(a);
...
}


int mi_función(int n)
{
...
n=30;
}

Paso de parámetros por referencia
En vez de pasar el valor de la variable, se copia la dirección de la variable que contiene el valor.
Para hacer esto, obsérvese que como parámetro actual ponemos delante de la variable correspondiente el símbolo & y en la función invocada, como parámetro formal, aparece delante un * cada vez que nos referimos a él.
main ()
{
...
a=7;
f=mi_proc(&a);
...
}

int mi_proc (int*n)
{
...
*n=30;
}

Crea una función b que te valide una fecha. Que si es correcta o no, dependiendo de los meses, día de los meses, años bisiestos... 

0 comentarios:

Publicar un comentario

Etiquetas actuales

BD (67) DEF (64) PROG (64) SQL (44) Java (29) PRACTICAS (20) php (18) DI (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) HTML (13) SGE (12) ERP (9) CONSULTAS (8) css (8) Linux (5) XML (5) Android (4) PDM (4) C (3) NetBeans (3) PSP (3) SMARTY (3) comandos (3) HOOK (2) POST (2) XSD (2) cURL (2) JS (1) MEDIA-QUERYS (1) PDO (1) RESPONSIVE (1) TPL (1) TRADUCCIÓN (1) app_inventor (1)

Todas las etiquetas

EJER (78) BD (67) DEF (64) PROG (64) SQL (44) c# (40) Programación (39) Ficheros (36) Java (29) bases de datos (21) PRACTICAS (20) lenguajes de marcas (19) AD (18) Entorno de desarrollo (18) php (18) PROCEDIMIENTOS (17) DI (16) FORM (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) lenguaje C (16) E/R (14) HTML (13) SGE (12) Sistemas informáticos (10) ERP (9) CONSULTAS (8) TRANSACCIONES (8) TRIGGER (8) VISUAL BASIC (8) css (8) FUNCIONES (7) html5 (6) Ada (5) EXAMEN (5) Linux (5) XML (5) estructuras (5) Android (4) DISEÑO (4) INTERFAZ (4) LOG (4) OpenBravo (4) PDM (4) ACTUALIZAR (3) C (3) DIAGRAMA (3) Directorios (3) NEW (3) NOR (3) NetBeans (3) OLD (3) PSP (3) SMARTY (3) comandos (3) css3 (3) AISLAMIENTOS (2) C++ (2) CONTROLERRORES (2) ELIMINAR (2) HOOK (2) INSERTAR (2) INST (2) MULTITABLA (2) POST (2) RECURSIVIDAD (2) SUBCONSULTAS (2) VISTAS (2) XSD (2) cURL (2) punteros (2) AJENA (1) BLOQUEOS (1) Byte (1) CREACION (1) CRM (1) Configuración (1) Controles (1) Datos (1) GOTFOCUS (1) IMAGENES (1) INDICES (1) JS (1) Lenght (1) MEDIA-QUERYS (1) Mingw (1) MonoDeveloped (1) OPTIMISTA (1) PDO (1) PESIMISTA (1) RESPONSIVE (1) SPEAK (1) Scanner (1) Serializacion (1) Streams (1) System (1) TPL (1) TRADUCCIÓN (1) USUARIOS (1) UseSystemPasswordChar (1) app_inventor (1) char (1) examenes (1) libreoffice (1) make (1) redes (1)