Story Transcript
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
1
1. RESOLUCIÓN DE UN PROBLEMA ¿Qué es la programación lógica? Lógica: Es el arte de razonar. Programación lógica: Es el tipo de programación en la cual las sentencias son sentencias lógicas, tales como implicaciones lógicas, proposiciones lógicas, etc. Ninguna computadora por sí sola puede realizar las tareas que se le encomiendan; para que la máquina pueda trabajar es necesario que alguien le indique qué debe hacer y cómo tiene que hacerlo. El conjunto de instrucciones que componen un programa debe codificarse en un lenguaje entendible por la máquina (lenguaje o código de máquina); como han ido evolucionando los lenguajes, hoy es posible hacerlo con un lenguaje de alto nivel, lo más próximo al lenguaje humano. Si queremos que una computadora lleve a cabo un proceso, antes que nada habrá que programarla para ello. Tendremos que construir un programa que le indique qué pasos ha de seguir para efectuar dicho proceso de un modo totalmente correcto. Se desprende que, una computadora no tiene inteligencia por sí sola, no olvidemos que la computadora es una máquina creada por el hombre y, por tanto, no podrá realizar una tarea que no haya sido previamente determinada por él. El objetivo es, que frente a un problema dado, diseñemos una solución que pueda ser realizada por un computador. Para ello necesitamos: 1º. Un lenguaje o notación para expresar la solución obtenida. 2º. Escribirla en un lenguaje comprensible por la máquina, por ejemplo: BASIC, COBOL, Pascal, C, etc.
1.1 Sistemas de procesamiento de información Haremos una distinción entre lo que es dato e información. Los datos son hechos, conceptos o entidad real; la materia prima de la información. Los datos pueden tomar diferentes formas; por ejemplo, palabras escritas, números y dibujos, pero sólo pueden considerarse como información en un sentido muy limitado. En la forma en que el término se utiliza en el procesamiento de datos, la información consta de datos organizados en una forma que es útil para las personas que la reciben. En otras palabras, la información consiste en conocimientos procesados y organizados, producidos como resultado de las operaciones de procesamiento de datos. El proceso convierte los datos en información. Toda la información consta de datos, pero no todos los datos producen información específica o inteligible. La interpretación de estos datos requiere un criterio humano. Un sistema en general es definido como conjunto de componentes conectados e interactivos, que tienen un propósito y una unidad total. Sistema de procesamiento de información es un sistema que transforma datos brutos en información organizada, significativa y útil.
Entrada = datos
procesador
Salida = información
Sistema de procesamiento de información
La figura muestra los componentes de un sistema de proceso de la información: entrada, salida y procesador. El procesador, que puede ser bastante complicado, se representa por una simple caja y puede aceptar datos llamados entrada y esta entrada se transforma entonces para producir una información denominada salida o resultados.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
2
Basados en este esquema, muchos dispositivos u organismos pueden ser considerados sistemas de procesamiento de la información. Un termostato que controla la temperatura de un edificio es un ejemplo, la entrada es la temperatura media y la salida es una señal que controla la caldera del aire acondicionado. El corazón, es un sistema complejo de información. El conjunto de instrucciones que especifican la secuencia de operaciones a realizar, en orden, para resolver un sistema específico o clase de problemas, se denomina algoritmo. Cuando el procesador es una computadora, el algoritmo se expresará en forma de programa escrito en un lenguaje de programación.
1.2 Noción de programa [Ensaye una definición de programa] ....................................................................................................................................................... ........................................................................................................................................................ ........................................................................................................................................................ La idea es, dado un problema determinado, diseñar una solución que pueda ser realizada por una computadora: Partes de un programa Entrada de datos. La constituyen todas aquellas instrucciones que toman datos de un dispositivo externo, almacenándolos en la memoria central para que puedan ser procesados. Proceso. Está formado por las instrucciones que modifican los objetos a partir de su estado inicial hasta el estado final, dejando éstos disponibles en la memoria central. Salida de resultados. Conjunto de instrucciones que toman los datos finales de la memoria central y los envían a los dispositivos externos.
MEMORIA CENTRAL ENTRADA
PROCESO
Datos
Datos Requeridos
SALIDA
Desarrollo de un programa El objeto de un programa es resolver un problema, si es muy complejo y extenso, no se podría programar en una sola etapa, entonces, el estudio se hace por etapas y para su programación se divide en varias unidades y/o programas. A un problema de esta magnitud se lo denomina aplicación y consta de un número más o menos grande de programas. Desarrollo de una aplicación Todo comienza cuando surge la necesidad de la automatización de un conjunto de tareas, y finaliza cuando esa necesidad es satisfecha con una solución informatizada. Mientras que, en el traspaso problema solución se fue desarrollando lo que se da en llamar: ciclo de vida de un sistema o desarrollo de aplicaciones.
1.3 Desarrollo de un programa
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
3
El desarrollo de un programa comprende el conjunto de etapas que van desde el planteamiento del problema inicial en la fase de análisis hasta su solución informatizada a un costo razonable. Etapas:
A. Planteamiento de un Problema A1. Análisis del Problema
construcción del programa
A2. Diseño del Algoritmo A3. Codificación del Programa B. Edición y Puesta a Punto C. Documentación D. Explotación
Fase de construcción de un programa Esta fase va desde el planteamiento de un problema hasta la obtención de un algoritmo que lo resuelve codificado en un lenguaje de programación. Se compone a su vez en: Definición del problema Análisis del problema Programación de la solución del problema Diseño del algoritmo Codificación del programa Estas etapas generan una documentación que se engloba en lo que se llama: cuaderno de carga.
A. Definición o planteamiento del problema El estudio y definición del problema dan lugar al planteamiento del problema que se escribirá en la documentación del programa. Si no se sabe lo que se busca, no se lo reconoce si se lo encuentra. Es decir que, si no sabemos con claridad qué es lo que tenemos que resolver, no podremos encontrar una solución. Aquí se declara cuál es la situación de partida y el entorno de datos de entrada, los resultados deseados, dónde deben registrarse y cuál será la situación final a la que debe conducir el problema después de ser implementado (procesado por el computador).
A1. Análisis del problema Teniendo en claro el problema a resolver, se hace un análisis detallado de los datos, condiciones del problema y demás. El objetivo es, entonces, ayudar a comprender la naturaleza del problema, el cual debe estar bien definido si se desea llegar a una solución satisfactoria. Para poder definir un problema con precisión se requiere que las especificaciones de entrada y salida sean descritas en detalle. Podemos enunciar pasos generales para realizar el análisis del problema: a) Lectura previa: para obtener una idea general de lo que se solicita. b) Lectura detallada: para responder a las preguntas: ¿Qué información debe proporcionar la solución del problema? (Salida)
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
4
¿Qué datos se necesitan para resolver el problema? (Entradas) En esta etapa, básicamente, se identifica el problema y se decide qué tipo de solución se requiere y si ello implica software, se definirán los requerimientos a cubrir. Si esa solución requiere software, el analista definirá las condiciones que debe cumplir: Definición de salida Contenido: es el tipo de información que se proporcionará y a qué nivel de detalle. Formato: cómo mostrar la información, por impresora, pantalla o gráfico. Tiempo: periodicidad del informe; es decir, cuándo necesita la información el usuario, por ejemplo diaria, semanalmente o mensualmente. Flexibilidad: los programas no deben ser rígidos, al punto de que no puedan ser modificados para adaptarse a condiciones cambiantes. Definición de entrada Datos necesarios. Disponibilidad de los datos. Procedimientos para obtener información. Introducción de los datos: cómo se ingresarán al sistema. Definición de tareas de procesamiento Restricciones de personas: el software debe estar diseñado de modo que el sistema dé avisos claros a los usuarios acerca de lo que deben hacer, cuándo hacerlo y cómo; para que los usuarios no deban estar especializados al hacer uso del sistema. Restricciones del equipo: el software debe estar diseñado para trabajar en computadora, equipo periférico y software de sistema que se encuentren a disposición o sean factibles de adquirir.
A2. El diseño del algoritmo En esta etapa del ciclo de vida de desarrollo de programas, los analistas trabajan con los requerimientos del software desarrollados en la etapa de análisis, hasta la explicación de la naturaleza de la solución de programación. Se determinan todas las tareas que cada programa realiza, como así también, la forma en que se organizarán estas tareas cuando se codifique el programa. Los problemas cuando son complejos, se pueden resolver más eficientemente con la computadora cuando se descomponen en subproblemas que sean más fáciles de solucionar que el original. Este método se denomina divide y vencerás (divide and conquer), y consiste en dividir un problema complejo en otros más simples que resulten de fácil visualización y comprensión, independizándose del resto del problema y sin ignorar la forma en que dichas partes interactúan entre sí. La descomposición del problema original en subproblemas más simples y a continuación dividir estos subproblemas en otros más simples que pueden ser implementados para su solución en la computadora se denomina diseño descendente (top-down design). Las ventajas más importantes del diseño descendente son: El problema se comprende más fácilmente al dividirse en partes más simples denominadas módulos. Las modificaciones en los módulos son más fáciles. La comprobación del problema se puede verificar fácilmente. En esta etapa además, se utilizan auxiliares de diseño, que son diagramas y tablas que facilitan la delineación de las tareas o pasos que seguirá el programa, por ejemplo: diagramas de flujo, seudocódigo, diagramas de Nassi-Schneiderman, etc.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
5
Sólo cuando se complete el diseño se podrá dar inicio a la siguiente etapa: la codificación real de los programas. Y es en esta fase en donde se hace la elección del lenguaje de programación que mejor se adapte.
A3. Codificación del programa En esta fase, se convierte el algoritmo en programa, escrito en un lenguaje de programación de alto nivel como C, Pascal, Basic, etc. La codificación del programa suele ser una tarea pesada que requiere un conocimiento completo de las características del lenguaje elegido para conseguir un programa eficaz. Sin embargo, si el diseño del algoritmo se ha realizado en detalle con acciones simples y con buena legibilidad, el proceso de codificación puede reducirse a una simple tarea mecánica. Las reglas de sintaxis que regulan la codificación variarán de un lenguaje a otro y el programador deberá conocer en profundidad dichas reglas para poder diseñar buenos programas. El programa se codifica en hojas preparadas a tal fin. Una vez codificado, se teclea en la computadora. Para aumentar la productividad, es necesario adoptar una serie de normas, como ser: Estructuras aceptables (programación estructurada) Convenciones de nominación: maneras uniformes de designación de archivos y variables.
Convenciones de comentarios. B. Fase de edición y puesta a punto
editor
Edición programa fuente
compilador e intérprete
Compilación programa objeto
montador (linker)
Montaje programa ejecutable Ejecución
Edición: consiste en grabar el programa ya codificado en un archivo, mediante un editor de texto (utilidad suministrada generalmente con el sistema), almacenándolo en el disco y otro dispositivo externo. El resultado es el programa fuente. Una vez obtenido el programa fuente, es necesaria su traducción al código máquina, ya que los programas escritos en un lenguaje de alto nivel no son directamente ejecutables por el computador . Según el tipo de traductor que se utilice, los lenguajes de alto nivel se clasifican en lenguajes interpretados y lenguajes compilados. Son lenguajes interpretados aquellos en los que el sistema traduce una instrucción y la ejecuta, y así sucesivamente con las restantes.
Son lenguajes compilados aquellos en los que, primero se traduce el programa fuente completo, obteniéndose un código intermedio o módulo objeto (programa objeto); después, se fusiona éste con rutinas o librerías necesarias para su ejecución en un proceso llamado linkado y que obtiene como resultado un módulo ejecutable (programa ejecutable). La ventaja de los lenguajes compilados, frente a los interpretados, son su rápida ejecución y, en caso de necesitar posteriores ejecuciones del mismo programas ejecutable almacenado. La puesta a punto del programa hace referencia a la localización, verificación y corrección de errores de programación para obtener un programa que funcione correctamente. La puesta a punto consta de las siguientes etapas: Detección de errores;
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
6
Depuración de errores; Localización; Eliminación; Prueba del programa. Todo esto se hace para prevenir tantos errores como sea posible detectar a la hora de ejecutar el programa, también sirve para facilitar la detección y corrección de errores. Los errores típicos que se presentan son: Errores de sintaxis Errores de lógica Errores de sintaxis. Se originan en el momento de compilación/interpretación del programa y se deben a causas propias de la sintaxis del lenguaje como escrituras incorrectas de instrucciones, omisión de signo, etc. Estos errores se descubren con facilidad, pero puede suceder que, un error de este tipo, no sea tal, sino que pone de manifiesto otro tipo de error diferente. Ejemplo: SUMA = SUMA + B
En la mayoría de los lenguajes compilados puede dar error durante la ejecución si la variable SUMA no ha sido declarada.
Errores de lógica. Los errores en la lógica del programa pueden ser producidos en la fase de compilación o ejecución. Los que suceden durante la ejecución de un programa, normalmente, son más difíciles de detectar. Se pueden observar dos categorías: los que detienen la ejecución del programa y los que no la detienen, pero que producen resultados erróneos. Ejemplo: R = S/C
Si C es cero, muchos de los errores lógicos sólo se manifiestan en el momento de la ejecución; por ello se denomina también errores de ejecución.
Si se omite el segundo símbolo del producto (*) y la instrucción se convierte en L = 2 * PR, la omisión de este símbolo no se reconoce como error de sintaxis en la fase de compilación o interpretación, pero daría resultados erróneos al ejecutarse. L=2*P*R
C. Fase de documentación del programa Añadiendo al contenido incluido hasta ahora en la documentación del programa, los formularios de datos específicos del programa, y las instrucciones de operación y grabación de datos relativos a éste, se habrá completado la documentación y con ello el ciclo de construcción del programa. En el futuro, estos programas deberán sufrir mantenimientos, actualizaciones y, para la explotación del mismo es imprescindible la documentación del mismo: A nivel usuario, se provee un manual con instrucciones de cómo ejecutar el programa, descripción de los comandos a utilizar, ejemplos de situaciones y una guía de cómo eliminar problemas que puedan surgir. A nivel programador, consta de ayudas que puedan simplificar el mantenimiento , incluyen descripción del programa, herramientas de diseño utilizada, descripciones de entrada-salida, etc. También se incluyen los procedimientos para probar el programa. Ayuda mucho que en el mismo programa fuente se agreguen comentarios sobre lo que se intenta hacer en cada bloque. A nivel operador, se dan instrucciones sobre qué unidades deben activarse, tamaños de papel, cintas, etc. Resulta beneficioso hacer y preparar la documentación a lo largo de cada etapa de desarrollo.
D. Fase de explotación del programa Consiste en el normal funcionamiento del programa para cumplir el objetivo para el que fue destinado. Esta fase es llevada a cabo por el usuario a lo largo del ciclo de vida del programa y corre a cargo de los usuarios de la entidad para la que ha sido desarrollada la aplicación a la que pertenece el programa.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
7
En síntesis, un programa de computadora es un conjunto de instrucciones –órdenes dada a la máquina- que producirán la ejecución de una determinada tarea. En esencia, un programa es un medio para conseguir un fin, ese fin es definido como la información necesaria para solucionar un problema. Una solución a un problema puede no ser la única, pueden haber varias. Estas soluciones, luego de ser formuladas y analizadas, permiten inferir en cuál es la mejor solución de todas las planteadas, con esto queremos afirmar que, en circunstancias bien determinadas se considerará una única como la más eficaz y eficiente.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
8
Actividades 1 Conteste los siguientes puntos. 1. Busca el significado de las siguientes palabras: a) Algoritmo b) Aplicación c) Archivo d) Código e) Documentación f)
Lenguaje de alto nivel
g) Lenguaje de programación. Ejemplos. h) Módulo i)
Proceso
j)
Programa fuente
k) Programa objeto l)
Programación
m) Programador n) Usuario 2. ¿En qué etapa se debe documentar el programa? 3. ¿En qué momento –etapa-, estoy en condiciones de elegir el lenguaje de programación que mejor se adapte a la solución del problema? 4. ¿En qué etapa se termina de definir el problema a solucionar? 5. ¿Los datos de qué etapa necesito para realizar, por ejemplo, un diagrama de flujo? 6. ¿En qué etapa se clarifica qué entradas, qué procesos y qué salidas va a tener el programa? 7. ¿En qué etapa me doy cuenta si mi programa no funciona correctamente debido a que tiene errores (bugs)? 8. ¿Por qué le parece a usted que puede resultar el paso del algoritmo al código –instrucciones dadas a la computadora- una tarea compleja? 9. ¿Qué diferencias ve entre el gráfico de un sistema de procesamiento de información y el gráfico de las partes del programa? 10. ¿Para qué se programa?
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
9
2. OBJETOS DE UN PROGRAMA 2.1 Objetos Son objetos de un programa todos aquellos manipulados por las instrucciones. Mediante ellos, en un programa podremos realizar el almacenamiento de los datos y de los resultados de las distintas operaciones que intervienen en la solución del problema.
[Ensaye un concepto de constantes y variables a nivel de programa] CONSTANTES: OBJETOS VARIABLES:
Todo objeto tiene sus atributos: Nombre: Es con el cual se identifica al mismo. Para identificarlo se utiliza una secuencia de uno o más caracteres en donde el primer caracter es una letra, los siguientes pueden ser letras , dígitos o algunos caracteres especiales (depende del lenguaje). No puede usarse un espacio como caracter de la secuencia. El espacio determina el fin de la secuencia. Es preferible que dicho nombre indique algo sobre el propósito para el cual se emplea. Nombres bien elegidos, no solo hacen los algoritmos más fáciles de leer y entender, sino también de modificar los ya escritos antes. Tipo: Es el conjunto de valores válidos que puede tomar. Conjunto de características comunes que identifican todos los posibles estados que el objeto de ese tipo puede tomar. Valor: Es el elemento del tipo que se le asigna. El cual puede variar al pasar de un estado a otro, otros sin embargo no cambian nunca su valor. Por tanto los objetos de un programa son como cajas con tapas en donde aparece adherida una etiqueta (nombre), ésta caja tiene una forma determinada (tipo) y dentro de ellas hay almacenada información (valor).
2.1.1. Constante Es un objeto de valor invariable a lo largo de la ejecución de un programa, es decir que tiene un valor concreto. Ejemplos:
PI = 3.141592 e = 2.718281
El signo “=“ es transferir (mover o asignar) lo que se halla a la derecha del símbolo hacia la variable de la izquierda.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
2.1.2. Variable Es un objeto cuyo valor puede ser modificado a lo largo de la ejecución de un programa. Ejemplos:
X=0 donde X es una variable tipo numérico
X=X+1
[Resuelve la siguiente tabla]:
N 1
N=2
2
Z=0
3
Z=Z+N
4
Z=Z+N
5
Z=Z+N
6
Z= Z + N
Z
[Tache lo que no corresponda y fundamente su elección] La constante aquí es: N
Z
Porque .............................................................................................................................. ......................................................................................................................................... La variable aquí es: N
Z
Porque .............................................................................................................................. .........................................................................................................................................
10
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
11
Lo mismo dicho en otros términos es: Campo: Un campo es un área de almacenamiento principal que contiene datos y resultados intermedios de los cálculos o resultados finales. entero numéricos real alfabéticos
Los campos pueden contener caracteres
alfanuméricos Ejemplo de nombres de campo: NOMBRE
MATRICULA
DNI
CAL1
CAL2
Al mencionar un campo por su nombre, lo que en realidad se hace es extraer el contenido de dicho campo, sirviendo el nombre sólo para indicar una posición determinada en la memoria de la máquina. Como se dijo, los campos pueden contener caracteres sólo numéricos, sólo alfabéticos o una combinación de ambos. Ejemplo: PEREZ
160114
8
9
NOMBRE
MATRICULA
CAL1
CAL2
En este ejemplo NOMBRE es un campo alfabético, su contenido es PEREZ; MATRICULA es un campo numérico que contiene 160114 y CAL1, CAL2 son campos numéricos que contienen 8 y 9 respectivamente. [Realizar las siguientes operaciones entre campos e indicar el contenido final de los mismos, si el contenido inicial es]: 1.
4
2
3
A
B
C
A a
A=B
b
C=A
c
B = (A + B + C )/ 2
d
A=A+C
e
C=B-A
f
C=C-A
g
A=A*B
B
C
LÓGICA COMPUTACIONAL
2.
Hünicken, Helvia E.
10
20
60
X
Y
Z
X a
X=X+Y
b
Y=X+Y
c
Y = X + 20
d
Z=Y-X
e
X = Z / 20
f
Y=Y/5
g
Z = X + Y - 10
Y
12
Z
2.2. Expresiones Las expresiones son combinaciones de constantes, variables, símbolos de operación y nombres de funciones especiales. Una expresión consta de: Operandos Operadores Ejemplo: 5 + 3 Donde 5 y 3 son operandos y el signo “+” es el operador
Según el resultado de evaluar la expresión sea un número, una serie alfanumérica o uno de los valores lógicos (Verdadero o Falso), es decir, según el tipo de objetos que manejan, las expresiones se clasifican en: Expresiones aritméticas: análogas a fórmulas matemáticas, en donde se utilizan: a) operadores tipo aritméticos y b) variables y constantes numéricas (reales o enteras). Ejemplo:
-8*2+4/2–3
PI * SQR(X)
Expresiones alfanuméricas: se utilizan operadores alfanuméricos y producen resultados de tipo alfanuméricos. Ejemplo:
“Lic. “ + NOM
Expresiones relacionales: Se utilizan operadores relacionales. Se compara entre dos valores del mismo tipo, es decir que los operandos son ambos numéricos, ambos carácter o ambos del tipo lógico. El resultado de la evaluación de una expresión relacional es de tipo lógico: Falso o Verdader. Ejemplo: A+B 10 AND A < 20
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
13
2.2.1. Operadores Clasificación de los operadores que conectan los objetos en las expresiones, según su tipo: TIPO
SÍMBOLO
NOMBRE
FUNCIÓN
Paréntesis
()
Aritméticos
** ó ^
Potencia
*, /
Producto, división
+, -
Suma, diferencia
Alfanuméricos
+
Concatenación
Conectan campos alfanuméricos
Relacionales
=
Igual a
<
Menor que
Conectan objetos, campos o expresiones de cualquier tipo. Su evaluación da como resultado “Verdadero” o “Falso”.
Mayor que
>=
Mayor o igual que
Distinto a
NOT
Negación
AND
Conjunción
OR
Disyunción
Lógicos
Anida expresiones Conectan objetos o campos numéricos
Conectan expresiones de tipo lógico. Su evaluación da como resultado “Verdadero” o “Falso”.
Los operadores lógicos NOT, AND y OR se evalúan según las tablas de verdad, siendo X e Y expresiones booleanas cuyo resultado de las operaciones lógicas viene determinado por dichas tablas: Operador NOT
Operador AND
X
NOT X
X
Y
F
V
F
F
V
F
F
X AND Y
Operador OR X
Y
X OR Y
F
F
F
F
V
F
F
V
V
V
F
F
V
F
V
V
V
V
V
V
V
Todos los operadores de una expresión siguen el siguiente orden al evalluarlos: 1º
Paréntesis
(Comenzando por los más internos)
2º
Potencias
3º
Productos y divisiones
4º
Sumas y Restas
5º
Concatenación
6º
Relacionales
7º
Negación
8º
Conjunción
9º
Disyunción
Cuando en una expresión aparece más de un operador de cualquier tipo, el orden de evaluación comienza por el operador de mayor prioridad; si dos o más operadores son de la misma prioridad se evalúan de izquierda a derecha. Ejemplo:
LÓGICA COMPUTACIONAL
a.
Hünicken, Helvia E.
(5+3)*(2+7)*3 8 *(2+7)*3 8 * 9 *3 72 *3 216
b.
14
( ( 10 / 5 )^4 > 15 AND (8 + 4 ) = 12 VERDADERO
AND
VERDADERO
VERDADERO
“LOGICA” + “COMPUTACIONAL” = “LOGICA COMPUTACIONAL” “LOGICACOMPUTACIONAL” = “LOGICA COMPUTACIONAL” FALSO
c.
2.3. Tipos elementales de datos Numérico. Es el conjunto de los valores numéricos que el procesador sabe tratar. Pueden ser con o sin signo; enteros o reales. Ejemplo: 100 -100 2.718 3.14 Caracter. Es cuando se almacena uno y sólo uno del conjunto de caracteres (letras, cifras y signos especiales). Las comillas no forman parte del caracter. Ejemplo: “#” “ ” “H” “7” Cadena. Es el conjunto de las cadenas de caracteres que se pueden formar a partir de los elementos del conjunto de caracteres (letras, cifras y signos especiales) que el procesador reconoce. Lo representaremos entre dos apóstrofes, delimitando así la cadena. Ejemplo:
a. “JUAN PEREZ”
b. “Mátate estudiando y solo serás un cadáver culto”
Dentro de la cadena si hay espacios se los cuenta como caracter. Lógico. Es el conjunto de dos valores lógicos, CIERTO y FALSO. Una variable (constante y varriable) de tipo lógico siempre posee uno de estos dos valores.
2.4. Componentes de un programa Constantes
Numéricas Alfanuméricas
Objetos Variables
Componentes De un Programa
Expresiones
Numéricas Alfabéticas Alfanuméricas
Aritméticas Alfanuméricas Lógicas De declaración
Acciones O Instrucciones
Primitivas (*)
De asignación De entrada De salida
Compuestas (**) De control
Alternativa Iteración o repetición
(*) También llamadas acciones elementales, son aquellas que pueden ser interpretadas por el procesador sin información adicional. (**) Son aquellas que pueden subdividirse en acciones menos complejas.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
15
Actividades 2 1. [Responder]: a. “El tiempo crea héroes y destruye celebridades” b. “La elegancia de la honestidad no necesita adornos” ¿Cuántos caracteres tiene la cadena a? ..................... ¿Cuántos caracteres tiene la cadena b? ..................... 2. ¿Un campo puede ser de tipo alfanumérico y numérico a la vez? 3. [Tache lo que no corresponda, indicando si el nombre de campo correspondiente es correcto]: Nombre de un Campo
Resultado
IVA
Falso
Verdadero
160114
Falso
Verdadero
1APELLIDO
Falso
Verdadero
NOMBRE2
Falso
Verdadero
HORARIO CLASE
Falso
Verdadero
4. [Tache lo que no corresponda]: A
B
Expresión Relacional
Resultado
7
7
AB
Falso
Verdadero
-3
3
A = B
Falso
Verdadero
8
10
A>=B
Falso
Verdadero
9
9
A= E e. „E‟ = „e‟ OR NOT “METODO” + “LOGIA” = “METODOLOGIA”
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
16
3. ALGORITMO Algoritmo: Es una descripción paso a paso de algún proceso. La palabra algoritmo deriva del matemático árabe AL-KUHARITMI, quien describió métodos para solucionar problemas aritméticos. Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como de la computadora que los ejecuta. Es decir que, un lenguaje de programación es tan sólo un medio para expresar un algoritmo y que una computadora es sólo un procesador para ejecutarlo. Cabe destacar la importancia de la fase de diseño del algoritmo, la cual requiere creatividad y conocimientos profundos de la metodología de la programación (metodología necesaria para resolver problemas mediante programas).
3.1. Características de los algoritmos Las características fundamentales que debe cumplir todo algoritmo son: a) Ser preciso e indicar el orden de realización de cada paso. b) Estar definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez. c) Ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea debe tener un número finito de pasos. Para aclarar este concepto de algoritmo, veremos como ejemplo el caso que ocurre a menudo, el cambio de un neumático pinchado.
Algoritmo de cambio de neumático. [Usted deberá colocar los siguientes pasos en orden lógico] 1. SACAR LA RUEDA. 2. BAJAR EL GATO. 3. QUITAR TUERCAS. 4. LEVANTAR EL COCHE CON EL GATO. 5. COLOCAR LAS TUERCAS. 6. COLOCAR LA RUEDA DE REPUESTO. Solución:
1 ................................................................................. 2 ................................................................................. 3 ................................................................................. 4 ................................................................................. 5 ................................................................................. 6 ................................................................................. Nota: A este algoritmo se le podrían agregar muchos detalles más.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
17
Un algoritmo debe reunir las siguientes características generales: Legibilidad. Ha de estar escrito de tal forma que facilite su lectura y comprensión. Portabilidad. Su diseño debe permitir la codificación en diferentes lenguajes de programación, así como su instalación en diferentes sistemas –que se pueda ejecutar en diferentes plataformas hardware-. Modificabilidad. La de facilitar su mantenimiento, esto es, las modificaciones y actualizaciones necesarias para adaptarlo a una nueva situación. Eficiencia. Se deben aprovechar al máximo los recursos del computador, minimizando la memoria utilizada y el tiempo de proceso o ejecución. Modularidad. Ha de estar subdividido en bloques o módulos, cada uno de los cuales realizará una parte del conjunto del trabajo. Estructuración. Debe cumplir las reglas de la “programación estructurada” para facilitar la verificación, depuración y mantenimiento del programa. Para representar un algoritmo se debe utilizar algún método que permita independizar dicho algoritmo de un lenguaje de programación en particular, lo que significa que permitiría que ese algoritmo pueda ser codificado indistintamente en cualquier lenguaje. Para lograrlo, es necesario que ese algoritmo se pueda representar gráficamente o numéricamente. Algunos de los métodos para representar un algoritmo son: Diagrama de flujo Diagrama N-S (Nassi-Schneiderman) Seudocódigo Lenguaje español Fórmulas
Nota: Más adelante desarrollaremos los métodos de Seudocódigo y Diagrama de Flujo. Para mayor información sobre el resto de los métodos consulte bibliografía referente a los mismos.
3.2. Metodología de la programación Es el conjunto de métodos y técnicas disciplinadas que ayudan al desarrollo de unos programas que cumplan con los requisitos anteriormente expuestos.
Programación modular
Programación Estructurada
El programa consta de módulos; cada uno de El programa es estructurado, es decir que los cuales realiza una tarea concreta. utiliza lo que se llama: estructuras de control
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
18
3.2.1. Programación Modular Consiste en dividir el programa en módulos. El problema se dividirá en forma lógica, en partes perfectamente diferenciadas que pueden ser analizadas, diseñadas, programadas y puestas a punto independientemente. La programación modular se basa en el diseño descendente (top-down) que permite comprobar el funcionamiento de cada módulo mediante módulos ya comprobados Módulo raíz
Módulo 1
Módulo 2
Módulo 3
Módulo 4
Módulo 5
Módulo 6
Módulo 7
Módulo 8
Módulo 9
Módulo 10
El montaje de la red se hace en modo ascendente (botton-up), por lo que un programador puede estar escribiendo el módulo 8 mientras otro el módulo 9. Una vez terminados ambos se puede comprobar su funcionamiento con un ficticio 4 que llama a ambos. El módulo está constituído por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa. Un módulo puede ser: a) Un programa, b) Una función, c) Una subrutina (o procedimiento). Cada módulo sólo puede tener una entrada y una salida que lo enlazan con el módulo principal, incluso habiendo estructuras repetitivas y alternativas dentro de un módulo. Características de un módulo: pueden tener la máxima cohesión y el mínimo de acoplamiento (máxima independencia entre ellos). La salida del módulo debe ser función de la entrada, pero no de ningún estado interno. En esencia, el módulo ha de ser una caja negra que facilite unos valores de entradas y suministre unos valores de salida que sean función de las entradas. Requisitos de la programación modular: a) Establecimiento de un organigrama modular, b) Descripción del módulo principal, c) Descripción de los módulos básicos o secundarios y, d) Normas de la programación. El organigrama modular se realiza mediante bloques, en el que cada uno corresponde a un móduo y muestra gráficamente la comunicación entre el módulo principal y los secundarios. El módulo principal debe ser claro y conciso, reflejando los puntos fundamentales del programa. Los módulos básicos deben resolver partes bien definidas del problema. Sólo pueden tener un punto de entrada y un punto de salida. Si un módulo es complejo de resolver, conviene se subdivida en submódulos. Ningún módulo puede ser llamado desde distintos puntos del módulo principal. Las normas de programación dependerán del análisis de cada problema y de las normas generales o particulares que haya recibido el programador. Criterios de modularización. La división de un programa en módulos debe cumplir los siguientes criterios: Cada módulo debe corresponder a una función lógica perfectamente diferenciada. El tamaño de cada módulo es variable. Deben ser pequeños para que sean claros y de poca complejidad. Evitar variables externas. Procurar no utilizar demasiados niveles de modularización para evitar la complejidad de la red. Estructura de caja negra para cada módulo (la salida debe ser función exclusiva de la entrada). Las técnicas de programación modular aportan un método o filosofía para la descomposición eficaz de un problema en problemas o módulos más sencillos. Se pueden utilizar criterios de programación
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
19
modular y posteriormente utilizar métodos de programación estructurada dentro de cada módulo independientemente. Una vez terminado el diseño de los programas de cada módulo, realizar el montaje del programa completo mediante un diseño ascendente.
3.2.2. Programación Estructurada La programación estructurada fue desarrollada en sus principios por Dijkstra, al que siguieron una gran lista de nombres que realizaron lenguajes de programación adaptados a la aplicación directa de estas técnicas. La programación estructurada es una forma de programar con la cual la estructura de un programa (relaciones entre sus partes) resulta muy clara. Existen diversas definiciones de la programación estructurada que giran sobre el denominado Teorema de la estructura.
Teorema de la estructura. Se basa en el concepto de diagrama o programa propio que consiste en que toda estructura tenga un solo punto de entrada y un solo punto de salida. Todo diagrama o programa propio, cualquiera que sea el trabajo que tenga que realizar, se puede hacer utilizando tres únicas estructuras de control que son la secuencia, alternativa y repetitiva. Un programa estructurado es entonces: Fácil de leer y comprender. Fácil de codificar en una amplia gama de lenguajes y en diferentes sistemas. Fácil de mantener. Eficiente, aprovechando al máximo los recursos del computador. Modularizable. En síntesis, se debe realizar un programa siguiendo técnicas o métodos estandarizados, los más empleados son: la programación modular y la programación estructurada. Estas técnicas suelen ser complementarias, ya que el análisis de un problema puede utilizar criterios de programación modular para dividirlo en partes independientes y utilizar métodos de estructuración en la programación de cada módulo. Todo ello, para evitar: a)Programas muy rígidos con problemas de adaptación a nuevas configuraciones, b) Pérdida de tiempo en la corrección de errores, c) Difícil comunicación entre los programadores, d) Evitar que el programa tenga una relación estrecha con el programador que lo realizó, e)Modificaciones difíciles de hacer, implicando mucho tiempo y elevado coste de mantenimiento, lo que conduce a colocar “parches” que complican el diseño inicial o que el programa caiga en desuso, frente al elevado coste de actualización que al final se optará por crear una nueva aplicación que sustituya a la existente y, f) Deficiencias en la documentación.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
20
Actividades 3 1. [Coloque los siguientes pasos en orden lógico] Algoritmo para preparar el mate. 1. LLENAR EL MATE. 2. PONERLA A CALENTAR. 3. CEBAR EL MATE. 4. BUSCAR EL MATE. 5. RETIRARLA DEL FUEGO. 6. LLENAR LA PAVA DE AGUA. 7. VIGILAR EL AGUA. 8. BUSCAR LA BOMBILLA, LA YERBA Y EL AZUCAR. 9. PRENDER EL FUEGO. Solución:
1 ................................................................................................. 2 ................................................................................................. 3 ................................................................................................. 4 ................................................................................................. 5 ................................................................................................. 6 ................................................................................................. 7 ................................................................................................. 8
.................................................................................................
9
.................................................................................................
2. [Enuncie algún otro ejemplo de algoritmo]
............................................................................................................................. ............ ......................................................................................................................................... [Enuncie los pasos generales necesarios que llevaría a cabo con el ejemplo de algoritmo que acaba de mencionar]
1. ................................................................................................................ 2. ................................................................................................................ 3. ................................................................................................................ 4. ................................................................................................................ 5. ................................................................................................................ 6. ................................................................................................................ [Tómese unos segundos y vuelva a leer el concepto de algoritmo...]
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
21
4. DIAGRAMA DE FLUJO [Ver anexo de símbolos]
Diagramas de flujo (FLOWCHART)
4.1. Diagramas de flujo del sistema
4.2. Diagramas de flujo del programa
También se denominan organigrams
También se denominan ordinogramas
Representan gráficamente el flujo de datos e información que maneja un programa.
Representa gráficamente la secuencia lógica de las operaciones en la resolución de un problema, por medio de un programa de computador. Dicho de otra manera, es un esquema para representar gráficamente el algoritmo.
Aplicable en la fase de análisis.
Aplicable en la fase de diseño del algoritmo.
Elementos:
Elementos:
En la parte superior: soportes que suministran En la parte superior: símbolo de comienzo del los datos de entrada. (Símbolos de soporte de programa. (1). Entrada). Símbolo de operaciones. (2). En el centro: el programa y su identificación. De arriba abajo, de izquierda a derecha: la (rectángulo central: símbolo de proceso). secuencia en que se realizan. (3). En la parte inferior: soporte para los Al final: símbolo de fin del programa. (4). resultados. (Símbolos de soporte que reciben los datos de Salida). A la derecha e izquierda: los soportes de datos de Entrada/Salida. El flujo de los datos. (líneas de flujo). Ejemplo:
Ejemplo:
Entrada de datos
(1)
Inicio
(3)
Actualización
Archivo
(2)
Listado de incidentes
Visualización de datos
(3)
(3) (4)
Fin
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
22
[Complete los espacios del diagrama de flujo que correspondería al algoritmo de cambio de un neumático]
En la representación de ordinogramas, es conveniente seguir las siguientes reglas: El comienzo del programa figurará en la parte superior del ordinograma. Los símbolos de comienzo y fin deberán aparecer una única vez, utilizando el símbolo de parada (STOP) para representar cualquier otro tipo de interrupción o finalización. El flujo de las operaciones será, siempre que sea posible, de arriba a abajo y de izquierda a derecha, en cuyo caso pueden omitirse las puntas de flecha. Se debe guardar una cierta simetría en la representación de bifurcaciones y bucles, así como en el conjunto total del ordinograma. Se evitarán siempre los cruces de líneas de flujo utilizando conectores. El uso de comentarios estará restringido al mínimo imprescindible; al contrario que en la codificación, en la que son mucho más recomendables. Si en un ordinograma se ha separado una parte de otra por medio de un conector, las posibles conexiones que puedan aparecer desde esta última a la anterior, se harán igualmente con conectores, evitando el uso de líneas de flujo directas.
Los símbolos que se utilizan para la representación gráfica en los diagramas de flujo son establecidos por las Normas IRAM 36002 y 36003 correspondientes al INSTITUTO ARGENTINO de RACIONALIZACION de MATERIALES.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
23
Ejemplo: Programa que lee un número del dispositivo estándar de entrada y comprueba e imprime en el dispositivo estándar de salida si dicho número es nulo, positivo o negativo.
Tabla de verificación o prueba de escritorio C
paso realizado
N
paso realizado
SALIDA
0
[C = 0]
1
[C = C + 1]
39
[Leer N]
POSITIVO
2
[C = C + 1]
-175
[Leer N]
NEGATIVO
3
[C = C + 1]
74
[Leer N]
POSITIVO
4
[C = C + 1]
0
[Leer N]
NULO
5
[C = C + 1]
82
[Leer N]
POSITIVO
[Grafique por lo menos un símbolo (de sistema) que representaría cada parte de un programa] ENTRADA
PROCESO
SALIDA
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
24
4.3. Elementos auxiliares de una programa Son variables que realizan funciones específicas dentro de un programa. Las más importantes son los contadores, acumuladores e interruptores.
4.3.1. Contadores. Un contador es un campo de memoria cuyo valor se incrementa en una cantidad fija, positiva o negativa, generalmente asociado a un bucle. Es un caso particular del acumulador. Se utiliza en los siguientes casos: Para contabilizar el número de veces que es necesario repetir una acción (variable de control del bucle). Para contar un suceso particular solicitado por el enunciado de problema (asociado a un bucle o independientemente). CONT
CONT + 1
4.3.2. Acumuladores. Un acumulador es un campo de memoria cuyo valor se incrementa sucesivas veces en cantidades variables. Se utiliza en aquellos casos en que se desea obtener el total acumulado de un conjunto de cantidades, siendo preciso inicializarlo con el valor 0. También en las situaciones en que hay que obtener un total como producto de distintas cantidades se utiliza un acumulador, debiéndose inicializar con el valor 1. ACUM
ACUM + NOTA
4.3.3. Interruptores. También se denominan SWITCHES, BANDERAS, CONMUTADORES. Un interruptor es un campo de memoria que puede tomar dos valores exclusivos (0 y 1, -1 y 1, FALSO y VERDADERO, etc.). Se utiliza para: Recordar en un determinado punto de un programa la ocurrencia o no de un suceso anterior, para salir de un bucle o para decidir en una instrucción alternativa qué acciones realizar. Para hacer que dos acciones diferentes se ejecuten alternativamente dentro de un bucle.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
25
Actividades 4 1. [Tache lo que no corresponda y fundamente su elección] Supone usted que un diagrama de flujo deba reflejar: El comienzo del programa. SI
NO
Porque .............................................................................................................................. ........................................................................................................................................... Las operaciones. SI
NO
Porque ............................................................................................................................. .......................................................................................................................................... La secuencia en que se realizan. SI
NO
Porque ............................................................................................................................ ......................................................................................................................................... El final del programa. SI
NO
Porque ............................................................................................................................. .......................................................................................................................................... 2. Cada operación lógica se identifica con un símbolo distinto. [Usted deberá rellenar la línea punteada con el gráfico del símbolo correspondiente a cada punto] Utilizamos la caja .......................... para indicar donde comienza el diagrama (INICIO) y donde finaliza (FIN). Utilizamos la caja .......................... llamada caja de asignación, para encerrar instrucciones de ejecución de ciertas acciones como por ejemplo sumar números, calcular la raíz cuadrada de un número, etc. Utilizamos .......................... para encerrar una pregunta. Esta caja se denomina caja de decisión, pues la respuesta a la pregunta nos señala qué debe hacerse a continuación. Se utilizan .......................... para indicar el flujo del procedimiento desde un paso al siguiente. Utilizamos ........................... para conectar caminos, tras roturas previas del flujo del algoritmo. Utilizamos ........................... para representar cualquier tipo de entrada o salida desde el programa o sistema; por ejemplo, entrada de teclado, salida en impresora o pantalla, etc.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
26
5. SEUDOCÓDIGO Es una herramienta para diseñar algoritmos –diseño de la solución de un problema por computadoraNo depende de un lenguaje de programación particular. Utiliza palabras y frases del lenguaje natural (en este caso: el español), y sujetas a determinadas reglas. El seudocódigo es utilizado en la fase de diseño del programa, por ser, la utilización de un lenguaje, debido a su rigidez, no aconsejable.
6. ESTRUCTURAS BÁSICAS Como versa el Teorema de la estructura, decimos que toda acción se puede realizar utilizando tres estructuras básicas de control, la estructura secuencial, alternativa y repetitiva.
Secuencial
ESTRUCTURAS BASICAS
Alternativa (IF)
Alternativa Simple (IF) Alternativa Doble (IF) Alternativa Múltiple (CASE)
Repetitiva
Para (FOR) Mientras (WHILE) Hasta (UNTIL)
6.1. Estructura secuencial. Es una estructura con una entrada y una salida en la cual figuran una serie de acciones cuya ejecución es lineal y en el orden que aparecen. A su vez todas las acciones tienen una única entrada y una única salida. ORDINOGRAMA
PSEUDOCODIGO
I1; I2; ... In
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
27
6.2. Estructura alternativa. Es una estructura con una sola entrada y una sola salida en la cual se realiza una acción de entre varias según una condición o se realiza una acción según el cumplimiento o no de una determinada condición. Estas pueden ser:
6.2.1. Alternativa simple. Es la ejecución condicional de una acción. Esta composición permite expresar que un acontecimiento sucederá bajo cierta condición.
Si CONDICION entonces I1; ....; In finsi
6.2.2. Alternativa doble. Es la ejecución alternativa de una entre dos acciones. Permite expresar que debe provocarse un acontecimiento bajo cierta condición contraria.
Si CONDICION entonces I1; ....; In sino J1; ...; Jk finsi
6.2.3. Alternativa multiple. Se adoptan cuando la condición puede tomar n valores enteros distintos: 1; 2; 3; ...; n. Según se elija uno de estos valores en la condición, se realizará una de las n acciones (cada vez sólo se ejecuta una acción). Esta estructura fue propuesta por HOARE. En castellano se llama según, Según_sea, Caso de, Opción.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
28
expresión
V1 Proceso 1
V2
Vn
Proceso 2
Proceso N
Opción EXPRESION de: V1 hacer I1; I2; ...; Ip V2 hacer J1; J2; ...; Jq Otros Vn hacer K1; K2; ...; Kr Otro hacer L1; L2; ...; Ls Proceso Finopción
6.3. Estructuras repetitivas. Es una estructura con una entrada y una salida en la cual se repite una acción un número determinado o indeterminado de veces, dependiendo en este caso del cumplimiento de una condición. Las estructuras repetitivas pueden ser: + Estructura para (FOR) + Estructura mientras (WHILE) + Estructura hasta (UNTIL)
6.3.1. Estructura para (for). En esta estructura se repite una acción o un grupo de ellas, un número fijo de veces respetado normalmente por N, este valor es un número que está determinado a priori por lo que el esquema de resolución será:
Para Vc de Vi a Vf con incremento In hacer I1; I2; ... In finpara
Se repiten las instrucciones I1, I2, ...In, un número fijo de veces, tantas como sucesivos valores toma la variable de control del bucle Vc desde, inicialmente Vi, incrementándose a cada repetición en In, hasta que el valor de Vc supera Vf. Si el incremento es +1 no hace falta expresarlo.
6.3.2. Estructura mientras (while).
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
29
En esta estructura se repite una acción mientras se cumpla la condición que controla el bucle. El número de iteraciones oscila entre 0 e infinito dependiendo de la evaluación de la condición, esta condición a evaluar es una expresión lógica ya que devuelve verdadero o falso. Mientras la condición sea verdadera el ciclo continuará ejecutándose y la primera vez que sea falso el ciclo finaliza. A diferencia del for no dispone del paso de incrementación por lo tanto este debe estar incluido dentro del cuerpo de sentencias.
mientras CONDICION hacer I1; I2; ...In finmientras
6.3.3. Estructura hasta (until). En esta estructura se repite una acción hasta que se cumpla la condición que controla el bucle, la cual se evalúa después de cada ejecución del mismo. El número de repeticiones oscila entre 1 e infinito dependiendo de la evaluación de la condición, cuyos argumentos en los casos de repetición al menos dos veces deberán modificarse dentro del bucle, pues de no ser así, el número de repeticiones será infinito y nos encontramos en un bucle sin salida.
repetir I1; ... In hasta CONDICION
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
30
7. LENGUAJE DE PROGRAMACIÓN BASIC El nombre de BASIC responde a las siglas de Beginners All-purpose Symbolic Instruction Code (código de instrucción simbólica para todo propósito, dirigido a principiantes), fue desarrollado por John G. Kemeny y Thomas E. Kurtz en el Darmouth College en 1969. Su propósito original fue el de enseñar a programar usando un lenguaje sencillo y fácil de comprender, pero probó ser tan útil que fue adoptado por los constructores de computadoras y gradualmente se fue convirtiendo en un lenguaje de programación más que en un método de enseñanza. Hoy el BASIC ha madurado y se convirtió en uno de los lenguajes de programación estándar. La encarnación más moderna de BASIC de Microsoft, denominada Visual Basic, soporta las características y métodos orientados a objetos. Principales características que lo hacen diferente de los demás lenguajes: Se puede dar un nombre muy corto a las variables del BASIC. Las variables pueden ser numéricas (A = 1) y alfanuméricas (A$ = “PEPE”). Los nombres de tales variables pueden empezar por cualquier letra del alfabeto. El BASIC permite programar de una forma convencional. Gracias a que es un lenguaje intérprete, es decir que no necesita compilación (ya que cada instrucción se traduce inmediatamente antes de ejecutarse), se puede cargar un programa escrito en BASIC en memoria, ejecutarlo, corregirlo directamente si tiene algún error y volverlo a salvar en el dispositivo donde se tuviera almacenado. Los mensajes de error generados por el BASIC son explícitos y numerosos. En un lenguaje de programación, la cantidad de mensajes de error que éste puede generar y la calidad de estos mensajes constituyen una característica importante de cara a poder medir la potencia de tal lenguaje. Los mensajes son muy útiles para el programador, ya que le indican, en el momento de producirse, el tipo de error de que se trata y a veces el por qué se ha producido. En el caso del BASIC, la información que el lenguaje da cuando se produce un error es muy completa; incluso, en caso de producirse uno, BASIC además del mensaje de error, indica la línea de programa donde se ha producido tal error. Este lenguaje, a pesar de tener 300 palabras, es muy poderoso si se lo usa correctamente. Con BASIC, es posible programar virtualmente todo lo que la mente puede concebir. La gracia y las posibilidades de la programación consisten en tener una idea, expresarla lógica y precisamente en un programa y luego mejorarla y pulirla, hasta que el programa haga exactamente lo que tú le propones. Cabe recordar que este punto marca el comienzo de la fase de programación y finaliza con la edición y puesta a punto, en donde, estas fases se caracterizan por la utilización de un lenguaje de programación (para el caso ponemos de ejemplo al lenguaje BASIC).
Instrucciones básicas del BASIC Identificaremos las instrucciones del lenguaje según su función: Instrucción de definición de matrices La instrucción DIM DIM Nombre(Valor del índice) DIM: nombre de la instrucción. Nombre: nombre que se le va a dar a la matriz. Valor del índice: máximo valor que tomará cada uno de los índices. Con esta instrucción se define el nombre de una matriz o vector, el número de dimensiones de que constará y el valor máximo del índice de cada dimensión. Las matrices pueden ser numéricas o alfanuméricas. Ejemplo: DIM V(5) DIM M$(3, 3) DIM MA(5, 2) DIM V$(5) Instrucciones de asignación
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
31
La instrucción LET LET Variable = Expresión LET: nombre de la instrucción, que puede omitirse. Variable: nombre de la variable numérica o alfanumérica a la que se quiere asignar un valor Expresión: puede ser una expresión numérica o alfanumérica. Nunca se puede realizar una asignación del valor de una expresión alfanumérica a una variable numérica, ni viceversa. Esta instrucción permite asignar un valor a una variable, ya sea numérica o alfanumérica. Ejemplo: LET A = 2 ó A = 2 D = (B + C) / 2 LET A$ = “PENTIUM” D$ = B$ + C$ La instrucción SWAP SWAP Variable1, Variable2 SWAP: nombre de la instrucción. Variable1: nombre de la primera variable. Variable2: nombre de la segunda variable. Esta instrucción permite intercambiar los valores de dos variables, es decir, asignar a la primera el valor de la segunda y a ésta el valor de la primera. Ejemplo: SWAP A, B SWAP A$, B$ Instrucciones READ/DATA READ Variable DATA Constante READ: nombre de la instrucción. DATA: nombre de la instrucción. Variable: nombre de cada una de las variables donde se irán asignando las constantes almacenadas en el fichero interno. Constante: cada uno de los valores que se almacenará en el fichero interno que se creará. Estas dos instrucciones se complementan. El hecho de especificar instrucciones DATA en un programa BASIC hace que se cree un fichero interno con los datos de tales instrucciones, datos que posteriormente pueden leerse y asignarse a variables mediante instrucciones READ. Ejemplo: 10 READ A, B, C, D En la variable A se almacenará el valor 5, en la B el 10, 20 DATA 5, 10, 15, 20 en la C el 15 y en la D el 20; por lo tanto al ejecutar la 30 PRINT A, B, C, D instrucción de la línea 30, se imprimirán los valores 5, Instrucción de entrada de datos
10, 15, 20.
La instrucción INPUT INPUT “Mensaje”; Variable INPUT: nombre de la instrucción. Mensaje: literal que aparece en pantalla para avisar al operador que debe digitar algún dato, que puede omitirse. Variable: cada uno de los nombres de variable en las que se irán almacenando los datos entrados desde teclado. La función de esta instrucción consiste en leer datos que se entran desde teclado y asignarlo a una o más variables especificadas en la instrucción. Ejemplo: INPUT A INPUT “Lado “; B INPUT “Lado “, C INPUT “Datos: “; A, B, C
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
32
Instrucciones de salida de datos La instrucción PRINT PRINT Expresión PRINT: nombre de la instrucción. Expresión: Cualquier expresión, ya sea numérica o alfanumérica. Es la instrucción utilizada para visualizar información en la pantalla de la computadora. Ejemplo: PRINT “PEPE” PRINT “AREA = “; A PRINT TAB(10); “AREA = “; A En este caso, tal mensaje, en lugar de visualizarse a partir de la primera posición de la línea, se visualizaría a partir de la 10. La instrucción LPRINT LPRINT Expresión Esta instrucción realiza lo mismo que la instrucción PRINT, pero, en lugar de visualizar información en pantalla, la imprime en la impresora. Instrucciones de control La instrucción GOTO GOTO Nº de línea GOTO: nombre de la instrucción. Nº de línea: número de la línea de programa a la que se le va a ceder el control de ejecución. Ejemplo: 10 REM Aquí se irán ejecutando las instrucciones secuenciales a partir 20 A = 5 de la línea de programa 10, hasta llegar a la línea 70, en la 30 B = 10 cual encontramos una instrucción GOTO que cede el control 40 PRINT A, B de la ejecución a la línea 40. 50 A = A + 5 Para el caso citado se observa que el programa no terminará 60 B = B + 10 nunca. 70 GOTO 40 La instrucción IF...THEN...ELSE IF Condición THEN Instrucción ELSE Instrucción END IF IF: palabra que forma parte del nombre de la instrucción. Condición: puede ser una expresión numérica, de comparación o lógica. THEN: palabra que forma parte del nombre de la instrucción. Instrucción: puede ser una instrucción cualquiera. ELSE: palabra que forma parte del nombre de la instrucción. END IF: cierra la instrucción IF, por lo tanto es su última palabra. Es útil para realizar un tratamiento diferente de un proceso, según se cumpla o no una determinada condición. Ejemplo: IF A > B THEN PRINT B, A ELSE PRINT A, B END IF
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
33
La instrucción WHILE WHILE Condición Instrucción WEND WHILE: palabra que forma parte del nombre de la instrucción. Condición: puede ser una expresión numérica, de comparación o lógica. Instrucción: puede ser una instrucción cualquiera. WEND: es la última palabra que forma parte de la instrucción y es la encargada de cerrar el bucle WHILE. Ejemplo: WHILE N > 0 A=A+N AM = AM * N WEND La instrucción DO-WHILE DO WHILE Condición Instrucción LOOP Ejemplo: DO WHILE N > 0 A=A+N AM = AM * N LOOP
A este formato se lo utiliza indistintamente con el anteriormente expuesto, ya que realiza lo mismo.
La instrucción DO-UNTIL DO Instrucción LOOP UNTIL Condición Ejemplo: DO S=S+N M=M*N LOOP UNTIL N > 0 La instrucción FOR FOR Variable de control = Valor inicial TO Valor final STEP Incremento Instrucción NEXT Variable de control FOR: palabra que forma parte del nombre de la instrucción. Variable de control: nombre de una variable entera o de simple precisión. Valor inicial: valor inicial que tomará la variable de control. TO: palabra que forma parte del nombre de la instrucción. Valor final: es el valor que tomará la variable de control por encima del cual el bucle llegará a su final. STEP: palabra que puede formar parte del nombre de la instrucción o no, es decir, es opcional. Incremento: también es opcional, pero, si se especifica, indica el valor que se le irá sumando al valor de la variable de control hasta llegar a su valor final. NEXT: nombre de la instrucción última de FOR, es la que cierra el bucle. Variable de control: nombre de la variable de control especificada en la primera instrucción del bucle. Cada vez que se pasa por la instrucción NEXT, se aumenta el valor de esta variable en un valor igual al especificado en el parámetro «incremento» de la instrucción FOR. Este parámetro es variable, ya que con la palabra NEXT es suficiente. El BASIC asocia el primer NEXT que encuentra con el último FOR que ha encontrado. Ejemplo: FOR J = 1 TO 5 INPUT N A=A+N AM = AM * N NEXT I
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
34
Instrucción CASE SELECT CASE expresión a probar CASE expresión-1 Instrucción-1 CASE expresión-2 Instrucción-2 CASE expresión-n Instrucción-n END SELECT SELECT CASE: nombre de la instrucción. expresión: cualquier expresión numérica o de cadena a probar. CASE: palabra que forma parte del nombre de la instrucción que, si coincide con el estado de la expresión se procederá a una acción acorde al evento. expresión-1/-2/-n: es la expresión para comparar con la expresión a probar. Instrucción-1/-2/-n: puede ser una instrucción cualquiera. END SELECT: palabra que forma parte de la instrucción. Es la que cierra la misma, por tanto es la última.
Algunas funciones BASIC Funciones propias del BASIC Las funciones propias del lenguaje BASIC representan una parte muy importante, tanto en cantidad como en calidad, de tal lenguaje. Mediante estas funciones pueden efectuarse operaciones de tipo numérico o alfanumérico. Funciones numéricas ABS: calcula el valor absoluto de una expresión numérica. Ejemplo: A = ABS(7 * (-2)) COS: calcula el coseno del argumento. Ejemplo: A = COS(0.5) FIX: calcula la parte entera de una expresión numérica. Ejemplo: PRINT FIX(60.78); visualizará 60. INT: calcula el entero más grande, inferior o igual a la expresión numérica especificada. Ejemplo: PRINT INT(65.75); visualizará 65. LOG: calcula el logaritmo natural de una expresión numérica positiva. Ejemplo: A = LOG(40 / 6) SGN: retorna un 1 si la expresión numérica es positiva y un 0 si es negativa. Ejemplo: A = SGN(-5); en A se almacenará un 0, porque el signo de la expresión es negativo. SIN: calcula el seno de una expresión numérica. Ejemplo: A = SIN(0.5) SQR: calcula la raíz cuadrada de una expresión numérica. Ejemplo: A = SQR(25) TAN: calcula la tangente de una expresión numérica. Ejemplo: A = TAN(2 / 5) Funciones alfanuméricas CHR$: transforma un código decimal ASCII en su correspondiente caracter alfanumérico. Ejemplo: PRINT CHR$(84); dará como resultado T. LEFT$: toma caracteres del margen izquierdo de una serie alfanumérica original en una cantidad entera. Ejemplo: N1$ = “TERRY” S1$ = LEFT$(N1$, 2) de la serie N1$ toma los dos primeros caracteres, es decir TE y lo deja en S1$.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
35
LEN: calcula la longitud en número de caracteres de una serie alfanumérica dada. Ejemplo: A$ = “PENTIUM” A = LEN(A$) en este caso A tomará el valor 7. MID$: realiza la extracción de una subserie dentro de una serie de caracteres alfanuméricos, empezando desde una posición determinada. Extraemos de A$ la subserie que comienza en la Ejemplo: A$ = “PEPITA JIMENEZ” posición 8 hasta el final porque no B$ = MID$(A$, 8) hemos especificado el parámetro longitud. Entonces en B$ tendremos “JIMENEZ”. Si B$ = MID$(A$, 1, 6) tendremos en B$ la subserie “PEPITA” porque hemos especificado, desde la posición 1, 6 caracteres. RIGHT$: es similar a la función LEFT$ con la excepción de que toma los caracteres desde el final (derecha). Ejemplo: PRINT RIGHT$(N3$, 2) los dos caracteres de extrema derecha de la serie alfanumérica N#$ serán representados. STR$: convierte el valor de una expresión numérica en una serie alfanumérica. Ejemplo: A$ = STR$(1560) PRINT A$ en este caso A$ será igual a “1560”. VAL: convierte una serie alfanumérica en numérica. Ejemplo: A$ = “1560” A = VAL(A$) en este caso, A será igual a 1560. Otras funciones SLEEP: segundos SLEEP: nombre de la instrucción. segundos: el número de segundos durante los que se suspenderá temporalmente la ejecución del programa. Ejemplo: SLEEP 10 UCASE$(expresión-cadena$) LCASE$(expresión-cadena$) expresión-cadena$: es cualquier expresión de cadena. Estas funciones convierten cadenas en letras minúsculas o letras mayúsculas. Ejemplo: TEST$ = “La cadena” PRINT TEST$ PRINT LCASE$(TEST$); “en minúsculas” PRINT UCASE$(TEST$); “EN MAYUSCULAS”
BIBLIOGRAFÍA COMO PROGRAMAR SU COMPUTADOR PERSONAL BASIC elemental para PC. Autor: Carl Shipman. Edit.: EL ATENEO FUNDAMENTOS DE PROGRAMACION. Autor: Luis Joyanes Aguilar. Editorial Mc Graw-Hill INFORMATICA PRESENTE Y FUTURO. Autor: Donald H. Sanders. Editorial Mc Graw-Hill METODOLOGIA DE LA PROGRAMACION. Autor: Alcalde García. Editorial Mc Graw-Hill PROGRAMACION COBOL. Autores: Fernando García; Almudena Cerro y J. Manuel Diez Perla. Editorial Mc Graw-Hill
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
36
Actividades 4, 5, 6, 7 1.
Investigue en qué ocasiones es conveniente aplicar estructuras alternativas para la resolución de un algoritmo estructurado.
2. De acuerdo a lo que usted entiende, ¿cuándo es conveniente utilizar estructuras repetitivas en el diseño de un algoritmo? 3. Realizar un programa que calcule la suma, resta, multiplicación y división de dos números ingresados. 4. Indique los pasos algorítmicos que se siguen para de formatear un diskette de de 1.44MB. 5. Similar al punto anterior, identifique los pasos que lleva a cabo para colocar la mesa para comer. 6. Realice un programa en el que se intercambien los valores de dos variables numéricas. Realizar también el seudocódigo del mismo. Análisis: Se utiliza una variable auxiliar (por ejemplo AUX), que va a contener temporalmente a uno de los valores dados. Las variables que se utilizarán son: A B AUX, donde A es el primer valor; B es el segundo valor y AUX es la variable auxiliar. Se asigna uno de los valores de las variables a la variable auxiliar: AUX = A Se asigna el valor de la otra variable B a la primera.
A=B
Luego, se asigna el valor de la variable auxiliar a la segunda variable.
B = AUX
7. Programa que obtenga la potencia, raíz cuadrada y raíz cúbica de un número. 8. Programa que obtenga el promedio de las notas obtenidas en tres parciales. 9. Programa que resuelva la siguiente expresión:
(A+B*C)/2
10. Programa que resuelva la siguiente expresión:
B2 – 4AC
11. Programa que evalúe la siguiente expresión, para N1 = 8 y N2 = 2: 5 * N2 – 3 * N1 ^ 2 * N2 12. Programa que resuelva la siguiente expresión: 13. Programa que resuelva la siguiente expresión:
2 r x2
y2 z2 2
14. Programa que resuelva la siguiente expresión: (x2 –x1) + (y2 – y1) 15. Programa que resuelva la siguiente expresión:
A2
2
B
16. Pase el siguiente seudocódigo a diagrama de flujo (de programa), y luego, al lenguaje BASIC: inicio escribir “¿Cuál es tu nombre?” leer NOMBRE escribir “HOLA!”, NOMBRE escribir “Seamos amigos” fin 17. Programa que, al ingresar un 1 imprima VERDADERO. Al ingresar un 0 imprime FALSO. 18. Programa que indique si el número ingresado es negativo. 19. Programa que imprima un mensaje diciendo si el número que se ingresó es positivo, negativo o nulo. 20. Programa que indique si el número entero ingresado es par o impar. 21. Programa que obtenga el menor de dos nombres ingresados.
LÓGICA COMPUTACIONAL
Hünicken, Helvia E.
37
22. Programa que obtenga el mayor de dos valores ingresados. 23. Pasar a ordinograma el siguiente algoritmo: a) OBTENER EL PRIMER NÚMERO (ENTRADA), DENOMINADO NUM1. b) OBTENER EL SEGUNDO NÚMERO (ENTRADA), DENOMINADO NUM2. c) COMPARA NUM1 CON NUM2 Y SELECCIONAR EL MAYOR; SI LOS DOS ENTEROS SON IGUALES, SELECCIONAR NUM1. LLAMAR ESTE NÚMERO MAYOR. d) OBTENER EL TERCER NÚMERO (ENTRADA), DEMOMINARLO NUM3. e) COMPARAR MAYOR CON NUM3 Y SELECCIONAR EL MAYOR; SI LOS DOS ENTEROS SON IGUALES, SELECCIONAR EL MAYOR, DENOMINAR A ESTE NÚMERO MAYOR. f)
PRESENTAR EL VALOR DE MAYOR (SALIDA)
g) FIN 24. Diseñe un algoritmo (diagrama de flujo) que resuelva el procedimiento para enviar una carta utilizando los símbolos correspondientes que contengan: -
PONER LA DIRECCIÓN EN EL SOBRE
-
INICIO
-
PEGAR FRANQUEO COMÚN EN EL SOBRE
-
FIN
-
PEGAR FRANQUEO DE VÍA AÉREA EN EL SOBRE
-
¿ES VÍA AÉREA?
-
PEGAR EL SOBRE
-
COLOCAR LA CARTA EN EL SOBRE
-
TIRAR LA CARTA DENTRO DEL BUZÓN
25. Diseñe un algoritmo (ordinograma) que resuelva el problema de hornear una torta. -
¿ESTÁ LISTO EL HORNO?
-
FIN
-
ENCENDER EL HORNO
-
APAGAR EL HORNO
-
INICIO
-
ESPERAR 10 MINUTOS
-
DEJAR DESCANSAR 45 MINUTOS
-
PREPARAR EL BATIDO DE LA TORTA
-
RETIRAR LA TORTA DEL HORNO
-
¿ESTÁ LA TORTA SUFICIENTEMENTE COCIDA?
-
COLOCAR LA TORTA EN EL HORNO
-
ESPERAR UN MINUTO O DOS
-
ESPERAR UN MINUTO O DOS
26. Programa que calcule el área de un triángulo dada la base y altura del mismo. La fórmula es: S = (1 / 2) B * H Realice la tabla de verificación para los valores de base = 4.5 y altura = 7.2 27. Diseñe el algoritmo que calcule el área de un triángulo en función de las longitudes de sus lados.
LÓGICA COMPUTACIONAL
Fórmula:
Area
Hünicken, Helvia E.
38
p p a p b p c
donde p = (a + b + c) / 2 (semiperímetro). 28. Programa que calcule el radio de un círculo conociendo su área para: r
A
r 2 se puede resolver
A/
29. Programa que resuelve una ecuación de segundo grado Ax2 + Bx + C = 0 Análisis: Las soluciones o raíces son:
X1
B
B ^ 2 4 AC 2A
X2
B
B^ 2 4 AC 2A
Es preciso que el discriminante sea mayor que cero. Discriminante: D = B^2 – 4AC Entonces, si:
B 2A
X2
B 2A
D=0
X1
D