[Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Ver el tema anterior Ver el tema siguiente Ir abajo

[Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 6:23 am

Estructuras Básicas de Datos:

Introducción:
Dato: Cualquier información correspondiente a una entidad susceptible de un tratamiento informático. Ej.: (Entidad: Empresa / Datos: Nombre, Dirección, Nº Empleados…)

Para un ordenador la información que maneja es numérica (ceros y unos) “binario”, aún así, los datos tienen que estar clasificados para poder tratarlos de forma conveniente.

La clasificación de los datos determina las ESTRUCTURAS DE DATOS de un lenguaje.

Un dato se caracteriza por llevar asociado los siguientes elementos:
Identificador: nombre que permite referenciar el dato.

Los identificadores de los datos deben cumplir una serie de condiciones:
a- Pueden estar constituidos por letras, dígitos y el carácter “_”
b- No pueden contener espacios.
c- El nº de caracteres y dígitos máximos dependen del compilador utilizado.
d- Deben comenzar por una letra
e- Deben dar alguna pista para reconocer el dato que van a referenciar.
Tipo: Determina el rango de valores que van a ser posibles para ese dato.
Ej.: EDAD: Nº entero.

Valor inicial: Valor perteneciente al rango determinado por el tipo asociado al identificador.

Tipos de datos:
Clasificación de los datos:
Datos Básicos
Numéricos: Entero, Real

No Numéricos: Carácter, Lógico

Derivados: Puntero

Datos Estructurados:

Internos:
Estáticos lineales: Tablas
Dinámicos Lineales: Listas, Pilas, Colas
No lineales: Árboles, Grafos

Externos: Ficheros, Bases de Datos

Compuestos: Estructura de Datos, Registro

Puntero: Funciona con direcciones de memoria asociadas.
Existe un operador que permite obtenerlas, pero ya lo trataremos más adelante.

Datos estructurados: Compuestos de datos básicos.
(Internos: Memoria Temporal / Externos: Dispositivos de Almacenamiento)

Datos dinámicos: Reservas de memoria en tiempo de ejecución.
Lista: Se accede y llena en cualquier orden.
Pila: Se insertan los datos en orden, se extraen en orden inverso.
Cola: Obligatorio insertarlos en orden y extraerlos en ese mismo orden.

Datos estáticos: Reservan una cantidad fija de memoria (En tiempo de compilación)

Datos Básicos:

Datos numéricos: Se utilizan para contener magnitudes y se dividen en enteros y reales.
a- Enteros: Se emplean para representar números enteros, el rango de representación depende del compilador y del ordenador. Los datos de tipo entero aparecen representados por los dígitos decimales, que pueden ir precedidos por los signos + o -. Ej.: -35 +3200.

b- Reales: Se emplean para representar números con parte fraccionaria o números Enteros muy grandes o muy pequeños que están fuera del rango establecido para los enteros.

Para su representación se utilizan dos formatos:

• Decimal: Dígitos del 0 a 9 y el punto decimal que separa la parte entera de la fraccionaria.
• Formato Científico o Exponencial: <mantisa><E><característica>

Mantisa: Nº real decimal.
E: Base 10
Característica: Exponente.

La representación interna viene determinada por la precisión:
• Para simple precisión (32 bits)
o Signo - 1bit - (posición 31)
o Exponente - 8bits - (posiciones 23 a 30)
o Mantisa - 23bits - (posiciones 0 a 22)
• Para doble precisión (64 bits)
o Signo - 1bit - (posición 63)
o Exponente - 11bits - (posiciones 52 a 62)
o Mantisa - 52bits - (posiciones 0 a 51)

Datos No numéricos:
a- Carácter: Se emplea para representar un carácter dentro de un conjunto definido por el fabricante del ordenador, de tal manera que cada carácter se corresponda con un nº entero, según un determinado código. Ej.: Código ASCII.
Se representan encerrando el carácter entre comillas simples, existen los siguientes tipos de caracteres:
o Dígitos: ‘1’,’0’,’9’…
o Alfabéticos: ‘A’,’a’,’b’…
o Especiales: ‘*’,’_’…

La representación interna depende del código utilizado, los códigos más empleados son los que utilizan 8 bits, como por ejemplo el ASCII (American Standard Code for Information Interchange) o el EBCDIC (Extended Binary Coded Decimal Interchange Code)

Ej.: A = 65 = 01000001

En algunos lenguajes como el COBOL se considera tipo de dato básico a las cadenas alfanuméricas. Estas se representan encerradas entre dobles comillas.
Ej.: “I.E.S Dr. Fleming Nº25”

En C no es un tipo de dato básico (Se usan tablas)

b- Lógico: Es un tipo de dato que solo puede tomar dos valores, se pueden representar como Cierto y Falso, True y False, V y F.
Internamente se representa con un ‘0’ para false y un ‘1’ para true.
En C ‘0’ es false, mientras que cualquier otra cosa se considera como true.

Variables y Constantes:

Memoria Central: Dispositivo de almacenamiento temporal de:
• Datos
• Instrucciones
• Resultados de un programa:
o Intermedios
o Finales

Consideremos la memoria como una caja dividida en compartimentos. Cada compartimento es del mismo tamaño y está identificado por una dirección de memoria. Los compartimentos se suelen denominar celdas, las direcciones, posiciones de memoria.

Cada celda tiene una dirección distinta que permite identificarla. Esto nos permite almacenar y recuperar datos de la Memoria Central.

Nota: Las cadenas no se pueden meter en una sola dirección de memoria, sino que usan varias simultáneamente.

Almacenar algo en una posición usada sobrescribe lo anterior por lo tanto:
La escritura en memoria es destructiva, mientras que la lectura no lo es.
Las zonas de memoria no están vacías a menos que se sobrescriban intencionadamente.
Las direcciones de memoria se pueden identificar con un nombre, el sistema se encarga de asignar una dirección concreta a ese nombre. (En lenguajes de programación de alto nivel)[C o superior].

Variable: Zona de memoria referenciada con un nombre de variable que va a contener un dato.
Nota: Una variable NO es un dato, contiene un dato.
Para que una variable esté perfectamente definida hay que indicarle:
• Un nombre (identificador)
• Un tipo de dato
• Un valor inicial

Para introducir un valor en una variable se realiza lo siguiente:

Código:
<variable> = <valor>


A este hecho se le llama Asignación de Variables.

Para recuperar el valor basta con nombrar la variable:

Código:
<variable>


(haciendo esto la máquina tomará <valor> de la memoria y sustituirá la variable por dicho valor en la ejecución)

En función del dato asignado a la variable, se pueden clasificar en numéricas, enteras, reales, alfanuméricas, caracteres y lógicas.

Asignación: Introducción de un valor o del contenido de otra variable en una zona de memoria referenciada por ese nombre de variable. = se usa tanto como asignación, como para preguntar al sistema si es igual.

Nota: Se aconseja usar ‘==’ para preguntar si es igual y ‘=’ para asignar, esto ayudará a diferenciar ambas tareas de forma sencilla a la hora de revisar el código.

Tanto la variable receptora como la otra tienen que ser del mismo tipo para realizar la asignación del valor de una variable a otra.

Código:
<variable1> = <variable2>



Constante: Es una zona de memoria referenciada con un nombre de constante, cuyo valor no puede cambiar a lo largo de la ejecución de un programa.
Las constantes pueden ser numéricas, enteras o reales, alfanuméricas o de carácter.
Las constantes lógicas no tienen sentido.

Operadores:
Operadores: Símbolos que permiten conectar datos, variables y constantes con el fin de realizar una operación determinada.
Operador - Símbolo - Significado

Paréntesis - () - Paréntesis

Aritméticos - **,^ - Potencia
* - Producto
/ - División Real
DIV,\ - División Entera
%,mod - Resto de una división entera
+ - Suma
- - Resta
+ - Concatenación
- - Concatenación eliminando espacios en blanco
Relacionales - ==,= - Igual, Asignación
!=,<> - Distinto
< - Menor
<= - Menor o Igual
> - Mayor
>= - Mayor o Igual

Lógicos - !,NOT,NO - Negación
ff,AND,Y - Conjunción
||,OR,O - Disyunción

AB AND AB OR A NOT
00 0 00 0 0 1
01 0 01 1 1 0
10 0 10 1
11 1 11 1

Existen reglas de prioridad entre los distintos operadores, dependen de los lenguajes de programación, pero en general son los siguientes:
1. Paréntesis
2. Signo
3. Potencia
4. Producto, División y Módulo (Resto)
5. Suma y Resta
6. Concatenación
7. Relacionales
8. Negación
9. Conjunción
10. Disyunción

Expresiones:
Expresiones: Son un conjunto de valores variables (operandos) y operadores relacionados o combinados entre si, según unas reglas establecidas. Los operandos pueden ser también valores retornados por funciones.

En función del resultado obtenido, las expresiones se clasifican en:
• Aritméticas: El resultado de la evaluación de la expresión es numérico.
• Relacionales: Utilizan operadores relacionales y el resultado es un valor lógico.
• Lógicas: Utilizan operadores lógicos y se aplican expresiones relacionales. El resultado de la evaluación es un valor lógico.
• Alfanuméricas: Utilizan operandos y operadores alfanuméricos.

--

ESTRUCTURAS ESTÁTICAS DE DATOS:
Tablas: Está formada por un número fijo de elementos (variables) todos ellos del mismo tipo de datos y situados en posiciones contiguas de memoria.
Elemento: Es cada uno de los datos que constituyen la tabla.

Nombre de Tabla: Es un nombre de variable que permite referenciar toda la tabla de forma global y nos permitirá acceder a cada elemento de forma individual.

Tipo de Tabla: Es el tipo de dato de todos los elementos de la lista.

Índices: Un entero positivo que nos permite identificar cada elemento de una tabla.

Tamaño de Tabla: Número máximo de elementos que componen la tabla.

ACCESO A LOS ELEMENTOS: Los elementos de una tabla tratados individualmente son variables que reciben el mismo trato que cualquier otra variable simple, con un tipo de dato que coincide con el tipo de la tabla y una denominación propia que la distingue de los diversos elementos. Para acceder o referenciar un elemento en particular es suficiente con indicar el nombre de la tabla seguido por el índice correspondiente entre paréntesis.

Dimensión: El número de índices que necesitamos para referenciar una tabla.

CLASIFICACIÓN DE LAS TABLAS:
• Unidimensionales: (Vectores) En este caso, solo es necesario un índice para acceder a los elementos de la misma.

Código:
<Nombre> (<índice>)


• Bidimensionales: (Matrices) Son aquellas que necesitan dos índices para acceder a cada uno de sus elementos.

Código:
<Nombre> (<índice1><índice2>)



Programación Estructurada:
Introducción:
Desde el nacimiento de la informática, se han ido desarrollando métodos y herramientas con el objetivo de facilitar y mejorar el diseño y resolución de programas. Hay dos clases:
Programación estructurada: Conjunto de técnicas que incorporan:
a- Diseño descendente (Top-Down) “Diseño por capas”
b- Descomposición de tareas en tareas más simples
c- Solo se pueden utilizar 3 tipos de estructuras
a. Alternativa
b. Repetitiva
c. Secuencial

Programación modular: Consiste en la división de un programa en módulos, de tal forma que cada uno de ellos se encargue de la ejecución de una tarea. Los módulos pueden ser subprogramas, subrutinas, funciones o procedimientos.

Partes de un programa:
Todo programa está constituido por un conjunto de instrucciones o de órdenes capaces de manipular los datos. Estas órdenes pueden ser divididas en tres grandes grupos que determinan las partes de un programa.
Entrada de datos -> Proceso -> Salida de resultados

• Instrucciones de entrada de datos: Conjunto de instrucciones que permiten llevar datos desde el exterior (tomar datos a través de un dispositivo de entrada y almacenarlos en la memoria central).
• Instrucciones de proceso: Conjunto de instrucciones encargadas de procesar o realizar un tratamiento de datos obteniendo unos resultados que se almacenan en la memoria central.
• Instrucciones de salida: Permiten extraer datos (resultados) de la memoria central mostrándolos a través de un dispositivo de salida.

Datos ->
Dispositivo Externo <-> Memoria Principal <-> Proceso o algoritmo
<- Resultados

Algoritmo:
Es la descripción abstracta de todas las acciones u operaciones que debe realizar un ordenador de forma clara y detallada así como el orden en el que estas deberán ejecutarse junto con la descripción de todos aquellos datos que deberán ser manipulados por dichas acciones y que nos conducen a la solución del problema. Un algoritmo deberá reflejar las 3 partes de un programa (entrada, proceso, salida) es importante tener en cuenta que todo algoritmo debe ser totalmente independiente del lenguaje de programación utilizado. Las características que debe cumplir el diseño de todo algoritmo son las siguientes.
a- Debe ser conciso y detallado. Debe reflejar con el máximo detalle el orden de ejecución de cada acción u operación que vaya a realizar el ordenador.
b- Debe ser flexible, permitiendo y facilitando así las futuras modificaciones o actualizaciones del diseño realizado.
c- Debe ser finito, tener comienzo y final.
d- Ser lo más claro y sencillo posible.

Diagramas de Flujo:
Son representaciones gráficas que mediante símbolos estandarizados permiten describir las acciones y la lógica que ha de seguir un algoritmo junto con el flujo de datos para la obtención de los resultados convenidos.
Ordinogramas: Diseño
Organigramas: Análisis
Pseudocódigo: Lenguaje intermedio entre el natural y el lenguaje de programación (el cual vamos a tratar en este tutorial). Todo algoritmo en pseudocódigo debe reflejar las distintas partes de un programa.

Tipos de Instrucciones:
Instrucción: Hecho o suceso de duración limitada que permite generar unos cambios previstos en la ejecución de un programa.
Instrucciones de definición de datos: Permiten reservar la memoria necesaria para almacenar los datos que se van a manejar en el programa. Mediante el uso de variables simples o complejas.

Las instrucciones de definición consisten únicamente en dar un nombre y un tipo de dato a las zonas de memoria que quiero reservar.

Instrucciones primitivas:
• Instrucciones de Entrada: Permiten almacenar un dato en la memoria central durante el uso de una o más variables procedentes de un dispositivo externo (generalmente el teclado).

Código:
Leer <variable>
Leer <lista de variables


Esta instrucción para el proceso de ejecución hasta que se introduzcan tantos datos como variables aparezcan en la lista de variables.
• Instrucciones de Asignación: Consiste en introducir en una variable el resultado de evaluar una expresión.

Código:
<variable> = <expresión>


• Instrucciones de Salida: Permiten recuperar un dato de la memoria central para mostrarlo desde un periférico de salida.

Código:
visualizar <expresión> (Pantalla)
imprimir <expresión> (Impresora)


Instrucciones Compuestas:
No pueden ser ejecutadas directamente por el procesador y están constituidas por un bloque de acciones agrupadas en subrutinas, subprogramas, funciones o módulos.

Código:
<nombre_modulo>



Instrucciones de control: Se utilizan para controlar la secuencia de ejecución de un programa y también para determinar si se ejecutan o no bloques de instrucciones:

• Alternativas:
o Simple: Permite la ejecución de un grupo de instrucciones en función de que se cumpla o no una condición.

Código:
Si <condición>
<instrucción1>
<instrucción2>
<instrucciónn>
Fin Si


o Doble: Permite decidir por un grupo de instrucciones u otro en función de si se cumple la condición o no.

Código:
Si <condición>
<instrucción11>
<instrucción12>
<instrucción1n>
Sino
<instrucción21>
<instrucción22>
<instrucción2n>
FinSi


o Múltiple: Ejecuta distintos grupos de instrucciones en función del resultado de la evaluación de una expresión.

Código:
Según_Valor: <expresión>
<valor1>: <bloque de instrucción 1>
<valor2>: <bloque de instrucción 2>
<valorn>: <bloque de instrucción n>
Por_Defecto: <bloque de instrucción por defecto>
Fin_Según_Valor



Instrucciones repetitivas:
Nos permiten variar o alterar la secuencia normal de ejecución de un programa haciendo posible que un grupo de acciones se ejecute más de una vez de forma consecutiva, también se denomina bucles o lazos.
- Estructura Mientras: Se caracteriza por la repetición de un conjunto de instrucciones en función de que se cumpla o no la condición, pueden repetirse de 0 a n veces.

Código:
Mientras <condición>
<Instrucción1>
<Instrucción2>
<Instrucciónn>
Finmientras



o Se evalúa la condición, si se cumple, se ejecutan las instrucciones comprendidas entre el mientras y el fin mientras y de nuevo se evalúa. El proceso termina cuando la condición se cumple.

- Estructura Repetir: Permite la repetición de un proceso mientras se cumpla una condición evaluando la condición al final de cada repetición, el proceso se repite de 1 a n veces.

Código:
Repetir
<Instrucción1>
<Instrucción2>
<Instrucciónn>
Mientras <condición>



o El conjunto de instrucciones entre repetir y mientras, se ejecuta (al menos una vez) evaluando la condición y volviendo a repetir en caso de que se cumpla.

- Estructura Para: Repetición de un proceso un número determinado de veces

Código:
Para <variable> = <valor_inicial> hasta <valor_final> Inc = <valor_incremento>
<Instrucción1>
<Instrucción2>
<Instrucciónn>
Finpara



Donde el incremento indica la cantidad a aumentar la variable dentro del proceso repetitivo.

Contadores y Acumuladores:
Contador: Es una variable que se incrementa o decrementa en una cantidad constante.

Código:
<variable> = <variable> + 1


Acumulador: Variable que se incrementa en un valor no constante.

Código:
<variable1> = <variable1> + <variable2>

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 6:24 am

DISEÑO MODULAR DE PROGRAMAS:

La descomposición modular consiste en dividir el programa en varias partes denominadas módulos, cada uno de los cuales tiene una misión que deberá ser lo más específica posible. Cada módulo puede ser llamado por uno o más módulos, quedando suspendida la ejecución del módulo que llama y entrando en ejecución el módulo llamado hasta que este termina, devolviendo a continuación el control del programa al módulo que lo llamó en el punto que se dejó.

La idea básica es que tenemos un programa principal, desde el que podemos llamar a módulos, los cuales pueden llamar a otros módulos si llega a ser necesario.

Las principales ventajas de la programación modular son las siguientes:
Facilitar la comprensión del problema y su resolución escalonada
Aumentar la claridad y legibilidad de los programas
Permitir la resolución del problema por varios programadores a la vez
Reducir el tiempo de desarrollo aprovechando módulos previamente desarrollados
Mejorar la depuración. Pues se pueden depurar los módulos aisladamente.
Facilitar un mejor y más rápido mantenimiento de la aplicación.

Clasificación de los módulos:

Se pueden clasificar en función de distintos criterios:
a) En función de su situación con respecto al módulo que llama
- Internos: Se encuentran en el mismo fichero que el módulo que llama
- Externos: Se encuentran en distinto fichero que el módulo que llama
b) En función del retorno o no retorno de un valor
- Funciones: Retorna un valor de forma explícita cuando acaban la ejecución del mismo. Este valor debe ser recogido o evaluado en una instrucción del módulo que lo llamó. Luego, la llamada a una función siempre forma parte de una instrucción.
- Procedimientos: No hace un retorno explícito de ningún valor, cuando se llama al módulo. La llamada es una instrucción completa. Es decir, no forma parte de ninguna otra instrucción.

Cuando un módulo acaba de ejecutarse se continúa con la siguiente instrucción a la lammada del mismo.
Tanto funciones como procedimientos pueden modificar parámetros que se les envían como argumentos.

c) En función de cuando ha sido desarrollado
- De programa: Se han desarrollado a la vez que el programa que los llama.
- De librería: Son módulos que han sido desarrollados previamente e incorporados a las librerías que acompañan al compilador.

Ámbito de una variable: Parte de un programa donde esa variable es reconocida y por tanto, puede ser utilizada, pueden ser de dos tipos: variables globales y locales.

Locales: Deben estar definidas en un lugar específico del programa que no pertenezca a ninguno de sus módulos, si se definen al comienzo del programa, su ámbito de validez es todo el programa (todos sus módulos), si se define en otro punto del programa, su ámbito de validez es el resto del programa.

Globales: Se definen al principio del programa y pertenecen por tanto a todo el programa completo.

Parámetros:
También llamados argumentos, son variables de enlace entre módulos para establecer relaciones entre ellos, de forma que no se produzcan efectos laterales (la modificación de un módulo debe influir en el funcionamiento de otros módulos relacionados). Este tipo de enlace está cerca del concepto de "caja negra", en el sentido de que lo que realmente interesa es la entrada y la salida del módulo, ignorando inicialmente como trabaja internamente.

Se pueden clasificar en:
Actuales: Son variables locales definidas en el módulo que llama, que serán enviadas al módulo llamado.
Formales: Son variables locales en el módulo llamado, que se definen para que recojan los parámetros actuales del módulo que llama.

Los parámetros se expresan dentro de los paréntesis que siguen al indentificador del módulo. Si el módulo no tiene parámetros, los paréntesis aparecerán vacíos. Tiene que existir una correspondencia entre los parámetros actuales y los formales en número, orden y tipo de dato.

Ahora voy a poner un ejemplo simple para diferenciar entre procedimiento y función:

PROCEDIMIENTO:

MODULO Calculo()
datos: a,b : entero

Código:
INICIO
a = 20
b = 50
suma(a,b)
...
...
FIN MODULO



MODULO Suma(x:entero, y:entero)
datos: s : entero

Código:
INICIO
s = x+y
VISUALIZAR s
FIN MODULO



Como podéis ver, el procedimiento, no retorna el resultado, sino que éste lo visualiza en vez del módulo principal.

FUNCION:

MODULO Calculo()
datos: a,b,sum : entero

Código:
INICIO
a = 20
b = 50
suma = suma(a,b)
VISUALIZAR suma
FIN MODULO



MODULO Suma(x:entero, y:entero)
datos: s : entero

Código:
INICIO
...
...
s = x + y
retorna s
FIN MODULO



La función, en cambio, retorna el resultado para que el módulo principal del programa lo muestre. (La instrucción suma = suma(a,b) pide que el resultado del módulo suma(), con los parámetros a y b, sea introducido en la variable suma.)

Una recomendación: Tratad de llamar a los parámetros actuales de forma distinta a los formales, ya que esto permite re-utilizar los actuales en más módulos posteriormente sin confundir unos con otros.

Paso de parámetros:
El paso de parámetros puede hacerse de dos formas distintas:
a) Paso por valor: Se envía el valor que tiene cada uno de los parámetros actuales en el momento de realizar la llamada, estos valores son recogidos por los parámetros formales del módulo llamado, que deben estar definidos con los mismos tipos de datos que los parámetros actuales. (Parámetro de entrada)

b) Paso por referencia: Se envían las direcciones de memoria que tienen asignados cada uno de los parámetros formales del módulo llamado, por tanto, en el módulo llamado se pueden modificar los valores de las variables de enlace. El paso de parámetros por referencia o dirección ofrece menos seguridad que el paso de parámetros por valor, pues si se produce algún error en las modificaciones de las variables de enlace, estas quedan reflejadas en la memoria.
Con el paso por referencia se puede:
- Pasar la dirección para utilizar y modificar el valor que contiene. (Parámetro de entrada y de salida)
- Pasar la dirección de una variable vacía para que me recoja un resultado y se pueda utilizar en el módulo que llama. (Parámetro de salida).

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 6:27 am

ALGORITMOS RECURSIVOS:

Para definir algoritmos recursivos, es necesario establecer una relación de recurrencia en términos del tamaño del problema.
Las relaciones recurrentes más simples se establecen disminuyendo el tamaño del problema en una unidad o dos (cantidad fija) aunque también puede reducirse en algunos casos en cantidades no fijas (mitad) dado que la solución del problema se plantea como una relación recurrente del tamaño del mismo, para poder obtener la solución, es necesario poder disponer de unas series (o solo una en muchos casos) de soluciones particulares, lo que se denomina caso base.

Ejemplo1: Algoritmo recursivo para el calculo factorial de un número n.
Caso Base: n=0 f=1 {ya que el factorial de 0 es 1}
Hipótesis de Recurrencia: Sé resolver el factorial de n-1 f=FACTORIAL(n-1) {haremos posteriormente esa función FACTORIAL, que será la que haga la recurrencia}
¿Cómo lo resuelvo para un término más? n*FACTORIAL(n-1) {ya que un termino más sería FACTORIAL(n) que es exactamente lo mismo que n*FACTORIAL(n-1) la diferencia es que el primero no nos permite la recurrencia pero el segundo si.}

FUNCION FACTORIAL

Código:
INICIO
SI n==0
f=1
SINO
f=n*factorial(n-1)
FIN SI
RETORNA f
FIN



Ahora paso a explicar su funcionamiento, aunque a la hora de plantearlo no hace falta verlo así, basta con saber que va a funcionar, si se intenta ver el funcionamiento en algoritmos con recursiones muy complejas, solo se conseguirá liarse y no llegar a nada.

Este algoritmo realizará lo siguiente, por ejemplo para n=3:

Arranca el módulo FACTORIAL(3):
n=3, como n!=0
llama a f=n*factorial(2)

Arranca el módulo FACTORIAL(2):
n=2, como n!=0
llama a f=n*factorial(1)

Arranca el módulo FACTORIAL(1):
n=1, como n!=0
llama a f=n*factorial(0)

Arranca el módulo FACTORIAL(0):
n=0
Termina el modulo FACTORIAL(0) devolviendo un 1
Termina el módulo FACTORIAL(1) devolviendo un 1*1 = 1
Termina el módulo FACTORIAL(2) devolviendo un 2*1 = 2
Termina el módulo FACTORIAL(3) devolviendo un 3*2 = 6

En conclusión, sacamos que, cuando se ejecuta un programa recursivo, las llamadas recursivas no se ejecutan inmediatamente, lo que se hace es colocarlas en una pila hasta que se encuentra la condición de terminación de la recursividad, entonces se ejecutan las llamadas a la función en orden inverso a como se generaron como si se fueran sacando de la pila. *si no lo recordáis ya, ver pila en posts superiores*

Ejemplo ilustrado:







Os gustan el inicio de mis apuntes de aplicaciones jajajajaja viva la ciencia de la informatica.

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Invitado el Vie Dic 17, 2010 6:33 am

borrad este hilo ya pls.... Sad Sad Sad Sad Sad Sad Sad jajajajaj ni me he parado a leerlo... y es una mierda como un castillo... pfff puta informatica xD

Invitado
Invitado


Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Invitado el Vie Dic 17, 2010 7:03 am

No lo borreis que en mi segundo cuatrimestre tengo Aplicacion de Ordenadores y lo necesitare xD

Gracias XIII buen apunte ^^

Invitado
Invitado


Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 7:08 am

Esto no vale para nada eh que no te engañen que esto en la vida real lo utilizas cero. Seguramente lo que des sera una introduccion a C a java a kobol o al IDE que sea.

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Invitado el Vie Dic 17, 2010 7:43 am

todo eso para decirnos k el servidor abre en 15 min? Shocked

PD: efectiviwonder, le pseudocodigo se usa bastante poco, para hacer bocetos de programas si eso. yo hice eso, primero estudie pseudocodigo y ahora estoy con java.

Invitado
Invitado


Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 7:46 am

A mi java me mola un huevazo pero ahora estoy con c de mierda que me parece todo muy de la prehistoria.

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Anubis el Vie Dic 17, 2010 7:54 am

XIII escribió:A mi java me mola un huevazo pero ahora estoy con c de mierda que me parece todo muy de la prehistoria.

Eso que decís prehistoria sigue siendo el lenguaje más fiable y de mejor programación que existe. Si no dominás C, no existís en la programación.

Smile

_________________
avatar
Anubis
Admin

Mensajes : 640
Fecha de inscripción : 29/07/2010

http://www.ainurs-clan.tk/

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 7:55 am

exacto!

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Invitado el Vie Dic 17, 2010 9:01 am

que exacto ni ke na, si has dicho tu que es prehistoria xDDDDDDD

Invitado
Invitado


Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  XIII el Vie Dic 17, 2010 4:47 pm

Con exacto! queria decir que es antiguo y el mejor,que tiquismiquis soy coño jajaja y como en todo para gustos los colores.

_________________
avatar
XIII

Mensajes : 53
Fecha de inscripción : 09/11/2010
Edad : 34

Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Invitado el Vie Dic 17, 2010 9:31 pm

bueno bueno yo tambien estoy metido en el mundillo este, en clase ya he acabado de dar C y hemos empezado ya un poco de java a ver si tienes algo así parecido x'DDDDDDD

Invitado
Invitado


Volver arriba Ir abajo

Re: [Info] Conceptos Básicos y tutorial de pseudocodigo desde cero.

Mensaje  Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.