Одређивање сутрашњег и јучерашњег датума

Примери




Када пишемо програм који врши неке функције са једним датумом али и са више њих важно је да обратимо пажњу пре свега на следеће :
(i) да ли је година преступна (од тога зависи да ли фебруар има 28 или 29 дана),
(ii) колико дана има који месец (немају сви месеци исти број дана),
(iii) редни број дана не може бити мањи од 1, а ни већи од броја дана у месецу у ком је тај дан и
(iv) редни број месеца не може бити мањи од 1, а ни већи од 12.

Sorry, the GeoGebra Applet could not be started. Please make sure that Java 1.4.2 (or later) is installed and active in your browser (Click here to install Java now)

*У случају да се анимација не приказује, притиснути дугме Прикажи слику




Пример 1. Написати програм који за унети датум враћа сутрашњи датум.

Решење :
Да би написали програм који одређује сутрашњи датум, поред уводних напомена треба да важи и следеће :
Ако је редни број дана који смо унели мањи од броја дана које има месец у коме је тај дан,
онда се редни број дана повећава за 1, тј редни број сутрашњег дана је за један већи од редног броја унетог дана, редни број месеца остаје исти и редни број године остаје исти.
Ако је редни број дана који смо унели једнак броју дана које има месец у коме је тај дан,
онда је сутрашњи дан, први дан у следећем месецу, тада се
ако је редни број месеца био мањи од 12, он повећава за 1,
а ако је био 12, онда је месец први месец у следећој години, редни број године повећава за 1.


Правимо форму облика:
Слика 6.48. Почетни изглед форме
Преименујемо label-e и button1
Слика 6.49. Изглед форме након преименовања компоненти

Кликом на дугме, програм треба да нам врати сутрашњи датум у односу на датум који смо унели. Да би се то остварило потребно је да функцију дугмета повежемо са подацима које уносимо. Реализација функције дугмета постиже се писањем одговарајућег кода у делу програма које се отвара двоструким кликом на дугме (button1) :

private void button1_Click(object sender, EventArgs e)
{
    //Promenljive koje koristimo
    int d, m, g, p, b;
    d = int.Parse(textBox1.Text);
    m = int.Parse(textBox2.Text); 
    g = int.Parse(textBox3.Text);

    //Proveravamo da li je godina prestupna
    if ((g % 4 == 0) && (g % 100 != 0) || (g %400 == 0))
        //Ako jeste, p je jednako 1
        p = 1;
    //U suprotnom
    else
        //Godina nije prestupna, p je jednako 0
        p = 0;

    //Posto nemaju svi meseci isto dana
    if (m == 2)
        //Februar ima 28 ili 29 dana u zavisnosti da li je god prestupna
        b = 28 + p;
    //April,jun,septembar i novembar
    else if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
        //Imaju 30 dana
        b=30;
    //Ostali meseci januar, mart, jul, avgust, oktobar i decembar
    else
        //Imaju po 31 dan
        b=31;

    //Ako unesemo redni broj dana veci nego sto mesec ima ili manji od 1
    //Ili br meseca veci od 12 ili manji od jedan
    if((d > b) || (d < 1) || (m > 12) || (m < 1))
        //Ispisujemo poruku o pogresnom unosu datuma 
        label3.Text = "Uneli ste pogresan datum!!!";
    //U suprotnom uneli smo ispravan datum
    else 
    {
        //Ako je reni broj dana manji od broja dana u mesecu, u kom je taj dan
        if (d < b)
            //Redni br dana se povecava za 1
            d = d + 1;
        //Inace redni broj dana je jednak broju dana u mesecu
        else 
        {
            //Slececi dan je 1 dan u sledecem mesecu
            d = 1;
            //Ako je redni broj meseca manji od 12
            if (m < 12)
                //Redni broj meseca se povecava za 1
                m = m + 1;
            //Inace redni broj meseca je 12
            else
            {
                //Sledeci mesec je prvi mesec u sledecoj godini
                m = 1;
                //I redni br.godine se povecava za 1
                g = g + 1;
            }
        }
        //Ispisujemo sutrasnji datum 
        label3.Text = "Sutrasnji datum je: " + d + "." + m + "." + g + ".";
     }       
}


Покренемо програм и проверимо :


Слика 6.50. Изглед форме након покретања програма

Пример 2. Написати програм који за унети датум враћа јучерашњи датум.

Решење :
Да би написали програм који одређује јучерашњи датум, поред уводних напомена треба да важи и следеће :
Ако је редни број дана који смо унели већи од 1,
онда се редни број дана смањује за 1, тј редни број јучерашњег дана је за један мањи од редног броја унетог дана, редни број месеца остаје исти и редни број године остаје исти.
Ако је редни број дана који смо унели једнак 1, редни број месеца се смањује за 1,
ако је редни број месеца после смањења 0, редни број месеца је 12 и редни број године се смањује за1,
ако је редни број месеца после смањења 2, дан је 28 или 29 у зависности да ли је година преступна,
ако је редни број месеца после смањења 4, 6, 9, или 11, дан је 30,
ако је редни број месеца после смањења 1, 3, 5, 7, 8, 10, или 12, дан је 31.
У последња три случаја редни број године остаје исти.


Правимо форму облика:
Слика 6.51. Почетни изглед форме
Преименујемо label-e и button1
Слика 6.52. Изглед форме након преименовања компоненти

Кликом на дугме, програм треба да нам врати јучерашњи датум у односу на датум који смо унели. Да би се то остварило потребно је да функцију дугмета повежемо са подацима које уносимо. Реализација функције дугмета постиже се писањем одговарајућег кода у делу програма које се отвара двоструким кликом на дугме (button1) :

private void button1_Click(object sender, EventArgs e)
{
    //Promenljive koje koristimo
    int d, m, g, p, b;
    d = int.Parse(textBox1.Text);
    m = int.Parse(textBox2.Text);
    g = int.Parse(textBox3.Text);

    //Proveravamo da li je godina prestupna
    if ((g % 4 == 0) && (g % 100 != 0) || (g % 400 == 0))
        //Ako jeste,  p je jednako 1
        p = 1;
    //U suprotnom
    else
        //Godina nije prestupna, p je jednako 0
        p = 0;

    //Posto nemaju svi meseci isto dana
    if (m == 2)
        //Februar ima 28 ili 29 dana u zavisnosti da li je god prestupna
        b = 28 + p;
    //April,jun,septembar i novembar
    else if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
        //Imaju 30 dana
        b = 30;
    //Ostali meseci januar, mart, jul, avgust, oktobar i decembar
    else
        //Imaju po 31 dan
        b = 31;

    //Ako unesemo redni broj dana veci nego sto mesec ima ili manji od 1
    //Ili br meseca veci od 12 ili manji od jedan
    if ((d > b) || (d < 1) || (m > 12) || (m < 1))
        //Ispisujemo poruku o pogresnom unosu datuma
        label3.Text = "Uneli ste pogresan datum!!!";
    //U suprotnom uneli smo ispravan datum
    else
    {
        //Ako je broj dana veci od 1
        if (d > 1)
            //Redni broj dana se smanjuje za 1
            d = d - 1;
        //Inace je br.dana jednak 1
        else
        {
            //Redni broj meseca se smanjuje za 1
            m = m - 1;
            //Ako je tada redni broj meseca jednak 0
            if (m == 0)
            {
                //Prethodni mesec je poslednji mesec u prethodnoj godini
                m = 12;
                //Redni broj godine se smanjuje za 1
                g = g - 1;
            }
            //Ako je tada redni broj meseca jednak 2
            if (m == 2)
                //Tada je dan poslednji dan u februaru
                d = 28 + p;
            //U suprotnom ako je redni broj meseca 4,6,9,11
            else if ((m == 4) || (m == 6) || (m == 9) || (m == 11))
                //Tada je dan 30
                d = 30;
            //Inace
            else
                //Dan je 31 
                d = 31;
        }
        //Ispisujemo jucerasnji datum
        label3.Text = "Jucerasnji datum je: " + d + "." + m + "." + g + ".";
    }       
}


Покренемо програм и проверимо :


Слика 6.53. Изглед форме након покретања програма

Пример 3. Написати програм који када унесемо два датума враћа који је датум претходни.

Решење :
Да би написали програм који одређује који је датум претходни, треба да важе уводне напомене за оба датума која уносимо. Затим прво поредимо године.
Ако су редни бројеви године једнаки, пореде се месеци,
ако су редни бројеви месеци једнаки, пореде се дани,
ако су дани једнаки, унели смо исте датуме,
иначе датум који има мањи редни број дана је перетходни.
ако редни бројеви месеци нису једнаки, датум који има мањи редни број месеца је перетходни.
Ако редни бројеви године нису једнаки, датум који има мањи редни број године је перетходни.


Правимо форму облика:
Слика 6.54. Почетни изглед форме
Преименујемо label-e и button1
Слика 6.55. Изглед форме након преименовања компоненти

Кликом на дугме, програм треба да нам врати који датум је претходни од два датума која смо унели. Да би се то остварило потребно је да функцију дугмета повежемо са подацима које уносимо. Реализација функције дугмета постиже се писањем одговарајућег кода у делу програма које се отвара двоструким кликом на дугме (button1) :

private void button1_Click(object sender, EventArgs e)
{
    //Promenljive koje koristimo
    int d1, m1, g1, d2, m2, g2, p1, p2, b1, b2;
    d1 = int.Parse(textBox1.Text);
    m1 = int.Parse(textBox2.Text);
    g1 = int.Parse(textBox3.Text);
    d2 = int.Parse(textBox4.Text);
    m2 = int.Parse(textBox5.Text);
    g2 = int.Parse(textBox6.Text);

    //Proveravamo da li je prva godina koju smo uneli prestupna
    if ((g1 % 4 == 0) && (g1 % 100 != 0) || (g1 % 400 == 0))
        p1 = 1;
    else
        p1 = 0;
    //Odredjujemo koliko dana imaju meseci u prvoj godini 
    if (m1 == 2)
        b1 = 28 + p1;
    else if ((m1 == 4) || (m1 == 6) || (m1 == 9) || (m1 == 11))
        b1 = 30;
    else 
        b1 = 31;
     
    //Proveravamo da li je druga godina koju smo uneli prestupna
    if ((g2 % 4 == 0) && (g2 % 100 != 0) || (g2 % 400 == 0))
        p2 = 1;
    else
        p2 = 0;
    //Odredjujemo koliko dana imaju meseci u drugoj godini
    if (m2 == 2)
        b2 = 28 + p2;
    else if ((m2 == 4) || (m2 == 6) || (m2 == 9) || (m2 == 11))
        b2 = 30;
    else 
        b2 = 31;

    //Proveravamo za obe godine koje smo uneli da li vazi : ako unesemo redni broj dana veci 
    //Nego sto mesec ima ili manji od 1 ili br meseca veci od 12 ili manji od jedan
    if (((d1 > b1)||(d1 < 1)||(m1 > 12)||(m1 < 1)) || ((d2 > b2)||(d2 < 1)||(m2 > 12)||(m2 < 1)))
        //Ispisujemo poruku o pogresnom unosu datuma
        label4.Text = "Uneli ste pogresan datum!!!";
    //U suprotnom uneli smo ispravne datume
    else
    {
        //Ako su redni brojevi godina jednaki
        if (g1 == g2)
        {
            //I ako su redni brojevi meseci jednaki
            if (m1 == m2)
            {
                //I ako su redni brojevi dana jednaki
                if (d1 == d2)
                    //Ispisujemo poruku
                    label4.Text = "Uneli ste iste datume.";
                //U suprotnom ako je redni broj dan prvog datuma veci
                else if (d1 > d2)
                    //Ispisujemo poruku da drugi datum prethodi prvom
                    label4.Text = "Datum: "+d2+"."+m2+"."+g2+" prethodi datumu:"+d1+"."+m1+"."+g1;
                //U suprotnom
                else
                     //Ispisujemo poruku da prvi datum prethodi drugom
                     label4.Text = "Datum: "+d1+"."+m1+"."+g1+" prethodi datumu:"+d2+"."+m2+"."+g2;
            }
            //U suprotnom ako redni br.meseci nisu jednaki, ako je redni br.prvog veci od drugog
            else if (m1 > m2)
                //Ispisujemo poruku da drugi datum prethodi prvom
                label4.Text = "Datum: "+d2+"."+m2+"."+g2+" prethodi datumu:"+d1+"."+m1+"."+g1;
            //U suprotnom
            else
                //Ispisujemo poruku da prvi datum prethodi drugom
                label4.Text = "Datum: "+d1+"."+m1+"."+g1+" prethodi datumu:"+d2+"."+m2+"."+g2;
        }
        //U suprotnom ako redni brojevi godina nisu jednaki, ako je redni broj prve veci od druge
        else if (g1 > g2)
            //Ispisujemo poruku da drugi datum prethodi prvom
            label4.Text = "Datum: "+d2+"."+m2+"."+g2+" prethodi datumu:"+d1+"."+m1+"."+g1;
        //U suprotnom
        else
            //Ispisujemo poruku da prvi datum prethodi drugom
            label4.Text = "Datum: "+d1+"."+m1+"."+g1+" prethodi datumu:"+d2+"."+m2+"."+g2;
    }
}