Está en la página 1de 62

Tema VI.

Diseo de programas para la resolucin de problemas de ingeniera


Objetivo: El alumno aplicar el mtodo de Diseo de Programas en la elaboracin de programas que resuelvan problemas bsicos de ingeniera.

6.1 Teora del diseo de programas


Programacin
Podemos deducir que en construccin del software, la fase mas importante, y en la que se invertir ms tiempo, es la fase de desarrollo en la que, utilizando lenguajes y tcnicas de programacin, se escribir el programa que resolver el problema.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Paradigmas de programacin
La evolucin de los lenguajes de programacin ha ido paralela a la idea de paradigma de programacin: enfoques alternativos a los procesos de programacin. En realidad un paradigma de programacin representa fundamentalmente enfoques diferentes para la construccin de soluciones a problemas y por consiguiente afectan al proceso completo de desarrollo de software.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Paradigmas de programacin
Fiable, es decir, funcionar correctamente y sin fallos.

Adaptable, es decir, fcil de incorporar en otros sistemas con modificaciones mnimas. Reusable, total o parcialmente, para reducir costes y reutilizar componentes cuya fiabilidad est comprobada. Mantenible. Los programas son construidos por muchas personas agrupadas en equipos de trabajo.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Tipos de programacin
Existen diferentes tcnicas de programacin que se pueden ordenar segn su complejidad. Debido a esta complejidad, el aprendizaje debera seguir el siguiente orden propuesto.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Programacin 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.

Programacin Modular
Da un paso ms a la estructuracin de un programa agrupando partes del mismo en mdulos de una funcionalidad similar.

Programacin orientada a objetos


Resuelve algunos de los problemas que surgen con la programacin modular y estructurada.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Programacin Estructurada Cuando los programas se vuelven ms grandes, cosa que lgicamente 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 nmero de instrucciones. Para resolver este problema los programas se descompusieron en unidades mas pequeas que adoptaron el nombre de funciones (procedimientos, subprogramas o subrutinas)

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Fases en la resolucin de problemas
El proceso de resolucin de un problema con una computadora conduce a la escritura de un programa y a su ejecucin en la misma. Aunque el proceso de disear programas es esencialmente un proceso creativo, se puede considerar una serie de fases o pasos comunes, que generalmente deben seguir todos los programadores. Las fases de resolucin de un problema con computadora son: Anlisis del problema Diseo del algoritmo Codificacin Compilacin y ejecucin Verificacin Depuracin Mantenimiento Documentacin

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Anlisis
El problema se analiza teniendo presente la especificacin de los requisitos dados por el cliente de la empresa o por la persona que encarga el programa.

Diseo
Una vez analizado el problema, se disea una solucin que conducir a un algoritmo que resuelva el problema.

Codificacin
La solucin se escribe en la sintaxis del lenguaje de alto nivel y se obtiene un programa fuente que se compila a continuacin.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Ejecucin, verificacin y depuracin
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.

Documentacin
Escritura de las diferentes fases del ciclo de vida del software, esencialmente el anlisis, diseo y codificacin, unidos a manuales de usuario y de referencia, as como normas para el mantenimiento.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Calidad
Las sentencias de un programa, tambin llamadas cdigo del programa o cdigo fuente, pueden ser ledas por muchas personas a lo largo de su ciclo de vida, por tanto es fundamental que estn bien redactadas, con un estilo determinado para que su significado sea claro y no lleve a ambigedades.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Documentacin
La documentacin ayudar a comprender un programa para as saber utilizarlo y poder realizar futuras modificaciones.

Ing. Tanya Arteaga Ricci

6.1 Teora del diseo de programas


Interna
Son los comentarios o aclaraciones que van junto al cdigo fuente para clarificar los pasos seguidos en un programa. Externa

Es un documento donde se define: la descripcin del problema, nombre del autor, el algoritmo utilizado para la resolucin del problema, expresado en pseudocdigo o diagrama de flujo, el diccionario de datos, en el que se especifica dnde y cmo se almacenan los datos del sistema y los lugares donde se utilizan, el cdigo fuente o programa.
Manual de usuario

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

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


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#

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Historia del Lenguaje C
La historia del lenguaje C comienza a finales de los aos 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 caractersticas multitarea y multiproceso llamado UNIX. La primera versin del lenguaje de programacin 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, convirtindose en el lenguaje C. Ese mismo ao, se reescribe el cdigo de UNIX en lenguaje C y, a partir de 1973, se convierte en el lenguaje oficial de UNIX.
Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Caractersticas del Lenguaje C
En definitiva, el lenguaje C tiene las siguientes caractersticas:
Portabilidad

Cdigo

binario altamente optimizado


programacin estructurada

Lenguaje general y pensado para la

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


La funcin main( )
El lenguaje C est basado en el concepto de funciones. Un programa C es una coleccin de una o ms funciones, en donde cada una tiene un nombre y una lista de argumentos.

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Estructura general de un programa C:
Directivas para el procesador Archivos include Constantes define Declaraciones globales Declaraciones de funciones Declaraciones de variables globales Funcin principal main() Declaracin de variables locales Sentencias ejecutables Funciones Finalizacin del programa exit(()

Cabecera de la funcin Sentencias Ejecutables Declaracin de variables locales Sentencia de salida de la funcin: return

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


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!); }

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Observaciones
/* */ son smbolos que engloban a los comentarios de un programa escrito en C. main() es el nombre de la funcin que en este momento no requiere ningn tipo de parmetros de entrada y salida. { } delimitan el alcance de la funcin printf() es una funcin llamada por main() a la cual se le pasa el parmetro \n Hola mundo! \n Indica un salto de lnea

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Observaciones
void indica al compilador que la funcin no retornar un valor al terminar de ejecutarse y que tampoco requiere de un argumento de entrada La 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 carcter, que es el carcter almohadilla (#). Estas directivas le indican al compilador que incluya en el cdigo fuente, el cdigo fuente contenido en los archivos dentro de < y >
Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


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

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Rangos mnimos para los tipos de datos en lenguaje C
Tipo int unsigned int Tamao en Bits 16 16 Rango -32 767 a 32 767 0 a 65 535

short int unsigned short int long int


unsigned long int

16 8 32
32

Igual que int 0 a 65 535


-2 147 483 647 a 2 147 483 647

0 a 4 294 967 295

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Precisin de los tipos de datos
Tipo Tamao en Bits Precisin en dgitos

float double long double

32 64 128

6 10 10

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


Formato de un programa en C
Despus 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 programacin, llevar a cabo un anlisis pormenorizado de dichos elementos. stos, combinndolos de forma apropiada, no permitirn elaborar los programas deseados.

Ing. Tanya Arteaga Ricci

6.2 Vinculacin del diseo de programas al conocimiento algortmico


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:
Las 26 letras minsculas del alfabeto ingls ( 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 maysculas (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 dgitos (1 2 3 4 5 6 7 8 9 0) Los smbolos especiales (@ ^ { } [ ] ( ) & $ % # ~ / ? ; : _ . , = / * - +) El espacio en blanco o barra espaciadora
Ing. Tanya Arteaga Ricci

6.3 Caractersticas bsicas de un programa en lenguaje C


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 especificndolos en las declaraciones, de este modo, se puede utilizar dicho identificador en las sentencias posteriores del programa para referirnos al elementos asociado a l.
Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencias de Control
En muchas ocasiones, los programas requieren que un conjunto de instrucciones se ejecute de forma repetida hasta que se cumpla una condicin. En otras ocasiones, los programas requieren que se realice un test o comprobacin lgica en algn punto concreto, realizndose a continuacin alguna accin que depender del resultado de la comprobacin.

Todas estas operaciones se pueden realizar mediante las sentencias de control de C.

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Clasificacin de las sentencias de control
Tipo Condicionantes Sentencia de control if switch while

Repetitivas o bucles

do while for break

Salto condicional

continue goto

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Elabore un programa que resuelva el rea de un tringulo (la base y la altura son valores fijos)
/* area.c */ #include<stdio.h> void main(void) { int fBase,fAltura; double fArea; fBase=34; fAltura=54; fArea = (fBase*fAltura)/2.0; printf("\n Area de un triangulo"); printf("\n Base: %d \n Altura: %d \n Area: %f", fBase, fAltura, fArea); printf("\n");}

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencia IF/ELSE
Su forma bsica sera la siguiente:

If (expresin) sentencia;
En esta sentencia se evala expresin. Si el resultado es verdadero, se ejecuta sentencia; si el resultado es falso, se salta a sentencia y se prosigue en la lnea siguiente. Hay que recordar que sentencia puede ser una sentencia simple o un conjunto de sentencias (en caso de que fueran varias deberan ir contenidas en bloque entre llaves {})

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencia SWITCH
En este caso se evala una expresin (condicin) y dependiendo del valor que devuelva, que pueden ser mltiples valores, se ejecutar un bloque de sentencias y otro. En el caso de la sentencia if/else, se evaluaba una condicin y slo podan ejecutarse dos bloques de sentencias dependiendo de si esa condicin se cumpla o no. La forma general de switch es la siguiente: switch (expresin){ case valor1: sentencia; break; case valor2: sentencia; break; ... case valorN: sentencia; break; default: sentencia; break; }

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencia WHILE (Iteracin)
Esta sentencia se considera una sentencia de tipo bucle que permite repetir una serie de veces la ejecucin de un bloque de cdigo. Esta repeticin se realiza hasta que se cumpla una determinada condicin de tipo lgico o aritmtico. En su forma general seria:

while (condicin) { Sentencia1; Sentencia2; }

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencia DO..WHILE (Iteracin)
Se considera una sentencia de tipo bucle que se comporta exactamente igual que la sentencia while, con la diferencia de que dicha evaluacin 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:
do {

sentencia1; sentencia2; } while (condicin);

Ing. Tanya Arteaga Ricci

6.4 Elementos y estructuras del lenguaje C en el diseo de programas


Sentencia FOR (Iteracin)
La sentencia de control for permite repetir una serie de veces la ejecucin de un bloque de cdigo. La ventaja de la sentencia for sobre while est en que en la cabecera de la construccin for se tiene toda la informacin sobre cmo se inicializan, controlan y actualizan las variables de bucle. La evaluacin de la condicin se realiza al principio de la ejecucin. La forma general de esta sentencia es la siguiente:

for (expresion1; expresion2; expresion3) { Sentencia1; Sentencia2; }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Arreglos Unidimensionales
Un arreglo es una coleccin de variables del mismo tipo, con el mismo nombre, y que se diferencian unos de otros a travs de un subndice. La forma general de un arreglo es:

Tipo Nombre_Variable[Nmero_de_elementos] Cuando el compilador encuentra una declaracin 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.
Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Para tener en mente C nos permite acceder cualquier elemento fuera de los lmites del arreglo, pero los datos no son vlidos. C no valida los lmites de sus arreglos, dicha validacin es responsabilidad del programador.

NOTA:

Arreglo de 5 elementos
0 1 2 3 4

Primer Elemento

ltimo Elemento
Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


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 cadena Digite una letra
H O
0 1

HOLA CHICOS LISTOS


C C H
6

L
2

A
3 4

I
7

C
8

O
9

10 11 12 13 14 15 16 17

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


#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);

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


/*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); else printf("\nLa letra %c no existe en la cadena\n",cLetra); }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Hacer un programa que lea una cadena y determine cuntas palabras existen en ella.

HOLA

CHICOS

INGENIEROS

3
Fin de cadena

Espacios en blanco

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Arreglos Bidimensionales
Un arreglo bidimensional es una coleccin finita, homognea 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.
Primera columna Ensima columna

Primera fila Segunda fila Arreglo Bidimensional

Ensima fila

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Arreglos Multidimensionales
Un arreglo puede tener ms de una dimensin, de tal manera que forme matrices de dos, tres o aun ms dimensiones. Tipo nombre_arreglo[d1][d2][d3]. [dn] Donde dn es la longitud del arreglo en la n-sima dimensin.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Funciones
Qu es una funcin?
Secuencias de operaciones que se utilizarn en varios puntos de un programa y que permitirn reutilizar dicha secuencia de operaciones mediante una llamada a la misma a travs del nombre que se le d a la funcin. Hay dos tipos de funciones, las funciones propias de libreras de C y las definidas por el programador.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Diseo modular de programas
En fragmentos independientes es ms fcil de programar.

El programa principal ser ms fcil de leer, porque no necesitar contener todos los detalles de cmo 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.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Esos fragmentos de programa son lo que se suele llamar subrutinas, procedimientos o funciones. En el lenguaje C, el nombre que ms se usa es el de funciones.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Declaracin
La forma bsica de definir una funcin es:
indicar el nombre de la funcin seguido de unos parntesis, como se hace con main. despus, 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");

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Ahora desde dentro del cuerpo del programa, es posible llamar o utilizar a esa funcin:

main() { saludar(); }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Parmetros de una funcin
Si nos interesa adems indicarle a nuestra funcin ciertos datos especiales con los que queremos que trabaje. Por ejemplo, si escribimos en pantalla nmeros reales con frecuencia, puede resultar til que los muestre con el formato que nos interese. Lo podramos hacer as:
escribeNumeroReal( float n ){ printf("%4.2f", n); }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


La funcin se llamara 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 funcin es lo que llamaremos parmetros.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Valor devuelto por una funcin
Tambin es posible que la funcin realice una serie de clculos y nos devuelva el resultado de esos clculos
main() { int resultado, numero= 5; resultado = cuadrado(numero); printf(Elcuadradodelnumeroes%d, resultado); printf(\nY el de 3 es %d", cuadrado(3)); } int cuadrado (int n) { return n*n; }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Variables locales y Variables globales
Las variables se pueden declarar dentro de un bloque (una funcin), y entonces slo ese bloque las conocer, no se podrn usar desde ningn 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.

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


#include<stdio.h> void hola(void){ printf(\n\nEstaeslafuncinhola); printf(\n***HolaAmigos;)*** }
void adios(void){ printf(\n\nEstaeslafuncinadios); printf(\n***AdiosAmigos;)*** }

void main(void){ printf(\nEsteeselprogramaprincipal); printf(\nRealizalallamadaalafuncinHOLA); hola(); printf(\nRealizalallamadaalafuncinADIOS); adios(); printf(\n\nFin del programa.\n Fin de programa principal); }

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera


Este es el programa principal Realiza la llamada a la funcin HOLA

Esta es la funcin hola *** Hola amigos *** Realiza la llamada a la funcin ADIOS
Esta es la funcin adis *** Adis amigos *** Fin de programa. En el programa principal

Ing. Tanya Arteaga Ricci

6.5 Elaboracin de programas bsicos de ingeniera

Ing. Tanya Arteaga Ricci