// Returnerer antall dager mellom int Timer::forskjellDatoer(int t1, int t2) { // to datoer ('t1' og 't2'): int d1, d2, m1, m2, a1, a2, tot1, tot2, i; // Masse ulike hjelpevariable: konverter(t1, d1, m1, a1); // Konverterer 't1/t2' over i konverter(t2, d2, m2, a2); // 'd1/d2', 'm1/m2' og 'a1/a2': tot1 = dagnummer(d1, m1, a1); // Finner deres dagnummer i tot2 = dagnummer(d2, m2, a2); // hvert sitt �r ('a1/a2'). for (i = 1900; i < a1; i++) // Finner TOTALT antall dager tot1 += (skuddaar(i)) ? 366 : 365; // siden �r 1900 for hvert av for (i = 1900; i < a2; i++) // de to datoene: tot2 += (skuddaar(i)) ? 366 : 365; return ((tot2 > tot1) ? tot2-tot1 : tot1-tot2); // Returnerer forskjellen. }
// Returnerer datoen ETTER 't', på samme form: int Timer::nestedato(int t) { int d, m, a; konverter(t, d, m, a); // Konverterer 't' over i 'd', 'm' og 'a'. dager_pr_maaned[1] = (skuddaar(a)) ? 29 : 28; // Fyller feb. aktuelt år. d++; // dag++ if (d > dager_pr_maaned[m-1]) { m++; d = 1; } // Ny måned: mnd++ dag=1 if (m > 12) { a++; m = 1; } // Nytt år: aar++ mnd=1 return (a*10000) + (m*100) + d; // Regner ut/omgjør og returnerer. }
// IDENTISK TIL OPPG_20 (h�sten): // Ut fra datoens input, s� returneres (om mulig) // denne datoens dagnummer i �ret, ellers returneres 0. int Timer::dagnummer(int da, int ma, int aa) { // Setter opp antall dager i m�nedene. // Verdien for februar settes senere. int totalDagnr, i; if (aa < 1600 || aa > 2100) return 0; // Ulovlig �r. if (ma < 1 || ma > 12) return 0; // Ulovlig m�ned. // Ut fra om �ret er skudd�r eller ei, // s� settes verdien for februar: dagerPrMaaned[1] = (skuddaar(aa)) ? 29 : 28; if (da < 1 || da > dagerPrMaaned[ma-1]) return 0; // Ulovlig dag: // Garantert at er en lovlig dato !! totalDagnr = da; for (i = 0; i < ma-1; i++) // Regner ut datoens dagnummer. totalDagnr += dagerPrMaaned[i]; return totalDagnr; // Returnerer dagnummeret. }