• Domingo 15 de Diciembre de 2024, 02:03

Autor Tema:  consejos para un ejercicio porfa  (Leído 1770 veces)

tiluca

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
consejos para un ejercicio porfa
« en: Domingo 31 de Mayo de 2009, 16:54 »
0
Buenas soy un poco novata en esto, lo primero presentarme y dar las gracias al foro por la cantidad de gente que aprendera con el y con el que yo espero aprender tambien jeje.
çBueno el programa que me esta volviendo loca ahora es este.

Realizar un procedimiento que reciba como entradas un día, un mes y un año, y
devuelva la fecha del día siguiente a través de los mismos parámetros, además
de un código de error (0 si todo ha ido bien, y 1 si no se ha podido calcular).
Habrá que tener en cuenta que un año es bisiesto si es múltiplo de 4, excepto
cuando es múltiplo de 100 y no lo es de 400 (por ejemplo, 1984 y 2000 son
bisiestos, pero 1800 no lo es). Este procedimiento se apoyará en una función que
también deberá realizar el alumno, la cual comprobará si la fecha que se le pasa
por parámetro es correcta o no (siguiendo los mismos criterios para el año
bisiesto).

Lo primero yo solo estoy intentando crear la funcion, que el usuario meta la fecha y q me de la siguiente teniendo en cuenta q si dia mas de 30
incremente un mes ect.. pero no estoy metiendo aun lo de los años bisiestos. bueno esto es lo que he hecho


void calfecha (int *dia, int *mes, int *aggno);

int main (){
    int d, m,a;
    do{
    printf("introduce un dian");
    scanf("%i",&d);
}while ((d<0) || (d>30));
do{
    printf("introduce un mesn");
    scanf("%i",&m);
}while ((d<0) || (d>12));
printf("introduce un aggnon");
   scanf("%i",&a);
    calfecha(&d, &m, &a);
    printf("la fecha del dia siguiente es:%i dia, %i mes, %i agno n",d,m,a);
    system ("pause");
    return 0;
}
//creo un procedimiento
void calfecha (int *dia, int *mes, int *aggno){
//mi intencion es decirle que si me han dado un dia valido lo aumente
int a,d,m;
*dia++;
if (dia==30)
*mes++;

if (mes==12)
*aggno++;
}

me da este error
ISO C++ forbids comparison between pointer and integer
supongo que por los if pero no entiendo muy bien porque, alguien puede ayduarme?
« última modificación: Domingo 31 de Mayo de 2009, 20:31 por tiluca »

tiluca

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: resolver un ejercicio porfa
« Respuesta #1 en: Domingo 31 de Mayo de 2009, 17:20 »
0
lo he mejorado un poco voy asi.
int main (){
int d, m,a;
do{
printf("introduce un dian");
scanf("%i",&d);
}while ((d<0) || (d>30));
do{
printf("introduce un mesn");
scanf("%i",&m);
}while ((d<0) || (d>12));
printf("introduce un aggnon");
scanf("%i",&a);
calfecha(&d, &m, &a);
printf("la fecha del dia siguiente es:%i dia, %i mes, %i agno n",d,m,a);
system ("pause");
return 0;
}
//creo un procedimiento
void calfecha (int *dia, int *mes, int *aggno){
//mi intencion es decirle que si me han dado un dia valido lo aumente
int a,d,m;
++*dia;
if (d==30){
++*mes;
}
else *mes;
if (m==12){
++*aggno;
}
else *aggno;
}

al poner ++*dia el dia se incrementaba bien pero cuando he puesto el if else para meses se queda pillado y me pide todo el rato introduce mes introduce mes, alquien puede decirme porque?

tiluca

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: consejos para un ejercicio porfa
« Respuesta #2 en: Domingo 31 de Mayo de 2009, 20:32 »
0
bueno he cambiado algunas cosas y lo tengo as pero sigue sin salirme
cuando le meto el dia 30 es cuando da fallos en cambio del mes 12 al cambio de año y mes 1 no

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>

void calfecha (int *dia, int *mes, int *aggno);

int main (){
    int d, m,a;
    do{
    printf("introduce un dian");
    scanf("%i",&d);
}while ((d<0) || (d>30));
do{
    printf("introduce un mesn");
    scanf("%i",&m);
}while ((d<0) || (d>12));
printf("introduce un aggnon");
   scanf("%i",&a);
    calfecha(&d, &m, &a);
    printf("la fecha del dia siguiente es:%i dia, %i mes, %i agno n",d,m,a);
    system ("pause");
    return 0;
}

void calfecha (int *dia, int *mes, int *aggno){
int a,d,m;

    if(d!=30){
     ++*dia;
     }
    else{
    *dia=1;
    }
    if ((m=!12) && (d!=30)){
  ++*mes;
}
    else {
    *mes=1;    
  ++*aggno;
}
}

locazopro

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: consejos para un ejercicio porfa
« Respuesta #3 en: Lunes 1 de Junio de 2009, 06:08 »
0
mira, tienes que fijarte bien en cuales son los casos,  todo se reduce a puros if y else, mira este código:

Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int *calFecha(int dia, int mes, int aggno){
  5.      int *fecha;
  6.      
  7.      fecha = (int*)malloc(sizeof(int)*3);
  8.      
  9.      if(dia == 30)
  10.         fecha[0] = 1;
  11.      else
  12.         fecha[0] = ++dia;
  13.        
  14.      if(mes != 12 && dia != 30)
  15.         fecha[1] = mes;
  16.      else
  17.         if(mes == 12)
  18.            fecha[1] = 1;
  19.         else
  20.            fecha[1] = ++mes;
  21.                    
  22.      fecha[2] = ++aggno;
  23.      
  24.      return fecha;
  25. }
  26.  
  27. int main(){
  28.     int d,m,a;
  29.     int *fecha;
  30.    
  31.     do{
  32.     printf("introduce un dian");
  33.     scanf("%i",&d);
  34.     }while (d<0 || d>32);
  35.    
  36.     do{
  37.     printf("introduce un mesn");
  38.     scanf("%i",&m);
  39.     }while (m<0 || m>13);
  40.    
  41.     printf("introduce un aggnon");
  42.     scanf("%i",&a);
  43.    
  44.     fecha = calFecha(d,m,a);
  45.    
  46.     printf("La fecha del dia siguiente es %d / %d / %d n",fecha[0],fecha[1],fecha[2]);
  47.    
  48.     return(0);
  49. }
  50.  

asumiendo lo que dijiste (que si era 30 pues entonces cambiaba de mes), le hice algunas pruebas y parece funcionar. Vez que solo debes fijarte en las condiciones para evaluar cuando cambiar el mes o el año o el dia.

Saludos!

tiluca

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: consejos para un ejercicio porfa
« Respuesta #4 en: Lunes 1 de Junio de 2009, 15:55 »
0
m uchas gracias, la verdad que ya lo cosegui arreglar pero me ha costado un monton, ahora voy a por el siguiente y espero no tener que pedir ayuda jeje. saludos