
-----------------------------------
JR
Tue Oct 03, 2006 9:54 pm

Parse error in program
-----------------------------------
Hi, i'm making a C program for class and i have everything done but i get an error which i cant find the fix for, any idea what might cause the error?

The program converts Dates from the julian calendar to the georgian calendar. 




#include 
#include 

/*Define Function JD for later use in the program */

double JD(double date);



main()
{
	int valid=1;
	double J_date;

	printf("======= JULIAN DATE CONVERTER =========\n");

	/* gets input from user */

	printf(" Enter the Julian date number, number must be bigger than 2299160)\n");
	scanf(" %lf ", &J_date);

	/* Check to see if proper date was entered */


          while( valid != 0 )
          {
	

             If(J_date > 2299160)
             {
              valid=0;
             }

             else
             {
              printf("Wrong number inserted please enter a number bigger than 2299160\n");
              scanf(" %lf ", &J_date);
             }

          }
	/* Calls the function JD */
	
	double JD(J_date);
	
	
}


/* 
 A new function named JD, 
 Does the convertion from Julian date
 To Gregorian Date 
*/



double JD(double date)
{
  int timeofday;
  int final_hour,final_minute;
  int hour,minute,second;
  double hour_decimal,minute_decimal;
  double decimal_value;
  long lc, nc, ic, jc;
  int day, month, year;

   lc = date + 68569;
   nc = 4 * lc / 146097;
   lc = lc - (146097 * nc + 3) / 4;
   ic = 4000 * (lc + 1) / 1461001;
   lc = lc - 1461 * ic / 4 + 31;
   jc = 80 * lc / 2447;
   day = lc - 2447 * jc / 80;
   lc = jc / 11;
   month = jc + 2 - 12 * lc;
   year = 100 * (nc - 49) + ic + lc;

  decimal_value = date - floor(date);

  hour = decimal_value * 24;
  hour_decimal= hour % 10;
  minute = hour_decimal * 60;
  minute_decimal = minute % 10;
  second = minute_decimal * 60;

  final_hour = 12 + hour;
  final_minute= minute;

     while(second > 59)
     {
       second= second -60;
       final_minute++;
     }

     while(final_minute>59)
     {
       final_minute = final_minute - 60;
       final_hour++;
     }

     if(final_hour == 24)
     {
      timeofday = 0;
      final_hour == 12;
     }

     else

     if (final_hour >24)
     {
       final_hour=final_hour - 24;
       timeofday=0;
     }


switch(month)
{
case 1: 
//if (timeofday =0)
printf("January %d %d, %d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);

printf("January %d %d,%d:%2d:%2dPM\n", day,year,final_hour,final_minute,second);
break;

case 2: 

//if (timeofday =0)
printf("February %d %d,%d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);

printf("February %d %d,%d:%2d:%2dPM\n",day,year,final_hour,final_minute,second);
break;

case 3: 

//if (timeofday =0)
printf("March %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);

printf("March %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
break;

case 4: 

//if (timeofday =0)
printf("April %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);

printf("April %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
break;

case 5: 

//if (timeofday =0)
printf("May %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);

printf("May %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
break;

case 6: 

//if (timeofday =0)
printf("June %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);

printf("June %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
break;

case 7: 

//if (timeofday =0)
printf("July %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);

printf("July %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
break;

case 8: 

//if (timeofday =0)
printf("August %d %d,%d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);

printf("August %d %d,%d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
break;

case 9: 

//if (timeofday =0)
printf("September %d %d,%d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);

printf("September %d %d,%d:%2d:%2dPM\n",day,year,final_hour,final_minute,second);
break;

case 10: 

//if (timeofday =0)
printf("October %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);

printf("October %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
break;
case 11: 

//if (timeofday =0)
printf("November %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);

printf("November %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
break;

case 12: 

//if (timeofday =0)
printf("December %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);

printf("December %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
break;
}
return 0;
}

   










-----------------------------------
md
Wed Oct 04, 2006 12:35 am


-----------------------------------
first error that crops up:
[john@saxifrage test]$ gcc test.c
test.c: In function 'main':
test.c:32: error: expected ';' before '{' token
test.c:45: warning: parameter names (without types) in function declaration

After that there are any number of small errors in your code, such as incomplete code blocks ( {} bits). There are lots of logic errors too, including an infinite loop. Then there is the function call at the end of main which isn't valid. I think you may need to read up on functions.

because I am feeling generous here is some mostly working code, I've changed it so it won't output the right thing; just so you can't copy it outright :P

#include 
#include 

/*
A new function named JD,
Does the convertion from Julian date
To Gregorian Date
*/
void JD(double date)
{
	int timeofday;
	int final_hour,final_minute;
	int hour,minute,second;
	unsigned long hour_decimal,minute_decimal;
	unsigned long decimal_value;
	long lc, nc, ic, jc;
	int day, month, year;

	lc = date + 68569;
	nc = 4 * lc / 146097;
	ic = lc - (146097 * nc + 3) / 4;
	lc = 4000 * (lc + 1) / 1461001;
	lc = lc - 1461 * ic / 4 + 31;
	jc = 80 * lc / 2447;
	day = lc - 2447 * jc / 80;
	lc = jc / 11;
	month = jc + 2 - 12 * lc;
	year = 100 * (nc - 49) + ic + lc;

	decimal_value = date;// - floor(date);

	hour = decimal_value * 24;
	hour_decimal = hour % 10;
	minute = hour_decimal * 60;
	minute_decimal = minute % 10;
	second = minute_decimal * 60;

	final_hour = 12 + hour;
	final_minute= minute;

	while(second > 59)
	{
		second= second -60;
		final_minute++;
	}

	while(final_minute>59)
	{
		final_minute = final_minute - 60;
		final_hour++;
	}

	if(final_hour == 24)
	{
		timeofday = 0;
		final_hour == 12;
	}
	else if (final_hour >24)
	{
		final_hour=final_hour - 24;
		timeofday=0;
	}


	switch(month)
	{
		case 1:
			//if (timeofday =0)
			printf("January %d %d, %d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);
			printf("January %d %d,%d:%2d:%2dPM\n", day,year,final_hour,final_minute,second);
			break;

		case 2:
			//if (timeofday =0)
			printf("February %d %d,%d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);
			printf("February %d %d,%d:%2d:%2dPM\n",day,year,final_hour,final_minute,second);
			break;

		case 3:
			//if (timeofday =0)
			printf("March %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);
			printf("March %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
			break;

		case 4:
			//if (timeofday =0)
			printf("April %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);
			printf("April %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
			break;

		case 5:
			//if (timeofday =0)
			printf("May %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);
			printf("May %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
			break;

		case 6:
			//if (timeofday =0)
			printf("June %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);
			printf("June %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
			break;

		case 7:
			//if (timeofday =0)
			printf("July %d %d, %d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);
			printf("July %d %d, %d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
			break;

		case 8:
			//if (timeofday =0)
			printf("August %d %d,%d:%2d:%2dAM\n", day, year,final_hour,final_minute,second);
			printf("August %d %d,%d:%2d:%2dPM\n", day, year,final_hour,final_minute,second);
			break;

		case 9:
			//if (timeofday =0)
			printf("September %d %d,%d:%2d:%2dAM\n",day,year,final_hour,final_minute,second);
			printf("September %d %d,%d:%2d:%2dPM\n",day,year,final_hour,final_minute,second);
			break;

		case 10:
			//if (timeofday =0)
			printf("October %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);
			printf("October %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
			break;
			
		case 11:
			//if (timeofday =0)
			printf("November %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);
			printf("November %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
			break;

		case 12:
			//if (timeofday =0)
			printf("December %d %d, %d:%2d:%2d  AM\n", day, year,final_hour,final_minute,second);
			printf("December %d %d, %d:%2d:%2d  PM\n", day, year,final_hour,final_minute,second);
			break;
	}
}


main()
{
	int valid = 0;
	double J_date;

	printf("======= JULIAN DATE CONVERTER =========\n");

	/* gets input from user */

	do
	{
		printf(" Enter the Julian date number, number must be bigger than 2299160)\n");
		scanf("%lf", &J_date);
	
		/* Check to see if proper date was entered */
		if(J_date > 2299160)
			valid = 1;
		else
			printf("Wrong number inserted please enter a number bigger than 2299160\n");
	} while (!valid);

	JD(J_date);

}

