Problema „Zodiacul” poate fi enuntata extrem de simplu:

Se citeste o data calendaristica corecta prin zi si luna si se cere sa se stabileasca in ce zodie se gaseste acea data calendaristica.

Problema este o aplicatie foarte utila pentru introducerii structurii SELECTEAZA…SFARSIT_SELECTEAZA in partea de invatare a algoritmicii.

Prezentarea noastra va folosi un program in C++ pe care doritorii il pot prelua si rula in propriul IDE pentru a se convinge ca el functioneaza corect.

 

Zodiac
Zodiac

~~Cateva explicatii pentru acest algoritm~~

Zodiile pe care le cunoastem de fapt sunt:

|Zodia              |Perioada calendaristică             |
|Berbec            | 21 martie – 20 aprilie                |
|Taur                | 21 aprilie – 21 mai                      |
|Gemeni          | 22 mai – 21 iunie                         |
|Rac                 | 22 iunie – 21  iulie                        |
|Leu                 | 22 iulie – 22 august                      |
|Fecioară        | 23 august – 22 septembrie          |
|Balanță          | 23 septembrie – 22 octombrie   |
|Scorpion       | 23 octombrie – 21 noiembrie      |
|Săgetător      | 22 noiembrie – 21 decembrie     |
|Capricorn     | 22 decembrie – 19 ianuarie         |
|Vărsător        | 20 ianuarie – 18 februarie           |
|Pești               | 19 februarie – 20 martie              |

Converisia datei calendaristice

Data calendaristica pe care o citim va fi facuta dupa o relatie matematica simpla.
 conversie luna*100+ziua
In comentariul adaugat la codul sursa se pot vedea valorile conversiilor realizate.

De exemplu: 7 martie se va converti in 307 si daca este cautat intre toate valorile intervalelor de conversie se gaseste ca 219< 307 < 320 deci 7 martie este in zodia Pestilor.

#include <iostream>

using namespace std;

//zodii
//|Zodia        |Perioada calendaristică             | conversie
//|Berbec       | 21 martie - 20 aprilie             |321 - 420
//|Taur         | 21 aprilie - 21 mai                |421 - 521
//|Gemeni       | 22 mai - 21 iunie                  |522 - 621
//|Rac          | 22 iunie - 21  iulie               |622 - 721
//|Leu          | 22 iulie - 22 august               |722 - 822
//|Fecioară     | 23 august - 22 septembrie          |823 - 922
//|Balanță      | 23 septembrie - 22 octombrie       |923 - 102
//|Scorpion     | 23 octombrie - 21 noiembrie        |1023 - 1121
//|Săgetător    | 22 noiembrie - 21 decembrie        |1122 - 1221
//|Capricorn    | 22 decembrie - 19 ianuarie         |1222 - 1231, 101 - 119
//|Vărsător     | 20 ianuarie - 18 februarie         |120 - 218
//|Pești        | 19 februarie - 20 martie           |219 - 320

int main()

{

    int z, l, conversie = 0, caz;

    cout<<"citeste ziua si luna: ";

    cin >> z >> l;

    while(z<0 || z>31){

        cout<<"reciteste ziua: ";

        cin >> z;

    }

    while(l<0 || l>12){

        cout<<"reciteste luna: ";

        cin >> l;

    }

    conversie = l * 100 + z;

    if((

        (conversie>=101)&&(conversie<=119)) ||

        (conversie>=1222)&&(conversie<=1231)

        ){

            caz = 1;

        }

    else if(

        (conversie>=120)&&(conversie<=218)

        ){

        caz = 2;

    }else if(

        (conversie>=219)&&(conversie<=320)

        ){

        caz = 3;

    }else if(

        (conversie>=321)&&(conversie<=420)

        ){

        caz = 4;

    }else if(

        (conversie>=421)&&(conversie<=521)

        ){

        caz = 5;

    }

    else if(

        (conversie>=522)&&(conversie<=621)

        ){

        caz = 6;

    }

    else if(

        (conversie>=622)&&(conversie<=721)

        ){

        caz = 7;

    }

    else if(

        (conversie>=722)&&(conversie<=822)

        ){

        caz = 7;

    }

    else if(

        (conversie>=823)&&(conversie<=922)

        ){

        caz = 9;

    }

    else if(

        (conversie>=923)&&(conversie<=1022)

        ){

        caz = 10;

    }

    else if(

        (conversie>=1023)&&(conversie<=1121)

        ){

        caz = 11;

    }

    else if(

        (conversie>=1122)&&(conversie<=1221)

        ){

        caz = 12;

    }

    switch(caz) {

        case 1:

            cout << "CAPRICORN" << endl;

            break;

        case 2:

            cout << "VARSATOR" << endl;

            break;

        case 3:

            cout << "PESTI" << endl;

            break;

        case 4:

            cout << "BERBEC" << endl;

            break;

        case 5:

            cout << "TAUR" << endl;

            break;

        case 6:

            cout << "GEMENI" << endl;

            break;

        case 7:

            cout << "RAC" << endl;

            break;

        case 8:

            cout << "LEU" << endl;

            break;

        case 9:

            cout << "FECIOARA" << endl;

            break;

        case 10:

            cout << "BALANTA" << endl;

            break;

        case 11:

            cout << "SCORPION" << endl;

            break;

        case 12:

            cout << "SAGETATOR" << endl;

            break;

        default:

            cout << "Data citita nu este valida" << endl;

            break;

    }

    return 0;

}


Lasă un răspuns