Herramientas de usuario

Herramientas del sitio


curso-cpp:introduccion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
curso-cpp:introduccion [2016/08/03 02:34]
santo creado
curso-cpp:introduccion [2017/10/29 19:14] (actual)
santo
Línea 55: Línea 55:
  
  
-===== Falta pasar el final =====+===== Los lenguajes de programación ===== 
 + 
 +Efectivamente,​ los programas son una "​receta"​ o "lista de instrucciones"​ de qué hacer, que será seguida por la computadora. Al texto que describe estos programas, escrito en un cierto lenguaje de programación,​ se lo denomina **código fuente**. 
 + 
 +Así como los mismos textos pueden escribirse en los distintos idiomas del mundo, y un mismo texto puede verse de manera muy diferente en cada uno de ellos; cada lenguaje de programación tiene sus **reglas** particulares sobre **cómo se deben escribir** las órdenes para la computadora. 
 + 
 +El siguiente es un fragmento de programa en el lenguaje de programación **C++** ​ a modo de ejemplo: 
 + 
 + 
 +<code cpp> ​    
 +int sumaDeLosDigitos(int numero) 
 +
 +    int sumaParcial ​0; 
 +    while (numero > 0) 
 +    { 
 +        sumaParcial +numero % 10; // Suma la ultima cifra del numero al resultado intermedio "​sumaParcial"​ 
 +        numero /10; // Le borra la ultima cifra al numero 
 +    } 
 +    return sumaParcial;​ 
 +
 +</​code>​ 
 + 
 +Este es un ejemplo de programa sencillo que indica a la computadora cómo calcular la suma de los dígitos de un número dado cualquiera. Más adelante podremos entender bien los detalles de su funcionamiento,​ pero es importante ir destacando esta característica esencial de los programas, que es su **generalidad**:​ Al escribir un programa, le estamos enseñando a la computadora cómo procesar **cualquier** posible dato de entrada, de una manera general, y deberemos tener eso en cuenta al programar. El ejemplo anterior por ejemplo explica cómo obtener la suma de los dígitos de un número **cualquiera**,​ que en el código fuente se ha denominado "​numero"​. 
 + 
 + 
 +===== La resolución de problemas con computadora ===== 
 + 
 +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 pueden considerar una serie de pasos o fases comunes a ser seguidos por todos los programadores. 
 + 
 +  *  Análisis del problema [Entender qué tenemos que hacer, pensar, pensar, analizarlo] 
 +  *  Diseño del algoritmo ​ [Diseñar un método para resolverlo, una idea, tener claro el "​cómo"​ es que se resuelve] 
 +  *  Codificación ("​codeo",​ "​codear",​ "​escribir el programa"​) [Escribir un programa que le explique ese "​cómo"​ del paso anterior a la computadora] 
 +  *  Compilación y ejecución [Generar un archivo ejecutable y ejecutarlo en la computadora para obtener los resultados] 
 +  *  Verificación [Contrastar los resultados contra lo esperado en distintos casos de tests] 
 +  *  Depuración ​  ​[Entender y corregir todos los errores en el programa que vayamos encontrando a raíz del paso anterior] 
 +  *  Documentación [Dejar explicado con claridad para futuros programadores y usuarios, qué hace, cómo funciona, y cómo se usa el programa creado] (Esto es por ejemplo el editorial de topcoder/​codeforces,​ un buen tutorial, manual de usuario, gráficos y diagramas explicativos,​ etc). 
 + 
 +Notar que no necesariamente se siguen estrictamente en ese orden (en proyectos grandes, nunca se hacen en orden sino que se hace "todo en paralelo todo el tiempo"​),​ y en pequeños programas (como todos los que haremos, y todos los que se hacen en competencias de programación) es común que no se noten o incluso que falten algunos pasos, pero "la idea del proceso es esa, y siempre está presente"​. 
 + 
 +Mientras más tiempo se invierta en análisis y diseño del algoritmo, en general menos tiempo se invertirá en los demás pasos: conviene pensar y entender muy bien qué queremos hacer, antes de mandarse a escribir código en la computadora. 
 + 
 +Un **algoritmo** es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos. 
 + 
 +  - Preciso : Está bien claro qué pasos hay que hacer, y en qué orden. No hay ambigüedad. 
 +  - Definido : Llega al mismo resultado cada vez que se lo ejecuta [Si no se cumple esta propiedad, se habla de algoritmos no deterministas] 
 +  - Finito : Tiene fin, el método termina siempre luego de realizar suficientes pasos, y no puede continuar "​eternamente"​. 
 + 
 +O sea que un algoritmo es, en definitiva, una **receta super recontra precisa**. Como para que la entienda un robot super literal sin inteligencia. O sea, **una computadora**. 
 + 
 +===== Ejercicio: Escritura de algoritmo ===== 
 + 
 +Escribir un algoritmo para que Agus pueda calcular la suma de los números desde 1 hasta N (un número cualquiera) usando la calculadora. Es decir, con N=3, al seguir el algoritmo Agus debería obtener 6 (Porque 1 + 2 + 3 = 6). Sin embargo con N = 5 se debería obtener 15 al finalizar el proceso. 
 + 
 +Conocimientos de Agus: 
 + 
 +  *  Agus sabe contar hasta N (conoce el siguiente de un número, y sabe cuándo llega a N) 
 +  *  Agus sabe escribir un número en la calculadora. 
 + 
 +Recuerde que para que sea un algoritmo, las órdenes deben ser bien precisas y exactas, y no pueden quedar libradas al "​sentido común"​ de Agus (ya que Agus opera como un robot mecánico que sigue todo lo que le pidan literalmente). 
 + 
 + 
 +===== Posibles soluciones (Escritura de algoritmo) ===== 
 + 
 +El siguiente es un posible algoritmo para darle a Agus (los pasos deben seguirse en orden uno a continuación de otro, a menos que se indique explícitamente lo contrario):​ 
 + 
 +  -  Encender la calculadora con el botón "​ON"​. 
 +  -  Comenzar con "​1"​ como el número actual, e introducirlo en la calculadora. 
 +  -  Si el número actual ya es N, saltar al paso 8. 
 +  -  Avanzar el número actual al siguiente. 
 +  -  Presionar el botón "​+"​ de la calculadora. 
 +  -  Introducir el número actual en la calculadora. 
 +  -  Volver al paso 3. 
 +  -  Presionar el botón "​="​ de la calculadora. 
 +  -  En este paso, tenemos en el visor de la calculadora el resultado deseado. 
 +  -  Apagar la calculadora con el botón "​OFF"​. 
 + 
 +Otra manera muy similar de escribir este algoritmo es la siguiente:​ 
 + 
 +  *  Encender la calculadora con el botón "​ON"​. 
 +  *  Comenzar con "​1"​ como el número actual, e introducirlo en la calculadora. 
 +  *  Repetir lo siguiente mientras que el número actual no sea N: 
 +     ​* ​  ​Avanzar el número actual al siguiente. 
 +     ​* ​  ​Presionar el botón "​+"​ de la calculadora. 
 +     ​* ​  ​Introducir el número actual en la calculadora. 
 +  *  Presionar el botón "​="​ de la calculadora. 
 +  *  En este paso, tenemos en el visor de la calculadora el resultado deseado. 
 +  *  Apagar la calculadora con el botón "​OFF"​. 
 + 
 +Si bien ambas descripciones son en este caso completamente equivalentes,​ esperamos que coincida en que la segunda es más clara. Preferiremos siempre descripciones que se basen en "​procesos"​ y "​repeticiones",​ antes que en "​números de línea"​ y "​saltos"​ entre ellos, ya que resultan más fáciles de entender y modificar. 
 + 
 +Notar que las instrucciones son bien precisas y específicas,​ y no dan lugar a cuestionamientos. ¿Son también precisas las instrucciones que propuso antes de ver estos ejemplos? 
 + 
 +Notar también que estas instrucciones,​ al ser tan precisas, pueden ser inadecuadas para modelos de calculadora levemente distintos. Esto es normal en programación:​ una computadora procesa las instrucciones dadas literalmente y no tiene la "​capacidad de adaptación"​ o "​sentido común"​ de un ser humano a la hora de seguir lo indicado en un programa. Por eso ante cambios relativamente menores (como usar otro modelo de calculadora),​ es común tener que modificar el programa igualmente, porque la computadora no logra adaptarse por sí sola (a menos por supuesto, que mediante un programa... ¡Ya se le haya indicado con total precisión cómo debe hacer para adaptarse por sí sola ante un cambio! Eso es extremadamente difícil y es la tarea que llevan a cabo los investigadores en inteligencia artificial). 
 + 
 +===== Análisis del problema ===== 
 + 
 +Cuando vayamos a resolver un problema en computadora lo primero que tenemos que lograr tener en claro es: 
 + 
 +  *  ¿Qué **entradas** se requieren (tipo y cantidad)?​ 
 +  *  ¿Cuál es la **salida** deseada (tipo y cantidad)?​ 
 +  *  ¿Qué **método** produce la salida deseada? 
 + 
 +Por ejemplo, si queremos hacer un programa que sume dos números enteros positivos, la entrada serán dos números enteros positivos A y B. La salida deseada será un único número entero positivo, X, que será el resultado X=A+B y por lo tanto se obtiene realizando una operación de suma entre A y B. 
 + 
 +===== Diseño del algoritmo ===== 
 + 
 + 
 +  *  Enfoque "​**top-down**":​ Sabemos (iremos aprendiendo cómo durante el curso) resolver problemas pequeños y sencillos. Para encarar problemas grandes entonces la idea será irlos **descomponiendo** en tareas más simples y luego **juntar** todos los pasos adecuadamente. 
 +  * Ejemplo: Calcular pago mensual neto de un trabajador conociendo horas trabajadas, tarifa horaria y tasa de impuestos. Lo descomponemos en 3: 
 +      *  Leer datos: Horas, tarifa, tasa 
 +      *  Calcular el sueldo neto usando los datos 
 +      *  Mostrar el sueldo neto por la salida en el formato deseado 
 +  *  Si aprendemos entonces a "leer datos",​ a "hacer cuentitas",​ y a "​escribir a la salida",​ podremos juntar todo eso en un solo programa para resolver el problema original.
  
-Se cayó unsam.edu.ar y no accede al moodle. 
curso-cpp/introduccion.1470191650.txt.gz · Última modificación: 2016/08/03 02:34 por santo