[CURSILLO] Programación básica

Moderador: dresha

Reglas del Foro
En Ogarena no están bien vistos el Warez ni la Piratería; para eso hay otros foros que seguro os acogen con los brazos abiertos.
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

[CURSILLO] Programación básica

Mensaje por apokalypse »

Introducción a la Programación

La programación consiste en crear nuevos PROGRAMAS ejecutables en un ordenador (.exe) por medio de un CODIGO FUENTE (texto escrito en un LENGUAJE DE PROGRAMACIÓN) el cual es COMPILADO para generar un código binario 0/1 que el ordenador pueda ejecutar.

Para este cursillo no vamos a emplear ningún lenguaje de programación concreto, vamos a utilizar un "pseudolenguaje" que permita entender lo que vamos a hacer. El motivo de no usar un lenguaje concreto para este cursillo es el siguiente : la gente que quiere programar se tira de cabeza a un ordenador y un ENTORNO DE DESARROLLO (programas que permiten escribir y compilar código fuente), y la realidad es que la programación siempre empieza en un papel, con ideas más básicas que detalles concretos. Si una persona aprende a programar de forma "abstracta" (sin pensar en un lenguaje u otro), luego le será mucho más fácil trabajar con cualquier lenguaje concreto.

Todo programa consta siempre de dos partes:

* Datos : es un espacio de memoria donde guardamos los datos con los que queremos trabajar en el programa. En jerga informática, se les llama VARIABLES.
* Programa : es un código binario que ejecuta INSTRUCCIONES concretas una detrás de la otra y con ello consiguen cambiar el valor de las variables.
Última edición por apokalypse el 09 Abr 2011 19:04, editado 6 veces en total.
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Capítulo 1

Mensaje por apokalypse »

Variables y tipos de datos

Las VARIABLES son pequeños trozos de memoria que usaremos para guardar datos concretos que necesitemos para los programas, los cuales pueden guardar desde datos de entrada del programa hasta datos intermedios necesarios para el funcionamiento del mismo programa.

Una variable puede tener datos de alguno de estos tipos:

* Entero : es el formato numérico más extendido. Incluye tanto números negativos como positivos (sin decimales) y permite trabajar con las operaciones aritméticas normales (+,-,*, raiz, ...)
* Real : al igual que el entero, permite representar números pero estos pueden mostrar también los decimales.
* Texto : este tipo de variables permiten guardar una cadena de caracteres para luego poder usarla donde corresponda (p.ej.: la entrada de un nombre por el teclado).
* Booleana : este tipo de variables solo pueden tener uno de estos dos valores : VERDADERO / FALSO.
* Caracter : igual que las variables de tipo texto, pero solo admiten un caracter por cada variable.

Hay ocasiones en las que, por ejemplo, necesitamos guardar una lista de elementos del mismo tipo. Para no tener que usar tantas variables, existe un tipo de variable llamados MATRICES. Una MATRIZ es una lista definida de X elementos que contienen datos del mismo tipo (ejemplo: una matriz nota(1 a 20) que contiene las notas de los 20 alumnos de la clase. Si queremos conocer la nota del quinto, bastaria con leer el valor de nota(5).)

Además de las matrices, puede que nos interese crear ESTRUCTURAS DE DATOS que en una sola variable pueda guardar varios datos de tipos distintos (ejemplo : un estructura ALUMNO podria incluir datos como su nombre, su dirección, su nota media, etc...).

Si queremos dar un valor concreto a una variable lo haremos mediante una ASIGNACION (instrucción de programación que cambia el valor de una variable). Las asignaciones siempre se hacen de la misma forma:

Código: Seleccionar todo

variable = valor_nuevo
En la parte izquierda siempre se muestra la variable donde será guardado el valor nuevo del lado derecho. También podemos usar el valor antiguo de la misma variable de esta otra forma:

Código: Seleccionar todo

variable = variable + 1
En este caso, la parte izquierda indica donde se va a guardar el valor de la operación de la parte derecha, pero el valor de la variable que aparece en la parte derecha es el valor que tenia la variable antes de producirse el cambio. En este ejemplo concreto, hemos aumentado el valor de la variable en 1 unidad.

Las asignaciones funcionan igual para las matrices, solo que hay que tener en cuenta el índice:

Código: Seleccionar todo

nota(3)=7
Y para las estructuras hay que indicar el campo de la misma a cambiar:

Código: Seleccionar todo

variable_alumno.direccion = "Calle Falsa Nº 123"
Última edición por apokalypse el 09 Abr 2011 19:08, editado 6 veces en total.
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Capítulo 2

Mensaje por apokalypse »

Estructuras de control

Llegados a este punto ya sabemos como leer y trabajar con las variables. Pero en casi todos los programas hay que tomar "decisiones" y en función de esas decisiones el programa reaccionará de un modo u otro.
Para ello existen las INSTRUCCIONES DE CONTROL, que permiten hacer algún tipo de COMPARACIÓN y poder hacer algo en función del resultado de dicha comparación.

La instrucción de control más utilizada es la instruccion SI ... ENTONCES ... FIN SI ("IF ... THEN...END IF" o "IF(...){...}" en los lenguajes convencionales). Esta instrucción hace una comparación que devuelve un valor VERDADERO / FALSO. Veamos un ejemplo:

Código: Seleccionar todo

SI variable > 0 ENTONCES 
   escribir en pantalla ("numero positivo")
FIN SI
Este código lee el valor de la variable y lo compara con el valor 0. En caso de que la variable sea mayor que 0, entraría en la parte del programa que va desde el ENTONCES hasta el FIN SI, pero si fuera menor o igual a 0 entonces se saltaría dicha parte de código.

Puede que nos interese que el programa haga una cosa si se cumple y otra si no se cumple. Para ello usariamos un SINO de esta forma:

Código: Seleccionar todo

SI variable >=0 ENTONCES
   escribir en pantalla("numero positivo")
SINO
   escribir en pantalla("numero negativo")
FIN SI
Además de la instrucción SI, también existe otra instrucción de control que nos permite comparar más de dos casos : la instruccion SELECCIONAR ("switch{}" o "SELECT..." en algunos lenguajes).

Esta instrucción funciona de la misma forma que el SI, pero permite más de dos alternativas:

Código: Seleccionar todo

SELECCIONAR variable

CASO 1:
escribir en pantalla("uno")
FIN CASO
CASO 2:
escribir en pantalla("dos")
FIN CASO
CASO 3:
escribir en pantalla("tres")
FIN CASO
...
FIN SELECCIONAR
La forma de funcionar de esta instrucción es la siguiente : se lee el valor de la variable y se compara con los posibles valores de los CASOS. Si alguno concuerda, entonces el programa entraría en la parte de código entre el CASO y el FIN CASO correspondiente.
Última edición por apokalypse el 09 Abr 2011 19:06, editado 4 veces en total.
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Capítulo 3

Mensaje por apokalypse »

Bucles

Un BUCLE es una instrucción que permite ejecutar un mismo trozo de programa un número definido o no de veces. Para verlo mejor lo ilustraré con un ejemplo:

Tenemos una matriz nota(1 a 20) y queremos hacer un programa para que el profesor pueda rellenar las notas de los alumnos. Sin el uso de bucles, el programa debería ser algo así:

Código: Seleccionar todo

nota(1) = leer por teclado
nota(2) = leer por teclado
...
nota(20)=leer por teclado
En esencia hay tipos de bucles: los bucles finitos y los infinitos. Los bucles finitos repiten un mismo código un número fijo de veces, y además, tienen una variable llamada ÍNDICE que nos permite saber en que ITERACIÓN (nº de veces entradas en dicha parte de programa) estamos. En el ejemplo de arriba, podríamos usar la instrucción PARA CADA indice...FIN PARA("for" en casi todos los lenguajes) de las siguiente manera:

Código: Seleccionar todo

PARA CADA indice ENTRE 1 y 20
   nota(indice) = leer por teclado
FIN PARA
En este programa el indice se va incrementando automáticamente en cada iteración empezando por el 1 y terminando el bucle en la iteración número 20.

Los bucles infinitos funcionan casi igual, salvo que el final del bucle está definido por una CONDICIÓN. Podemos ver el uso de la instrucción MIENTRAS (condicion)...FIN MIENTRAS (while(condicion)... en casi todos los lenguajes) en este ejemplo para el mismo problema anterior:

Código: Seleccionar todo

numero_alumnos=20
indice=1
MIENTRAS indice <= numero_alumnos
   nota(indice) = leer por teclado
   indice = indice + 1
FIN MIENTRAS
Aunque para este ejemplo concreto es más complejo, este tipo de bucles son útiles si tenemos que hacer algo hasta que se dé una condición (otro ejemplo : leemos por teclado hasta que el usuario escriba la clave de acceso correcta):

Código: Seleccionar todo

acceso=FALSO
MIENTRAS acceso=FALSO
   clave = leer por teclado
   SI clave = "1234" ENTONCES
      acceso=CIERTO
   FIN SI
FIN MIENTRAS
Este bucle pedirá una y otra vez que el usuario escriba la clave hasta que coincida con el valor "1234", en cuyo caso cambia el valor de la variable "acceso" para que en la siguiente iteración no se vuelva a entrar en el bucle.
Última edición por apokalypse el 09 Abr 2011 19:07, editado 5 veces en total.
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Capítulo 4

Mensaje por apokalypse »

Subprogramas y funciones

Muchas veces los programadores se encuentran con situaciones de este estilo:

* Programas demasiado extensos y enrevesados
* Trozos de mismo código que se repiten en distintas partes del programa
* Cálculo de funciones matemáticas complejas.

Para ello existe un mecanismo llamado SUBPROGRAMA, el cual contiene un trozo de código y unas variables de entrada y salida y que mostraré en un ejemplo:

Código: Seleccionar todo

SUBPROGRAMA inicializar (entrada y salida nota(1 a 20) )

   PARA CADA i entre 1 y 20
      nota(i)=0
   FIN PARA

FIN SUBPROGRAMA
Para usar este subprograma en nuestro código lo hariamos así:

Código: Seleccionar todo

inicializar(nota)
Los subprogramas tienen la ventaja de que podemos distribuir el código de una forma más organizada, de modo que podemos ver un programa como una serie de "tareas" (ejemplo)

Código: Seleccionar todo

inicializar(nota)
leer_valores(nota)
mostrar_valores(nota)
En este ejemplo tenemos 3 subprogramas y cada uno se encarga de una tarea concreta : el primero pone todas las notas a 0, el segundo leeria los valores y el tercero los escribiría por pantalla.

Hay veces que nos interesa hacer cálculos de funciones y para ello hay una variante de los subprogramas llamadas FUNCIONES, las cuales siempre devuelven un único valor a partir de unos datos de entrada. Para un ejemplo, haremos la función que calcule la media de las notas:

Código: Seleccionar todo

FUNCION media(nota(1 a 20)) DEVUELVE REAL //// Tipo de datos que devuelve
   temporal=0
   PARA CADA i ENTRE 1 y 20
      temporal = temporal + nota(i)
   FIN PARA
   temporal = temporal / 20
   DEVOLVER temporal
FIN FUNCION

Para poder usar esta función, lo haríamos de la siguiente forma en nuestro código:

variable_media = media ( nota )  

U otro ejemplo:

SI media(nota) > 5 ENTONCES...

La ventaja de las funciones es que permiten el uso de mecanismo como la recursividad (una función recursiva se llama a sí misma para hacer cálculos). Lo veremos con el clásico ejemplo (en el mundo de la programación) de hallar el número de Fibonnacci (el N-esimo número de Fibonnacci es el valor de la suma de los números de Fibonnacci N-1 y N-2 hasta llegar a 0 ó 1, en el cual devuelve uno. Un ejemplo de función recursiva sería asi:

Código: Seleccionar todo

FUNCION Fibonnacci (numero) devuelve ENTERO
   SI numero = 0 ó numero = 1 ENTONCES
      DEVOLVER 1
   SINO
      DEVOLVER Fibonnacci(numero-1) + Fibonnacci(numero-2)
   FIN SI
FIN FUNCION
Última edición por apokalypse el 09 Abr 2011 19:08, editado 5 veces en total.
el telible exanime
Helper Literatura
Helper Literatura
Mensajes: 3691
Registrado: 09 Nov 2009 16:49
Alianza: SCORPION
Ubicación: Leyendo

Re: [CURSILLO] Programación básica

Mensaje por el telible exanime »

iba a abrir un tema para que me enseñaseis ahora mismo jajajaja cuando puedas!!
Jugar al ogarena es tan o mas dificil que montar un mueble de Ikea.

"LOS MÁS JOVENES, LOS MÁS SPAMMERS" by me

Imagen
gracias danyell

Imagen

Imagen
Imagen
miren el spoiler, vale la pena
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Re: [CURSILLO] Programación básica

Mensaje por apokalypse »

el telible exanime escribió:iba a abrir un tema para que me enseñaseis ahora mismo jajajaja cuando puedas!!
pues, hoy me he puesto y lo he terminado, xDDD

aunque hay que decir que este cursillo solo sirve como iniciación, ya publicaré más cursillos más avanzados de programación, además de que voy a escribir GUIAS DE IMPLEMENTACION para los distintos lenguajes de programación (con ellas se puede traducir del "pseudolenguaje" al lenguaje de programación concreto).
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Re: [CURSILLO] Programación básica

Mensaje por apokalypse »

opiniones porfa!!!!
y si creeis que hay algo que debiera incluir, decirmelo tambien!!!
(nota: Programación Orientada a Objetos y similares no se consideran programación básica)
el telible exanime
Helper Literatura
Helper Literatura
Mensajes: 3691
Registrado: 09 Nov 2009 16:49
Alianza: SCORPION
Ubicación: Leyendo

Re: [CURSILLO] Programación básica

Mensaje por el telible exanime »

apokalypse escribió:opiniones porfa!!!!
y si creeis que hay algo que debiera incluir, decirmelo tambien!!!
(nota: Programación Orientada a Objetos y similares no se consideran programación básica)

yo soy un me gustan las flores XD que no entiende nada, me tendré que poner detenidamente... lo que quiero saber de verdad es donde se programa metiendo todos los datos codigo etc, porque no tngo ni p**a idea xD
Jugar al ogarena es tan o mas dificil que montar un mueble de Ikea.

"LOS MÁS JOVENES, LOS MÁS SPAMMERS" by me

Imagen
gracias danyell

Imagen

Imagen
Imagen
miren el spoiler, vale la pena
apokalypse
Helper Programación
Helper Programación
Mensajes: 207
Registrado: 25 Jun 2008 03:31

Re: [CURSILLO] Programación básica

Mensaje por apokalypse »

el telible exanime escribió: yo soy un me gustan las flores XD que no entiende nada, me tendré que poner detenidamente... lo que quiero saber de verdad es donde se programa metiendo todos los datos codigo etc, porque no tngo ni p**a idea xD
Como bien dice la introducción, primero te convendría aprender a programar de la forma que enseña el cursillo, porque si te acostumbras a un lenguaje concreto, luego te va a costar mas pasarte a cualquier otro. Aun así, este cursillo enseña lo más básico que deberías saber antes de empezar con cada lenguaje concreto.

Los programas que tu dices son los ENTORNOS DE DESARROLLO : son programas que permiten escribir el texto de los programas y son distintos para cada lenguaje informático.

Uno de los próximos cursillos que voy a hacer es el de Programación Básica en C, uno de los lenguajes más conocido y utilizado del mundo. Cuando haga este cursillo, os daré enlaces para que os bajeis los programas necesarios.
Responder