miércoles, 19 de septiembre de 2012

Solucion de problemas

ANÁLISIS Y SOLUCIÓN DE PROBLEMAS



Formular un problema es un procedimiento que requiere tanto cuidado como el mismo proceso de solucionarlo. La mayoría de nosotros no hemos cultivado la habilidad para plantear problemas, pues en las distintas instituciones educativas nos propones resolver problemas y nunca plantearlo. El futuro programador debe desarrollar esta habilidad de plantear problemas.
Partamos por analizar el problema de la guía anterior:







1. Debes empezar por leer atentamente y reflexivamente el enunciado anterior. La buena comprensión de lectura es el cimiento base que nos llevara por buen camino en el momento de plantear, analizar y resolver problemas. Debes cultivar siempre la lectura atenta, comprensiva y reflexiva, el afán nunca nos llevara al entendimiento y comprensión requeridos para llegar a ser un buen programador. Lee el problema de nuevo y pasa al segundo punto.  
-En este problema debemos saber el valor que el cliente debe pagar por el total de su compra, y teniendo en cuenta el recargo del 14%, y si la compra es mayor de $5.000 se le podría hacer descuento..2. Explica en forma detallada el procedimiento que seguirás para resolver el problema que se plantea. Hazlo en forma algorítmica detallando cada paso que seguirás, hasta obtener el valor total que debe pagar en cliente. 

1.  Ir al lugar donde esta el articulo.
2.  Buscar el articulo
3.   Ver su precio
 4. Llevar el numero de artículos deseados.
5. Multiplicar el precio del articulo por la cantidad
6. Tener la cuenta del valor total de la compra
 7. Sacar el 14% del recargo del total de la cuenta
8. Si su compra es menor de $5.000 no tiene descuento. si no pasar al punto 11
9. Le sacan el 14% del recargo que debe pagar
10. Sumar el valor de la compra mas el recargo
 11.Se le saca el 10% para el descuento de la compra
12.Al valor de la compra restamos el descuento
13.Al total le sumamos el recargo
14.El cliente paga
15. Se retira del lugar

3. Compara el procedimiento que planteas con el procedimiento que proponen algunos de tus compañeros de grupo.
a. ¿Qué diferencias encuentras?
En en otro procedimiento no se tuvo en cuenta las operaciones necesarias a realizar para poder obtener el resulta de la cuenta, solamente se menciono pasos que se debían hacer y no como se hacían.

b. ¿Qué observaciones harías al procedimiento planteado por tus compañeros?
Pues el procedimiento esta muy bueno, lo único que le faltaría por hacer es mostrar las operaciones necesarias  que se necesitarían hacer para poder obtener un total.



c. Al comparar tus planteamientos con el de tus compañeros de grupo, ¿Cuáles correcciones harías al procedimiento que tú propones?
Pues coincidimos con los puntos, así que hasta el momento no cambiaría ningún paso de mi procedimiento.



d. ¿Cuáles dificultades encontraron en la elaboración del algoritmo que permita encontrar el valor total que debe pagar el cliente al final de la compra?
Pues es muy fácil pensar en cada paso, pero es difícil recordar que como lo pensamos sabemos que esta claro pero debe expresarse cada operación, por ejemplo: es fácil decir escoge productos y sacan el total, pero se nos olvida que debemos indicar que operación se necesita para llegar a el.

4. Recordemos que en el proceso de resolver un problema por medio de un algoritmo se siguen unas fases o etapas las cuales se resumen en el siguiente diagrama:







a. Para el algoritmo que diseñaste en el punto 2, ¿Cuáles pasos de tu algoritmo se relacionan con la fase de entrada? Justifica tu respuesta.
Los puntos 1,2,3,4, ya que muestran el inicio del proceso, antes de llevar a cabo las operaciones y desarrollar el problema.

b. Para el algoritmo que diseñaste en el punto 2, ¿Cuáles pasos de tu algoritmo se relacionan con la fase de proceso? Justifica tu respuesta.
Los puntos 5,6,7,8,9,10,11,12 y 13, ya que muestra el procesa de la solución del problema, ademas expresa las operaciones que se deben llevar a cabo para esta solución.

c. Para el algoritmo que diseñaste en el punto 2, ¿Cuáles pasos de tu algoritmo se relacionan con la fase de salida? Justifica tu respuesta.
Los puntos 14 y 15 porque ya ahí todo se ha solucionado y es el fin de todo el proceso.

d. Para el algoritmo que diseñaste en el punto 2, ¿falto alguna de estas fases que se resumen en el anterior diagrama?, ¿es necesario hacer algunas correcciones? ¿Cuáles correcciones harías a tu algoritmo? Debes justificar cada una de tus respuestas.




Pues a mi me parece que no me falto ninguna fase porque indico desde que se inicia todo, hasta cuando ya todo ha acabado, y pues al compararlo y recibir criticas veo que esta algo completo, y pues hasta el    momento no haría correcciones.



5. Recuerda que este algoritmo debe permitir que el computador resuelva el problema, ahora debes reflexionar y responder los siguientes planteamientos:







Pues realmente pienso que ya todo esta ahí de manera explicita.



6. En esto consiste el análisis del problema por parte del programador, él debe plantear y responder una por una las preguntas que aparecen en el punto 5.
Ahora escribe tus conclusiones generales sobre este análisis que se ha hecho.
Recuerda publicar esta actividad en tu blog. Y enviar el enlace al grupo de correo del colegio, para la revisión. Corrección y calificación de la misma.



Cuando nos encontramos con problemas es muy importante su análisis, para poder saber plenamente lo que nos están pidiendo y lo que creemos que necesitamos .
En el momento de estar frente a un problema, y tener que darle una buena solución, especialmente explicando bien cada paso, es difícil ser tan explicito ya que como humanos sabemos razonar y sabemos que si nos dicen saque el total de una cuenta  ya sabemos que debemos hacer ciertas operaciones, pero ante una maquina debemos exponer bien cada paso y cada operación a realizar debidamente, ya que esta solo obedece.
Aunque realmente es muy importante el uso de esto, para no perderse y para saber  y tener la total garantía de que tendremos un buen resultado y que no nos ha faltado nada, deberíamos practicar muy constantemente esto ya que es un buen calculo de los pasos para realizar diferentes acciones y solucionar diferentes problemas.

viernes, 14 de septiembre de 2012

Contianuación: Introduccion a la programacion


1) Programa informático

Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas máquinas no pueden funcionar. Al conjunto general de programas, se le denomina software, que más genéricamente se refiere al equipamiento lógico o soporte lógico de una computadora digital.



2) Lenguaje de programación.

Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.




3) Diagramas de Flujo.

El diagrama de flujo es la representación gráfica del algoritmo o proceso. Se utiliza en disciplinas comoprogramacióneconomía, procesos industriales y psicología cognitiva. Estos diagramas utilizan símbolos con significados definidos que representan los pasos del algoritmo, y representan el flujo de ejecución mediante flechas que conectan los puntos de inicio y de fin de proceso.




Pseudocódigo.

El pseudocódigo (o falso lenguaje) es una descripción de un algoritmo informático de programación de alto nivel compacto e informal que utiliza las convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código de lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas que se documentan varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes de realizar la codificación efectivamente.



4) Fases en la Programación.


1. Definición del Problema:
Consiste en la obtención sin ambigüedades de una visión general y clara del problema. Ayuda a identificar los elementos claves del problema y los de la futura solución, así como fijar los límites de los mismos basados en su planteamiento textual sobre el papel. Un problema mal planteado, incompleto o mal comprendido es un mal inicio para la programación. 

2. Análisis del Problema:
Es la comprensión a fondo del problema y sus detalles y es un requisito para lograr una solución eficaz. Es precesamente en esta fase donde se definen formal y correctamente la Entrada que recibirá el programa (datos o materia prima), la Salida que producirá (información o resultados) y el Proceso necesario para su solución (el método para convertir los datos de entrada en información de salida).

3. Diseño de la solución:
En esta fase se diseña la lógica de la solución a usar, o sea, cómo hará el programa la tarea que se desea automatizar usando los datos de entrada para generar los datos de salida, enfatizándose los diseños limpios, sencillos y claros. Pueden plantearse diferentes alternativas de solución al problema y elegir la más adecuada, la que produzca los resultados esperados en el menor tiempo y al menor costo. El proceso de diseño se realiza en dos pasos:

3.1 Elaboración del Algoritmo
Un algoritmo es una secuencia lógica y cronológica de pasos encaminados a resolver un problema. Las acciones básicas que puede llevar a cabo un algoritmo son: pedir datos, desplegar datos, evaluar condiciones y ejecutar operaciones.

Los programas se estructuran a partir de los algoritmos, los cuales se pueden escribir utilizando la técnica convencional del pseudocódigo (mezcla de lenguaje común, términos técnicos de computación, símbolos y palabras reservadas de algún lenguaje de programación) y los diagramas de flujo (flujogramas) que son la representación gráfica de un algoritmo, plasmados en papel para su estudio. En el caso de emplear diagramas de flujo pueden emplearse herramientas de software tales como el DFD v1.0. Si se opta por el pseudocódigo, se recomienda escribirlos a doble interlínea para efecto de facilitar modificaciones o adición de acciones no consideradas y dotarlos de las siguientes características.

3.1.1 Características de los Algoritmos
  • Un algoritmo debe tener un punto de inicio o partida.
  • Debe ser preciso e indicar el orden de realización de cada paso.
  • Debe estar bien definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada vez.
  • Debe ser finito (tener un número finito de pasos). Si se sigue un algoritmo, se debe terminar en algún momento.

La definición de un algoritmo debe describir con claridad las tres partes fundamentales del problema: Entrada, Proceso y Salida encontradas en las fases de Definición y Análisis del problema.

 Los que se toman tiempo para analizar el problema, pensar y plasmar su solución en papel mediante un algoritmo tendrán un tiempo de respuesta (el tiempo para obtener el programa terminado) mucho menor, y se convierten en mejores programadores. Es un hecho.

Los problemas complejos pueden solucionarse más eficazmente utilizándo el método "Divide y Vencerás", el que consiste en fraccionar un problema complejo en otros más simples y más fáciles de solucionar. Esto conduce a la Modulación del programa auxiliado por el método de diseño Top-Down o Descendente en el que se da un refinamiento de los pasos del algoritmo. De hecho, el enfoque E-P-S mencionado anteriemente es un buen ejemplo de esto, pues al concentrarse en resolver cada uno de los tres aspectos del enfoque de manera independiente se lograr la solución del problema completo.

3.2 Realización de Pruebas de Escritorio
O sea, comprobaciones a mano del algoritmo planteado (en pseudocódigo o en diagrama de flujo) con datos y resultados de prueba conocidos, papel, lápiz y calculadora (si es necesaria) para simular su ejecución y evaluar su correcta operación. Si la lógica es correcta, los resultados serán satisfactorios. Si no, el algoritmo deberá modificarse y volverlo a probar hasta que esté correcto. Algunos programas no son fáciles de probar a mano por su complejidad y/o tamaño, pero en tu ayuda está la verificación durante la programación inicial (la creación del algoritmo), el trace and debugging (rastreo y detección de errores) automático que incorporan los lenguajes de compiladores de los lenguajes de programación y otras técnicas. Se hace notar que éste acápite depende de los anteriores. Si la definición y el análisis son errados, el diseño del programa también lo será, por lo que se tendrá que rehacer, retrocediendo quizá hasta la fase de Definición del problema.


4. Codificación: En este paso se traduce el algoritmo ya estructurado, verificado y comprobado a mano, al lenguaje de programación que vaya a utilizarse. Sólo se convierten las acciones del algoritmo en instrucciones de computadora usando la sintaxis de un lenguaje particular, pero requiere de conocimientos del lenguaje y de sumo cuidado en la colocación de las instrucciones, las que deben apegarse y seguir fielmente a la lógica del algoritmo y la semántica y sintaxis del lenguaje.

La digitación: 
el acto de teclear el algoritmo codificado, se lleva a cabo para almacenar el programa en la memoria de la computadora (virtual o física) y pueda ser aceptado por esta.

La compilación: o corrección de los errores sintácticos y semánticos del código, es la eliminación de los errores "gramaticales" según las reglas de construcción de instrucciones particulares del propio lenguaje (la sintaxis). Puede hacerse a medida que se traduce, pero es mejor al final para no perder la secuencia de la codificación. Al terminar debe tenerse el código libre de los errores antes mencionados.

Para realizar la compilación puede hacerse uso de un compilador, el cual es un programa especial que analiza todo el código fuente y detecta los errores antes mencionados ocasionados durante la codificación o la digitación. Las fallas de lógica que puedan existir en nuestro programa no son detectadas por este software. Los errores que sí son evidenciados por el compilador deben corregirse modificando el programa fuente.

5. Prueba y Depuración (Puesta a Punto o Testing):
Una vez compilado el programa, este es sometido a pruebas a fin de determinar si resuelve o no el problema planteado en forma satisfactoria. Para ello le suministramos datos de prueba, como lo hicimos en la prueba de escritorio. El programa codificado y compilado no garantiza que funcione correctamente. Debe depurarse (librarse de errores de lógica o de ejecución) realizando corridas de prueba continuas con datos y respuestas conocidas como lo hicimos en la prueba de escritorio, verificando todas las posibles alternativas del programa y sus respuestas y haciendo el mayor número de variantes con sus combinaciones, a fin de determinar si resuelve o no el problema planteado en forma satisfactoria.

6. Documentación:
Es la fase más ignorada por la mayoría de los programadores noveles, por razones de tiempo, costos o simple pereza. Pero no documentar los programas es un mal hábito en programación y un gran error. Será muy difícil a los usuarios entender un programa si no cuentan con un manual de operaciones (el Manual de Usuario). También para los programadores que necesiten darle mantenimiento o hacerle modificaciones si no existe ninguna documentación acerca de sus fases de desarrollo. Incluso será difícil de entender para el mismo autor, algún tiempo después.

La documentación es la guía o comunicación escrita en sus variadas formas, ya sea en enunciados, procedimientos, dibujos o diagramas y sirve para ayudar a comprender o usar un programa o para facilitar futuras modificaciones (mantenimiento). Recoge todos los elementos encontrados y material creado en las diferentes fases del desarrollo, además de las normas de instalación o las recomendaciones para la ejecución del programa.

7. Implementación (Producción):
El programa ya probado, revisado y mejorado se considera terminado y puede utilizarse con un alto grado de confianza para resolver los problemas que dieron origen a su creación. Si se está automatizando alguna tarea manual, ésta última se desecha para emplear solamente la programa.

8. Mantenimiento:
Es posible que el programa deba revisarse cada cierto tiempo para ajustes. Estos cambios pueden ser por la dinámica del problema, por la naturaleza del código, las exigencias del tiempo o las modernas necesidades que surgen frecuentemente, por lo que se considera que ningún programa es estático. Los programas siempre son susceptibles de mejoras y de mantenimiento. Por tales razones, es común que se tenga que retornar a una de las fases iniciales de desarrollo para corregir o añadir funcionalidades, repitiendo el proceso en cada fase subsiguiente para introducir los cambios pertinentes y lograr que el programa funcione correctamente con los cambios realizados. Se enfatiza el hecho de que cualquier actualización o cambio en el programa deberá reflejarse en su documentación para que ésta mantenga su vigencia.-





lunes, 3 de septiembre de 2012

Introduccion a la programacion

  • La algoritmia: ciencia que nos permite evaluar el efecto que tienen diferentes factores externos sobre los algoritmos disponibles, de tal modo que se pueda seleccionar el que mas se ajuste a nuestras circustancias particulares.
  • El algoritmo: es una lista bien definida, ordenada y finita de operaciones que permite hallar la solucion a un problema





    Características de un Algoritmo

    El científico de computación Donald Knuth ofreció una lista de cinco propiedades, que son ampliamente aceptadas como requisitos para un algoritmo:
    1. Carácter finito. "Un algoritmo siempre debe terminar después de un número finito de pasos".
    2. Precisión. "Cada paso de un algoritmo debe estar precisamente definido; las operaciones a llevar a cabo deben ser especificadas de manera rigurosa y no ambigua para cada caso".
    3. Entrada. "Un algoritmo tiene cero o más entradas: cantidades que le son dadas antes de que el algoritmo comience, o dinámicamente mientras el algoritmo corre. Estas entradas son tomadas de conjuntos específicos de objetos".
    4. Salida. "Un algoritmo tiene una o más salidas: cantidades que tienen una relación específica con las entradas".
    5. Eficacia. "También se espera que un algoritmo sea eficaz, en el sentido de que todas las operaciones a realizar en un algoritmo deben ser suficientemente básicas como para que en principio puedan ser hechas de manera exacta y en un tiempo finito por un hombre usando lápiz y papel".




  • Programa: es un conjunto de operaciones especificas de un determinado lenguaje de programacion y para un computador concreto, suseptible de ser ejecutado





  • LENGUAJE DE PROGRAMACIÓN:

Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.Está formado por un conjunto de símbolos y reglas sintácticas semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se pruebase depurase compila y se mantiene el código fuente de un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:

1.  El desarrollo lógico del programa para resolver un problema en particular.
2.  Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).
3.  Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
4.Prueba y depuración del programa.
5.  Desarrollo de la documentación.

Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y lenguaje informático. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos).
Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamentepróximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa.

Diagramas de Flujo:


 El diagrama de flujo es la representación gráfica del algoritmo o proceso. Se utiliza en disciplinas como programación, economía, procesos industriales y psicología cognitiva. Estos diagramas utilizan símbolos con significados definidos que representan los pasos del algoritmo, y representan el flujo de ejecución mediante flechas que conectan los puntos de inicio y de fin de proceso.







Pseudocodigo:

 el pseudocódigo (o falso lenguaje) es una descripción de un algoritmo informático de programación de alto nivel compacto e informal que utiliza las convenciones estructurales de un lenguaje de programación verdadero, pero que está diseñado para la lectura humana en lugar de la lectura en máquina, y con independencia de cualquier otro lenguaje de programación.