Documente Academic
Documente Profesional
Documente Cultură
Energtica computacional
5 Semestre
Divisin de Ciencias de la Salud, Biolgicas y Ambientales | Ingeniera en Energas Renovables 1
Energtica computacional
Unidad 1. Introduccin al lenguaje de
programacin C
ndice
Presentacin de la unidad
Esta unidad comprende una amplia variedad de temas que van desde el conocimiento
bsico de programacin, hasta la aplicacin del lenguaje de programacin C para
resolver problemas aplicados a energas renovables.
Propsitos
Competencia especfica
Foro de dudas
1.1. Algoritmos
Las computadoras estn hechas para comunicarse en cdigo digital binario, que se
expresa basndose en ceros y unos. A este cdigo se le llama lenguaje mquina o
lenguaje de bajo nivel. Para efectuar la traduccin del lenguaje humano al lenguaje
mquina, se usan otros programas llamados compiladores, los cuales, adems, ayudan a
corregir errores y a enlazar las diferentes partes de un programa en un todo ejecutable.
Es por esto que los programas estn comprometidos entre esa doble legibilidad: los
programas tienden a parecerse a los lenguajes naturales para mayor comprensin de las
personas y, adems, deben tener una estructura simple para poder ser traducida a
lenguaje mquina.
Para entender bien un algoritmo hay que realizarlo y ejecutarlo;
por consiguiente, la estrategia recomendada para comprender los
programas () es implementarlos y probarlos, experimentar con
variantes y tratar de aplicarlos a problemas reales. (Sedgewick,
1995).
En la cita anterior, se indica que hay que implementar el algoritmo y probarlo, para
despus experimentar variantes en sus parmetros y, finalmente, aplicarlos a problemas
reales. Esta secuencia es la que debers seguir para entender de programacin y la que
mejores resultados te dar.
El algoritmo consiste en explicar brevemente cada una de las actividades que deseas que
el programa realice. Para esto, se parte de una situacin inicial hacia una situacin final
deseada. En general, son listas de instrucciones para solucionar un problema que pueden
ser expresadas en lenguaje natural, pseudocdigo o diagramas de flujo. Su objetivo es
simplificar la lgica matemtica a un nivel que pueda ser comprendido por todos.
En la vida cotidiana, los algoritmos se usan para elaborar los manuales de usuario, por
ejemplo. En dichos manuales, se te dan instrucciones precisas y breves referentes al uso
correcto del dispositivo, as como su armado y puesta en funcionamiento. Se usan,
adems, para calcular el resultado de una operacin matemtica. Por ejemplo, en la
solucin de una divisin, donde sigues instrucciones precisas para obtener el resultado.
Para saber ms
Gracias a los trabajos de Kurt Gdel, Alonzo Church y Alan Turing se conoce que
slo una pequea parte de los problemas es posible resolverla mediante un
programa de computadora. Para saber ms, lee el documento de Gdel K.
(1980). Sobre proposiciones formalmente indecidibles de los Principia
Mathematica y sistemas afines, sealado en las fuentes de consulta.
Ahora bien, para la realizacin de un algoritmo deben definirse los siguientes elementos:
situacin inicial, proceso y situacin final, como se muestra enseguida:
Para elaborar un algoritmo, primeramente, debes hacer una lista de tareas, indicar su
secuencia en el tiempo y cmo se va a ejecutar por la computadora.
Comprender el problema
Declarar las variables
Establecer la situacin inicial
Ejemplo
1.- Estacionar el auto convenientemente (uso del freno de mano y/o tal vez una piedra
o ladrillo).
2.- Buscar y seleccionar la herramienta adecuada (gato, llave de cruz, llanta de
repuesto).
3.- Usar el gato, colocndolo en la posicin justa para levantar la llanta averiada.
4.- Aflojar los birlos (tornillos con que se sujeta la llanta).
5.- Quitar la llanta averiada y colocar, en su lugar, la llanta nueva.
6.- Poner los birlos nuevamente, apretndolos convenientemente.
7.- Bajar y retirar el gato.
8.- Quitar los obstculos que se pusieron para frenar el auto. Y retirarse.
Representa este algoritmo todas las tareas para la solucin perfecta del problema
anterior? Cmo podras mejorarlo? Identificas las condiciones iniciales y la condicin
final?
Las bases de la programacin estructurada las defini Niklaus E. Wirth, sealando que
cualquier problema algortmico puede resolverse usando solo tres tipos de estructuras:
Para saber ms
Para saber ms, se te recomienda leer Wirth, Niklaus E. (1985). Algorithms and
Data Structures y Wirth, Niklaus E. (1971). Program Development by Stepwise
Refinement, ya que son importantes para tu formacin profesional, ambos se
encuentran en la seccin Material de apoyo.
Ahora, resolveremos algunos problemas matemticos en los cuales est involucrada una
o varias frmulas que te ayudarn a obtener una solucin correcta.
Ejemplo
Para realizar un algoritmo que sume dos nmeros, podras seguir estos pasos,
dependiendo de las condiciones iniciales.
1.- Introducir por teclado los nmeros a sumar. Aqu debers de poner atencin en el
tipo de nmeros que vas a manejar enteros o flotantes- y como podras considerar
que tu programa contempla sumar cualquier par de nmeros, entonces debes
incluirlos en unas variables, por ejemplo NUMERO1 y NUMERO2.
2.- Indicar al programa qu tipo de operacin matemtica vas a usar: en este caso,
suma se indica por la cruz +.
Ahora bien, existen diversas tcnicas o sistemas para programar, la tcnica que se
estudiar en esta unidad es llamada diseo descendente o top down, que significa que
se dividir el problema en subproblemas menores.
Cuando se desarrolla un programa muy grande, una gran parte
del esfuerzo se destina a comprender y definir el problema a
resolver, analizar su complejidad y descomponerlo en
subprogramas ms pequeos que puedan realizarse fcilmente.
(Sedgewick, 1995)
Segn indica Gregorio Martn Quetgls (2003), la tcnica top down consta de los
siguientes pasos:
de sencillez en los problemas que se nos plantean que sea trivial
su codificacin en un lenguaje. La habilidad de abstraer
subproblemas que sean independientes entre s, es clave en este
Igual que en las anteriores citas, se espera que consultes el libro mencionado y que
tipo de diseo... (Quetgls, 2003).
profundices en los temas tratados.
El autor sugiere que, adems de usar esta estrategia, se use la modularidad, que consiste
en la unin de un conjunto de subprogramas articulados por un mdulo que funciona
como control.
Disear el algoritmo
Dibujar el diagrama de flujo
Correr manualmente el algoritmo (corrida de escritorio)
Codificar el algoritmo en lenguaje de programacin C
Compilarlo
Ejecutarlo
Verificarlo y depurarlo de errores.
Todo programa deber ser documentado, es decir, debes escribir comentarios en las
lneas que, a tu criterio, sean ms importantes, para que te sea fcil, posteriormente,
actualizar tu programa. Para documentarlos, debers escribir al inicio del comentario el
signo diagonal y asterisco: /* y para finalizarlo usars el asterisco y signo diagonal: */.
Garca Snchez (2004), dice que para resolver problemas de programacin se deben
seguir seis etapas: anlisis, diseo, codificacin, pruebas, validacin y optimizacin.
Paso 1. Anlisis de requisitos. Indica especificacin de requisitos
del cliente: cules son las entradas del programa?, qu salida
debe producir el programa?, qu pasos son necesarios para poder
procesar la entrada hasta llegar a la salida?
Paso 6. Optimizacin del programa. Estudiar si se puede mejorar la
solucin adoptada. Garca Snchez, (2004).
El anlisis de algoritmos del paso 2, busca descubrir si stos son o no eficaces y
establece una comparacin entre ellos con el fin de conocer cul es el ms eficiente.
Para saber ms
Para saber ms sobre las seis etapas para resolver problemas de programacin e
consulta el libro de Garca Snchez, (2004). Problemas resueltos de programacin
en lenguaje C, sealado en las fuentes de consulta.
Actividades
Para ayudarte a considerar todos los casos que debe incluir el programa, existe una
herramienta visual muy valiosa: los diagramas de flujo, sobre los cuales encontrars ms
informacin en Introduccin a los diagramas de flujo por Pablo Augusto Sznajdleder, dicho
documento se encuentra sealado en las fuentes de consulta. Para saber ms, se te
sugiere leerlo, ya que muestra, adems, una pequea introduccin a la programacin con
pseudocdigo.
Para saber ms
Para saber ms, se te sugiere leer el texto de Sznajdleder. (s/d). Introduccin a los
diagramas de flujo, ya que muestra, adems, una pequea introduccin a la
programacin con pseudocdigo.
Todos los diagramas de flujo tienen que iniciar con un smbolo de inicio y finalizar
con un smbolo de fin.
Los smbolos de los diagramas de flujo debers dibujarlos de arriba hacia abajo, y
de izquierda a derecha.
Los smbolos dibujados los unimos con lneas, las cuales tienen una punta de
flecha que indica la direccin en que fluye la informacin.
Evita el cruce de lneas, si quieres enviar el flujo a otro sitio, usa conectores.
Todas las lneas de flujo deben estar conectadas.
Los textos escritos dentro de un smbolo deben ser precisos y breves.
Inicio
La lmpara no
funciona
Est No
enchufada? Enchufarla
Si
Est Remplazar el
quemado?
Si foco
No
Comprar nueva
lmpara
Fin
Actividades
1.3. Lenguaje C
El lenguaje C es un lenguaje de alto nivel muy completo, el cual sirve como herramienta
para hacer programas con el propsito de controlar una o varias variables de un proceso
relacionado con energas renovables.
El lenguaje C es una mejora del lenguaje B y fue inventado en 1972 por Dennis M. Ritchie
en los Laboratorios Bell. Este lenguaje puede mezclar cdigo ensamblador con lenguaje
C. El cdigo ensamblador permite controlar los puertos de la computadora, lo cual es muy
importante para la adquisicin de datos y el control de las variables fsicas. Este cdigo se
llama tambin lenguaje mquina y consta de lenguaje digital binario (unos y ceros).
http://cm.bell-labs.com/cm/cs/who/dmr/chist.pdf
Para que puedas disear programas en un lenguaje de alto nivel, se requiere de palabras
reservadas, que quiere decir que el programador no puede asignarles otro significado
diferente al original. Por ejemplo, int es una palabra reservada para indicar tipo de dato
entero. El lenguaje C tiene algunas otras palabras reservadas, por ejemplo: auto, break,
case, char, const, continue, default, do, double, else, enum, extern, float, for goto, if, int,
long, register, restrict, return, short, signed sizeof, static, struct, switch, typedef, union,
unsigned, void, volatile y while.
Algunas palabras estn reservadas para C y no se pueden utilizar
como nombres de variables. Estas palabras son utilizadas por el
compilador para controlar el programa. (Liberty, 2001).
Para saber ms
Actividades
scanf (%f, &m); /* El smbolo ampersand (&) significa asignacin de un valor ledo
de teclado a la variable m */
La instruccin printf, en general, se usa para visualizar en pantalla los valores indicados.
Una combinacin de instrucciones de lectura y escritura sera as:
Debemos escribir, primero, las directivas al preprocesador, las cuales se distinguen por
llevar el smbolo # e indican las rdenes que se le dan a un programa que invoca el
compilador antes que comience su trabajo. Es decir, el preprocesador analiza el archivo
fuente antes de la fase de compilacin. El preprocesador es una parte del compilador, un
programa, que se ejecuta en primer lugar.
#include <stdio.h>
#define PI 3.1416
La primera lnea significa incluya la librera stdio.h (acrnimo de standard input output,
entradas y salidas estndar) la extensin punto h quiere decir encabezado header.
Este paso se llama inclusin de libreras.
El siguiente rengln significa que definimos la constante PI y que, cada vez que se
quiera poner su valor 3.1416, se puede abreviar como PI. Este paso se llama definicin de
constantes, en el cual se pueden definir todas las constantes que se requieran.
biblioteca.
<fenv.h> Para controlar entornos en coma flotante (nuevo en C99).
<float.h> Contiene la definicin de constantes que especifican ciertas
propiedades de la biblioteca de coma flotante, como la diferencia
mnima entre dos nmeros en coma flotante (_EPSOLON), el
nmero mximo de dgitos de precisin (_DIG), o el rango de
valores que se pueden representar (_MIN, _MAX).
<inttypes.h> Para operaciones de conversin con precisin entre tipos enteros
(nuevo en C99).
<iso646.h> Para utilizar los conjuntos de caracteres ISO 646 (nuevo en
NA1).
<limits.h> Contiene la definicin de constantes que especifican ciertas
propiedades de los tipos enteros, como rango de valores que se
pueden representar (_MIN, _MAX).
<locale.h> Para la funcin setlocale() y las constantes relacionadas. Se
utiliza para seleccionar el entorno local apropiado (configuracin
regional).
<math.h> Contiene las funciones matemticas comunes.
<setjmp.h> Declara las macros setjmp y longjmp para proporcionar saltos de
flujo de control de programa no locales.
<signal.h> Para controlar algunas situaciones excepcionales, como la
divisin por cero.
<stdarg.h> Posibilita el acceso a una cantidad variable de argumentos
pasados a una funcin.
<stdbool.h> Para el tipo booleano (nuevo en C99).
<stdint.h> Para definir varios tipos enteros (nuevo en C99).
<stddef.h> Para definir varios tipos de macros de utilidad.
<stdio.h> Proporciona el ncleo de las capacidades de entrada/salida del
lenguaje C (incluye la venerable funcin printf).
<stdlib.h> Para realizar ciertas operaciones como conversin de tipos,
generacin de nmeros pseudo-aleatorios, gestin de memoria
dinmica, control de procesos, funciones de entorno, de
sealizacin (??), de ordenacin y bsqueda.
<string.h> Para manipulacin de cadenas de caracteres.
<tgmath.h> Contiene funcionalidades matemticas de tipo genrico (type-
generic) (nuevo en C99).
<time.h> Para tratamiento y conversin entre formatos de fecha y hora.
<wchar.h> Para manipular flujos de datos anchos y varias clases de
int x, y, SUMA;
Que significa que se usarn las variables x, y y SUMA y que stas son variables
enteras. Para separar una instruccin de otra se usa el punto y coma ;
double 8 Doble.
Estndar internacional del lenguaje de programacin C.
int main ( )
El argumento indica los valores que se usan en la funcin. Por ejemplo, en una funcin
que se llama suma, los argumentos son los sumandos (datos expresados como
variables), suma (2,3) que suma 2 + 3.
Si x son las horas trabajadas por jornada, las horas extras seran contabilizadas as:
if x>8
else
La instruccin escriba en pantalla PagoNormal indica que no hay horas extras. Cuando
exista ms de una instruccin, entonces stas se encerrarn entre llaves. La diagonal
invertida ene (\n) significa que se debe pasar un rengln despus de escribir los
caracteres que anteceden. Observa, tambin, la sangra, que se agrega para leer con
claridad el cdigo.
Operadores de comparacin.
Operador Significado
== Igual a.
!= Distinto de.
Estndar internacional del lenguaje de programacin C.
Los operadores && ("y"), || ("o") y ! ("no") son operadores lgicos, que se usan de esta
manera:
if ((x>0) && (x<16)) /* indica que la variable x adopta un valor entre cero y diecisis */
#include <stdio.h>
#include <stdlib.h> /* inclusin de dos libreras */
printf (no hay de ese sabor); /*esta instruccin es ejecutada cuando todos
los bloques son falsos, es decir, si se escribe un sabor que no esta
contemplado en ningn bloque, por ejemplo lima */
return ;
} /*fin de llaves de la funcin main */
Funciona as: con anterioridad se pregunta al usuario cul sabor prefiere? Y ste
introduce por teclado el sabor de su eleccin y se asigna a la variable sabor. El
programa muestra en pantalla una caracterstica del sabor elegido.
/* Cdigo o instrucciones*/
}
Ejemplo
Se observa que una variable puede declararse e inicializarse al mismo tiempo. Tambin,
que para mostrar en pantalla una lista de valores que adquiere una variable (en este caso
i) se usa printf(%d , i) y, finalmente, que para que se escriban los nmeros en columna
se usa el smbolo de diagonal invertida ene \n.
A este grupo tambin pertenecen las instrucciones para contadores, las cuales tienen la
siguiente sintaxis:
El valor de inicio indica desde qu valor va a empezar a contar. La condicin indica hasta
qu nmero va a contar. x<=11 dice que hasta 11, incluyendo el 11. El incremento
muestra el salto que tendr el valor de inicio, por ejemplo x = x + 1, indica que saltar de
uno en uno. Si quiero que salte de dos en dos, escribo x = x + 2.
#include<stdio.h>
#include<conio.h> /* librera de entradas y salidas (io) por consola */
void main()
{
clrscr(); /* clear screen, borra la pantalla */
int X; /* La variable a incrementar es x , es tipo entero */
for(X=1; X<=11; X=X+1) /*Valor de inicio; Condicin; Incremento */
printf(" %d \n", X);}
getche();
}
Al igual que las variables, las funciones deben ser declaradas, as:
Ejemplo
Ente las llaves se escriben las sentencias que debe ejecutar la funcin.
Si se trata del caso que no retorna nada, entonces se escribe solamente: return;
Las funciones se usan para retornar un valor, por ejemplo, el cuadrado de un nmero, la
suma total de los sumandos, etc. Y este valor de retorno se almacena en una variable.
Ejemplo
1 + (rand () % 6);
La librera <math.h> permite usar funciones matemticas como raz cuadrada, potencias,
logaritmos, funciones trigonomtricas: seno, coseno; exponencial, redondeos, entre otras.
stas te servirn al disear programas que incluyan estas funciones, en la unidad dos.
Ejemplo
De procedimiento:
Ejemplo
De programa que calcula la integral definida de una funcin f() entre dos puntos que
son los lmites inferior y superior de la funcin. Se te sugiere insertar comentarios en
todas sus lneas.
#include <stdio.h>
float f (float x) ;
float integrar (float, float, float);
int main ( )
{
float lim_inf,lim_sup, inc;
printf(clculo de una integral definida\n);
printf(------------------------------------------------\n\n);
printf (introduzca lmite inferior: );
scanf(%f,&lim_inf);
do
{
printf(introduzca el lmite superior: );
scanf(%f, &lim_sup);
}
while (lim_sup < liminf);
do
{
printf(introduzca el incremento: );
scanf(%f, &inc);
}
while (inc <= 0);
return 0;
}
float f(float x)
{
return 2 * x;
float integrar (float liminf, float lim_sup, float inc)
{
float integral, x;
x = lim_inf;
integral = 0.0;
Para facilitar la tarea de programacin existen los IDE (Entorno de Desarrollo Integrado)
que incluye un compilador, un depurador y otras herramientas. El Bloodshed Dev-C++, es
un entorno de desarrollo de libre multiplataforma. Tal entorno fue abandonado y
retomado, y su versin mejorada se llama WxDev-C++. Otro entorno libre es el
Code::Blocks y el NetBeans.
Se sugiere que descargues el programa DIA, programa para hacer diagramas de flujo y
que te servir en tus actividades.
Autorreflexiones
Como parte de cada unidad, es importante que leas los cuestionamientos que formul tu
docente en lnea, ya que a partir de ellos debes elaborar t Autorreflexin y enviarla
mediante la herramienta Autorreflexiones. No olvides que tambin se toman en cuenta
para la calificacin final.
Cierre de la unidad
Bien hecho
Para saber ms
http://leo.worldonline.es/rodolfov/
http://galeon.hispavista.com/ultimopunto/
Fuentes de consulta