Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MAFUS

#261
Puedes aprender que hace cada parte que desconoces aquí: http://c.conclase.net/librerias/index.php?ansilib=time#inicio
#262
Puedes usar la librería time.h que ya viene preparada para trabajar con fechas y horas. Algo así:


#include <stdio.h>
#include <time.h>

unsigned calcular_dias(struct tm *fecha) {
   double diff;
   struct tm aux = *fecha; // Copio la fecha que me han pasado

   aux.tm_mday = 1; // Cambio a dia 1 del mes
   aux.tm_mon = 0; // Cambio al primer mes del año. Los meses empiezan por 0

   diff = difftime(mktime(fecha), mktime(&aux)); // Calculo los segundos de diferencia entre las dos fechas

   return diff/(60*60*24); // Devuelvo la diferencia en días
}

int main() {
   time_t tiempo;
   struct tm *fecha;

   tiempo = time(NULL); // Consigo la marca de tiempo actual
   fecha = localtime(&tiempo); // Y la paso a la estrutura que la descompone en fecha/hora

   printf("Han pasado %u dias.", calcular_dias(fecha));
}
#263
Las variables no son funciones. Si una variable contiene el cálculo de una anterior, esta anterior ya debe tener un dato en ella: no funcionan si les das los datos después.
#264
Programación C/C++ / Re: Significado instrucciones
24 Septiembre 2018, 12:25 PM
Te podría dar explicaciones individuales de cada cosa pero el tema es largo y hay que verlo en su conjunto para entenderlo.

1. ifndef es directiva del preprocesador. Si no se ha definido el símbolo que le sigue se ejecutará todo lo que sigue hasta el endif.
define define el símbolo que le sigue. Esto son guardas de preprocesador e impiden que el archivo se incluya dos veces. En C está prohibido declarar dos veces el mismo objeto.

2. Cuándo un archivo incluye está entre comillas dobles el preprocesador lo buscará en la ruta actual del archivo.c. Si está entre ángulos < > el archivo es buscado en los directorios por defecto de las librerías.

Eso directivas del lenguaje makefile y es todo un mundo. Tu ejemplo dice:
Para construir p1 mira si p1.c y common.h han sido actualizados.
La línea que hay después, que es una sentencia bash, hará compilar p1.c
#265
Programación C/C++ / Re: piramide de numeros
23 Septiembre 2018, 18:09 PM
La cosa está en que encuentres la solución.
Cómo harías que
1 -> 1
2 -> 3
3 -> 5
...
#266
Programación C/C++ / Re: Calculadora en c desde shell
23 Septiembre 2018, 17:37 PM
Piensa en argv cómo un array de cadenas que te hayan dado rellenado y argc contiene cuántos elementos tiene argv.
Debes saber que:
argv[0] es el nombre del programa,
argv[1] es el primer argumento,
argv[2] es el segundo argumento.
Y así.
En caso de tu programa argc debería valer 3 pues tienes tres cadenas un argv.
#267
Un array de strings en C++ o un array de arrays de char en C.
#268
Pero eso después de controlar la cadena. A atof le puedes pasar un entero y no se quejará, cosa que va contra el enunciado del problema.
#269
Consigue los números cómo cadenas de texto.
Los enteros no deberán tener más que dígitos, los reales deberán tener, además de dígitos, una coma o punto decimal (según tu país).
#270
Ya que la multiplicación son sumas sucesivas y la exponenciación son multiplicaciones sucesivas, pues haces cada operación en funciones separadas: en una multiplicas usando sumas y en la otra, aprovechando la primera, elevas con multiplicaciones sucesivas. Algo así:

#include <stdio.h>

int func_mul(int m, int n) {
    int retval = 0;
    int negativo = n<0;

    if(negativo)
        n = -n;

    while(n--)
        retval += m;

    return negativo? -retval : retval;
}

int func_exp(int base, unsigned ex) {
    int retval = 1;

    while(ex--)
        retval = func_mul(retval, base);

    return retval;
}

int main() {
    int x;
    unsigned y;

    printf("base > ");
    scanf("%d", &x);
    printf("exp  > ");
    scanf("%d", &y);
    printf("%d", func_exp(x, y));
}