viernes, 12 de octubre de 2012

CAPITULO 2: PROGRAMACION EN C



FASES EN LA RESOLUCION DE PROBLEMAS:

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

Las fases de resolución de un problema son:

·Análisis de problema                    ·Verificación                         ·depuración

·diseño del algoritmo                    ·codificación                          ·mantenimiento

·compilación y ejecución               ·documentación

CARACTERISTICAS DE UN ALGORITMO:

Preciso: indicar el orden de realización en cada paso.

Definido: si se sigue dos veces, obtiene el mismo resultado cada vez.

Finito: tiene fin: un número determinados de pasos.

Ejemplos de un algoritmo son: instrucciones para montar en una bicicleta, hacer una receta de cocina, obtener el máximo común divisor de 2 números.

Los algoritmos se pueden presentar por formulas, diagrama de flujos o n-s y pseudocódigos: esta última representa en la más utilizada en lenguajes estructurados como c.

ANALISIS DEL PROBLEMA:

En esta fase se complementa exactamente lo que debe hacer el programa y el resultado o solución de problema.

                                                    Resolución de problema

 

Análisis del problema                          diseño del algoritmo             resolución de problema

                                                                                                                      Con computadora

DISEÑO DEL ALGORITMO:

Se determina como hace la tarea solicitada el programa. Cada subprograma es resuelto mediante un módulo que tiene un solo punto  de salida.

Los programas estructurados se dice que tienen diseño modular y el método de romper el programa en módulos más pequeños, se llama programación modular. Los módulos pueden ser planeados, codificados, comprobados y depurados independientemente,  el proceso implica los siguientes pasos, hasta que el programa se determina:

1. Programar un módulo.

2. Comprobar el modulo

3. Depurar el modulo

4. Combinar el modulo con los módulos anteriores

Es diseño del algoritmo es independiente del lenguaje de programación.

HERRAMIENTAS DE PROGRAMACION:

Diagramas de flujo: es una representación gráfica de un algoritmo.

Pseudocódigo: es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español. El pseudocódigo se puede definir como un lenguaje de especificación de algoritmos.

CODIFICACION DE UN PROGRAMA:

Es la escritura de un lenguaje de programación de la representación de algoritmos desarrollada en las etapas precedentes.

Dado que un diseño de un algoritmo es independiente del lenguaje de programación utilizado por su implementación, el código puede ser escrito en un lenguaje o en otro.

Para utilizar la conversión del algoritmo en programa, se deben sustituir las palabras en español por su homónimo en inglés, y las instrucciones indican el lenguaje natural  expresadas en el lenguaje de programación correspondiente.

COMPILACION Y EJECUCION DEL PROGRAMA:

UN vez que el programa se ha convertido en un programa fuente, es preciso introducirlo en memoria mediante el teclado y almacenarlo en un disco.

El programa fuente debe ser traducido a lenguaje máquina, este proceso se realiza con el compilador.

Si trae la compilación se presentan errores en el programa fuente es preciso volver a editar el programa.

Este proceso se repite hasta que no se producen errores, obteniéndose el programa objeto.

VERIFICACION I DEPURACION DE UN PROGRAMA:

Verificación: es el proceso de ejecución del programa con una amplia variedad de datos de entrada, llamados datos de test o prueba, que determina si el programa tiene errores.

Depuración: Es el proceso de encontrar los errores del programa y corregir o eliminar dichos errores.

Se pueden producir 3 tipos de errores al ejecutar un programa.

1. Errores de compilación: son errores de sintaxis

2. Errores de ejecución: se introducen por instrucciones que la computadora puede entender pero  no ejecutar

3. Errores lógicos: suelen ser el diseño del algoritmo. Son difíciles de detectar ya que el programa puede funcionar y no producir errores de compilación ni de ejecución.

DOCUMENTACION Y MANTENIMIENTO:

La documentación de un problema consta de las descripciones de los pasos a dar en el proceso de resolución de un problema.

La documentación puede ser interna o externa: la interna es la contenida en línea de comentarios y la externa incluye análisis, diagramas de flujo y pseudocódigos.

La documentación es vital cuando se desea corregir posibles errores futuros o bien cambiar el programa, tales cambios se denomina como mantenimiento del programa.

PROGRAMACION ESTRUCTURADA:

Significa escribir un programa de acuerdo a las siguientes reglas:

·El programa tiene un diseño modular.

·Los módulos son diseñados de modo descendente.

·Cada módulo se codifica utilizando las 3 estructuras de control básico: secuencia, selección y repetición.

La programación estructurada es el conjunto de técnicas que incorporan:

·Recursos abstractos

·Diseño descendente (top-Down)

·Estructuras básicas

TEORIA DE LA PROGRAMACION ESTRUCTURADA:

El programa completo tiene un diseño modular

Los módulos se diseñan con metodología descendente

Cada módulo se modifica utilizando las 3 estructuras de control básico: secuenciales, selectivas y repetitivas. (Ausencia total de secuencias GOTO)

Estructuración y modularidad son conceptos complementarios (se solapan)



REPRESENTACION GRAFICA DE LOS ALGORITMOS:
Los métodos usuales para representar un algoritmo son:
·Diagrama de flujo
·Diagrama N-S (Nassi-Schninderman)
·Lenguaje de especificación de algoritmos: pseudocódigo,
·Lenguaje español inglés.
·Formulas.
Para representar un algoritmo se debe utilizar algún método que permita independizar dicho algoritmo del lenguaje de programación elegido. Ellos permiten que un algoritmo pueda ser codificado indistintamente en cualquier lenguaje.
DIAGRAMA DE FLUJO:
Es una de las técnicas de representación de algoritmo más antiguo y utilizado.
Un diagrama de flujo es un diagrama que utiliza símbolos (cajas) estándar y que tiene los pasos de algoritmo escritas en esas cajas unidas por las flechas denominadas leneas de flujo.
LOS SIMBOLOS PRINCIPALES SON:
 

CICLO DE VIDA  DEL SOFTWARE:

El ciclo de vida del software describe el desarrollo de software, desde la fase inicial hasta la fase final. El propósito de este programa es definir las distintas fases intermedias que se requieren para validar el desarrollo de la aplicación, es decir, para garantizar que el software cumpla los requisitos para la aplicación ay verificación de los procedimientos de desarrollo: se asegura de que los métodos utilizados son apropiados.

El ciclo de vida básico de un software consta de los siguientes procedimientos:

Definición de objetivos: definir el resultado del proyecto y su papel en la estrategia global.

Análisis de los requisitos y su viabilidad: recopilar, examinar y formular los requisitos del cliente y examinar cualquier restricción que se pueda aplicar.

Diseño general: requisitos generales de la arquitectura de la aplicación.

Diseño en detalle: definición precisa de cada subconjunto de la aplicación.

Programación (programación e implementación): es la implementación de un lenguaje de programación para crear las funciones definidas durante la etapa de diseño.

Prueba de unidad: prueba individual de cada subconjunto de la aplicación para garantizar que se implementaron de acuerdo con las especificaciones.

Integración: para garantizar que los diferentes módulos se integren con la aplicación. Éste es el propósito de la prueba de integración que está cuidadosamente documentada.

Prueba beta (o validación), para garantizar que el software cumple con las especificaciones originales.

Documentación: sirve para documentar información necesaria para los usuarios del software y para desarrollos futuros.

Implementación

Mantenimiento: para todos los procedimientos correctivos (mantenimiento correctivo) y las actualizaciones secundarias del software (mantenimiento continuo).
El orden y la presencia de cada uno de estos procedimientos en el ciclo de vida de una aplicación dependen del tipo de modelo de ciclo de vida acordado entre el cliente y el equipo de desarrolladores.




PRUEBAS E INTEGRACION:
Sirve para mostrar que un programa es correcto. Las pruebas nunca son fáciles.
Es una parte esencial de un proyecto de programación. Durante la fase de prueba se necesita eliminar tantos errores lógicos como se pueda.
Se deben incluir datos no válidos para comprobar la capacidad de detección de errores del programa.
VERIFICACION:
Es para demostrar la corrección o exactitud de un programa, se denomina verificación formal implica la construcción de pruebas matemáticas que ayudan a determinar si los programas hacen lo que se supone han de hacer.
Si se descubre un error durante el proceso de verificación se debe corregir su algoritmo y posiblemente se han de modificar las especificaciones del programa.
 
MANTENIMIENTO:
Es el proceso de mejora y optimización del software después de su entrega al usuario final (es decir; revisión del programa), así como también corrección y prevención de los defectos.
El mantenimiento de software es también una de las fases en el ciclo de vida del desarrollo del sistema (SDLC, sigla en inglés de system development life cycle), que se aplica al desarrollo de software. La fase de mantenimiento es la fase que viene después del despliegue (implementación) del software en el campo.
PRECONDICION Y POSTCONDICION:
Precondición: predicado lógico que debe cumplirse al comenzar la ejecución de una operación.
Postcondicion: predicado lógico que debe cumplirse al acabar la ejecución de una operación siempre que se haya cumplido previamente la precondición correspondiente.
ETAPAS A ESTABLECER LA EXACTITU (CORRECION) DE UN PROGRAMA:
1. El invariante debe ser inicialmente verdadero
2. Una ejecución del bucle debe mantener el invariante.
3. El invariante debe capturar la exactitud del algoritmo.
4. El bucle debe terminar.
PROGRAMACION SEGURA CONTRA FALLOS:
Es segura contra fallos cuando se ejecuta razonablemente por cualquiera que lo utilice. Para conseguir este objetivo se han de comprobar los errores en datos de entrada y en la lógica del programa.
FACTORES EN LA CALIDAD DEL SOFTWARE:
CORRECION:
La corrección es la cualidad principal. Si un sistema no hace lo que se supone que debe hacer, poco importan el resto de consideraciones que hagamos sobre él – si es rápido, si tiene una bonita interfaz de usuario.
Pero esto es más fácil de decir que de lograr. Incluso el primer paso hacia la corrección es ya difícil: debemos ser capaces de especificar los requisitos del sistema de una forma precisa, lo que es en sí una ardua tarea.
Los métodos que aseguran la corrección son usualmente condicionales. Un sistema de software importante, incluso uno pequeño según los estándares de hoy, implica a tantas áreas que sería imposible garantizar su corrección manejando todas las componentes y propiedades en un solo nivel. En cambio, es necesaria una solución multinivel, en la que cada nivel confía en la corrección de los inferiores:
Hardware ----> Sistema Operativo----> Compilador ----> Sistema de Aplicación
TRANSPORTABALIDAD:
Facilidad con la que un software puede ser transportado.
INTEGRIDAD:
Facilidad para proteger sus componentes.
ROBUSTEZ:
Facilidad para funcionar incluso en situaciones anormales.
EXTENSIBILIDAD:
Facilidad de adaptar cambios en su especificación: diseño simple y descentralización.
REUTILIZACION:
La reutilización tiene una influencia sobre todos los demás aspectos de la calidad del software, ya que al resolver el problema de la reutilización se tendrá que escribir menos software y en consecuencia se podrán dedicar entonces mayores esfuerzos a mejorar los otros factores, tales como la corrección y la robustez.


EJERCICIOS:
A)   Realizar una llamada telefónica:
Entrada: ir hacia el teléfono público
Proceso: descolgar el teléfono
             Depositar una moneda
             Marcar el número
             Hablar
   Salida:    colgar
                 Regresar a casa
 
B)   Cocinar una tortilla:
Inicio:               tener una tortilla
                        Prender la estufa
    Proceso:            Poner la tortilla en el comal
                            Esperar a que se caliente por un lado
                           Darle la vuelta para que se cocine por el otro lado
   Salida:              Sacar la tortilla
                          Apagar la estufa
 
C)   Arreglar un ponchazo de una bicicleta:
Inicio:         Parche
                  Llanta
                  Herramientas
Salida:      
                 Que salga en buen estado
Proceso:
                 Revisar la pinchada
                Poner pegamento
                Colocar el parche
               Ponerle aire
 
D)  Freír un huevo:
Inicio:         Tener el huevo, sartén, aceite, mantequilla, sal, y la estufa
Salida:
               Freír el huevo
Proceso:
              Quebrar el huevo, ponerlo en el sartén, echarle sal, agregar         
               Condimentos, batir el huevo, ponerlo en la cazuela y cocinar
 
E) Diseña un algoritmo que imprima y sume la serie de números 3,6,9,12….99
 
Programa:                      operación
Tipo:
                                     Numero1 tipo entero
                                      Numero2 tipo entero
                                      Sumaa=0
                                      Sumab=0
Inicio:
                                     Para numero1=1 hasta 99 salta 3
                                      Escribir (numero1)
                                      Si número 1entre 2 entonces
                                      Sumaa= sumaa + numero1
                                      sino
                                      sumab= sumab+ numero1
fin.
 
 
 
F)  Haz el algoritmo de un programa que solicite 100 calificaciones:
Programa:                 calificaciones
Tipo:
                                Numero tipo entero
Inicio:
                               Para numero = 1 hasta 100 salta 1
                              Escribir (“teclear calificación”)
                                Leer (“calificación tipo entero”)
Fin.






  

PARADIGMA DE PROGRAMACION


¿QUE ES PARADIGMA DE PROGRAMACION?

Es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que unívocamente trata de resolver uno o varios problemas claramente delimitados. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.

PRINCIPALES PARADIGMAS:

Paradigma imperativo:

 es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).

Paradigma funcional:

es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado.

Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus su expresiones), y por tanto, la carencia total de efectos colaterales.

Paradigma lógico:

La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionada: sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.

La programación lógica también se utiliza en aplicaciones más "mundanas" pero de manera muy limitada, ya que la programación tradicional es más adecuada a tareas de propósito general.

Paradigma orientado a objetos:

Es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.

Posee como idea principal encapsular estad y operaciones en objetos. Estos objetos pueden comunicarse entre sí, poseen clases y herencias. Se puede destacar como ventaja la facilidad de reutilización de código.

Paradigma estructurado:
El código se divide en bloques, estructuras que pueden o no comunicarse entre sí. Este software se controla con secuencias, selección e interacción, otorga una mejor compresión del código y permite su reutilización de una forma más fácil.

MAPA COMPARATIVO

MAPA COMPARATIVO DE:
Programacion estructurada, programacion funcional, programacion orientada a objetos y programacion orientada a eventos.
NOMBRE
CARACTERISTICAS
FUNCION
 
Programación estructurada
Utiliza un número limitado de estructuras de control, reduciendo así considerablemente los errores. Incorpora: diseño descendente, recursos abstractos, estructuras básicas que son secuenciales, selectivas y repetitivas.
·Los programas son más fáciles de entender.
·Se reduce la complejidad de las pruebas.
·Aumenta la productividad del programador.
· Los programas quedan mejor documentados internamente.
 
Programación funcional
Están constituidos únicamente por definiciones de funciones.
No existen asignaciones de variables y la falta de construcciones estructuradas como la secuencia y la iteración.
·Ausencia de efectos colaterales.
·Proceso de depuración menos problemática.
·Pruebas de unidades más confiables.
·Mayor facilidad para la ejecución concurrente.
Programación orientada a objetos (POO)
El polimorfismo y la herencia son una de sus principales características. El elemento principal es el objeto.
·Aumenta considerable mente la velocidad de desarrollo de programas.
·Se pueden hacer los programas de formas distintas.
Programación orientada a eventos
La estructura como la ejecución de los programas van determinados por los sucesos que ocurran en el sistema o que ellos mismos provoquen.
·Acciones dependientes de usuarios.
·Puede manipular los eventos.
·Permite tener contacto con el empleo de los objetos.
·Es el usuario quien decide.