Tema 1 Estructura de un Programa Informático PDF
Document Details
Tags
Summary
Este documento presenta una introducción a la estructura de un programa informático. Se describen los conceptos básicos de código fuente, código objeto y algoritmo, así como la importancia del pseudocódigo en la notación de algoritmos. Se exponen ejemplos de programas y su codificación. Se revisan las fases de compilación y la necesidad de un compilador para la ejecución de programas en lenguajes de alto nivel.
Full Transcript
**Tema 1.** **ESTRUCTURA DE UN PROGRAMA INFORMÁTICO** ========================================= **CÓDIGO FUENTE** **CÓDIGO OBJETO** **CÓDIGO** De forma general, un **programa informático** es un **conjunto** de **instrucciones** dadas al ordenador en un determinado lenguaje entendido por él, pa...
**Tema 1.** **ESTRUCTURA DE UN PROGRAMA INFORMÁTICO** ========================================= **CÓDIGO FUENTE** **CÓDIGO OBJETO** **CÓDIGO** De forma general, un **programa informático** es un **conjunto** de **instrucciones** dadas al ordenador en un determinado lenguaje entendido por él, para decirle exactamente lo que queremos hacer y si el ordenador no entiende una instrucción lo comunica mediante un mensaje de error. Todo programa está formado por un **conjunto de órdenes** o instrucciones capaces de **manipular un conjunto de datos**. Estas órdenes o instrucciones corresponden cada una de ellas a las partes del diseño de un programa: **Concepto de algoritmo**: es una descripción de todas las operaciones o **acciones** que debe realizar un ordenador de forma clara y **detallada**, así como, el orden en que deben ejecutarse y la **descripción de sus datos** para que nos lleven a la solución de un problema para posteriormente traducirlo al lenguaje de programación correspondiente. Todo **algoritmo es totalmente independiente del lenguaje** de programación que sea utilizado y con independencia igualmente de la máquina donde se vaya a ejecutar dicho programa. La importancia de hacer un buen algoritmo es conseguir un buen diseño para facilitar la traducción al lenguaje de programación elegido. Todo **algoritmo** debe cumplir las siguientes **características**: Para realizar la notación del algoritmo se utiliza el **pseudocódigo**: que es un lenguaje intermedio entre el lenguaje natural y el lenguaje de programación. La notación de pseudocódigo surge para poder representar las instrucciones de control que utiliza cualquier metodología estructurada y nace como un lenguaje parecido al inglés. Esta notación de pseudocódigo no puede ser utilizada directamente por el ordenador. Esta notación es independiente del lenguaje de programación que se vaya a utilizar. El diseño es descendente o TOP-DOWN que consiste en la descomposición sucesiva del problema en niveles o subproblemas más pequeños. Todo pseudocódigo debe permitir: - - - - - Todo algoritmo con notación de pseudocódigo debe tener las siguientes partes: CABECERA PROGRAMA: Nombre\_del\_programa MÓDULO: Nombre\_del\_módulo CUERPO INICIO DATOS: Parámetros Constantes Variables ALGORITMO Descripción de las acciones a ejecutar FIN Ejemplo: PROGRAMA: Área\_del\_rectángulo MÓDULO: principal INICIO DATOS: Variables: Area nº real Base nº real Altura nº real ALGORITMO Leer Base Leer Altura Proceso: Area = Base\* Altura; Escribir: "El valor del área es = ", Area; **FASES DE COMPILACIÓN DE UN PROGRAMA** --------------------------------------- Un **compilador** es un programa de software escrito en un lenguaje de programación cuyo objetivo es **traducir el programa fuente** (código fuente, código escrito con un editor propio lenguaje de alto nivel) a su equivalente **a código máquina,** también **denominado código objeto.** Existe también otra forma de traducir el código fuente a código máquina a través de los **intérpretes**. Los intérpretes son programas de software que procesan y traducen cada instrucción o sentencia del programa, comprueba que no hay error y luego ejecuta; un intérprete lee el código fuente de un programa línea a línea y las traduce (on-line) para que la CPU las pueda interpretar, pero no genera ningún programa objeto. A diferencia del compilador que traduce completamente el programa fuente a código máquina y después si no hay errores ejecuta. **Fases de Compilación de un programa** Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado directamente por un ordenador, sino que debe ser traducido a lenguaje máquina. Las **etapas** por las que debe pasar un programa escrito en un lenguaje de programación, hasta poder ser ejecutable son: ***Programa fuente:*** Programa escrito en un lenguaje de alto nivel (texto ordinario que contiene las sentencias del programa en un lenguaje de programación). Necesita ser traducido a código máquina para poder ser ejecutado. ***Compilador:*** Programa encargado de traducir los programas fuentes escritos en un lenguaje de alto nivel a lenguaje máquina y de comprobar que las llamadas a las funciones de librería se realizan correctamente. ***Programa (o código) objeto***: Es el programa fuente traducido (por el compilador) a código máquina. Aún no es directamente ejecutable. ***Programa Ejecutable:*** Traducción completa a código máquina, realizada por el enlazador, del programa fuente y que ya es directamente ejecutable. ***Linker (montador o enlazador**)*: Es el programa encargado de insertar al programa objeto el código máquina de las funciones de las librerías (archivos de biblioteca) usadas en el programa y realizar el proceso de montaje, que producirá un **programa ejecutable**.exe*.* Las ***librerías*** son una colección de código (funciones) ya programado y traducido a código máquina, listo para utilizar en un programa y que facilita la labor del programador. Como cada lenguaje de programación tiene unas reglas especiales (*sintaxis*) debe existir un compilador específico para cada lenguaje de programación. Si el programa fuente es sintácticamente **correcto**, el compilador generará el **código objeto**, en caso contrario mostrará una lista con los errores encontrados, no generándose ningún programa objeto, para que procedamos a su *depuración.* Los compiladores emiten mensajes de error o de advertencia durante las fases de compilación, de enlace o de ejecución de un programa: - - Aunque al compilar un programa no de errores, el programa puede funcionar incorrectamente y/o a dar errores durante su ejecución. Por ejemplo: - - Los errores que se pueden producir en la **fase de compilación** son: - Cuando ocurren, la compilación se detiene inmediatamente. - errores encontrados. Con este tipo de errores no se puede obtener un programa objeto y por lo tanto tampoco el ejecutable. - los provoca es una labor en ocasiones complicada, razón por la cual los EID (Entornos Integrados de Desarrollo, p.ej. **DevC++)** nos proporcionan una herramienta llamada *Depurador* que nos ayuda a encontrar los errores lógicos y demás errores producidos en tiempo de ejecución. Un ***depurador (debugger)***, es un programa diseñado específicamente para la detección, verificación y corrección de errores. Los depuradores nos permiten trazar el programa (ejecutarlo sentencia a sentencia) y visualizar el contenido de las variables y direcciones de memoria durante la ejecución del programa. Además, permiten alterar el flujo de ejecución del mismo, cambiar los valores de las variables e introducir puntos de ruptura (parada). **Fase de ejecución de un programa** Una vez que tenemos el programa en lenguaje máquina, para poderlo ejecutar hay que introducirlo en la memoria. **El compilador de C. Características generales.** ♦ El lenguaje C es un lenguaje muy **potente y eficiente** de ***nivel medio***: Combina elementos de lenguajes de alto nivel con la funcionalidad del lenguaje ensamblador. Es adecuado para la programación de sistemas. ♦ Es un lenguaje de propósito general (puede utilizarse para desarrollar sistemas operativos, gestores de bases de datos, etc). ♦ El código de C es muy **portable**: se puede adaptar el software escrito para un tipo de computadora a otra computadora sin hacer muchos cambios. ♦ El lenguaje C es un ***lenguaje estructurado***: permite trabajar con estructuras de programación repetitivas y condicionales y funciones para realizar una determinada tarea. ♦ El lenguaje C **sólo tiene 32 palabras clave**, (BASIC por ejemplo tiene 159). ♦ Suele incluir potentes librerías de funciones que aumentan su potencia. ♦ El lenguaje C es ***compilado, no interpretado***. Un compilador lee el programa entero, lo traduce y genera un *código objeto* directamente ejecutable y entendible por el microprocesador. El compilador produce los programas con el nombre y extensión.obj. El enlazador produce los programas con el nombre y extensión.exe o ejecutable después de haber enlazado con las rutinas necesarias de la biblioteca de C. El nombre del fichero elegido para guardar el programa en el disco debe tener la extensión.c. Cada sentencia se termina con ; y cada línea de programa se finaliza pulsando enter. Ej: /\*\*\*\*\*\*\*\*\*\*\*\*\*\* Saludo\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ //saludo.c \#include\ \#include\ main(){ printf(" hola mundo"); getch();} En C se distinguen las mayúsculas de las minúsculas. Las dos primeras líneas son comentarios que no son tenidos en cuenta por el compilador. La tercera línea incluye el fichero cabecera *stdio.h* que contiene las declaraciones necesarias para las funciones de E/S. En este caso printf necesita de la librería stdio.h. *Include* es una palabra reservada de C. Se conoce como las *directivas de preprocesamiento* y hay que colocarlas al principio del programa. Indican al compilador que antes de leer la función principal debe leer las directivas. Las más usuales son : \#include y \#define. El fichero cabecera *conio.h* actúa con la función getch()y sirve para parar la pantalla y que se vea el resultado de la ejecución del programa. La función principal es main(). Todo el cuerpo de la función principal del programa va entre llaves. Ejemplo de pseudocódigo de un programa y su codificación en C. Programa: Área\_Rectángulo Función: Principal Inicio Datos: Variables: Area: número real Base: número real Altura: número real Algoritmo Leer Base Leer Altura Proceso: Area= Base \* Altura; Escribir: "El valor del área es:", Area; Fin CODIFICADO EN LENGUAJE C (el lenguaje C distingue entre mayúsculas y minúsculas) /\*\*\*\*\*\*\*\*Área del rectángulo\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ \#include\ \#include\ int main() { float area; float base; floataltura; scanf("%f", &base); scanf("%f", &altura); area= base \* altura; printf("El valor del area es %0.2f", area); getch(); } Hacer pseudocódigo y programa para imprimir el intercambio del valor de dos variables. /\*\*\*\*\*\*\*\* Intercambio de dos números \*\*\*\*\*\*/ \#include\ \#include \ int main () { int num1, num2, aux; printf(\"Introduce un número\\n\"); scanf(\"%i\", &num1); printf(\"Introduce otro número\\n\"); scanf(\"%i\", &num2); printf(\"Antes del intercambio num1 = %d y num2 = %d.\\n\\n\", num1, num2); aux=num1; num1=num2; num2=aux; printf(\"Despues del intercambio num1 = %d y num2 = %d.\", num1, num2); getch(); } **Estructura general de un programa en C** /\* Comentarios de un parrafo completo comprendidos entre /\*\.....\*/, sirven para aclarar qué el programa o una parte del programa \*/ // Comentarios de 1 sola línea // Zona de ficheros de cabecera de las librerías \#include \ // h de Head \#include \ // Zona de prototipos de funciones int Potencia (int x,y) // Zona de variables globales int valor; float media\_total; void **main** (void) // Prog. ppal. **{**//llave de inicio del programa // código del programa //Llamada a la función\...\.... \...\.... \...\.... // fin del programa **}** // Desarrollo del código con funciones **Ejemplo de un programa con una función: Hallar el área del círculo.** \#include \ \#include \ \#define PI 3.1416 // actúa como una constante, accesible desde cualquier parte del programa, global. float areaCirculo(float radio); //prototipo de la función. Se define con un parámetro de tipo float y con retorno de tipo float. void main() { float A; // declaración variable global float radio; // \"\" \"\" scanf(\"%f\", &radio);//introducimos el dato radio desde teclado A=areaCirculo(radio); //llamada a la función, le pasamos el parámetro radio printf(\"El valor del area es %0.3f\", A); getch(); } float areaCirculo(float radio) // desarrollamos la función { float Ar; //declaración de variable local(solo es válida dentro de la función) Ar=PI \* (radio\*radio); //proceso return(Ar); //retorno de la función } **Programa para intercambiar el valor de dos variables por medio de una función.** \#include \ \#include \ //Declaramos el prototipo de la función void Intercambio(int x,int y); // x e y son los parámetros que paso a la función //// programa principal //// void main() { inta,b;// variables locales a la función principal printf(\"Introduce dos valores: \"); scanf(\"%d %d\",&a,&b); printf(\"Resultado antes del intercambio : x = %d ,y = %d \", a,b); Intercambio(a,b); //Llamamos a la función getch(); } /////////Desarrollamos la función Intercambio void Intercambio(int x, int y) { int aux=0; //var local a la función aux=x; //se intercambian valores x = y; y = aux; printf(\"\\nResultado: x = %d ,y = %d \", x,y); }