Translate

sábado, 1 de diciembre de 2018

Programación en C

Les doy la bienvenida a mi nuevo blog de programación en lenguaje C. La presentación de éste blog está ideado para aquellos personas principiantes, que no sepan nada de programación, quieran incursionar sus primeros pasos en el mundo de desarrollo de software con este lenguaje.  


El objetivo que el estudiante pueda resolver los distintos problemas como ser, matemáticos, administrativos, contables, gráficos, etc. un diagrama de flujo,  luego el uso del compilador de C con la  computadora.  

Es necesario entender que para llegar a ser un programador principalmente se necesita tiempo, esfuerzo, ganas de aprender, estar siempre motivado, investigar, además de metódico, ordenado,  y por sobre todo mucha paciencia. 


En la programación se necesita pensar los problemas de forma lógica, es necesario analizar el problema, luego hacer un diseño mediante un diagrama de flujo, que pueda representar la solución y finalmente volcar la solución del problema a código.  

Vamos por parte..

¿Qué es un programa?


Conjunto de instrucciones que entiende una computadora para realizar una actividad. Todo programa tiene un objetivo bien definido: un procesador de texto es un programa que permite cargar, modificar e imprimir textos, un programa de ajedrez permite jugar al ajedrez contra el ordenador u otro contrincante humano.

La actividad fundamental del programador es resolver problemas empleando el ordenador como herramienta fundamental.



Para poder resolver un problema, es necesario plantear un algoritmo. Un algoritmo,  es un método para resolver un problema mediante una serie de pasos precisos, definidos y finitos.



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.


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



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



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



·  Codificación (implementación): La solución se escribe en la sintaxis del lenguaje de alto nivel (por ejemplo, C) y se obtiene un programa.



·  Ejecución, verificación y depuración: El programa se ejecuta, se comprueba rigurosamente y se elimina todos los errores (denominados “bugs”, en inglés) 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 referencia, así como normas para el mantenimiento.



- Las fases



Un algoritmo debe producir un resultado en un tiempo finito. Los métodos que utilizan algoritmos se denominan métodos algorítmicos, en oposición a los métodos que implican algún juicio o interpretación denominados métodos heurísticos.

Los métodos algorítmicos se pueden implementar en computadoras; sin embargo, los procesos heurísticos no han sido convertidos fácilmente en las computadoras. En los últimos años las técnicas de inteligencia artificial han hecho posible la implementación del proceso heurístico en computadoras.



Ejemplos de algoritmos son: instrucciones para montar en una bicicleta, hacer una receta de cocina, obtener el máximo divisor de dos números, etc. Los algoritmos se pueden expresar por fórmulasdiagramas de flujo y pseudocódigos. Esta última representación es la más utilizada en lenguajes estructurados como C. 


      

    Características de un algoritmo

·   preciso (indicar el orden de realización en cada paso)
·  definido (si se sigue dos veces, obtiene el mismo resultado)
·  finito (tiene fin un número determinado de pasos)




 - Análisis del problema

La primera fase de la resolución de un problema es el análisis del problema. Esta fase requiere una clara definición, donde se contemple exactamente lo que debe hacer el programa y el resultado o solución deseada.

Para poder definir bien un problema es conveniente responder a las siguientes preguntas:

   ¿Qué entradas se requieren? (tipo y cantidad)
   ¿Cuál es la salida? (tipo y cantidad)
   ¿Qué método produce la salida deseada?

- Diseño del algoritmo

En la etapa de análisis del proceso de programación se determina qué hace el programa. En la etapa de diseño se determina como hace el programa la tarea solicitada.



Los métodos más eficaces para el proceso de diseño se basan en el conocido por divide y vencerás. Es decir, la resolución de un problema complejo se realiza dividiendo el problema

en subproblemas y a continuación dividir estos subproblemas en otros de nivel más bajo, hasta que pueda ser implementada una solución en la computadora.



Este método se conoce técnicamente como diseño descendente (top-down) o modular.



El proceso de romper el problema en cada etapa y expresar cada paso en forma más detallada se denomina refinamiento sucesivo.



Cada subprograma es resuelto mediante un módulo (subprograma) que tiene un solo punto de entrada y un solo punto de salida.



Cualquier programa bien diseñado consta de un programa principal (el módulo de nivel más alto) que llama a subprograma ( módulo de nivel bajo) que a su vez pueden llamar a otros subprogramas. Los programas estructurados de esta forma se dice que tienen un 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 (incluso por diferente programadores) y a continuación combinarlos entre sí. El proceso implica la ejecución de los siguientes pasos hasta que el programa se termina:



    1.  Programar un módulo.

    2.  Comprobar el módulo.

    3.  Si es necesario, depurar el módulo.

    4.  Combinar el módulo con los anteriores.

El proceso que convierte los resultados del análisis del problema en un diseño modular con refinamiento sucesivo que permitan una posterior traducción a un lenguaje se denomina diseño del algoritmo.
El diseño del algoritmo es independiente el lenguaje de programación en le que se vaya a codificar posteriormente.

- Herramientas de programación.


Las dos herramientas más utilizadas comúnmente para diseñar algoritmos son: diagramas de flujo y pseudocódigos.

Diagramas de flujo


Un diagrama de flujo es una representación de gráfica de un algoritmo.

Pseudocódigo

El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al inglés o español, que facilitan tanto la escritura como la lectura de programas. En esencia, el pseudocódigo se puede definir como un lenguaje de especificaciones de algoritmos.      

La representación de un problema mediante un gráfico, para éste caso vamos a usar el diagrama de flujo.

Diagrama de flujo

La simbología para representar el diagrama de flujo son:

simbolos de diagrama de flujo



Se expone un problema utilizando diagramas de flujo.

Para plantear un diagrama de flujo debemos tener muy en claro el problema a resolver.
Problema: Se debe calcular el sueldo mensual de un operario conociendo la cantidad de horas trabajadas y el pago por hora.
identificar datos conocidos:
-Horas trabajadas en el mes.
-Pago por hora.
Proceso:
Cálculo del sueldo multiplicando la cantidad de horas por el pago por hora.
Información resultante: Sueldo mensual.
Cuando hacemos un análisis todo problema está constituido por:
- Datos conocidos: Datos con los que se cuenta al plantear el problema.
- Proceso: Operaciones a realizar con los datos conocidos.
- Información resultante: Es la información que resuelve el problema.
Luego de hacer el análisis del problema. Podemos utilizar el diagrama de flujo, una forma gráfica  para representar la solución del problema, de esta manera se nos hace más fácil después pasarlo código de cualquier lenguaje de programación.    

diagrama de flujo

diagrama de flujo calculo sueldo
Utilizando un diagrama resulta más fácil entender la resolución del problema. El diagrama de flujo, claramente nos identifica los datos datos de entrada, las operaciones y los datos de salida.

Los datos de entrada se representa con una figura geométrica llamada paralelogramo. Es opcional quien quiera dibujar un paralelogramo por cada dato ingresado o de lo contrario dibujar el paralelogramo y dentro colocar todos los datos ingresados.

Las operaciones se representan con un rectángulo. Por cada operación debemos dibujar un rectángulo.

Los datos de salida lo representamos con una figura como una hoja rota. Lo mismo, queda a criterio de cada uno representar un dato de salida por cada hoja rota o de lo contrario todos los datos de salida en una sola figura.


- Software para aprender el lenguaje C

Existen varios compiladores para aprender a programar en C. Para Windows, Mac, Linux. Nosotros utilizaremos el compilador Dev C++.  Se puede descargar aquí... 



Descargar manual del compilador Dev-C++...  




-Ejemplo de codificación del diagrama de flujo en lenguaje C



Tener en cuenta que debemos ingresar el caracter "." en lugar del caracter "," si ingresamos un costo por hora con decimales.

Cuando lo ejecutamos se crea el programa ejecutable "programa1.exe" que es el resultado de la compilación del código fuente que escribimos en el editor en el archivo "programa1.c".

Conceptos que deben quedar claros:

1.  Por el momento haremos todo el algoritmo dentro de la función main()

2. Si observamos el diagrama de flujos vemos que debemos definir tres variables: (horasTrabajadas, costoHora, sueldo), aquí es donde debemos definir que tipos de datos se almacenarán en las mismas. La cantidad de horas normalmente será un valor entero (ej. 100 - 150 - 230 etc.), pero el costo de la hora es muy común que sea un valor real (ej. 5.35 - 7.50 etc.) y como el sueldo resulta de multiplicar las horas trabajadas por el costo por hora el mismo deberá ser real.

            La definición de las variables dentro de la función main():
            
            int horasTrabajadas;
            float costoHora;
            float sueldo;

La palabra clave int para definir variables enteras (en C las palabras claves deben ir siempre en minúsculas, sino se produce un error sintáctico). La palabra clave debemos indicar el nombre de la variable, por ejemplo: horasTrabajadas. Se propone que el nombre de la variable comience con minúscula y en caso de estar constituida por dos palabras o más deben ir en mayúsculas el primer caracter (un nombre de variable no puede tener espacios en blanco, empezar con un número, ni tampoco utilizar caracteres especiales).

Debemos buscar siempre nombres de variables que nos indiquen que almacenan (no es conveniente llamar a nombres de variables con letras individuales salvo en casos puntuales).

3.   Mostrar mensajes en la pantalla utilizamos la función "printf":
   
            printf("Ingrese las horas trabajadas por el empleado:");

Con esta sintaxis todo lo que se encuentra contenido entre comillas aparecerá exactamente en la pantalla.
Si necesitamos mostrar el contenido de una variable debemos disponer el carácter  %f si mostramos una variable float o %i si mostramos una variable int (luego de la cadena a mostrar disponemos separado por coma la variable a mostrar):
printf("%f",sueldo);

4.   Para hacer la entrada de datos por teclado en C debemos utilizar la función "scanf"

    scanf("%i",&horasTrabajadas);

La función scanf tiene un primer parámetro entre comillas dobles y dentro el caracter % y la letra i si se carga un entero y la letra f si se carga un float.

El segundo parámetro es el nombre de la variable a cargar antecedida por el caracter &.

5.  Las operaciones que indicamos en el diagrama de flujo mediante la figura rectángulo la codificamos
   
sueldo = horasTrabajadas * costoHora;



6. Por ahora, veremos que siempre nuestro programa finaliza llamando a la función getch() (detiene la ejecución del programa hasta que se presiona una tecla) y la instrucción return 0 (le avisa al sistema operativo que el programa finalizó correctamente):

             getchar();
             return 0;





No hay comentarios:

Publicar un comentario