Tema vi

67
Tema VI. Diseño de programas para la resolución de problemas de ingeniería Objetivo: El alumno aplicará el método de Diseño de Programas en la elaboración de programas que resuelvan problemas básicos de ingeniería.

Transcript of Tema vi

Page 1: Tema vi

Tema VI. Diseño de programas para la resolución de problemas

de ingeniería

Objetivo: El alumno aplicará el método de Diseño de Programas en la elaboración de

programas que resuelvan problemas básicos de ingeniería.

Page 2: Tema vi

6.1 Teoría del diseño de programas

ProgramaciónCuando se está construyendo software, una de las fases más importantes, y en la que se invierte más tiempo, es la fase de desarrollo en la que se utilizan lenguajes y técnicas de programación para escribir el programa que resuelve el problema

Page 3: Tema vi

6.1 Teoría del diseño de programas

Paradigmas de programación

La evolución de los lenguajes de programación ha ido paralela a la idea de paradigma de programación: enfoques alternativos a los procesos de programación. En realidad un paradigma de programación representa fundamentalmente enfoques diferentes para la construcción de soluciones a problemas y por consiguiente afectan al proceso completo de desarrollo de software.

Page 4: Tema vi

6.1 Teoría del diseño de programas

Existen ciertas características que un programa debe cumplir:

Fiable: debe funcionar correctamente y sin fallos Adaptable: fácil de incorporar en otros sistemas con

modificaciones mínimas Reutilizable: total o parcialmente, para reducir costos y

reutilizar componentes cuya fiabilidad está comprobada Mantenible: los programas son construidos por muchas

personas agrupadas en equipos de trabajo

Page 5: Tema vi

Tipos de programación

Existen diferentes técnicas de programación que se pueden ordenar según su complejidad. Debido a esta complejidad, el aprendizaje debería seguir el siguiente orden propuesto.

6.1 Teoría del diseño de programas

Page 6: Tema vi

6.1 Teoría del diseño de programas

Programación Convencional

Es el primer programa realizado por alguien que empieza a programar, será un único “programa principal” constituido por una serie de comandos o instrucciones escritos secuencialmente.

Programación Modular

Da un paso más a la estructuración de un programa agrupando partes del mismo en módulos de una funcionalidad similar.

Programación orientada a objetos

Resuelve algunos de los problemas que surgen con la programación modular y estructurada.

Page 7: Tema vi

6.1 Teoría del diseño de programas

Programación Estructurada

Cuando los programas se vuelven más grandes, cosa que lógicamente sucede cuando aumenta la complejidad del problema a resolver, la lista de instrucciones aumenta considerablemente , de modo tal que el programador tiene muchas dificultades para controlar ese gran número de instrucciones.Para resolver este problema los programas se descompusieron en unidades mas pequeñas que adoptaron el nombre de funciones (procedimientos, subprogramas o subrutinas)

Page 8: Tema vi

6.1 Teoría del diseño de programas

Fases en la resolución de problemas

El proceso de resolución de un problema con una computadora conduce a la escritura de un programa y a su ejecución en la misma.

Aunque el proceso de diseñar programas es –esencialmente– un proceso creativo, se puede considerar una serie de fases o pasos comunes, que generalmente deben seguir todos los programadores.

Page 9: Tema vi

6.1 Teoría del diseño de programas

Fases en la resolución de problemas

Las fases de resolución de un problema con computadora son:

Análisis del problema Diseño del algoritmo Codificación Compilación y ejecución Verificación Depuración Mantenimiento Documentación

Page 10: Tema vi

Análisis El problema se analiza teniendo presente la especificación de los requisitos dados por el cliente de la empresa o por la persona que encarga el programa.

Diseño Una vez analizado el problema, se diseña una solución que conducirá a un algoritmo que resuelva el problema.

Codificación La solución se escribe en la sintaxis del lenguaje de alto nivel y se obtiene un programa fuente que se compila a continuación.

6.1 Teoría del diseño de programas

Page 11: Tema vi

6.1 Teoría del diseño de programas

Ejecución, verificación y depuración

EL programa se ejecuta, se comprueba rigurosamente y se eliminan todos los errores que puedan aparecer.

Mantenimiento

El programa se actualiza y modifica, cada vez que sea necesario, de modo que se cumplan todas las necesidades de cambio de sus usuarios.

Documentación

Escritura de las diferentes fases del ciclo de vida del software, esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y de referencia, así como normas para el mantenimiento.

Page 12: Tema vi

Calidad

Las sentencias de un programa, también llamadas código del programa o código fuente, pueden ser leídas por muchas personas a lo largo de su ciclo de vida, por tanto es fundamental que estén bien redactadas, con un estilo determinado para que su significado sea claro y no lleve a ambigüedades.

6.1 Teoría del diseño de programas

Page 13: Tema vi

Documentación

La documentación ayudará a comprender un programa para así saber utilizarlo y poder realizar futuras modificaciones.

6.1 Teoría del diseño de programas

Page 14: Tema vi

6.1 Teoría del diseño de programas

Interna

Manual de usuario

Externa

Son los comentarios o aclaraciones que van junto al código fuente para clarificar los pasos seguidos en un programa.

Es un documento donde se define: la descripción del problema, nombre del autor, el algoritmo utilizado para la resolución del problema, expresado en pseudocódigo o diagrama de flujo, el diccionario de datos, en el que se especifica dónde y cómo se almacenan los datos del sistema y los lugares donde se utilizan, el código fuente o programa.

Describe los pasos que debe seguir el usuario para utilizar el programa y conseguir los resultados esperados.

Page 15: Tema vi

Lenguaje C

Dennis Ritchie inventó y escribió el primer compilador para el lenguaje C en un DEC PDP-11

Variantes de C Turbo C C++ Visual C++ C#

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 16: Tema vi

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Historia del Lenguaje C

La historia del lenguaje C comienza a finales de los años 60 en los Laboratorios Bell propiedad de la empresa americana AT&T. Uno de los proyectos que ahí se desarrollaban era la escritura de un sistema operativo con características multitarea y multiproceso llamado UNIX.

La primera versión del lenguaje de programación creado para desarrollar el SO UNIX fue el lenguaje B, escrito por Ken Thompson.

En 1972, Dennis Ritchie, toma el relevo y realiza algunas modificaciones en el lenguaje B, convirtiéndose en el lenguaje C. Ese mismo año, se reescribe el código de UNIX en lenguaje C y, a partir de 1973, se convierte en el lenguaje oficial de UNIX.

Page 17: Tema vi

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Características del Lenguaje C

En definitiva, el lenguaje C tiene las siguientes características:

PortabilidadCódigo binario altamente optimizadoLenguaje general y pensado para la programación estructurada

Page 18: Tema vi

La función main( )

El lenguaje C está basado en el concepto de funciones. Un programa C es una colección de una o más funciones, en donde cada una tiene un nombre y una lista de argumentos.

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 19: Tema vi

Estructura general de un programa C:

Directivas para el procesador

Archivos include Constantes define

Declaraciones globales

Declaraciones de funciones Declaraciones de variables globales

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 20: Tema vi

Función principal main()

Declaración de variables locales Finalización del programa exit() Sentencias ejecutables

Funciones

Cabecera de la función Sentencias Ejecutables Declaración de variables locales Sentencia de salida de la función: return

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 21: Tema vi

Ejemplo:Escribir un programa que imprima las palabras “¡Hola mundo!” en el dispositivo de salida.

/*Programa saludo*/#include <stdio.h>void main(void){printf(“\n ¡Hola mundo!”);}

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 22: Tema vi

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 23: Tema vi

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Observaciones/* */ son símbolos que engloban a los comentarios de un programa escrito en C.main() es el nombre de la función que en este momento no requiere ningún tipo de parámetros de entrada y salida.{ } delimitan el alcance de la funciónprintf() es una función llamada por main() a la cual se le pasa el parámetro “\n ¡Hola mundo!”\n Indica un salto de línea

Page 24: Tema vi

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Observaciones“void” indica al compilador que la función no retornará un valor al terminar de ejecutarse y que tampoco requiere de un argumento de entradaLa directiva #include indica que se hará uso de la lista de encabezados que se encuentran en el archivo descrito entre < >

Directivas para el preprocesador

Las directivas para el preprocesador aparecen siempre al comienzo de los programas. Se identifican por su primer carácter, que es el carácter almohadilla (#). Estas directivas le indican al compilador que incluya en el código fuente, el código fuente contenido en los archivos dentro de ‘<‘ y ‘>’

Page 25: Tema vi

…Recordatorio

Aprender a programar es semejante a aprender a conducir, solamente se logra frente a la computadora.

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 26: Tema vi

Rangos mínimos para los tipos de datos en lenguaje C

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 27: Tema vi

Precisión de los tipos de datos

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 28: Tema vi

Formato de un programa en CDespués de presentar la estructura de un programa en C mediante un ejemplo real, donde se observa la manera que tienen los diferentes elementos del lenguaje de encajar en el programa, es necesario, al igual que en cualquier otro lenguaje de programación, llevar a cabo un análisis pormenorizado de dichos elementos. Éstos, combinándolos de forma apropiada, no permitirán elaborar los programas deseados.

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 29: Tema vi

El conjunto de caracteres de C

Del mismo modo que en nuestro lenguaje habitual utilizamos un conjunto de caracteres para construir instrucciones que tengan significado, los programas que se realicen en C se escriben utilizando un conjunto de caracteres formado por:

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 30: Tema vi

El conjunto de caracteres de C

Las 26 letras minúsculas del alfabeto inglés ( a b c d e f g h i j k l m n o p q r s t u v w x y z)

Las 26 letras mayúsculas (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)

Los 10 dígitos (1 2 3 4 5 6 7 8 9 0)

Los símbolos especiales (@ ^ { } [ ] ( ) & $ % # ~ ‘ “ / ? ; : _ . , = / * - +)

El espacio en blanco o barra espaciadora

6.2 Vinculación del diseño de programas al conocimiento

algorítmico

Page 31: Tema vi

Identificadores

Los identificadores son los nombres que utilizamos para representar los diferentes elementos de nuestro programa (tipos de datos, constantes, variables, funciones y etiquetas). Los identificadores se crean especificándolos en las declaraciones, de este modo, se puede utilizar dicho identificador en las sentencias posteriores del programa para referirnos al elementos asociado a él.

6.3 Características básicas de un programa en lenguaje C

Page 32: Tema vi

Sentencias de ControlEn muchas ocasiones, los programas requieren que un conjunto de instrucciones se ejecute de forma repetida hasta que se cumpla una condición.

En otras ocasiones, los programas requieren que se realice un test o comprobación lógica en algún punto concreto, realizándose a continuación alguna acción que dependerá del resultado de la comprobación.Todas estas operaciones se pueden realizar mediante las sentencias de control de C.

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 33: Tema vi

Clasificación de las sentencias de control

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 34: Tema vi

Elabore un programa que resuelva el área de un triángulo (la base y la altura son valores fijos)

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 35: Tema vi

Sentencia IF/ELSE

Su forma básica sería la siguiente:

If (expresión) sentencia;

En esta sentencia se evalúa expresión.Si el resultado es verdadero, se ejecuta sentencia; si el resultado es falso, se salta a sentencia y se prosigue en la línea siguiente.

Hay que recordar que sentencia puede ser una sentencia simple o un conjunto de sentencias (en caso de que fueran varias deberían ir contenidas en bloque entre llaves {…})

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 36: Tema vi

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Sentencia SWITCH

En este caso se evalúa una expresión (condición) y dependiendo del valor que devuelva, que pueden ser múltiples valores, se ejecutará un bloque de sentencias y otro. En el caso de la sentencia if/else, se evaluaba una condición y sólo podían ejecutarse dos bloques de sentencias dependiendo de si esa condición se cumplía o no. La forma general de switch es la siguiente:

Page 37: Tema vi

Sentencia WHILE (Iteración) Esta sentencia se considera una sentencia de tipo bucle que permite repetir una serie de veces la ejecución de un bloque de código. Esta repetición se realiza hasta que se cumpla una determinada condición de tipo lógico o aritmético. En su forma general seria:

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 38: Tema vi

Sentencia DO..WHILE (Iteración)Se considera una sentencia de tipo bucle que se comporta exactamente igual que la sentencia while, con la diferencia de que dicha evaluación se realiza al final de cada pasada en lugar de al principio, por lo que se asegura que, al menos, se ejecutará una vez el bloque de sentencias. Su forma general es la siguiente:

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 39: Tema vi

Sentencia FOR (Iteración)La sentencia de control for permite repetir una serie de veces la ejecución de un bloque de código. La ventaja de la sentencia for sobre while está en que en la cabecera de la construcción for se tiene toda la información sobre cómo se inicializan, controlan y actualizan las variables de bucle. La evaluación de la condición se realiza al principio de la ejecución. La forma general de esta sentencia es la siguiente:

6.4 Elementos y estructuras del lenguaje C en el diseño de

programas

Page 40: Tema vi

Arreglos Unidimensionales

Un arreglo es una colección de variables del mismo tipo, con el mismo nombre, y que se diferencian unos de otros a través de un subíndice.

La forma general de un arreglo es:

Tipo Nombre_Variable[Número_de_elementos]

Cuando el compilador encuentra una declaración de tipo para un arreglo, reserva una cantidad de espacio suficiente en la memoria para poder contenerlo. Todo el arreglo es asignado en localidades contiguas de memoria.

6.5 Elaboración de programas básicos de ingeniería

Page 41: Tema vi

6.5 Elaboración de programas básicos de ingeniería

Page 42: Tema vi

Ejemplo:Hacer un programa que lea una cadena y una letra desde el teclado. El programa debe indicar si la letra se encuentra presente en la cadena o no.

Digite una cadenaHOLA CHICOS LISTOSDigite una letraC

6.5 Elaboración de programas básicos de ingeniería

Page 43: Tema vi

#include <stdio.h>#include <string.h>void main(void){

char szCadena[80];char cLetra;int lExisteLetra;int iContador;int iLongCadena;

/*Lectura de la cadena*/printf("\nDigite una cadena: ");gets(szCadena);/*Lectura de la letra*/printf("Digite una letra: ");scanf("%c",&cLetra);

6.5 Elaboración de programas básicos de ingeniería

Page 44: Tema vi

/*Preparacion de los contadores */ iLongCadena=strlen(szCadena); iContador=0; /* No existe la letra por omision */ lExisteLetra=0; /* Mientras no se llegue al fin de cadena y no se encuentre la letra*/while(iContador < iLongCadena && !lExisteLetra)

{ /* verificar si existe la letra */ if (szCadena[iContador] == cLetra)lExisteLetra=1; iContador++;

} if (lExisteLetra)printf("\nLa letra %c si existe en la cadena\n",cLetra); Elseprintf("\nLa letra %c no existe en la cadena\n",cLetra);}

6.5 Elaboración de programas básicos de ingeniería

Page 45: Tema vi

6.5 Elaboración de programas básicos de ingeniería

Page 46: Tema vi

6.5 Elaboración de programas básicos de ingeniería

Hacer un programa que lea una cadena y determine cuántas palabras existen en ella.

Page 47: Tema vi

 

Page 48: Tema vi

6.5 Elaboración de programas básicos de ingeniería

 

Page 49: Tema vi

Arreglos BidimensionalesUn arreglo bidimensional es una colección finita, homogénea y ordenada de datos, en la que se hace referencia a cada elemento del arreglo por medio de dos índices. El primero de los índices se utiliza para indicar la fila, y el segundo, para indicar la columna.

6.5 Elaboración de programas básicos de ingeniería

Page 50: Tema vi

Arreglos Multidimensionales

Un arreglo puede tener más de una dimensión, de tal manera que forme matrices de dos, tres o aun más dimensiones.

Tipo nombre_arreglo[d1][d2][d3]…. [dn]

Donde dn es la longitud del arreglo en la n-ésima dimensión.

6.5 Elaboración de programas básicos de

ingeniería

Page 51: Tema vi
Page 52: Tema vi
Page 53: Tema vi
Page 54: Tema vi
Page 55: Tema vi

6.5 Elaboración de programas básicos de ingeniería

Funciones

¿Qué es una función?Secuencias de operaciones que se utilizarán en varios puntos de un programa y que permitirán reutilizar dicha secuencia de operaciones mediante una llamada a la misma a través del nombre que se le dé a la función.Hay dos tipos de funciones, las funciones propias de librerías de C y las definidas por el programador.

Page 56: Tema vi

6.5 Elaboración de programas básicos de ingeniería

Diseño modular de programasEn “fragmentos” independientes es más fácil de programar.El “programa principal” será más fácil de leer, porque no necesitará contener todos los detalles de cómo se hace cada cosa.

Podremos repartir el trabajo, para que cada persona se encargue de realizar un “trozo de programa”, y finalmente se integrará el trabajo individual de cada persona.

Page 57: Tema vi

6.5 Elaboración de programas básicos de

ingeniería

Esos “fragmentos” de programa son lo que se suele llamar “subrutinas”, “procedimientos” o “funciones”.En el lenguaje C, el nombre que más se usa es el de funciones.

Page 58: Tema vi

6.5 Elaboración de programas básicos de

ingeniería

Declaración La forma básica de definir una función es:

indicar el nombre de la función

seguido de unos paréntesis, como se hace con “main”.

Page 59: Tema vi

6.5 Elaboración de programas básicos de

ingenieríaDeclaración La forma básica de definir una función es:

después, entre llaves indicaremos todos los pasos que queremos que dé ese “fragmento de programa”.

saludar()

{ printf("Bienvenido al programa\n"); printf("de ejemplo\n"); printf("Bienvenido al programa\n"); }

Page 60: Tema vi

Ahora desde dentro del cuerpo del programa, es posible “llamar” o “utilizar” a esa función:

main() {…saludar();…}

6.5 Elaboración de programas básicos de

ingeniería

Page 61: Tema vi

6.5 Elaboración de programas básicos de

ingenieríaParámetros de una función

Si nos interesa además indicarle a nuestra función ciertos datos especiales con los que queremos que trabaje.Por ejemplo, si escribimos en pantalla números reales con frecuencia, puede resultar útil que los muestre con el formato que nos interese. Lo podríamos hacer así:

escribeNumeroReal( float n ){ printf("%4.2f", n); }

Page 62: Tema vi

La función se llamaría desde el cuerpo de nuestro programa así:float x;main() {x= 5.1;printf("El primer numero real es: ");escribeNumeroReal(x);printf(" y otro distinto es: ");escribeNumeroReal(2.3);}

Los datos adicionales que indicamos a la función es lo que llamaremos “parámetros”.

6.5 Elaboración de programas básicos de

ingeniería

Page 63: Tema vi

6.5 Elaboración de programas básicos de

ingenieríaValor devuelto por una función

También es posible que la función realice una serie de cálculos y nos “devuelva” el resultado de esos cálculos

main() {int resultado, numero= 5;resultado = cuadrado(numero);printf(“El cuadrado del numero es %d“, resultado);printf(“\nY el de 3 es %d", cuadrado(3));}int cuadrado (int n) {return n*n;}

Page 64: Tema vi

6.5 Elaboración de programas básicos de

ingenieríaVariables locales y Variables globales

Las variables se pueden declarar dentro de un bloque (una función), y entonces sólo ese bloque las conocerá, no se podrán usar desde ningún otro bloque del programa. Es lo que se llaman “variables locales”.Si se declara una variable al comienzo del programa, fuera de todos los “bloques” de programa, será una “variable global”, a la que se podrá acceder desde cualquier parte.

Page 65: Tema vi

#include<stdio.h>void hola(void){printf(“\n\nEsta es la función hola”);printf(“\n *** Hola Amigos ***”);}void adios(void){printf(“\n\nEsta es la función adios”);printf(“\n *** Adios Amigos ***”);}void main(void){printf(“\nEste es el programa principal”);printf(“\nRealiza la llamada a la función HOLA”);hola();printf(“\nRealiza la llamada a la función ADIOS”);adios();printf(“\n\nFin del programa.\n Fin de programa principal”);}

6.5 Elaboración de programas básicos de

ingeniería

Page 66: Tema vi

6.5 Elaboración de programas básicos de

ingenieríaEste es el programa principalRealiza la llamada a la función HOLAEsta es la función hola*** Hola amigos ***

Realiza la llamada a la función ADIOSEsta es la función adiós*** Adiós amigos ***Fin de programa.

En el programa principal

Page 67: Tema vi

6.5 Elaboración de programas básicos de

ingeniería