Menú principal

domingo, 29 de noviembre de 2015

Operadores aritméticos y lógicos en C

En primer lugar voy a remarcar algunos puntos en los que los nuevos programadores de C suelen fallar:

  1. No olvidarse el & en el scanf
  2. Cuando queremos decir que un numero n  mas otro n2 es el total t  no se puede poner: n+n1=t   sino que hay que poner t=n+n2. Las asignaciones con = se hacen siempre de derecha a izquierda.
  3. Si en un programa tenemos datos de tipo entero, ojo al hacer las divisiones: 
#include<stdio.h>
main()

{
    int numero1, numero2;
    double total;

    printf("Intro un numero: ");
    scanf("%d", &numero1);

    printf("Intro un numero: ");
    scanf("%d", &numero2);

    total=numero1/numero2;

    printf("El total es: %lf", total);

}
Podemos pensar que como hemos puesto total con el tipo de variable double, este nos va a salir con decimales pero esto no es cierto. Si hacemos la división del numero1, que pongamos vale 7, por el numero2, que supongamos vale 3,  nos daría un numero entero 2. Al asignarlo a una variable double como total nos lo guardaría como 2.000000.


En segundo lugar os voy a decir algunos operadores que os pueden ser útiles a la hora de programar.

Los operadores aritméticos
Tenemos los operadores tradicionales +, -, *, / para sumar, restar, multiplicar y dividir. Además hay otros que son un poco más curiosos:
  1.  ++       Estos dos signos representan un operador aritmético que hace que una variable incremente de uno en uno. Es decir, es lo mismo que poner variable++ que variable=variable+1. 
  2. --          Estos otros signos como os podéis imaginar hacer la misma función que ++ pero en vez de sumar mas 1 para restar uno
  3. %        El tanto por ciento ademas de utilizarse para representar el formato de una variable como hemos visto en printf y scanf también es un operador aritmético. Representa el resto de una división entera. Su sintaxis es: resto = dividentdo % divisor y aquí te sacaría por pantalla el valor del resto. Un ejemplo con números:   
         int n1=7, n2=3, resto;
         resto= 7 % 3;

        printf("El resto es %d", resto);

         Al ejecutar este programa te saldrá por pantalla: "El resto es 1"

Operadores lógicos
Estos nos permitirán relacionar dos o más condiciones cuando veamos las sentencias de control (if, while, etc). Los más utilizados son:
  1. &&      Estos dos ampersand significan "y". Se utilizan sobre todo para enlazar condiciones, de las cuales hablaré más adelante
  2.   ||         Estas dos "barritas" (AltGr + 1) se utiliza al igual que el anterior en las condiciones y textualmente significan "o".

Ejercicio resuelto en C (kelvin)

Programa pida al usuario que introduzca por teclado el dato de grados kelvin para hacer la equivalencia a grados centígrados.

Programa resuelto:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double kelvin, centi;

    printf("Intro kelvin: ");
    scanf("%lf", &kelvin);

    centi=kelvin-273.15;

    printf("%lf kelvin son %lf grados C", kelvin, centi);
}

sábado, 28 de noviembre de 2015

Ejercicio resuelto en C (Área)

Realizar un programa que calcule el área de un triángulo introduciendo los datos de la base y la altura por teclado.

Programa resuelto:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double base, h, area;

    printf("Intro la base: ");
    scanf("%lf", &base);

    printf("Intro la altura: ");
    scanf("%lf", &h);

    area=(base*h)/2;

    printf("El area es: %lf", area);
}

viernes, 27 de noviembre de 2015

Ejercicio resuelto en C con if (kelvin)

El siguiente ejercicio consiste en realizar un programa que pase de kelvin a grados centigrados, sabiendo que 0 grados centigrados son 273.15 kelvin. Este programa tendrá la condición de que el dato de kelvin no sea negativo.

Aquí os dejo la solución:


#include <stdlib.h>
#include <stdio.h>

int main()
{
    float kelvin, centi;

    printf("Intro kelvin: ");
    scanf("%f", &kelvin);
    if(kelvin<0)
    {
        printf("El numero tiene que ser mayor que 0\n");
        printf("Por favor reinicie el programa\n");
    }
    else
    {
        centi=kelvin-273.15;
        printf("%f kelvin son %f grados centigrados",kelvin,centi);
    }
    return 0;
}

jueves, 26 de noviembre de 2015

Bq Evolution Printbot EsquivaObstaculos

Hoy os traigo otro programa para el Bq evolution Printbot, el esquiva obstaculos. Consiste el que el sensor de ultrasonido haga un ruido y por el tiempo que tarde en volverlo a captar sea capaz de saber a que distancia está de ese obstaculo y poder esquivarlo.

En cuanto al programa que encontré en la web oficial del PrintBot Evolution, le modifiqué  porque no me gustaba como venia para esquivar el obstáculo, pero esto no quita que no vaya bien, yo os recomiendo probar los dos programas que os voy a dejar para que los podáis ejecutar desde el Bitbloq y dejéis vuestra opinión en los comentarios.

Ahora os enseñaré como va el robot mi programa:


                       

Aqui os dejo los dos programas:
Página oficial DIWO
Programa editado por mi: lo que he modificado es esta parte que os dejo abajo, lo demás es todo parecido.






miércoles, 25 de noviembre de 2015

Ejercicio resuelto en C con if (área)

El ejercicio se trata de calcular el área de un triangulo. Comprueba que los datos introducidos sean mayores que 0.

Aquí os dejo el ejercicio resuelto:

#include <stdio.h>
main()
{
    float base,altura,area;

    printf("Base del triangulo: ");
    scanf("%f",&base);
    if(base<=0)
    {
        printf("El dato no puede ser negativo no 0\n");
        printf("Por favor vuelva a iniciar el programa\n");
    }
    else
    {
        printf("Altura del triangulo: ");
        scanf("%f",&altura);
        if(altura<=0)
        {
            printf("El dato no puede ser negativo no 0\n");
            printf("Por favor vuelva a iniciar el programa\n");
        }
        else
        {
            area = base*altura/2;
            printf("El area es %f\n",area);
        }
    }
}


miércoles, 18 de noviembre de 2015

Sentencias de control condicionales (if)

Con estas sentencias de control condicionales podremos ejecutar unas instrucciones u otras dependiendo de que se cumplan determinadas condiciones.

Os voy a poner un ejemplo con un programa que pida el dividendo y el divisor de una división y calcule el cociente si y solo si el divisor es distinto de 0. Fijaros como pongo distinto de 0 en la condición del if (!=)

#include<stdio.h>
main()
{
    double divisor, dividendo, cociente;

    printf("Intro el dividendo: ");
    scanf("%lf", &dividendo);

    printf("Intro el divisor: ");
    scanf("%lf", &divisor);

    if(divisor!=0)
    {
        cociente=dividendo/divisor;
        printf("El cociente de %lf / %lf es: %lf", dividendo, divisor, cociente);
    }
}



Si introducimos 0 como divisor, el programa no da ninguna respuesta. A continuación veremos la sentencia condicional el if-else para corregir esto. Esta función es muy fácil de entender, simplemente si se cumple la condición del if se realiza y si no pues se realizará el else y viceversa. De tal forma que en el programa anterior si ponemos un else podremos sacar por pantalla:  "No es posible dividir por 0. Os dejo el programa para que lo podáis entender mejor.


#include<stdio.h>
main()
{
    double divisor, dividendo, cociente;

    printf("Intro el dividendo: ");
    scanf("%lf", &dividendo);

    printf("Intro el divisor: ");
    scanf("%lf", &divisor);

    if(divisor!=0)
    {
        cociente=dividendo/divisor;
        printf("El cociente de %lf / %lf es: %lf", dividendo, divisor, cociente);

    }
    else
        printf("No es posible dividir por 0");
}

Algo a destacar es que cuando utilicéis un igual en el if siempre hay que poner dos ejemplo: if(x==7)
Y otra cosa importante es cuando querais poner dos condiciones como por ejemlo que la edad de una persona sea mayor de 20 y menor de 70 años, lo escribais enlazando las dos condiciones con operadores lógicos como anteriormente os he explicado. En este caso sería:
if(edad>20 && edad<70)

lunes, 16 de noviembre de 2015

Scanf en C

Os voy a enseñar una función llamada scanf que sirve para introducir cualquier valor o caracter por el teclado. Cuando escribimos un scanf siempre va a seguir una estructura como podéis observar en el siguiente programa. En este programa se piden dos números para luego sumarles.

#include<stdio.h>
main()

{
    double numero1;
    double numero2;
    double total;

    printf("Intro un numero: ");
    scanf("%lf", &numero1);

    printf("Intro un numero: ");
    scanf("%lf", &numero2);

    total=numero1+numero2;
    printf("El total es: %lf", total);

}

La estructura del scanf es la siguiente:
scanf("%lf", &numero1);

El %lf se pone en este caso porque la variable numero1 es de tipo double, si fuese de tipo int se pondría %d ... Después de esto se cierran las comillas y se pone una coma.
A continuación se pone &numero1. El símbolo & significa textualmente "ir a la dirección de" y después del ampersand (&) se pone la variable, de tal forma que el scanf significaría: El valor %lf se guarde en la dirección numero1.


Trabajando con double/float en C

En esta entrada voy a realizar el mismo programa que hice anteriormente con variables enteras (int) pero ahora con variables en las que se pueden poner decimales, doble y float. En este caso lo voy a hacer con double.

#include<stdio.h>
main()
{
    double numero1=4.2;
    double numero2=2.5;
    double total;

    total=numero1+numero2;

    printf("El total es %lf",total);
}

Como podeis observar la estructura del programa no cambia respecto al otro salvo la diferencia del tipo de variable y el % (formato) del printf. En este caso he puesto %lf porque la variable es double (long float), al igual que si hubiera puesto las variables como float hubiera puesto %f.

Al compilar y ejecutar el programa saldrá por pantalla: "El total es 6.700000"

domingo, 15 de noviembre de 2015

Trabajando con variables enteras (int) en C

Siempre que hacemos un programa vamos a tener que manipular datos. Estos datos van a tener distinta representación en el ordenador dependiendo del tipo de datos: números enteros, números con decimales, caracteres... En C hay cuatro tipos básicos:

int: número entero representado internamente por 4 bytes
float: número en coma flotante representado por 4 bytes
double: números en coma flotante representado por 8 bytes, es decir, es el mismo tipo de dato que el float pero se utiliza para números más grandes y con mayor precisión.
char: cualquier tipo de caracter: letras, símbolos... Estos se representan con 1 byte

Para comenzar a familiarizarnos con estos tipos de datos, vamos a hacer un programa que sume dos números. Para ir haciendo aclaraciones utilizaré // , estas dos barras indican el comienzo de un comentario que no influirá en el funcionamiento del programa.

Una cuestión importante en C es que todas los datos que necesitemos deben ser declarados al principio, como podéis ver en el siguiente programa.

#include<stdio.h>
main()
{
int numero1=4;  // para inicializar el numero1 a 4
int numero2=2;  // para inicializar el numero2 a 2
int total; // Se guardara el resultado de la suma

total=numero1+numero2; // Se realiza la suma

printf("El resultado es %d", total);
}

La función printf sacará en pantalla lo que está entre comillas y como tratamos de visualizar el valor de la variable total, dentro de esa cadena entrecomillada ponemos %d para indicar que nos tiene que visualizar un entero. Fuera del entrecomillado, separado por una coma, indicaremos la variable que queremos visualizar.

La ejecución del programa proporcionará la siguiente salida por pantalla: 

El resultado es 6.

El programa no es muy útil porque no permite introducir distintos valores para los sumandos en la ejecución pero esto lo veremos cuando explique la entrada de datos.


Y eso sería todo, si tienes alguna duda no dudes en dejarmela en los comentarios

viernes, 13 de noviembre de 2015

Encendido y apagado de un led con arduino

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.
                                                 
Ahora os voy a enseñar cómo encender y apagar un led con arduino.

Materiales a utilizar:
En este caso como solo hay un led lo conectaremos al pin 13 y no necesitaremos una resistencia ya que este pin la trae incluida, asi que solo necesitamos una placa arduino, un cable USB a la entrada de Arduino o impresora, y un led.

Pasos:

1.- Descargar el programa de arduino e instalarlo siguiendo los pasos que nos van señalando
2.-  Copias el siguiente programa:

void setup()
{
 pinMode(13, OUTPUT);
}

void loop() 
{
digitalWrite (13, HIGH);
delay (1000);
digitalWrite (13, LOW);
delay (1000);
}

3.- Se conecta la placa mediante el cable USB - Arduino

4.- En la barra superior compruebas que te ponga: placa "Arduino" (como se llame tu placa). En el caso que no lo ponga seleccionas la opción posterior "puerto" y seleccionas tu placa.




5.- Colocar el led de tal forma que la "pata" larga este en el pin 13 y la corta en GND.













6.- Por último en la parte superior le das a subir




Y en un principio el led comenzará a parpadear, tal que así:





viernes, 6 de noviembre de 2015

BQ Evolution Printbot SigueLineas

 






Bq presenta un robot básico muy interesante para iniciarse a la programación, haciendo asi que el trabajo de la programación hace que sea más motivadora ya que puedes observar el efecto de tu programa sobre un vehículo real.

Para programarlo utilizamos la herramienta de BitBloq  que proporciona el fabricante. Esta aplicación te permite programar el bq de forma gráfica como scratch o en modo código, C. Este ultimo más indicado para programadores más experto.



Ahora os mostraré un programa realizado en dicha aplicación que consiste en que el robot tenga que seguir la linea negra de un circuito. En esta página podréis encontrar dicho programa realizado,





Lo que hace aquí básicamente el robot es ir localizando lo que es blanco y es negro asignando los valores 0 y 1 mediante los sensores IR o de infrarrojos. Esta programado para que en el momento que el sensor derecho detecte blanco bloquee la rueda izquierda y avance solamente con la derecha lo que girar a la izquierda y volver a la línea y análogamente con el sensor izquierdo.




En mi opinión es una de las mejores formas de aprender programación por solo 100 euros. Lo podéis encontrar en cualquier tienda de informática o electrónica.