elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tutorial C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial C  (Leído 26,789 veces)
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Tutorial C
« en: 20 Abril 2010, 04:07 am »

Bueno, me animaron a hacer un mini-tutorial sobre el lenguaje de programación C.  ;-)

Primero decir, está pensado para novatos en programación pero con algo de conocimientos informáticos, tanto Windows (Al que me gusta llamar winnoobs o windrugs) y tanto GNU/Linux,

También voy a trabajar en 2 plataformas, PC y Arduino. Intentaré poner ejemplos con código, y explicar todo lo mejor posible.

Tened en cuenta de que yo aprendo C poco a poco, pondré cosas adecuadas a mi nivel, claro.



Índice de temas

    1. Intro ()
    2. Teoría programas y pseudocódigo ()
    3. Inicios con Arduino ()
    4. Compilando nuestro 1º programa ()
    5. Sintaxis básica de C ()
    6. stdio.h y PWM ()
    7. Variables y tipos de datos ()
    8. Funciones y programas modulares ()
    9. Estructuras de control: if - else ()

Software

    Compiladores

        GCC: http://gcc.gnu.org/
        Dev C++: http://www.bloodshed.net/devcpp.html
        Borland C++: https://downloads.embarcadero.com/free/c_builder (NO aconsejo su uso, pues no es Libre)
        Arduino: http://www.arduino.cc/en/Main/Software (Solo para Hardware Arduino)

    Editores texto

        Gedit: http://projects.gnome.org/gedit/
        Notepad++: http://notepad-plus.sourceforge.net/es/site.htm

    Sistemas

        GNewSense: http://www.gnewsense.org/ (Basado en Ubuntu, 100% Libre)
        CentOS: http://www.centos.org/modules/tinycontent/index.php?id=15 (Basado en Red Hat)

    IDE's

        Geany: http://www.geany.org/
        Codeblocks: http://www.codeblocks.org/


1. Intro

C es un lenguaje de programación, orientado a la implementación de Sistemas operativos, creado en el año 1972. Es un lenguaje de Nivel medio, aunque muchas de las características que posee es el trabajo a Bajo Nivel.



Propiedades

    * Un núcleo del lenguaje simple, con funcionalidades añadidas importantes, como funciones matemáticas y de manejo de archivos, proporcionadas por bibliotecas.
    * Es un lenguaje muy flexible que permite programar con múltiples estilos. Uno de los más empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura).
    * Un sistema de tipos que impide operaciones sin sentido.
    * Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir múltiples archivos de código fuente.
    * Acceso a memoria de bajo nivel mediante el uso de punteros.
    * Interrupciones al procesador con uniones.
    * Un conjunto reducido de palabras clave.
    * Por defecto, el paso de parámetros a una función se realiza por valor. El paso por referencia se consigue pasando explícitamente a las funciones las direcciones de memoria de dichos parámetros.
    * Punteros a funciones y variables estáticas, que permiten una forma rudimentaria de encapsulado y polimorfismo.
    * Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una única variable "empleado").

Carencias


    * Recolección de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm.
    * Soporte para programación orientada a objetos, aunque la implementación original de C++ fue un preprocesador que traducía código fuente de C++ a C.
    * Encapsulación.
    * Funciones anidadas, aunque GCC tiene esta característica como extensión.
    * Polimorfismo en tiempo de código en forma de sobrecarga, sobrecarga de operadores y sólo dispone de un soporte rudimentario para la programación genérica.
    * Soporte nativo para programación multihilo y redes de computadores.

Fuente: WikiPedia



Es un lenguaje portable, pues puede ser compilado tango en GNU/Linux, como en Windows y en Mac, además de ser bastante adecuado para desarrollo de aplicaciones para plataformas como Arduino.



Compiladores

Compilador para GNU/Linux: GCC (Recomendable usar con Geany)
Compilador Windows DevC, Borland
Compilador Mac: (Por favor, envíenme el nombre del algún buen compilador)
Compilador Arduino: Arduino



Hi World

Hi world es el primer programa que se suele crear el empezar a programar. A continuación voy a exponer 2 ejemplos, uno clásico para GCC, otro para Borland y otro para Arduino. La explicación entrará a partir de la 2ª entrega del tutorial, pues esto solo es para familiarizarse con el código.

GCC:
Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6.        printf("Hola Mundo\n");
  7.        return 0;
  8. }
  9.  

Borland:
Código
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main(void)
  6. {
  7.        printf("Hola mundo\n");
  8.        system("pause");
  9.        return 0;
  10. }
  11.  
  12.  

Arduino;

En esta plataforma el Hola mundo típico no es un mensaje, si no hacer parpadear un Led. Por lo tanto, conectamos un Led en el puerto digital 13 de nuestro Arduino (Duemilanove) (Recuerden, polo positivo) Este puerto cuenta con una resistencia propia, por lo que no fundiremos el Led.

Código
  1.  
  2. int ledPin =  13;
  3.  
  4. void setup()  
  5. {                
  6.  pinMode(ledPin, OUTPUT);    
  7. }
  8.  
  9. void loop()                    
  10. {
  11.  digitalWrite(ledPin, HIGH);
  12.  delay(1000);                  
  13.  digitalWrite(ledPin, LOW);    
  14.  delay(1000);              
  15. }
  16.  
  17.  
Fuente: Arduino



Las explicaciones de la sintaxis y el funcionamiento, en la siguiente entrega, saludos.



Referencias:

GCC: http://es.wikipedia.org/wiki/Gcc
Borland: http://es.wikipedia.org/wiki/C%2B%2BBuilder
Arduino: http://es.wikipedia.org/wiki/Arduino





2. Teoría programas y pseudocódigo

Ya vimos una pequeña introducción al Lenguaje C, ahora toca empezar con la teoría. En este capítulo voy a hacer una breve introducción al Pseudocódigo (Vital) y a la teoría de los programas, osea, el modo que tienen de funcionar de forma estándar.



Pseudocódigo


El pseudo (Lo voy a abreviar así a partir de ahora) es una forma de describir un algoritmo, con lenguaje natural (Osea, explicar, por ejemplo, el funcionamiento de un programa, de una forma exacta, con una descripción de todo lo que vaya a hacer, de una forma que cualquier otra persona lo pueda entender)

No existe una referencia exacta del pseudo, pues cada programador acaba usando el "lenguaje" que mas le conviene.

Un ejemplo aplicado a la vida real es:

Código:
Inicio
     enciendo el PC
     carga el sistema operativo
     introduzco mis datos de inicio de sesión
          si la contraseña en verdadera, entro al sistema
          si la contraseña es falsa, vuelve a pedir datos
     abro un programa
Fin
* Los algoritmos (Aplicados al pseudo) deben de ser claros y concisos, y deben ser finitos.

Existen varios tipos de pseudo, varias formas de clasificarlo, eso lo explicaré en el siguiente post.

¿Para qué sirve el pseudo?

Normalmente, antes de escribir un buen programa, suele ser necesario plantearlo antes sobre un cuaderno, escribiéndolo en pseudo, así a la hora de escribir el programa en el PC, te será mas sencillo, lo tendrás todo mas organizado y probablemente será mas eficiente.



Programas

A la hora de escribir un programa seguimos unas pautas, y es necesario mencionar lo más básico, la E/S (Entrada/Salida)

Cuando ejecutamos un programa, queremos obtener, generalmente, un resultado a partir d euna entrada.

Por ejemplo, queremos obtener el resultado de una multiplicación. Tenemos datos de entrada, por ejemplo, 5 y 5.

Entrada = 5, 5

Los queremos procesar, eso es la multiplicación

Proceso= *

Resultado = 5 * 5

Ya tenemos hecha la operación, los datos de salida son iguales al procesamiento de los datos de entrada.

Resultado=5*5

salida = procesamiento de la entrada



Esto lo vamos a usar en el siguiente capítulo, por ahora, es una buena base para continuar.




3. Inicios con Arduino


Una buena forma de practicar el lenguaje C es con Arduino, pero antes debemos saber qué es, para qué se usa. También decir que conseguirlo puede ser algo complicado, pero no imposible.

¿Qué es Arduino?

(WikiPedia) Arduino es una plataforma de hardware libre basada en una sencilla placa de entradas y salidas simple y un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador (por ejemplo: Macromedia Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.

Las plataformas Arduino están basadas en los microcontroladores Atmega168, Atmega328, Atmega1280, ATmega8 y otros similares, chips sencillos y de bajo coste que permiten el desarrollo de múltiples diseños.

Al ser open-hardware, tanto su diseño como su distribución es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia.




Arduino es programable en C, gracias al compilador que se puede descargar desde la página oficial. La sintaxis del lenguaje cambia un poco, pero se usa de igual forma que un ordenador.

¿Para qué se usa?

En mi caso, para aprender algo de electrónica y aplicar la programación. En cuanto a la placa, el único límite es tu capacidad de programación: Puedes pasar de iluminar Led's a controlar robots autonómicos, por eso veo interesante integrar el uso de Arduino al manual de C.



Página Arduino: http://www.arduino.cc/es/
Referencia lenguaje: http://arduino.cc/en/Reference/Extended
Descarga compilador (Multiplataforma): http://arduino.cc/en/Main/Software



Ejecutando el programa BLINK en mi Arduino


(Código fuente en post 5)




4. Compilando nuestro 1º programa

Una vez sabemos algo de pseudocódigo (Poco, muy poco, pero lo justo para aplicarlo a Hi worlds) llega la hora de compilar nuestros primero programas. Para ello es importante saber como el el proceso de creación de software, como es la compilación y como es la ejecución. Así mismo, debemos de ser capaces de observar nuestro código (Para lo cual es esencial que esté bien presentable), dejar comentarios para tratar de ayudar a cualquier otro programador, o para dejarnos notas a nosotros mismos, y de corregir los errores que nos muestre el compilador o que detectemos nosotros mismos.

Para esta primera práctica voy a usar el compilador libre de GNU, GCC, bajo el Sistema Operativo GNU/Linux Ubuntu 9.10.



   A. Análisis de requisitos

Es importante saber que a la hora de programar no solo es importante el Ordenador, si no que antes debemos plantear lo que queremos, para tenerlo claro a la hora de escribir nuestros programas. Realmente, en programas pequeños como el que vamos a hacer aquí no es necesario pues no son complejos, pero a la hora de hacer programas mas grandes con mas funciones, es aconsejable plantear todo en un folio, y tener las ideas bien claras.

Como 1º ejemplo, vamos a hacer el programa Hi World (Hola mundo), pues es lo primero que se suele hacer al aprender cualquier lenguaje de programación.

El pseudocódigo de este es bastante sencillo, teniendo en cuenta de que debemos tener siempre un principio, un fin, y debe de ser corto y conciso.

Código:
Inicio
   Declaro librerías
   Declaro función principal
   Imprimo mensaje
   Retorno salida
Fin.

Eso sería un pseudocódigo (Bastante exagerado) de un Hi world. Pero normalmente, se suele escribir con la misma sintaxis que usa un lenguaje de programación, para facilitar su lectura, así que:

Código:
Inicio
   Declaro librerías
   Función principal()
   {
      Imprimo mensaje;
      Retorno salida;
   }
Fin.

Así es mas entendible a ojos de cualquier programador, sobretodo cuando el pseudo se complica. La sintaxis de C estará expuesta en alguno de los siguientes post.

   B. Escritura del programa

Trabajando con GNU/Linux Ubuntu, vamos a usar el editor de texto plano Gedit (http://projects.gnome.org/gedit/)

Imagen: http://i39.tinypic.com/qq8q4x.png

Vamos a dividir el programa en 2 Partes: Declaración de librerías y función principal (Evidentemente a medida que que nuestros programas crezcan, las partes crecerán)

Debemos indicar al compilador (En nuestro caso GCC) las librerías donde están declaradas las funciones que vamos a usar. En nuestro caso vamos a usar la llamada stdio.h (Standard In/Out, E/S Estándar) con la cual podremos usar una función llamada printf, la cual se usa para imprimir datos en la pantalla.

Otro dato, las lineas de texto de este estilo " //comentario " " /* comentario de varias lineas */" como bien indico son comentarios, no son procesados por el compilador, y son necesarios para comentar distintas partes del programa.

Código
  1.  
  2. #include <stdio.h> //Declaramos las librerías necesarias
  3.  
  4. int main() //Función principal del programa
  5. {
  6.    printf("Hola mundo\n"); //Imprimo el mensaje
  7.    return 0; // Retorno sin errores
  8. }
  9.  
  10.  

Como veis, es parecido al pseudocódigo. En el siguiente post empezaré a explicar la sintaxis básica de C, por ahora nos basta con saber como escribir y compilar programas. Una vez escrito esto en gedit, procedemos a guardar el archivo como "algo.c" Evidentemente, lo podéis dar el nombre que queráis, siempre que la extensión sea .c (o .cpp para C++)

Imagen: http://i44.tinypic.com/14v4pe9.png

   C. Compilación

Una vez hemos guardado el código de nuestro programa, llega la hora de ejecutarlo. Para esto necesitamos el ya mencionado GCC. En primer lugar, debemos abrir un terminal. Una vez abierto, debemos dirigirnos al directorio donde esté guardado nuestro código (Por ejemplo, en caso de estar guardado en /home/pepe/Escritorio , introducimos la orden cd /home/pepe/Escritorio).

Una vez estamos (Podemos comprobar el directorio activo con la orden "pwd") debemos invocar a GCC, pasándole a la vez el nombre de nuestro archivo con el código, para que este sea compilado. La forma de hacerlo es bastante sencilla, en nuestro caso: gcc algo.c (Si le has puesto otro nombre, evidentemente, escribe el nombre que le has puesto)

Imagen: http://i40.tinypic.com/28tg7l3.png

Como podemos ver, GCC no nos ha devuelto ningún error. En caso de hacerlo, nos devolvería algo parecido a esto (Dependiendo del error)

Imagen: http://i39.tinypic.com/vmxhlx.png

Como el compilador indica, tenemos un fallo en la función principal (main), pues se nos olvido poner ; justo antes de return. Esto ya lo estudiaremos en la parte de sintaxis, por ahora solo quiero mostrar la forma de los errores.

Una vez tenemos compilador el código sin errores, GCC nos genera automáticamente un archivo "a.out" en el mismo directorio donde tenemos el código. Solo debemos invocar el archivo desde la consola, con el comando " ./a.out " (En el caso de que se encuentre en otro directorio, basta con ./directorio/a.out)

Como vemos, nos muestra la impresión que hicimos en nuestro programa:

Imagen: http://i43.tinypic.com/k51v5y.png



Ya hemos creado y compilado nuestro primer programa, así mismo, sabemos que forma tienen los mensaje de error al compilar códigos incorrectos bajo GCC. El procedimiento es muy similar en otros compiladores y en otros sistemas, una de las razones por las que C es tan portable.

En el próximo post, sintaxis básica de C.


5. Sintaxis básica de C

Ya conocemos la mecánica esencial de como compilar un programa sencillo. Ahora debemos ser capaces de entender línea a línea lo que hace el programa.



Vamos a analizar y explicar, línea a línea un ejemplo de Hi world en C, y un ejemplo de Blink para Arduino.

   C:
Código
  1. #include <stdio.h> //Declaramos las librerías necesarias
  2.  
  3. int main() //Función principal del programa
  4. {
  5.    printf("Hola mundo\n"); //Imprimo el mensaje
  6.    return 0; // Retorno sin errores
  7. }
  8.  
  9.  

Estructura básica de un programa:
1 Declaración de librerías y constantes
2 Prototipos de función (Lo explicaré mas adelante)
3 Función principal del programa
4 Funciones o procedimientos (Lo explicaré mas adelante)
Librería:(Wiki) En ciencias de la computación, una biblioteca (o librería) es un conjunto de subprogramas utilizados para desarrollar software. Las bibliotecas contienen código y datos, que proporcionan servicios a programas independientes, es decir, pasan a formar parte de éstos.

La librería que usamos en nuestro programa, stdio.h, nos proporciona funciones ÉStandar de entrada y salida de datos.

int main: Es la función principal de nuestro programa. Los programas siempre tienen una función como mínimo, que esta. Al empezar la ejecución del programa, se ejecutarán todo lo que esté dentro de ella.

{ y } : Entre corchetes va el código dentro de las funciones, es importante mantenerlo semrpe alineado para mantener una buena presentación

printf("...");: printf es una rutina declarada dentro de stdio.h, que se encarga de mostrar una cadena con formato a través de la pantalla. la cadena se define entre (" y ").

; (punto y coma): se usa para indicar que se ha terminado de usar una función (por ejemplo, printf("Hola mundo"); )

El \n que está dentro de printf, indica que hacemos un salto de línea. Si pusiéramos "\n\n",  hacemos 2 saltos de línea.

Con esto, ya conocemos la forma básica de estructurar nuestros pequeños programas. Como he visto que muchos novatos (Entre los que me incluyo por ahora) no saben poner bien el código, voy a poner algunos consejos sobre como hacerlo mas entendible a los ojos de otros programadores.

Estructura: Es importante organizar los elementos en una forma jerárquica, siendo las librerías y constantes lo mas importante, por lo cual, lo primero en nuestro código.

Código
  1. #include <stdio.h>
  2. #define MAX 1000
  3.  

(#define lo expondré mas adelante)

Después viene el resto del programa, tanto prototipado de funciones, como la función principal y los procedimientos.

Código
  1.  
  2. int protitipo(int a, b);
  3.  
  4. int main(void)
  5. {
  6.    programa();
  7. }
  8.  

Los corchetes, es recomendable mantenerlos alineados, para agrupar bien las funciones dentro de otras funciones o procedimientos. Por ejemplo;

Código
  1. int main(void)
  2. {
  3.    funcion()
  4.    {
  5.         otras_funciones()
  6.    }
  7. }
  8.  

Una de las cosas mas importantes es comentar el código, tanto para recordarnos a nosotros mismos lo que hace cierto procedimiento, o como para indicar errores, u otros datos a otros programadores.

Código
  1. int main()
  2. {
  3. /* Esto es
  4. un comentario
  5. de varias
  6. lineas */
  7.    printf("Hola"); // Esto muestra por pantalla el mensaje "Hola"
  8.    return 0;
  9. }
  10.  

Como vemos, hay 2 tipos de comentarios:

Código
  1. // Comentario de 1 sola línea

Código
  1. /* Comentario de
  2. varias lineas */

   Arduino

El formato de C para Arduino es algo distinto. No tenemos la función principal (main) ni tenemos que declarar (Por ahora) librerías. Veamos el ejemplo;

Código
  1.  
  2. /* Arduino
  3. Código fuente del programa Blink
  4. */
  5.  
  6. int ledPin =  13;    // LED conectado al puerto 13
  7.  
  8. void setup()  
  9. {                
  10.  pinMode(ledPin, OUTPUT);    
  11. }
  12.  
  13. void loop()                    
  14. {
  15.  digitalWrite(ledPin, HIGH);  
  16.  delay(1000);                
  17.  digitalWrite(ledPin, LOW);  
  18.  delay(1000);              
  19. }
  20.  

Como vemos tenemos 2 funciones distintas, setup() y loop(). También tenemos una declaración antes que setup, en la cual, declaramos el puerto que vamos a usar. En nuestro caso, el 13, el cual incluye una resistencia propia, así no tendremos que añadir una al circuito. int, tanto en C para Arduino como en PC, significa que es Entero. Esto lo estudiaremos mas adelante. ledPin es el nombre de la variable (También estudiaremos mas adelante).

Dentro del setup, declaramos los modos para los pines, como los vamos a inicializar. loop es el programa que se ejecutará, tras declarar todo, y en el va el código que deseemos. En nuestro caso diferenciamos 2 funciones distintas, delay y digitalWrite. La función delay, valida también en C estándar, se encarga de "esperar" el tiempo que la indiques dentro de los paréntesis. En nuestro caso, 1 segundo. digitalWrite se encarga de asignar el valor de salida HIGH o el valor de salida LOW (Lo que entendemos como encendido, apagado).

Como podemos suponer, este programa al estar en ejecución, con un led conectado, con el ánodo en el puerto digital de salida 13, hará que nuestro led parpadeé.



En el próximo capítulo aprenderemos a usar algunas funciones básicas de stdio.h y aprenderemos algo de electrónica con Arduino.

6. stdio.h y PWM

Ya es hora de empezar a crear aplicaciones algo mas avanzadas, pues ya sabemos la estructura principal de un programa básico. Voy a explicar algunas funciones la librería stdio.h de C, y el qué es y como usar PWM en nuestro Arduino.



   stdio.h

stdio.h es una librería estándar de C, compatible tanto en sistemas *x (Unix, GNU/Linux,..) como en Windows. SE encarga de operaciones básicas de Entrada/Salida.

Para definirla en nuestro programa, solo necesitamos lo siguiente;

Código
  1. #include <stdio.h>

Y ya podemos usar las funciones que nos ofrece. A continuación, voy a explicar las básicas de entrada y salida, printf y scanf.

printf: Su función es mostrar una cadena con formato. Por ejemplo,

Código
  1. printf("Esto es una cadena");

scanf: Analiza entrada de datos con formato, y carga el resultado en los argumentos. Esto ahora es un poco difícil de entender, si eres nuev@, pero mas adelante cuando explique variables, lo entenderás mejor.

Ejemplo:

Código
  1. scanf("%d", &num);

Esto se encargaría de guardar un entero dentro de una variable llamada "num". El uso de variables y tipos de datos, se dará en el siguiente post.


Ejemplo de printf y scanf:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.    int num_edad =0; //Declaración e inicio de la variable num_edad
  6.    printf("¿Cuántos años tienes?\n"); //Imprimir en pantalla la pregunta
  7.    scanf("%d", &num_edad); //Guardar la respuesta que introduzca el usuario
  8.    printf(" Tienes %d años\n", num_edad); //Imprimir el número guardado en num_edad
  9.    return 0;
  10. }
  11.  

El resultado al compilar desde GCC es el siguiente:
http://i42.tinypic.com/jk97yc.jpg

   PWM En Arduino

(WikiPedia) La modulación por ancho de pulsos (MAP o PWM, siglas del inglés Pulse-Width Modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una sinusoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

En Arduino, tenemos varios puertos PWM, veamos y analicemos el siguiente código:

Código
  1.  
  2. int ledPin = 11;
  3.  
  4. void setup()  
  5. {                
  6.    pinMode(ledPin, OUTPUT);
  7. }
  8.  
  9. void loop()                    
  10. {
  11.    analogWrite(ledPin, 10);
  12.    analogWrite(ledPin, 50);
  13.    analogWrite(ledPin, 150);
  14.    analogWrite(ledPin, 250);
  15. }
  16.  
  17.  

analogWrite es la función que utilizamos para controlar el PWM. Tiene 2 parámetros, (pin, potencia) en Pin, seleccionamos el pin PWM que vamos a usar, y en potencia, un número de 0 a 255. Evidentemente, 255 será la máxima potencia. En el ejemplo, encenderíamos poco a poco un LED si le tuviéramos conectado al puerto 11. Como problema, esto sería bastante difícil de observar, pues se produciría el cambio a gran velocidad. Mas adelante aprenderemos a manejar mejor el PWM.

7. Variables y tipos de datos

Las variables son estructuras de datos, que, al ser 'Variables', pueden cambiar de contenido a lo largo de la ejecución de un programa. Una variable corresponde a un área reservada en la memoria principal del ordenador.

Estas tienen que ser declaradas antes de usarlas. Para declararlas, necesitamos el Tipo, el identificador y el contenido.

Ejemplo:

Código
  1.  
  2. int mi_primera_variable =1;
  3.  
  4.  

Podemos observar el tipo (int, entero) el identificador (El nombre que usaremos para llamar a la variable) y el contenido, en este caso, 1.

Si declaramos la variable de arriba, y la queremos mostrar en un programa, hacemos lo siguiente:

Código
  1. int mi_primera_variable =1;
  2. printf(" El valor de mi primera variable es: %d", mi_primera_variable);
  3.  

Observamos que usamos la función printf, para imprimir cadenas formateadas. Tenemos un texto, y aparece '%d'. Con esto indicamos que vamos a imprimir en esa posición un dato, el cual luego llamamos después de ' ", ', a nuestra variable.

Si tenemos varias variables y las queremos imprimir, podemos hacer así:

Código
  1.  
  2. int variable1 =5;
  3. int variable2 =7;
  4.  
  5. printf("La variable 1 es: %d, y la variable 2 es %d", variable1, variable2);
  6.  
  7.  

Como veis, el %d se sustituye por el contenido de la variable, mostrando este mensaje:

Citar
La variable 1 es: 5, y la variable 2 es 7

Es importante inicializar siempre las variables, para evitar que se comporten de un modo extraño. Inicializar significa que la damos un valor antes de usarlas, generalmente 0. Podemos hacerlo como ya he indicado arriba, o podemos separar la declaración de la incialización.

Código
  1. int variable;  //Esto es la declaración
  2. variable =1;  //Esto es la inicialización
  3.  
  4. int variable2 =1;  //Declaración e inicialización conjunta
  5.  
  6.  

El identificador de la variable (Su nombre, para entendernos) no debe contener caracteres de espacio, ni Ñ's ni símbolos raros. por ejemplo, el identificador 'mi variable' no sería válido. También es importante decir que se distinguen mayúsculas de minúsculas, por lo cual, 'miVariable' no es lo mismo que 'mivariable'... Son 2 variables distintas.

   Tipos de datos:

Cada variable (Y funciones que luego estudiaremos) tienen que tener definido un tipo de datos, para saber el valor que se debe almacenar.

Por ejemplo, int indica que la variable es de tipo Entero (Puede almacenar números enteros, con y sin signo)

Por ejemplo, 1234 es un número entero, adecuado para almacenarlo en una variable tipo int.

También tenemos el tipo char, el cual almacena caracteres (O cadenas como veremos mas adelante).

Para declarar una variable char, hacemos;

Código
  1. char mivariable
  2.  

Hay muchos mas tipos de datos (Double, float, ...) pero por ahora solo vamos a usar estos 2. Aún así, dejo un enlace para quien quiera ir estudiando por su cuenta (Que es lo mejor que podéis hacer, investigar a la hora que leéis y probáis)

8. Funciones y programas modulares

Divide y vencerás. Es importante recordar ese dicho a la hora de ponernos a programar. ¿Por qué? SI tienes un montón de líneas de código en una función, y hay un error, fallará toda la función. Peor, si agrupas el código en varios trozos y los vas llamando cada vez que los necesites, aparte de mejorar el programa visualmente, será mas fácil detectar los fallos, pues fallará solo 1 función y no las demás (Evidentemente, si tienes fallos en distintas funciones, fallan las distintas funciones...)

Por esto es tan importante ejercer la programación modular. Veamos un ejemplo.

Código:
funcionPrincipal
   declaro variable
   variable =leerNum()
   if (variable>5)
        imprimir (La variable es mayor que 5)
   else
        imprimir (La variable es menor que 5)
fin_funcionPrincipal

leerNum
   declaro variable2
   introducir variable2
   devolver variable2 a funcionPrincipal
fin_leerNum

En este pseudocódigo observamos 2 funciones distintas; La principal, que será la 1º en ejecutarse al iniciar el programa, y leerNum, que es una función que hemos definido para leer números.

Cuando queremos usar la función leerNUm, basta con llamarla dentro de nuestro programa. En este caso, asignamos el valor de leerNum a una variable, llama variable. AL ejecutarse leerNUm, esta lee un número introducido por teclado, lo almacena en otra variable (Definida dentro de la función) y luego se la envía a funcionPrincipal. Por lo cual, al hacer variable =leerNum, realmente estamos haciendo el equivalente a variable=variable2.

Esta es una función simple. Ahora un poco de terminología y systanxis:

Si una función retorna algún valor (Como en el caso del ejemplo) esta es llamada simplemente función. En el caso de que no devuelva nada a otra función, esta es llama procedimiento. Veamos un ejemplo con código C.

Código
  1. void mostrarTexto();
  2.  
  3. int main(void)
  4. {
  5.    mostrarTexto();
  6.    return 0;
  7. }
  8.  
  9. void mostrarTexto()
  10. {
  11.    printf("Mostrando texto desde otra función\n");
  12. }
  13.  

Señalo varias cosas: El procedimiento que usamos (mostrarTexto) no es de tipo int. Vara funciones que no devuelven nada, usamos el tipo void.

También hay que explicar el prototipado de funciones. UN prototipo de función, es declarar una función, siempre antes que main, la cual vamos a usar a lo largo del programa. Observar que encima de main aparece el prototipo de la función mostrarTexto.

A las funciones y procedimientos también las podemos llamar con parámetros, pueden ser de varios tipos, etc, pero eso lo estudiaremos mas adelante, por ahora, nos sobra con saber estructurar bien nuestro código.

Para terminar, un ejemplo del pseudocódigo que aparece al principio de este capítulo.

Código
  1. #include <stdio.h>
  2.  
  3. int pedirNum();  //prototipo de función
  4.  
  5. int main(void)
  6. {
  7.    int var;  //declaramos variable
  8.    printf("Introduce un número\n");
  9.    var =pedirNum(); //Asignamos el valor de la variable var a la función pedirNum()
  10.    if (var>5)  //Condicional: Se explicará mas adelante
  11.    {
  12.         printf("Var es mayor que 5\n");
  13.    }
  14.  
  15.    else
  16.    {
  17.         printf("Var es menor que 5\n");
  18.    }
  19. }
  20.  
  21. int pedirNum()  //función para pedir números
  22. {
  23.    int var2;  //variable para pedirNum
  24.    scanf("%d", &var2);  //introducir datos por teclado
  25.    return var2; //devolvemos el valor de var2 a la función principal
  26. }
  27.  


Estructuras de control: if - else

A lo largo de la vida, nos hacemos preguntas condicionales. Si se cumple una condición, hacemos una cosa. Si no se cumple, hacemos otra cosa. Por ejemplo, antes de salir a la calle, miramos por la ventana para ver si llueve. Si llueve, salimos a la calle con paraguas. Si no llueve, salimos sin paraguas. Esto es aplicable a la programación, y es uno de los elementos mas usados. Para empezar a comprenderlo, expongamos el algoritmo de la lluvia:

Código:

mirar_por_la_ventana
Si (llueve)
    Coger paraguas
Si No
    NO coger paraguas
salir a la calle


Condición: Lluvia.


En caso de cumplirse la condición, esta será cierta.
Ahora toca aplicar esto a un programa, con un ejemplo sencillo. Queremos comparar 2 números, y determinar cual de ellos es el mayor y cual es el menor. Para ello tenemos declaradas 2 variables, numA y numB. Es estas se almacena un número introducido por el usuario. Ahora comprobamos:

Código
  1.  
  2. if (numA<numB)
  3. {
  4.    printf("%d es menor que %d\n", numA, numB);
  5. }
  6. else
  7. {
  8.    printf("%d es mayor que %d\n", numA, numB);
  9. }
  10.  
  11.  
  12.  

Vemos que la condición se pone entre paréntesis después de if. If sería el 'si' en pseudocódigo, y else, sería 'si no' en pseudocódigo.

También podemos incluir mas sentencias condicionales dentro de otras, incluyendo las sentencias dentro de otras sentencias. Esto se estudiará mas adelante.

Como ultimo detalle:

< menor que
> mayor que
== igual que
!= distinto que
! no


En el próximo capítulo, aprenderemos a usar este tipo de caracteres, necesarios para todos los programas.


« Última modificación: 21 Junio 2010, 10:07 am por Daemon Freedom » En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Tutorial C
« Respuesta #1 en: 16 Mayo 2010, 14:41 pm »

Ahora que me compro un arduino y el tuto esta a medias xD
Lo que he leido ya lo sabia xD
A peticion por limpieza del post borren mi post porfavor.
Saludos


« Última modificación: 16 Mayo 2010, 21:41 pm por ..::| D3Bć1 |::. » En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: Tutorial C
« Respuesta #2 en: 2 Junio 2010, 20:53 pm »

Ya sigo con esto... Y ya podéis comentar, escribo el manual en el 1º post todo el rato.  ;-)
En línea

linux1

Desconectado Desconectado

Mensajes: 138



Ver Perfil
Re: Tutorial C
« Respuesta #3 en: 20 Junio 2010, 06:16 am »

gracias lo vere  :rolleyes: :o :) ;)
En línea



16BITBoy

Desconectado Desconectado

Mensajes: 137


En mi pompa..


Ver Perfil WWW
Re: Tutorial C
« Respuesta #4 en: 20 Junio 2010, 18:30 pm »

Ánimo con la iniciativa ;)

Un apunte Daemon. No se cuanto sabes acerca de Wiring, pero no te mojes demasiado con arduino. Aunque cuando programas es un espejismo de C, no es C. De hecho, aun no siendolo tampoco, es mas similar a C++ (orientación de objetos). En "Wiring" (lenguaje de programacion en el que se programa arduino) por poner un ejemplo, no se tiene aritmetica de punteros, ni punteros, solamente arrays e indices (obviamente). Además se tiene el operador new, no existente en C. Y no hace falta decir que no se posee de las librerias estandar.

Saludos!
En línea

Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".
nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Tutorial C
« Respuesta #5 en: 20 Junio 2010, 22:42 pm »

Cita de: 16BITBoy
Un apunte Daemon. No se cuanto sabes acerca de Wiring, pero no te mojes demasiado con arduino. Aunque cuando programas es un espejismo de C, no es C. De hecho, aun no siendolo tampoco, es mas similar a C++ (orientación de objetos). En "Wiring" (lenguaje de programacion en el que se programa arduino) por poner un ejemplo, no se tiene aritmetica de punteros, ni punteros, solamente arrays e indices (obviamente). Además se tiene el operador new, no existente en C. Y no hace falta decir que no se posee de las librerias estandar.

El lenguaje Arduino está basado en C/C++ y soporta todas las construcciones de C estándar y algunas funcionalidades de C++.

El lenguaje de Arduino (basado en Wiring) está implementado en C/C++, y por tanto tiene algunas diferencias con Processing, el cual está basado en Java.

Salu10.
En línea

celtac

Desconectado Desconectado

Mensajes: 75



Ver Perfil
Re: Tutorial C
« Respuesta #6 en: 21 Junio 2010, 06:55 am »


Esta muy bueno el manual, habia leido cosas de C y aqui es donde mejor he encontrado una explicacion, felicidades y ojala puedas seguir agregandole mas cosas
En línea

alexkof158


Desconectado Desconectado

Mensajes: 415


LOL


Ver Perfil
Re: Tutorial C
« Respuesta #7 en: 23 Junio 2010, 09:59 am »

este arduino como cuanto cuesta $$??
En línea

"noproxy"
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Tutorial C
« Respuesta #8 en: 23 Junio 2010, 12:15 pm »

Podrías googlear un poco y ver lo siguiente:

http://www.arduino.cc/en/Main/Buy
En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: Tutorial C
« Respuesta #9 en: 23 Junio 2010, 20:00 pm »

Es baratillo. Ya te han puesto el enlace.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutorial
Ingeniería Inversa
Blue_box 5 3,570 Último mensaje 15 Septiembre 2004, 00:48 am
por Blue_box
TUTORIAL RSS
Tutoriales - Documentación
NeoCalderon 6 9,690 Último mensaje 7 Junio 2005, 17:49 pm
por + enrique ZP
[Tutorial] Crear un servidor para WoW usando ArcEmu y NCDB [Tutorial] « 1 2 ... 210 211 »
Juegos y Consolas
Ariath 2,101 849,181 Último mensaje 2 Junio 2009, 22:54 pm
por Ariath
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines