Cookies help us deliver our services. By using our services, you agree to our use of cookies.

PrimerOO: Razlika med redakcijama


 
 
Vrstica 121: Vrstica 121:
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#009900">int</font> st_let <font color="#990000">=</font> leto <font color="#990000">-</font> <font color="#993399">1900</font><font color="#990000">;</font><br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#009900">int</font> st_let <font color="#990000">=</font> leto <font color="#990000">-</font> <font color="#993399">1900</font><font color="#990000">;</font><br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_dni <font color="#990000">=</font> st_dni <font color="#990000">+</font> st_let <font color="#990000">*</font> <font color="#993399">365</font><font color="#990000">;</font><br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_dni <font color="#990000">=</font> st_dni <font color="#990000">+</font> st_let <font color="#990000">*</font> <font color="#993399">365</font><font color="#990000">;</font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_dni <font color="#990000">+=</font> st_let <font color="#990000">/</font> <font color="#993399">4</font><font color="#990000">;</font> <i><font color="#9A1900">// prištejemo še dneve v prestopnih letih leta</font></i><br>
+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st_dni <font color="#990000">+=</font> st_let <font color="#990000">/</font> <font color="#993399">4</font><font color="#990000">;</font> <i><font color="#9A1900">// prištejemo še dneve v prestopnih letih</font></i><br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>

Trenutna redakcija s časom 12:46, 21. februar 2007

glavni.cpp

#include <iostream>
using namespace std;

#include "Datum.h"

int main()
{
        // datuma dveh praznikov
        Datum presernov_dan(8, 2, 2007);
        Datum velika_noc(8, 4, 2007);
        
        // danasnji datum vnese uporabnik
        int dan, mesec, leto;
        cout << "Vnesi danasnji datum (dan mesec leto):";
        cin >> dan >> mesec >> leto;
        Datum danes(dan, mesec, leto);
        
        // izpis danasnjega datuma
        cout << "Danes je: ";
        danes.izpisi();
        cout << "." << endl;
        // pretekel cas od prejsnjega praznika
        cout << "Presernov dan je bil pred " << danes.odstej(presernov_dan) << " dnevi." << endl;
        // cas do naslednjega praznika
        cout << "Velika noč bo čez " << velika_noc - danes << " dni." << endl;
        
        return 0;
}

Datum.h in Datum.cpp

#ifndef DATUM_H_
#define DATUM_H_

class Datum
{
        int dan, mesec, leto;
        
        // pomožna funkcija, ki pretvori datum v število dni po 1.1. 1900
        int stevilo_dni_od_1900() const;
        
public:
        /**
         * konstruktor ustvari datum iz treh celih števil
         * prvi argument je dan v mesecu
         * drug argument je mesec v letu
         * tretji argument je številka leta
         */
        Datum(int, int, int);
        
        /*
         * metoda izpise datom po ISO standardu yyyy-mm-dd
         */
        void izpisi();
        
        /*
         * funkcija vrne število dni med dvema datuma
         */
        int odstej(const Datum&);
        
        /*
         * prekriti operator za računanje razlike v datumih
         */
        int operator-(const Datum&);
};

#endif /*DATUM_H_*/

#include <iostream>
using namespace std;

#include "Datum.h"

Datum::Datum(int d, int m, int l)
{
        dan = d;
        mesec = m;
        leto = l;
}

// metoda izpise datom po ISO standardu yyyy-mm-dd
void Datum::izpisi()
{
        cout << leto << '-';
        if (mesec < 10) // stevilo se mora izpisati dvomestno
        {
                cout << '0';
        }
        cout << mesec << '-';
        if (dan < 10) // stevilo se mora izpisati dvomestno
        {
                cout << '0';
        }
        cout << dan;
}

// metoda za izračun števila dni med dvema datuma
int Datum::odstej(const Datum & d2) {

        return stevilo_dni_od_1900() - d2.stevilo_dni_od_1900();
}

// prekriti operator za izračun dni med dvema datuma
int Datum::operator-(const Datum & d2)
{
        // uporabimo ze napisano metodo
        return odstej(d2);
}

// pomožna metoda, ki pretvori datum v število dni po 1. 1. 1900
int Datum::stevilo_dni_od_1900() const
{
        int st_dni = 0;
        
        int st_let = leto - 1900;
        st_dni = st_dni + st_let * 365;
        st_dni += st_let / 4; // prištejemo še dneve v prestopnih letih
        
        
        /*
         * izračun števila dni v tekočem letu
         * najprej prištejem število dni v preteklih mesecih
         * nazadnje pa še število dni v tekočem mesecu
         */
        switch (mesec)
        {
                case 12:
                        st_dni += 30;
                case 11:
                        st_dni += 31;
                case 10:
                        st_dni += 30;
                case 9:
                        st_dni += 31;
                case 8:
                        st_dni += 31;
                case 7:
                        st_dni += 30;
                case 6:
                        st_dni += 31;
                case 5:
                        st_dni += 30;
                case 4:
                        st_dni += 31;
                case 3:
                        if (leto % 4 == 0) // je prestopno leto?
                                st_dni += 29;
                        else
                                st_dni +=28;
                case 2:
                        st_dni += 31;
                default:
                        st_dni += dan; // število dni v tekočem mesecu
        }
        
        return st_dni;
}