Publi

  • Decir la hora en palabras (v1)

    Si tenéis un equipo Linux que actúe como servidor y equipo de música (por poner algo), y no tenga un monitor conectado en todo momento; os puede ser útil este script:

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash

    hora=`date +%H`
    min=`date +%M`

    decir="Son las "$hora" y "$min

    echo $decir | espeak -ves

    Si asociamos este script a una combinación de teclas, por los altavoces nos dirá la hora que es.… Leer artículo completo

  • Cronometrar código (matlab)

    Matlab® es un lenguaje muy utilizado en ingeniería, ya que permite hacer de forma más o menos sencilla cálculos matemáticos muy complejos, y a veces necesitamos procesar gran cantidad de datos y llega a ser desesperante ver cómo tarda sin tener tan siquiera una ligera idea de cuánto queda.

    El principio del código que voy a postear se basa en dos funciones: tic y toc. La primera de ellas marca el inicio de la cuenta de tiempo, y la segunda el final, indicándonos los segundos transcurridos entre tic y toc.… Leer artículo completo

  • Texto personalizado en matlab

    Cuando trabajamos con Matlab® a la hora de poner los datos de una variable en pantalla, basta con poner la variable (sin ; al final), pero si queremos escribir un texto cualquiera, debemos utilizar disp():

    1
    disp('Estoy escribiendo un mensaje en matlab');

    Pero si queremos intercalar información o escribir nuestras variables de una forma más elegante, debemos utilizar sprintf(), se comporta como el sprintf() de C, y acepta sus \n, \t, %d, %f, %s… incluso podemos formatear la salida como veremos en el ejemplo.… Leer artículo completo

  • Desea continuar? [(S)i, (N)o, (M)e lo pienso]

    Es común en los programas de consola hacer preguntas al usuario y éste responda, pero sólo una de las opciones válidas, si no, volver a preguntarle hasta que nos diga un valor correcto.

    Aquí os enseño un ejemplo sencillo de todo esto (utilizaré la función mygetch):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    #include <string.h>

    int mygetch(int echo)
    {
        struct termios oldt, newt;
        int ch;

        /* Obtenemos atributos del terminal */
        tcgetattr( STDIN_FILENO, &oldt );
        newt = oldt;
        /* Eliminamos el modo canónico: caracteres especiales */
        newt.
    Leer artículo completo
  • Obtener UNA tecla

    Hace mucho tiempo, cuando empezaba con la programación, tenía la librería conio.h de Borland (en la que aún se siguen basando en muchos sitios), que nos permitía entre otras cosas borrar la pantalla, posicionarnos dentro de la pantalla, escribir con colores, y pedir una tecla al usuario.
    Bien, vayámonos al último caso, pedir una tecla al usuario, se hacía con la función getch, y con sólo pulsar la tecla, salía de la función, es decir, no hacía falta pulsar enter.… Leer artículo completo

  • Limpiar el buffer de teclado en Linux con ejemplos en C y C++

    reducida

    A veces, mientras se está desarrollando un pequeño programa en C en el que hay entradas del usuario por teclado, hay veces que parece que se pulsan teclas solas, esto es debido a una entrada de teclado anterior que no ha llegado a volcarse entera en nuestras variables.
    Un ejemplo en cuestión lo tenéis aquí:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdlib.h>
    #include <stdio.h>

    #define MAX_NOMBRE 128

    int main(int argc, char *argv[])
    {
      char nombre[MAX_NOMBRE];
      int dia, mes, year;

      printf ("Introduce fecha de finalización (dd/mm/YYYY): ");
      scanf("%d/%d/%d", &dia, &mes, &year);
      printf ("Nombre de la tarea: ");
      fgets(nombre, MAX_NOMBRE, stdin);

      printf("La tarea %s termina el: %d/%d/%d\n", nombre, dia, mes, year);
      return EXIT_SUCCESS;
    }

    En un primer momento, cuando introducimos la fecha, tenemos que introducir «12/12/2010» por ejemplo y luego pulsar enter para que scanf() pueda finalizar, aunque esa pulsación de enter se queda almacenada en el buffer de teclado, siendo lo único que hay en el buffer en este momento.… Leer artículo completo

  • Cambio de base (de base b1 a b2… hasta base36 o tal vez más)

    Hace tiempo tuve la necesidad de hacer una función de cambios de base, pero que no estuviera limitada, es decir, no tuviera definido qué base vamos a introducir y qué base debe devolver. Es decir, convertiremos un número en base b1 a base b2; la limitación, el número de caracteres con los que contemos, en el ejemplo hay hasta base 36, y es fácil extenderlo hasta base256… un número en hexadecimal no tiene desde el 0 al 9 y de la A a la F, pues un base36, del 0 al 9 y de la A a la Z.… Leer artículo completo

  • Poco a poco publicando

    Se me ha ocurrido que será interesante iniciar una pequeña biblioteca con las funciones de C que vaya generando, ordenadas por categorías, y está bien empezar con la función que publiqué hace un rato: strrev.

    Ocupa muy poco (ya irá creciendo): strutils.zip

    Para trabajar con ella:

    1
    gcc -c strutils.c

    Y dentro de nuestro programa debemos hacer

    1
    #include "strutils.h"

    y para compilar:

    1
    gcc -o miprograma miprograma.c strutils.o
    Leer artículo completo
  • Volteando cadenas

    En C, una de las pequeñas cosas que a veces nos hace más lentos a la hora de hacer un pequeño programa es la posibilidad de darle la vuelta a una cadena. Bien, aquí traigo un pequeño código (función y ejemplo) de strrev, que además de poder dar la vuelta a una cadena, puede manipular sólo ciertos caracteres:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <string.h>

    char *strrev(char *str, int strl)
    {
        /* Creamos punteros al principio y al final de la cadena */
        /*       C   A   R   A   C   T   E   R   5   \0 */
        /*       |                               |      */
        char *start = str, *end = str + strl - 1;
        char temp;
        /* Iteramos hasta que el principio y el fin coincidan */
        while(start < end)
            {
                /* Intercambiamos los caracteres */
                /* 1º  C A R A C T E R 5 */
                /* 2º  5 A R A C T E R C */
                /* 3º  5 R R A C T E A C */
                /* 4º  5 R E A C T R A C */
                /* 4º  5 R E T C A R A C */
                temp = *start;
                *start++ = *end;
                *end-- = temp;
            }
        return str;
    }

    /* Ejemplo */
    int main()
    {
        char cadena[50]="Una cadena de caracteres cualquiera";
        char tmp[50]="Una cadena de caracteres cualquiera";
        char *cad2=cadena;
        printf("Cadena original: %s\n", cadena);
        printf("Cadena al revés: %s\n", strrev(tmp, strlen(tmp)));
        strrev(cadena+14, 10);
        printf("Caracteres al revés: %s\n", cad2);
        return 0;
    }

    Esta función la encontré hace mucho tiempo navegando y me pareció muy interesante, sobre todo por cómo está hecha, creo que es de las más rápidas.… Leer artículo completo

  • Sigo probando…

    Acabo de instalar el plugin Code Highlighter para WordPress que utiliza la clase GeSHi de PHP para colorear código fuente y contar las líneas, algo importante para mí.

    Aquí muestro algunas pruebas, tal vez no sirvan para nada, pero bueno.

    Un poco de C:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>

    int main(int argc, char* argv[])
    {
      int i;
      printf("Hola mundo!
    Leer artículo completo