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 - rir3760

#31
Para obtener la diferencia (en segundos) de dos fechas puedes utilizar la función difftime, esta requiere dos argumentos de tipo time_t, el primero es la fecha actual y la obtienes mediante una llamada a la función time.

La segunda fecha la introduce el usuario, aquí puedes obtener directamente los valores de dia, mes y año para una estructura tipo "struct tm" y a partir de esta obtener uno de tipo time_t con mktime. Mas o menos así:
struct tm d = {0};
time_t b;

puts("Introduce la fecha (aaaa mm dd):");
if (scanf("%d %d %d", &d.tm_year, &d.tm_mon, &d.tm_mday) != 3)
   return EXIT_FAILURE;
d.tm_year -= 1900; /* 0 == 1900, 100 == 2000, etc. */
d.tm_mon--; /* 0 == Enero, 1 == Febrero, etc. */

/* Validacion de los campos tm_year, tm_mon y tm_mday */

b = mktime(&d);

/* ... */


Un saludo
#32
Programación C/C++ / Re: Ayudame Con C++
22 Abril 2015, 03:31 AM
Mencionas que estas aprendiendo C++ pero no utilizas las características de ese lenguaje (¿C o C++?). Ademas hay que evitar el uso de variables "globales" cuando no se requiera, el uso de gets y conio. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Los errores importantes en el programa son dos:

1) Mediante scanf tratas de leer el tipo con "%s":
scanf("%s", &tipo);
Cuando deberías utilizar "%d" ya que esa variable es de tipo int.

2) Cuando imprimes el total con printf:
printf("%.2f", &total);
El operador "&" esta demás.

Un saludo
#33
Cita de: Blaster en 21 Abril 2015, 02:37 AMrir3760 porque sacrificar rendimiento y velocidad por únicamente ahorrarte un parámetro mas
Cierto si se trata de una macro. Yo asumo (por sentido común, nada mas) que es una función y en ese caso no hay problema pero seria mejor que el OP (me refiero a sora_ori ) nos indicara que es esa bendita extensión.

En el caso de que exista una macro con ese nombre como bien comentas se presentarían problemas como las llamadas múltiples, en ese escenario basta con colocar "min" entre paréntesis para así evitar la macro y terminar con una llamada a función.

Pero, de nuevo, considerar a "min" como una función solo fue una educated guess.

Un saludo
#34
Cita de: bobitttyy en 15 Abril 2015, 01:15 AMpero yo quiero que me bote  no solo a uno sino también al otro
EL ELEMENTO QUE MAS SE REPITE ES 2
EL ELEMENTO QUE MAS SE REPITE ES 1
sugerencias.
Para ello debes almacenar en un array la repetición de cada numero. Por simplicidad ese array lo inicializas a cero utilizando -1 como valor centinela para indicar que un numero es la repetición de algún otro anterior.

Para explicarlo mejor un ejemplo en C:
#include <stdio.h>
#include <stdlib.h>

#define PROCESADO  -1

#define NUM_ELEM(a) (sizeof (a) / sizeof (a[0]))

int main(void)
{
   int num[] = {2, 3, 1, 2, 4, 1, 5, 1, 2};
   int rep[NUM_ELEM(num)] = {0};
   size_t num_elem = NUM_ELEM(num);
   size_t i;
   size_t j;
   
   for (i = 0; i < num_elem; i++){
      if (rep[i] == PROCESADO)
         continue;
     
      rep[i] = 1;
      for (j = i + 1; j < num_elem; j++)
         if (num[i] == num[j]){
            rep[i]++;
            rep[j] = PROCESADO;
         }
   }
   
   for (i = 0; i < num_elem; i++)
      if (rep[i] != PROCESADO)
         printf("%d: %2d\n", num[i], rep[i]);
   
   return EXIT_SUCCESS;
}

Y su salida es:
2:  3
3:  1
1:  3
4:  1
5:  1


Espero que te de una idea para modificar tu programa en C++, la aproximación es la misma mas el calculo del máximo de repeticiones e imprimir los números que cumplan con ese criterio.

Un saludo
#35
Cita de: sora_ori en 15 Abril 2015, 00:15 AMya tengo mejorado el código. Lo que pretendia hacer con la variable "medida" era saber los elementos que habrán en el vector.
Lo primero que debes hacer es evitar el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|. Si lo haces porque utilizas Dev-C++ y este no incluye la característica de pausa automática cambiate a cualquier otro IDE, el mas parecido es Orwell Dev-C++.

En el programa utilizas la función "min" la cual es una extensión, otro problema es no darle un valor inicial a la variable "menor_encontrado" con ello este es no definido o "basura".

Por ultimo la función no necesita de tres argumentos, con solo dos basta:
int valorMenor(int *v, int n)
{
   return n == 1 ? v[0] : min(v[0], valorMenor(v + 1, n - 1));
}


Otra opción es utilizar una variable auxiliar, con ello se evita el uso de la función "min":
int valorMenor(int a[], int n)
{
   int r;
   
   return n == 1 || a[0] < (r = valorMenor(a + 1, n - 1)) ? a[0] : r;
}


Un saludo
#36
Cita de: MGMR en 14 Abril 2015, 23:54 PMHice lo que sugeriste y al principio entra y hace el aumento bien, pero luego comienza hacer de de 2 en 2.
En el fragmento que publicas las llaves están mal, para explicarlo mejor la sentencia de selección switch se procesa así:
switch(num_op){
case 1:
   printf("Consulta: %d\n\n", c);
   printf("Ingrese el nombre del lugar de origen del recorrido:\n");
   scanf("%s", &s_origen); printf("\n");
   
   printf("Ingrese el nombre del lugar de destino del recorrido:\n");
   scanf("%s", &s_destino); printf("\n");
   
   ValiHora();
   ValiPresupuesto();
}
break;

Ahí tienes un switch con un solo caso y la sentencia "break;" puede generar resultados no deseados (o bien el compilador debe emitir un mensaje de error si esta es "huérfana").

Mejor publica el código fuente completo.

Un saludo
#37
Cita de: RGT en 15 Abril 2015, 03:02 AMnecesito hacer esto:

Dados dos números naturales, calcule e imprima los múltiplos del primer número que sean menores que el segundo.

No logro hacerlo, a lo mejor no se cómo sacar los múltiplos y printearlos correctamente, pueden ayudarme, debo printear todos los múltiplos del primer número que sean menores que el segundo número ingresado.
Los múltiplos de un numero "a" son "a", "2a", "3a", ... Para imprimirlos basta con un bucle como este:
/* Imprimir los multiplos de a menores que b */
for (i = a; i < b; i += a)
   printf(" %d", i);
putchar('\n');


Un saludo
#38
La mayoría de esos mensajes se explican en el curso theForger's Win32 API Programming Tutorial.

Un saludo
#39
Es posible pero si apenas empiezas (lo menciono por tu otro tema) tu aprendizaje de la Win32 API seria mejor dejarlo para después.

Dos paginas (ambas en ingles) donde se trata el tema son:
Custom-Shaped and Transparent Windows
Win32 Window Skinning

Un saludo
#40
Cita de: Blaster en 11 Abril 2015, 18:32 PMLa aproximación que expones, presenta un comportamiento indefinido debido a que estas modificando un puntero que apunta a una cadena literal (linea 19)
Ouch! Gracias por indicarlo, ya actualice el programa.

Un saludo