INTRODUCCIÓN A LA PROGRAMACIÓN I Temario de las clases teóricas: 1− Conceptos Básicos 2− Tipos y Expresiones 3− Notación Algorítmica 4− Funciones 5− Estructuras Estáticas de Datos 6− Ficheros Laboratorio: implementación algorítmica estudiada en lenguaje C. Bibliografía: J. G. Castro y otros Cursos de programación (McGraw−Hill, 1993) J. Galve, J. C. González y otros Algoritmos (Rama, 1993) J. A. Cerrada y M. Collado Programación I (UNED, 1994) Ceballos El abc de MS−DOS 6 (Rama, 1993) B. W. Fermighan y D. M. Richie El lenguaje C (Prentice hall, 1991) A. Mata Turbo C/C++ (Paramiufo, 1993) J. M. Cordero y otros Introducción a la programación; un enfoque práctico (Algaida, 1996) L. Joganes Fundamentos de programación, algoritmos y estructura de datos (McGraw−Hill, 1996) • CONCEPTOS BÁSICOS • Introducción: Informática, sistemas de información y abstracción. 1.1. Autómata y Programas. Máquina de Von Newman. • Algoritmo (definición, ejemplo) • Programación, ingeniería de software. • Introducción al lenguaje C. • Introducción Desde el carácter científico la informática es una ciencia que estudia todo lo referente al procesamiento automático de la información. El carácter técnico es la teoría, diseño, uso y fabricación de computadoras. 1 Sistemas de Información: DATOS PROCESO INFORMACIÓN Los datos son los antecedentes necesarios para obtener conocimiento exacto de algo, bien cantidades, cualidades o hechos. El proceso es la reunión, cálculo, selección, escritura,... de esos datos. La información es el conocimiento derivado del análisis de ciertos datos. La base de todo es la capacidad de abstracción, un que ante un determinado concepto u objeto realiza un estudio en dos aspectos complementarios: • Aspecto de destacar los detalles relevantes. • Aspecto de ignorar los detalles irrelevantes. • Autómatas y Programas Máquina es aquel dispositivo capaz de realizar un trabajo, las máquinas virtuales no son físicas sino una especificación previa a la posible fabricación de dicha máquina (máquina de Babbage, Máquina de Von Neuman). Se dan en función del tiempo y necesitan de una acción exterior, las clasificamos en: • No automáticas. Máquinas que necesitan de un estímulo externo para funcionar (máquina de escribir, piano). • Automáticas. Máquinas que requieren mínimos estímulos externos para funcionar, de este modo distinguimos: 1) No programables. Se caracterizan porque realizan siempre la misma función (caja de música, copiadora, ascensor). 2) Programables. Realizan diversas operaciones según el programa que las gobierna (tocadiscos, computadoras). Definiciones: Computo es la determinación indirecta de una cantidad o resultado mediante el cálculo de ciertos datos (tratamiento de la información). Llamamos computadora u ordenador es un autómata programable de propósito general. Un programa de ordenador será la descripción de un computo. Un lenguaje de programación es una convención o pauta para describir hechos que pueden ser evaluados. Componentes de una computadora: Memoria. Almacén de programas y datos, componente pasivo cuya calidad viene determinada por su tamaño. Procesador. Calculador de cómputos, componente activo cuya cualidad viene determinada por su velocidad de proceso. Dispositivos Entrada/Salida (Input/Output). Conexión entre la máquina y el exterior. • Algoritmos Las máquinas se componen de una parte física llamada hardware y de una parte variable llamada software. 2 Un algoritmo es una sucesión finita de instrucciones que describen como resolver un problema de un mismo tipo. La necesidad de estudio de los lenguajes algorítmicos como paso previo a la codificación en un lenguaje de programación comercial es justamente el aspecto de abstracción que nos interesa destacar. Definiciones: Coordenada. Conjunto de elementos necesarios para describir un problema. Ejemplo: {t, p} Dominio. Conjunto de valores que pueden tomar las coordenadas. Ejemplo: t (−50, 50) y p (encendido, apagado) Estado. Cada uno de los posibles valores que pueden tomar las coordenadas, utilizamos asertos o predicados lógicos par describirlos. Ejemplo {t: ambiente, p: apagado} • Programación e Ingeniería del Software La programación es la disciplina de la informática que estudia las técnicas o razonamientos involucrados en el desarrollo de programas. En su desarrollo distinguimos el hecho a gran escala (ingeniería del software) y el hecho a pequeña escala (programación). Etapas de la programación: • Localización del problema del mundo real que pretendemos solucionar • Elaboración o análisis de requerimientos. Establecer todo aquello que necesitaremos para dar una posible solución al problema específico. • Especificación del problema. Enumeración condicional del problema mediante asertos o predicados lógicos. • Diseño o implementación del problema. El objetivo de esta etapa es obtener una representación ejecutable del problema aunque sea sobre una máquina virtual, hemos de ser capaces de obtener una representación real del funcionamiento del programa. • Codificación. A partir de la implementación se obtiene un programa escrito en un lenguaje comercial uy ejecutable en una máquina real. Paradigmas de la programación: • El paradigma imperativo. Se basa en el concepto de bucle y sobre todo en el concepto de asignación. • El paradigma funcional. Depende del concepto de función matemática. • El paradigma lógico. Considera al programa como un conjunto de predicados lógicos. El análisis debe tener corrección del algoritmo que consiste en la comprobación de que la etapa de implementación coincide con la de especificación, para ver si es correcta respecto al problema. Si se dispone de varias implementaciones correctas hemos de elegir la más eficiente, esa será aquella implementación que consuma menos recursos y al mismo tiempo sea rápida. La implementación ha de ser lo mas clara y sencilla posible, es decir lo más legible que se pueda. Problema−1: Sumar los n primeros números enteros positivos • Especificación 3 n: entero s: entero • Precondición Suma n números enteros positivos • Postcondición: {s= k: 1"k"n .(k)} • Implementación Variables, i: entero Algoritmo i= 1 s= 0 mientras i<= n s:= s+i i:= i+1 fmientras • Codificación # include <stdio.h> void main (void) { int s, i, n; printf (Introduzca un número natural:\n); scanf (%d,&n); i=1; s=0; while (i<=n); { s=s+i; i++; 4 } printf (La suma 1+...+%d=%d, n, s); } Estudio del lenguaje: • Léxico. Se detallan los componentes mínimos o lexemas con que se cuentan. • Sintáctico. Descripción de las convinaciones de lexemas que son correctas. • Semántico. Indicamos que interpretación tienen las convinaciones sintácticas correctas 2. TIPOS Y EXPRESIONES 2.1 El lexema Denominamos alfabeto y lo representamos por a un conjunto finito y no vacío de elementos, llamados símbolos y que serán la base de los lenguajes. Lexema es la unidad mínima e indivisible con significado y se construye a partir de los símbolos. Ej.: {1, 2,..., 9, +, −} −−> −99 Lenguaje algorítmico: (A... Z) Mayúsculas (a... z) Minúsculas (0... 9) Dígitos (+, −, *, /...) Símbolos específicos Diremos que un lexema está sobrecargado cuando es utilizado con más de un significado. Tipos de lexema: • Identificadores. La Manera de hacer referencia a cada uno de los elementos que intervienen en un algoritmo es darles un nombre a cada uno. En programación se llaman identificadores a los nombres dados a los elementos del programa. En nuestro lenguaje de implementación son aquellos lexemas que empiezan por una letra seguida de un número n arbitrario de letras o dígitos o el símbolo de subrayado. Ej.: s, i, n, suma1, suma_números • Palabras reservadas. Son identificadores usados de modo privado y exclusivo del lenguaje no pueden de utilizados por el programador para llamar a sus propios elementos (variables o constantes). Ej.: while • Literales y Símbolos de operación. Los literales denotan valores concretos de elementos computables mientras que los símbolos de operación denotan operaciones sobre el dominio de valores; en general pueden estar compuestos por varios símbolos de nuestro alfabeto. Ej.: 1, 7 • Separadores. Son lexemas constituidos por uno o una hilera de varios símbolos de puntuación: (, ), {, }, /,... Dentro de los separadores contaremos con el espacio en blanco y el salto de línea. Antecedentes necesarios para tener conocimiento exacto de algo (cantidades, cualidades o hechos). Acciones como la reunión, selección cálculo o escritura. Un elemento en los conocimientos derivados del análisis de datos. 5