lunes, 13 de noviembre de 2017



INTRODUCCIÓN

Programar  una computadora consiste en escribir las instrucciones para que la computadora realice una tarea; se suele decir que la computadora resuelve problemas, pero lo correcto es decir que la computadora ejecuta las instrucciones que resuelven el problema, en este sentido la tarea consiste en ejecutar las instrucciones.  Al conjunto de instrucciones específicas para que la computadora realice la tarea se le llama programa.

La computadora, normalmente viene preparada para ser utilizada, es decir viene con todos los programas necesarios para realizar las tareas que se desean realizar con ella, por ejemplo, un conjunto de programas para que con la ayuda de la computadora se pueda llevar la contabilidad de una empresa; un editor de texto para escribir un libro,  o un programa para jugar a las cartas con la computadora, etc.  Estos programas fueron desarrollados por personas, denominadas programadores de computadoras. Los programadores de computadoras deben  adquirir la habilidad de poder escribir instrucciones para una maquina que simplemente las ejecuta  como un autómata, sin ninguna actividad pensante, pero que al ejecutar las instrucciones  realiza la tarea para la cual fue programada.

Para ilustrar la forma en que se ejecuta un programa almacenado en la computadora se presenta el modelo conceptual de computadora  conocido como la Máquina de Von Newman,  este modelo fue diseñado por el matemático húngaro John  Von Newman.  Este modelo es la base de la arquitectura de la mayoría de las computadoras actuales

Algoritmos

Los algoritmos son el fundamento de la programación de computadoras, para que la computadora pueda ejecutar una tarea es necesario que primero se diseñe el algoritmo correspondiente, es decir, especificar las operaciones necesarias  para transformar los datos de entrada en datos de salida. Una vez diseñado y probado el algoritmo, se trasforma en  el programa correspondiente. El programa esta compuesto por el algoritmo, la especificación de los datos y las instrucciones que permiten la comunicación entre los usuarios del programa y la máquina.

Definición de algoritmo: Un algoritmo es un conjunto finito de instrucciones cuyo fin es realizar una tarea; este conjunto finito de instrucciones debe también ser  preciso y determinístico.


Características de un algoritmo

Un algoritmo debe tener al menos las siguientes características: 
1. Ser preciso: esto significa que las operaciones o pasos del algoritmo deben desarrollarse en un orden estricto, ya que el desarrollo de cada paso debe obedecer a un orden lógico. 
2. Ser definido. Ya que en el área de programación, el algoritmo es el paso previo fundamental para desarrollar un programa, es necesario tener en cuenta que el computador solo desarrollará las tareas programadas y con los datos suministrados; es decir, no puede improvisar y tampoco inventará o adivinará el dato que necesite para realizar un proceso. Por eso, el algoritmo debe estar plenamente definido; esto es, que cuantas veces se ejecute, el resultado depende estrictamente de los datos suministrados. Si se ejecuta con un mismo conjunto de datos de entrada, el resultado deberá ser siempre el mismo. 
3. Ser finito: esta característica implica que el número de pasos de un algoritmo, por grande y complicado que sea el problema que soluciona, debe ser limitado. Todo algoritmo, sin importar el número de pasos que incluya, debe llegar a un final. Para hacer evidente esta característica, en la representación de un algoritmo siempre se incluyen los pasos inicio y fin. 
4. Presentación formal: para que el algoritmo sea entendido por cualquier persona interesada es necesario que se exprese en alguna de las formas comúnmente aceptadas; pues, si se describe de cualquier forma puede no ser muy útil ya que solo lo entenderá quien lo diseñó. Las formas de presentación de algoritmos son: el pseudo código, diagrama de flujo y diagramas de Nassi/Schneiderman, entre otras. En esta publicación se propondrá una notación algorítmica y se darán las equivalencias entre la propuesta y las existentes y también con las sentencias de los lenguajes de programación, en particular Pascal y C. 
5. Corrección: el algoritmo debe ser correcto, es decir debe satisfacer la necesidad o solucionar el problema para el cual fue diseñado. Para garantizar que el algoritmo logre el objetivo, es necesario ponerlo a prueba; a esto se le llama verificación o prueba de escritorio. 
6. Eficiencia: hablar de eficiencia o complejidad de un algoritmo es evaluar los recursos de cómputo que requiere para almacenar datos y para ejecutar operaciones frente al beneficio que ofrece. En cuanto menos recursos requiere será más eficiente el algoritmo. 

Propiedades de los algoritmos 

1. Especificación precisa de la entrada: El algoritmo debe dejar claro el número y tipo de datos de entrada y las condiciones iniciales que deben cumplir esos valores de entrada para conseguir que las operaciones tengan éxito. 
2. Especificación precisa de cada instrucción: cada etapa del algoritmo debe estar definida con precisión, no debe haber ambigüedades sobre las acciones que se deben ejecutar en cada momento. 
3. Un algoritmo debe ser exacto y correcto: Un algoritmo se espera que resuelva un problema y se debe poder demostrar que eso ocurre. Si las condiciones de entrada se cumplen y se ejecutan todos los pasos el algoritmo entonces debe producir la salida deseada. 
4. Un algoritmo debe tener etapas bien definidas y concretas, un número finito de pasos, debe terminar y debe estar claro la tarea que el algoritmo debe ejecutar. 
5. Debe ser fácil de entender, codificar y depurar. 
6. Debe hacer uso eficiente de los recursos de la computadora 

 Clasificación y Tipos de algoritmos

Se ha clasificado a los algoritmos de diversas formas, de acuerdo con algunos de sus atributos. Por ejemplo:


A) Según el sistema de signos con el que describen los pasos a seguir, se reconocen:

–Algoritmos cualitativos: cuando se hace a través de palabras, es decir, las instrucciones son verbales. Sucede, por ejemplo, con recetas de cocina.

–Algoritmos cuantitativos: cuando se hace a través de cálculos numéricos. Se puede hacer un algoritmo, por ejemplo, para obtener la raíz cuadrada de un número.
  

B) Según su función, los algoritmos pueden ser:

–Algoritmos de ordenamiento: secuencian los elementos que ingresan a partir de un cierto orden, en general, según un orden numérico o léxico.

–Algoritmos de búsqueda: al contrario de realizar operaciones o secuenciar elementos, se dedica a encontrar dentro de una lista que ingresa, uno o varios elementos en particular que cumplan con el conjunto de condiciones dadas.


Constantes:

Una constante es un dato numérico o alfanumérico que no cambia durante todo el desarrollo del algoritmo o durante la ejecución del programa. Es un objeto de valor invariable.  Para expresar una constante se escribe explícitamente su valor.

Tipos de Constantes:

Constantes Numéricas (Enteras y Reales)
Constantes Alfanuméricas
Constantes Lógicas (Boolenas)
Las constantes pueden ser:

Constantes sin nombre: Es una expresión numérica donde se puede utilizar directamente el valor.

Constantes con nombre: Se hace una reserva de memoria en la cual se guarda el valor que será utilizado como constante.

Ejemplo:

a) PI = 3.1416

b) E = 2.718228

c) Iva = 0.13
  

Variables:

Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información.

Tipos de variables:

 Variables Numéricas (Enteras y Reales)
 Variables Alfanuméricas
           a) Caracteres alfabéticos

           b) Dígitos

           c) Caracteres especiales

 Variables Lógicas (Boolenas)
Son las que únicamente pueden contener dos valores, los cuales son:

 Valor Verdadero ó 1
 Valor Falso ó 0
Estos tipos de variables pueden tomar únicamente valores del mismo tipo, es decir si la variable es entera solamente puede almacenar datos enteros.

Ejemplo:

Una variable declarada como cadena solo puede tomar valores correspondientes a ese tipo.

                                             Nombre = "Manuel López"

OPERADORES

Los tipos de operadores son:
  • Aritméticos: son análogas a las fórmulas matemáticas, se usan para variables numéricas. Estos son los operadores usados:
OPERADORESSIGNIFICADO
+Suma
-Resta
*Multiplicacion
/Division
DIVDivision entera
MODModulo (resto de la division entera)
^Potencia
  • Lógicas: solo pueden dar dos valores true false. Pueden ser:
    • Relacionales: pueden comparar dos valores, mediante un símbolo. Estos son los operadores usados:
OPERADORSIGNIFICADO
>Mayor que
<Menor que
=Igual que
>=Mayor o igual que
<=Menor o igual que
<>Distinto que


 Elementos  básicos en el diseño de algoritmos

A.    HERRAMIENTAS PARA EL DISEÑO DE ALGORITMOS
Las dos herramientas más utilizadas para diseñar algoritmos son el Pseudocódigo y el Diagrama de flujo.
1.   Pseudocódigo
Es un lenguaje simplificado para describir un algoritmo utilizando una  mezcla de frases en lenguaje común, y palabras claves que indican el inicio y el fin del algoritmo y las instrucciones específicas a realizar.
Por ejemplo, el siguiente pseudocódigo corresponde al algoritmo para calcular el área del rectángulo: el algoritmo  calcula el área (a) de un rectángulo cualquiera,  si se le suministra la longitud de de la base (b) y la longitud de la altura (h).



Las palabras subrayadas se llaman  palabras reservadas, se deben utilizar sangrías que  facilitan la lectura del algoritmo Las instrucciones en pseudocódigo son fáciles de codificar en un lenguaje de programación.
2.   Diagrama de flujo
El diagrama de flujo es la representación gráfica de un algoritmo; para ello se utiliza un conjunto de símbolos estándares   mundialmente utilizados y desarrollados por organizaciones tales como  ANSI (American National Institute) e ISO (International Standard Organization para la elaboración de diagramas de flujo; 
En el diagrama cada símbolo representa una acción en concreto; y cada instrucción  del algoritmo se visualiza dentro del símbolo adecuado.  Los símbolos se conectan con flechas para indicar el orden en que se ejecutan las instrucciones.
Por ejemplo, el siguiente diagrama de flujo corresponde al algoritmo para calcular el área del rectángulo



El ovalo rotulado con la palabra Inicio indica el comienzo del algoritmo, el paralelogramo es el símbolo de entrada de datos e indica que se lee el valor de la base (b)  y el valor de la altura (h),  el rectángulo es el símbolo de proceso e indica que se realiza un proceso sobre los datos de entrada para  calcular el área (a) multiplicando la base por la altura, (utilizaremos el * como operador de multiplicación), el siguiente es el símbolo de salida y  representa un documento e indica que se muestra  el valor del área obtenido, en cualquier dispositivo de salida, finalmente el ovalo rotulado con la palabra Fin indica  que se ha llegado al fin del algoritmo.
Los símbolos que se utilizaran  para dibujar los diagramas de flujo son los siguientes:



Reglas para la construcción de diagramas de flujo
1.  Todo diagrama de flujo debe tener un inicio y un fin.
2.  Las líneas de flujo nunca deben cruzarse, para evitarlo deben utilizarse el símbolo conector.
3.  Las líneas de flujo deben terminar siempre en un símbolo.
4.  No puede llegar más de una línea de flujo a un símbolo.
5.  Todos los símbolos en un diagrama deben estar conectados mediante una línea de flujo; todo símbolo debe tener una línea de flujo entrando y otra saliendo salvo el símbolo que indica inicio o fin del diagrama.
6.  Como regla general el flujo del proceso debe mostrarse de izquierda a derecha y de arriba  abajo.


ESTRUCTURAS DE CONTROL

Una instrucción de control condicional es un bloque de código que se ejecuta si cumple una condición, que nosotros pongamos. Esta condición es una expresión lógica que debe dar como resultado true o false, para ello es habitual usar los operadores relacionales y lógicos.
Las dos mas utilizadas son:
  • Condicional simple: si la condición es verdadera se ejecuta el bloque de código que contenga y ya esta. Su sintaxis es:
SI (condición) Entonces
Instrucciones
Fin-Si
Por ejemplo:
1
2
3
4
5
6
Inicio
   Leer numero1
   Si (numero1>0) Entonces
      Escribir numero1 " es mayor que 0"
   FinSi
 Fin
  • Condicional doble: si la condición es verdadera se ejecuta el bloque de código que contenga y sino se cumple pues ejecuta otro bloque de codigo. Ejecuta uno o otro. Su sintaxis es:
SI (condición) Entonces
Instrucciones
Sino
Instrucciones
Fin-Si
REPETITIVAS
Un bucle permite repetir una o varias acciones un número determinado de veces. El número de veces se indica mediante una condición, si la condición es verdadera ejecuta el bloque de código que contenga, cuando la condición sea falsa saldrá del bucle.
Las dos estructuras que se usan son:
  • Mientras: Se evalúa la condición antes de iniciar el bucle, y se repiten sucesivamente las instrucciones mientras siga siendo cierta. Es importante que la variable que participe en la condición se modifique dentro del bucle, ya que sino sera un bucle infinito del que no saldrá. Su sintaxis es:
Mientras (condición)
Instrucciones
FinMientras
Veamos un ejemplo:
1
2
3
4
5
6
7
Inicio
     contador<-0
     Mientras (contador<3)
        escribir contador
        contador<-contador+1
     FinMientras
Fin
Como veis usamos una variable contador que se ira incrementando dentro del bucle, cuando este contador llegue a 3 saldrá del bucle. Imprime en pantalla el 0, 1 y 2, el 3 no lo imprime porque 3<3 es falso, con lo que hace que sale del bucle. Hay que tener muy claro la condición de salida.
  • Desde-Hasta: se repiten las instrucciones desde una variable de control (Vc) a la que le damos un valor inicial (Vi) hasta un valor final (Vf) que le indiquemos, incrementándose en un valor. Se introduce en el bucle cuando la Vc es menor que la Vf. Para que lo recuerdes mejor, piensa en esta expresión, Vc<=Vf, incluyendo el valor final. Si el incremento es negativo, la condición cambia así, Vc>=Vf . Su sintaxis es:
Desde Vc<-Vi hasta Vf In constante

Instrucciones
FinDesde
Veamos un ejemplo, usando el desde-hasta, si lo queremos usar en PseInt solo hay que cambiar algunas palabras:
1
2
3
4
5
Inicio
     Desde contador<-1 Hasta 5 Con Paso 1 Hacer
        escribir contador
     FinDesde
Fin
La diferencia con la estructura mientras, es que en el mientras se necesita inicializar la variable fuera del bucle y aumentarla dentro del bucle. Y en la estructura desde, la inicialización y el incremento se hace en una linea.
Entonces, ¿cual es mejor de los dos? La respuesta es según el caso, la estructura desde es mejor usarla cuando sabemos el rango, es decir, el inicio y fin. Por ejemplo, la suma de los números entre el 1 hasta el 20.
La estructura mientras es mejor usarlo en casos donde no conozcamos el final. Por ejemplo, la suma de los números que introduzca el usuario, sabemos cuando empieza pero no cuando acaba.
Otra diferencia a tener en cuenta, es la condición en la estructura mientras para que entre la condición debe ser verdadera para que entre en el bucle y falso para salir y en la estructura desde siempre va a incluir <= 0 >=, recordar que para que se salga se debe cumplir Vc<=Vf (siendo el incremento positivo).

EJEMPLOS Y SOLUCIONES

1.- Crear un algoritmo que escriba "Hola" cinco veces.
// 1.- Crear un algoritmo que escriba "Hola" cinco veces.
 
Proceso Resuelto01
  Para x <- 1 Hasta 5 Hacer
    Escribir "Hola";
  FinPara
FinProceso 
2.- Crear un algoritmo que pida al usuario un número y le diga si es positivo, negativo o cero.
// 2.- Crear un algoritmo que pida al usuario un numero y le diga si es positivo, negativo o cero.
 
Proceso Resuelto02
  Escribir "Dime un numero";
  Leer x;
  Si x > 0 Entonces
    Escribir "Es positivo";
  Sino
    Si x < 0 Entonces
      Escribir "Es negativo";
    Sino
      Escribir "Es cero";
    FinSi
  FinSi
FinProceso 
 
3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
// 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.
// Forma (a), sin usar matrices
 
Proceso Resuelto03
  suma <- 0
  Para x <- 1 Hasta 5 Hacer
    Escribir "Dime un dato";
    Leer x;
    suma <- suma + x;
  FinPara
  Escribir "Su suma es ", suma;
FinProceso 


UN HOMBRE DESEA SABER CUÁNTO DINERO SE GENERA POR CONCEPTO DE INTERESES SOBRE LA CANTIDAD QUE TIENE EN INVERSIÓN EN EL BANCO. EL DECIDIRÁ RE-INVERTIR LOS INTERESES SIEMPRE Y CUANDO ESTOS EXCEDAN A $7000, Y EN ESE CASO DESEA SABER CUÁNTO DINERO TENDRÁ FINALMENTE EN SU CUENTA.



 Historia de MSW
Logo El lenguaje Logo fue creado en la década de los 60 por Seymour Papert para que los niños aprendieran ideas matemáticas programando con este lenguaje. En las siguientes décadas él y su equipo continuaron con su desarrollo y tratando de crear un programa con un entorno gráfico que fuera a la vez potente y fácil de usar. En 1994 MSWLogo fue modificado para permitir el control por ordenador a través de los puertos serie y paralelo. Todas las versiones del software Logo para los sistemas operativos Unix, MSDos, Macintosh y Windows desarrolladas inicialmente por la Universidad de California (Berkeley), son gratuitas y pueden ser copiadas sin ningún tipo de restricción por instituciones educativas. De hecho MSWLogo es la versión libre del lenguaje Logo, que se distribuye bajo la licencia pública general (GPL) del proyecto GNU de la “Free Software Foundation”. El símbolo de Logo es una tortuga robotizada que se mueve bajo el control de un ordenador dibujando a medida que se desplaza por la pantalla. En algunas versiones de este lenguaje la tortuga ha evolucionado hasta convertirse en otro tipo de objetos. Por ejemplo, en MSWLogo se ha convertido en un triángulo. MSWLogo se puede utilizar para múltiples utilidades: para dibujar, para crear sonidos, para manipular una controladora a través del ordenador, etc. La versión que se intentará explicar en esta documentación es la versión que presenta el Centro Nacional de Información y Comunicación Educativa (CNICE), que es una versión del MSWLogo 6.5a traducida al castellano.

 Uso del entorno de MSWLogo
 MSWLogo es un lenguaje interpretado, es decir, las órdenes introducidas por el usuario son interpretadas por el ordenador y ejecutadas inmediatamente por orden secuencial. En cambio, los programas "compilados" son convertidos primero a código máquina antes de que cualquier parte del programa pueda empezar a funcionar, como por ejemplo Borland C++.


La pantalla de MSWLogo se divide en 2 partes:

 1. La pantalla principal: En esta ventana es donde se encuentra la tortuga, mediante la ayuda de ésta se dibujan diferentes figuras, se cargan imágenes, etc. Esta ventana está etiquetada con el titulo de “Pantalla de MSWLogo”. En la parte superior de esta ventana se encuentran diferentes menús para la realización de diversas tareas. A continuación se muestra una pequeña descripción de las tareas que pueden realizar cada uno de los menús que se muestran en la imagen superior. - Archivo: permite guardar, abrir, cerrar y modificar entre otras cosas los archivos de programación de MSWLogo. - Bitmap: permite poder trabajar con imágenes con extensiones bmp. - Configurar: permite cambiar el color del lápiz, el grosor del lápiz, el tipo de letra, etc. - Zoom: permite acercarse o alejarse de la imagen que se muestra en esta pantalla. - Ayuda: vienen los diferentes archivos de ayuda necesarios para la total comprensión del entorno de MSWLogo. 



2. La ventana de trabajo o de comandos: Esta ventana a su vez se divide a su vez en 3 partes diferentes: 
A) La caja de entrada de datos o primitivas: Se pueden usar mayúsculas o minúsculas para las primitivas puesto que Logo no hace diferencia unas de otras. Las primitivas se ejecutan después de ser introducidas en la ventana de trabajo y de pulsar la tecla ENTER o de hacer clic en el botón Ejecutar. 
B) Lista de comandos o primitivas ejecutadas: Cada primitiva se graba en una lista de órdenes y comandos que se muestran en la ventana superior a la de entrada de datos. 
C) Botones de comandos: Estos botones se encuentran a la derecha de la ventana de trabajo, éstos realizarán diferentes acciones que se explicarán más adelante en este manual. 

3.- Creación de procedimientos

Un procedimiento es una función que ejecuta una serie de líneas de instrucciones, define variables, asigna valor a variables, etc. Para poder crear un procedimiento en MSWLogo hay que utilizar la palabra reservada para seguida del nombre que se vaya a poner al procedimiento y de los parámetros que tenga éste, si es que los tiene. Después se pondrá la definición del procedimiento con toda la lista de instrucciones, para finalizar el procedimiento se utiliza la palabra reservada fin. 

A la hora de crear procedimientos, existen 3 maneras distintas de realizarlos. A continuación las exponemos:
1. En la ventana de trabajo, hay que escribir en la caja de entrada de datos o primitivas la siguiente instrucción PARA nombre [lista de parámetros], luego se ha de pulsar la tecla ENTER o el botón Ejecutar. Una vez se ha realizado la anterior acción aparecerá la siguiente ventana.

En esta ventana se irán introduciendo una a una las sentencias o instrucciones de las que va a constar el procedimiento, según se vaya poniendo cada instrucción se irá pulsando el botón OK para ir añadiéndolas al procedimiento. Para terminar con la definición del procedimiento se introducirá la primitiva FIN.

2. Mediante la ventana de edición, que es una ventana en la que se irán poniendo las instrucciones, previamente tenemos que poner el nombre al procedimiento después de la palabra para. Para poder acceder a esta ventana se utiliza las primitivas editatodo o editatodoprocedimientos, también se puede acceder a esta ventana a través del menú Archivo Editar. Además de definir procedimientos, en la ventana de Edición se pueden definir variables, asignar valor a dichas variables, escribir comentarios, etc. Cuando se ha acabado de definir el procedimiento se guardará en la opción del menú Archivo Guardar.

3. En un archivo con extensión “lgo”, dentro de este archivo se pueden definir uno o varios procedimientos mediante las palabras reservadas para y fin. Posteriormente lo que se tiene que hacer es cargar en el MSWLogo el archivo “lgo”, para lo cual iremos a la opción del menú Archivo Cargar.