Comunidad de diseño web y desarrollo en internet online

Fundamentos de la programación

En este tutorial aprenderemos algunas cosas básicas de la programación, todo será tratado de una manera bastante

¿Que es un algoritmo?

Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o resolver un problema

Muchas de las tareas que realizamos en nuestro día a día pueden ser descompuestas a algoritmos, por ejemplo cuando alguien toca a tu puerta... que hacemos, atendemos........pero si lo vemos un poco mas detalladamente....bueno,caminamos a la puerta luego tomamos la manilla y la abrimos.......ok, esto lo pueden ver como un algoritmo, verán la definición nos dice que son un conjunto de instrucciones o pasos finitos bueno aquí tenemos

  1. Caminar hasta la puerta
  2. Tomar la manilla
  3. Abrir puerta

3 pasos o instrucciones finitas que resuelven el problema de abrir la puerta para efectos de entender lo que es un algoritmo lo dejaremos hasta aquí por los momentos

Un programa esta compuesto por algoritmos, así pues entraremos a lo que realmente nos interesa que es entender los
algoritmos o el código de un programa, pues bien un algoritmo se puede ver de la siguiente manera

<inicio_algoritmo>
 instrucción .....1
 instrucción .....2
 instrucción .....3
 .
 .
 .
instrucción .....n
<fin_algoritmo>

Siempre llevando un orden lógico de ideas, es decir, no puedes intentar abrir la puerta si no has llegado a ella.

Y que son esas instrucciones, bueno además de las instrucciones mas básicas como son:

  • Las asignaciones (a=b)
  • Las operaciones matemáticas (a=a+b, a=a/b, etc)

Hasta este punto nada fuera de lo común o extraño, sigamos

Operaciones Lógicas

Aquí si vamos a explicar un poco mas, estas operaciones están basadas en dos valores que son verdadero y falso.
Las operaciones lógicas mas comunes son las comparaciones, que en la mayoría de los lenguajes se manejan con el
operador "==" entonces si quiero saber si a es igual a b lo expreso así

a==b, dependiendo de el valor de a y b tu resultado será verdadero o falso

Pero y si quiero saber si son distintos?? bueno eso lo expresamos así:

a!=b

Además tenemos tres operadores lógicos básicos, que son and, or y not, a estos se les trabaja en la mayoría de los
lenguajes como &&, ||, !, respectivamente, ahora vamos a ver las siguientes tablas, donde "V" denotara verdadero
y "F" denotara falso

a b ---------(a&&b)
F F ---------- F
F V ---------- F
V F ---------- F
V V ---------- V

a b ---------- (a||b)
F F ---------- F
F V ---------- V
V F ---------- V
V V ---------- V

a ---------- not(a)
F ---------- V
V ---------- F

Esta son conocidas como "tablas de verdad", son comúnmente tratadas también con 1 y 0 entonces

a b ---------- (a&&b)
0 0 ---------- 0
0 1 ---------- 0
1 0 ---------- 0
1 1 ---------- 1

a b ---------- (a||b)
0 0 ---------- 1
0 1 ---------- 1
1 0 ---------- 1
1 1 ---------- 0

a ---------- not(a)
0 ---------- 1
1 ---------- 0

Mucha gente incluyendome evita el uso de los valores "Verdadero" y "falso" o "true" y "false" como lo maneja la
mayoría de los programas, sino que se usan valores enteros 1 y 0 porque es mas estándar ya que algunos lenguajes
no tienen valores booleanos( denominación de las constantes "true" y "false").

Ahora veremos algunos ejemplos de expresiones lógicas con sus respectivos resultados

(5==5)=true
!(5==5)=false
(5==2)=false
(5!=2)=true
((5!=2)&&(5==5))=true
((5!=5)&&(5==5))=false
(((5!=2)&&(5==5))||((5!=5)&&(5==5)))=true

Estructuras condicionales

El "if" es una de las mas comunes y se construye de la siguiente manera

if (condición) {
    instrucción .....1
    instrucción .....2
    instrucción .....3
    .
    .
    instrucción .....n
}

Nota: las llaves ({...}) denotan el comienzo y final de las instrucciones dentro del "if" estas llaves son necesarias
nunca olvides ponerlas, te aseguro que son el dolor de cabeza de muchos programadores

El "if" si lo traducimos no es mas que "si", la condición entre los paréntesis debe ser una expresión lógica..

Las instrucciones dentro del "if" serán ejecutadas si y solo si la condición se cumple, es decir si el resultado
de la expresión lógica es verdadero.

Tenemos también el "if, else"

if(condición){
    instrucciones
}else{
    instrucciones
}

Notaran que el "else" no tiene condición y eso es porque al no cumplirse la condición del if inmediatamente entran
a ejecutarse las instrucciones del else...

Para que se entienda mejor vamos a tomar el ejemplo de la puerta

if(tocan_puerta){
    caminar_hasta_puerta;
    if(puerta_abierta){
        atender_persona;
    } else{
        abrir_puerta;
        atender_persona;
    }
}

Esto es solo para ilustrar el ejemplo del "if, else" pero este código es solo explicativo, en realidad esto se haría
así:

if(tocan_puerta){
    caminar_hasta_puerta;
    if(!(puerta_abierta)){
        abrir_puerta;
        atender_persona;
    }
}

También tenemos un "if, else if" no muy usado, imaginense que no tengo solo dos opciones como en el ejemplo de la
puerta sino 5 6 o incluso mas opciones, por ejemplo, imaginense que les piden 100 dólares y uds en su cerebro tienen
un algoritmo como este:

busco la cartera
x = saco un billete; ..imaginense que sacamos un billete de 20 dólares
if(x==1){ ..entonces pregunto el billete es de 100 dolares....NO
	.
} 
else if(x==5){ ..entonces pregunto el billete es de 100 dolares....NO
	.
}
else if(x==10){ ..entonces pregunto el billete es de 100 dolares....NO 
	.
}
else if(x==20){ ..entonces pregunto el billete es de 100 dolares....NO
	.
}
else{
	. .. y al final se que NO TENGO UN BILLETE DE 100 DOLARES!!!
}

Es por eso que esta sentencia se usa en casos donde no haya un gran numero de opciones.

En estos casos usamos el switch que se construye de la siguiente manera

switch(x){
	case P0: 
		instrucciones
		break;
	case P1:
		instrucciones
	break;
	case P2:
		instrucciones
		break; 
		.
		.
	case Pn:
		instrucciones
		break;
	default:
		break;
}

Donde x es una variable no necesariamente entera, es decir, puede ser un carácter, etc, y Pi son los posibles valores
que pueda tomar x si retomamos el ejemplo de los dólares

x=saco_un_billete(cartera); ..imaginense que sacamos un billete de 100 dólares
switch(x){
	case 1:
		break;      ..el switch no va opción por opción(cases) preguntando cual la
	case 5:            correcta sino que va directo al case que tenga el valor que contiene x
		break;
	case 10:
		break;
	case 20:
		break;
	case 100:
   	prestar_billete; <-----AQUI
		break;
	default:
   	llora_pues_estas_en_bancarota;
   	break;		..en caso de que el valor no se encuentre entre los case hay una opción default
}

Ciclos o Bucles

Volvamos un momento al ejemplo de la puerta, recuerdan que antes de abrirla teníamos que llegar a la puerta, bueno,
como llegábamos a la puerta??....caminando menso dirán algunos, y bueno si tienen razón, pero es el ejemplo
perfecto, verán, al caminar que hacemos, movemos una pierna y luego la otra, y después que?.... movemos una pierna
y luego la otra, y después??....movemos una pierna y luego la otra, y después??

LO MISMO!!! exacto, eso es un ciclo repetir una o varias instrucciones un numero de veces.

Tenemos varias estructuras para modelar ciclos

El "do, while" que encaja perfectamente con nuestro ejemplo

do{
	.
	.
	instrucciones 
	.
} while(condición);

En el ejemplo:

do{
	mover_pierna(izq);
	mover_pierna(der);
} while(!(llegue_a_puerta));

Las instrucciones dentro del "do, while" se ejecutaran mientras la condición sea verdadera. la condición es conocida
como "condición de parada" una variación del anterior es el "while"

while(condición) {
	.
	instrucciones
	.
}

Ya le encontraran el uso a cada una

También tenemos el "for"

for (i=0;i<N;i++){
	.
	instrucciones
	.
}

En el for definimos una valor inicial i, luego una condición de parada, y una medida de incremento

En el ejemplo las instrucciones dentro del for se ejecutaran mientras i no llegue al valor de N

Cada una de estas estructuras tiene sus pros y sus contras cada una puede ser modelada con la otra pero siempre una
conviene mas que la otra, verán, en el ejemplo de la puerta con el "do, while" empezaríamos a caminar sin antes
verificar la condición, es decir si ya estamos frente a la puerta vamos a caminar hacia ella y nos vamos a dar en
la madre, en cambio con el while, verificaríamos la condición primero y en el caso de que ya estemos allí no
caminamos y pasamos a abrir la puerta..

El "for" es mas que todo usado , en problemáticas donde las condiciones de parada son numéricas, por ejemplo si
sabemos que son N pasos.

Funciones y procedimientos

Las funciones y procedimientos, son claves en el desarrollo de un buen algoritmo.
pero que son?? bueno son pedazos de código que se separan del main o principal debido a su regular uso, si vemos el
ejemplo de la puerta, sabemos que tenemos que llegar a la puerta antes de abrirla, imaginanense que el código para
mover una pierna es de 41 líneas y necesito hacer ese movimiento 5 veces por pierna para llegar a la puerta,
entonces tendría 410 líneas de código..

A menos que use una función o procedimiento que se llame mover pierna luego la llame desde un ciclo diez veces...
mejor no???

Esa es la idea de una función o un procedimiento...

Las principales diferencias son que una función retorna un valor y un procedimiento solo modifica los valores
ejemplo:

procedimiento mover_pierna(pierna x);
	lo que hace es incrementar el valor de la pierna que recibe como parámetro"x"
función sacar_billete(cartera x):int;
     lo que hace es retornar un valor entero(billete) obtenido de la cartera x

Pero para lo que nos interesa debemos saber antes lo siguiente

¿Que es son los Paradigmas de Programación?

Representan un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro sino que cada
uno tiene ventajas y desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.

Algunos ejemplos de paradigmas de programación:

  • El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por BASIC.
  • El paradigma funcional está representado por la familia de lenguajes LISP, en particular Scheme.
  • El paradigma lógico, un ejemplo es PROLOG.
  • El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.

Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que
se mezclen. Tal es el caso de lenguajes como C++, Delphi o Visual Basic, los cuales combinan el paradigma imperativo
con el orientado a objetos.

Otro ejemplo: lenguajes como Scheme o Prolog, paradigma funcional y lógico respectivamente, cuentan con estructuras
repetitivas. Estas son más propias del paradigma imperativo que a la forma pura de aquellos.

Los paradigmas de Programación como ya lo ven son varios y muchos de los lenguajes que uds de repente han manejado usa
por lo menos uno,ahora los mas usados son el paradigma imperativo(PI) y el paradigma orientado a objetos(POO)... flash
así como muchos otros trabaja ambos paradigmas es de destacar que el orientado a objetos es mucho mas usado en la
actualidad q el imperativo y los otros, así en flash la POO domina en el Action Script por eso vemos que cada
"objeto" tiene propiedades o acciones o métodos

Bueno siendo este un tema bastante extenso, ya el objetivo de realizar una introducción a la programación se esta
convirtiendo en mas que solo un introducción esperemos las reacciones de los miembros de la comunidad para seguir
con el tema..

Espero que sirva de ayuda.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate