I get a different answer to the correct answer when I run my code, my logic seems correct. not sure why?

I'm doing a series of excercises to get a better understanding of functions for college. I'm currently doing one now where

"A function NumDays that may be passed two dates in the form dd mm and which will
return the inclusive number of days between the two dates"

I wrote my solution on paper and the result is always correct, I then wrote the code for my solution, went through my code step by step on paper, my result on paper is always correct but the result when I run my code is always 5-25 days off and I've no idea why, It could be the fact that I'm only new to functions so maybe I could of made a mistake on the logic of functions itself or there could be a flaw in my mathematical logic. I will explain my logic below.

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <iomanip>
using namespace std;
int Numdays(int dd1, int mm1, int dd2, int mm2);

int main()
{

int result;
int ddOne, mmOne, ddTwo, mmTwo;

cout << "Enter second date in the format dd mm " << endl;
	cin >> ddTwo >> mmTwo;

cout << "Enter second date in the format dd mm " << endl;
	cin >> ddTwo >> mmTwo;

	Numdays(ddOne, mmOne, ddTwo, mmTwo);

	result = Numdays(ddOne, mmOne, ddTwo, mmTwo);

	cout << "The total days between the two dates = " << result << endl;

return 0;

}
int Numdays(int dd1, int mm1, int dd2, int mm2)
{
	int jan = 31, feb = 59, march = 90, april = 120, may = 151, june = 181, july = 212, august = 243,
		september = 273, october = 304, november = 334, december = 365;
	int monthDaysOne, monthDaysTwo;
	int dayInyearOne, dayInyearTwo;
	int totalDaysBetween;

	if (mm1 == 1 || 3 || 5 || 7 || 8 || 10 || 12)
		monthDaysOne = 31 - dd1;

	if (mm1 == 4 || 6 || 9 || 11)
		monthDaysOne = 30 - dd1;
	if (mm1 == 2)
		monthDaysOne = 28 - dd1;
	
	switch (mm1)
	{
	case 1:
		dayInyearOne = jan - monthDaysOne;
		break;
	case 2:
		dayInyearOne = feb - monthDaysOne;
		break;
	case 3: 
		dayInyearOne = march - monthDaysOne;
		break;
	case 4: 
		dayInyearOne = april - monthDaysOne;
		break;
	case 5:
		dayInyearOne = may - monthDaysOne;
		break;
	case 6:
		dayInyearOne = june - monthDaysOne;
		break;
	case 7:
		dayInyearOne = july - monthDaysOne;
		break;
	case 8:
		dayInyearOne = august - monthDaysOne;
		break;
	case 9:
		dayInyearOne = september - monthDaysOne;
		break;
	case 10:
		dayInyearOne = october - monthDaysOne;
		break;
	case 11: 
		dayInyearOne = november - monthDaysOne;
		break;
	case 12: 
		dayInyearOne = december - monthDaysOne;
		break;
	
	default: cout << "invalid date ";
		break;
	}
	

	if (mm2 == 1 || 3 || 5 || 7 || 8 || 10 || 12)
		monthDaysTwo = 31 - dd2;

	if (mm2 == 4 || 6 || 9 || 11)
		monthDaysTwo = 30 - dd2;
	if (mm2 == 2)
		monthDaysTwo = 28 - dd2;
		
	switch (mm2)
	{
	case 1:
		dayInyearTwo = jan - monthDaysOne;
		break;
	case 2:
		dayInyearTwo = feb - monthDaysOne;
		break;
	case 3:
		dayInyearTwo = march - monthDaysOne;
		break;
	case 4:
		dayInyearTwo = april - monthDaysOne;
		break;
	case 5:
		dayInyearTwo = may - monthDaysOne;
		break;
	case 6:
		dayInyearTwo = june - monthDaysOne;
		break;
	case 7:
		dayInyearTwo = july - monthDaysOne;
		break;
	case 8:
		dayInyearTwo = august - monthDaysOne;
		break;
	case 9:
		dayInyearTwo = september - monthDaysOne;
		break;
	case 10:
		dayInyearTwo = october - monthDaysOne;
		break;
	case 11:
		dayInyearTwo = november - monthDaysOne;
		break;
	case 12:
		dayInyearTwo = december - monthDaysOne;
		break;

	default: cout << "invalid date ";
		break;
	}

	if (dayInyearOne > dayInyearTwo)
		totalDaysBetween = dayInyearOne - dayInyearTwo;
	
	if (dayInyearOne < dayInyearTwo)
		totalDaysBetween = dayInyearTwo - dayInyearOne;

	return totalDaysBetween;

}


Basically, Im promting the user to enter in two dates in dd mm format which is then sent to the function.

In the function I asigned each month to the position of the last day within a given month in a 365 day year e.g march = january + febuary + 31 = 90. Another example would be July = Jan + Feb + March + April + May + 31 = 212

Then we test the first dates month to see if it is a 31 day 30 day or 28 day month (we'll assume its not a leap year) and asign the amount of days in the month to a variable

We do the same to the second dates month.

Lets assume we have the date 14 6 and the date 23 8
6 = june which is a 30 day month, 8 is august which is a 31 day month.

We minus the day of the first date away from the amount of days in the month of the first date. 30 - 14 = 16. Same for the second date. 30 - 23 = 7.

We then take 16 from position of the last day in a given month in this case June which is 181 - 16 = 165. This gives us the position of the date on a 365 day calander year.

We do the same for the second date 243 - 7 = 236

We then minus these two numbers to give us the amount of days inbetween the two dates which gives us 236 - 165 = 71 days.

When I enter these same two dates in my programme

"The total days between these two dates = 62"

71 days is the answer, My logic is correct on paper but I cant spot where the flaw is in my code and why its outputting 62.



UPDATE**** It was a simple mistake in the second switch statment in the function. I copied and pasted the first switch statment and forgot to change one of the variables
Last edited on
I haven't read through all your code so I can't say if your logic makes sense but I started reading Main and it appears you don't get your first date.
print the values at each step against the values you THINK they should be when you did it by hand. This will quickly show your mistake.
@joe864863 @jonnin That was a mistake by me in the question joe, I'm taking bits of code out of the programme because theres other functions in the programme aswell and I forgot to include it in the question. I'll try that jonnin thanks.
Last edited on
Topic archived. No new replies allowed.