Documente Academic
Documente Profesional
Documente Cultură
Problema
Un problema es un conjunto de cuestiones que se plantean para ser
resueltas. En Informtica: se busca la solucin utilizando computadoras,
mediante un programa (buscando el mejor resultado en tiempo y forma).
Planteamiento
Lenguajes de programacin
Un programa es un conjunto de rdenes para una computadora.
Estas rdenes se le deben dar en un cierto lenguaje, que la computadora sea
capaz de comprender. El problema es que los lenguajes que realmente
entienden las computadoras resultan difciles para nosotros, porque son muy
distintos de los que nosotros empleamos habitualmente para hablar. Escribir
programas en el lenguaje que utiliza internamente la computadora (llamado
lenguaje mquina o cdigo mquina) es un trabajo duro, tanto a la hora
de crear el programa como (especialmente) en el momento de corregir algn
fallo o mejorar lo que se hizo.
Por eso, en la prctica se emplean lenguajes ms parecidos al lenguaje
humano, llamados lenguajes de alto nivel. Normalmente, estos son muy
parecidos al idioma ingls, aunque siguen unas reglas mucho ms estrictas.
Lenguajes de alto nivel y de bajo nivel.
Vamos a ver en primer lugar algn ejemplo de lenguaje de alto nivel, para
despus comparar con lenguajes de bajo nivel, que son los ms cercanos al
ordenador.
Uno de los lenguajes de alto nivel ms sencillos es el lenguaje BASIC. En este
lenguaje, escribir el texto Hola en pantalla, sera tan sencillo como usar la
orden
PRINT "Hola"
Otros lenguajes, como Pascal, nos obligan a ser algo ms estrictos, pero a
cambio hacen ms fcil descubrir errores:
program Saludo;
begin
write('Hola');
end.
El equivalente en lenguaje C resulta algo ms difcil de leer:
#include <stdio.h>
int main()
{
printf("Hola");
}
Los lenguajes de bajo nivel son ms cercanos al ordenador que a los
lenguajes humanos. Eso hace que sean ms difciles de aprender y tambin
que los fallos sean ms difciles de descubrir y corregir, a cambio de que
podemos optimizar al mximo la velocidad (si sabemos cmo), e incluso
llegar a un nivel de control del ordenador que a veces no se puede alcanzar
con otros lenguajes. Por ejemplo, escribir Hola en lenguaje ensamblador de
un ordenador equipado con el sistema operativo MsDos y con un procesador
de la familia Intel x86 sera algo como
dosseg
.model small
.stack 100h
.data
hello_message db 'Hola',0dh,0ah,'$'
.code
main proc
mov ax,@data
mov ds,ax
mov ah,9
mov dx,offset hello_message
int 21h
mov ax,4C00h
int 21h
main endp
end main
Resulta bastante ms difcil de seguir. Pero eso todava no es lo que el
ordenador entiende, aunque tiene una equivalencia casi directa. Lo que el
ordenador realmente es capaz de comprender son secuencias de ceros y
unos. Por ejemplo, las rdenes mov ds, ax y mov ah, 9 (en cuyo
significado no vamos a entrar) se convertiran a lo siguiente:
1000 0011 1101 1000 1011 0100 0000 1001
orden, justo en el momento en que hay que procesar cada una de las
rdenes.
Para algunos lenguajes, es frecuente encontrar compiladores pero no suele
existir intrpretes. Es el caso del lenguaje C, de Pascal y de C++, por
ejemplo. En cambio, para otros lenguajes, lo habitual es trabajar con
intrpretes y no con compiladores, como ocurre con Python, Ruby y PHP.
Adems, hoy en da existe algo que parece intermedio entre un compilador y
un intrprete:
Existen lenguajes que no se compilan para obtener un ejecutable para un
ordenador concreto, sino un ejecutable genrico, que es capaz de
funcionar en distintos tipos de computadoras, a condicin de que en esa
computadora exista una mquina virtual capaz de entender esos
ejecutables genricos. Esta es la idea que se aplica en Java: los fuentes son
archivos de texto, con extensin .java, que se compilan a archivos .class.
Estos archivos .class se podran llevar a cualquier computadora que tenga
instalada una mquina virtual Java (las hay para la mayora de sistemas
operativos). Esta misma idea se sigue en el lenguaje C#, que se apoya en una
mquina virtual llamada Dot Net Framework (algo as como armazn
punto net).
Pseudocdigo
A pesar de que los lenguajes de alto nivel se acercan al lenguaje natural, que
nosotros empleamos, es habitual no usar ningn lenguaje de programacin
concreto cuando queremos plantear los pasos necesarios para resolver un
problema, sino emplear un lenguaje de programacin ficticio, no tan estricto,
muchas veces escrito incluso en espaol. Este lenguaje recibe el nombre de
pseudocdigo.
Esa secuencia de pasos para resolver un problema es lo que se conoce como
algoritmo (realmente hay alguna condicin ms, por ejemplo, debe ser un
nmero finito de pasos). Por tanto, un programa de computadora es un
algoritmo expresado en un lenguaje de programacin.
Por ejemplo, un algoritmo que controlara los pagos que se realizan en una
tienda con tarjeta de crdito, escrito en pseudocdigo, podra ser:
Leer banda magntica de la tarjeta
Conectar con central de cobros
Si hay conexin y la tarjeta es correcta:
Pedir cdigo PIN
Si el PIN es correcto
Comprobar saldo_existente
Si saldo_existente > importe_compra
Aceptar la venta
CONCEPTO DE ALGORITMO
Para ser un programador eficaz se necesita aprender a resolver problemas de
un modo riguroso y sistemtico.
Los algoritmos son ms importantes que los lenguajes de programacin o las
computadoras. Un lenguaje de programacin es tan slo un medio para
expresar el algoritmo, y una computadora es slo un procesador para
ejecutarlo.
Definicin
Un algoritmo es un conjunto de tareas o pasos en una cantidad finita que se
ejecutan en un orden determinado, y para determinada situacin inicial se
resuelve el problema en un tiempo finito.
situacin ---------> algoritmo ----------> solucin inicial
Caractersticas que debe cumplir
1.
2.
3.
4.
5.
6.
un lenguaje
el algoritmo
especfico de
resultante se
Diagrama de flujo
Diagrama N-S (Nassi-Schneiderman)
Lenguaje de especificacin de algoritmos: Pseudocdigo
Lenguaje espaol
Frmulas
algoritmo).
-
3.
4.
5.
6.
- diagrama N-S
- pseudocdigo
Codificacin del programa.
Depuracin y verificacin del programa.
Documentacin externa.
Mantenimiento.
Instrucciones
Instrucciones
Instrucciones
Instrucciones
Instrucciones
de
de
de
de
de
inicio / fin.
asignacin: dar valores a una variable.
lectura: leer datos de un dispositivo de entrada.
escritura.
bifurcacin.
Instrucciones de bifurcacin
Pueden ser hacia delante o hacia atrs, y pueden realizarse de manera
condicional o incondicional:
Adems de estos elementos bsicos, existen otros que forman parte de los
programas:
bucles.
acumuladores.
contadores.
interruptores.
estructuras de control: secuenciales, selectivas, repetitivas.
Bucles
Un bucle o lazo (loop) es un segmento de un algoritmo o programa, cuyas
instrucciones se repiten una n cantidad de veces mientras se cumpla una
determinada condicin.
Se debe establecer un mecanismo para determinar las tareas repetitivas;
este mecanismo es una condicin que puede ser verdadera o falsa, y que se
comprueba cada vez que se realiza un paso o iteracin del bucle.
Un bucle consta de tres partes:
decisin
cuerpo
salida
Los bucles son anidados cuando estn dispuestos de tal modo que unos son
interiores a otros, y son independientes cuando son externos unos de otros.
Contadores y acumuladores
VARIABLE ACUMULADORA: Su funcin es acumular valores, distintos o no, en
forma parcial; valores resultantes de sumas sucesivas. Se debe inicializar
siempre, de lo contrario el valor que esta tome va a incluir el acumulado de
todas las veces que corri el programa. Generalmente se inicializa al
valor
se
incrementa
Interruptores
Un interruptor o conmutador (switch) llamado a veces, indicador o bandera
(flag) es una variable que puede tomar diversos valores a lo largo de la
ejecucin del programa, y que permite comunicar informacin de una parte a
otra del mismo.