Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Porównywanie elementów tablicy z góry ustalonym "kodem"

Ostatnio zmodyfikowano 2014-10-26 15:16
Autor Wiadomość
HydeFromT70s
Temat założony przez niniejszego użytkownika
Porównywanie elementów tablicy z góry ustalonym "kodem"
» 2014-10-25 00:43:11
Witam,

Jestem bardzo początkującym "programistom", o ile w ogóle mogę się tak nazwać, i mam pewien problem natury technicznej.

Chcę napisać program, który po wprowadzeniu przez użytkownika pewnego 7 znakowego kodu poda odpowiednią datę. Program, a raczej jego szkielet, generalnie działa poprawnie, ale jego kod nie podoba mi się i wiem, że na pewno da się to zrobić w sposób bardziej elegancki.

Kod, wprowadzany przez użytkownika w formacie: RMxDDxx (R- rok, M - miesiac, DD - dzien), np.: 6HY1763 powinien podać datę 17.08.2006

Pytanie brzmi: W jaki sposób mogę napisać ten kod w bardziej elegancki (krótszy) sposób niż przy użyciu switcha?


#include <iostream>

using namespace std;

int main()
{
    const int znakow_w_kodzie = 7;
    char kod [znakow_w_kodzie];
    int rok=0, miesiac=0, dzien1=0, dzien2=0;

    cout << "Podaj kod: ";
    for(int i=0; i<znakow_w_kodzie; i++)
        cin >> kod[i];

    // ROK
    switch(kod[0])
    {
        case '0': rok=2010;    break;
        case '1': rok=2011;    break;
        case '2': rok=2012;    break;
        case '3': rok=2013;    break;
        case '4': rok=2014;    break;
        case '5': rok=2005;    break;
        case '6': rok=2006;    break;
        case '7': rok=2007;    break;
        case '8': rok=2008;    break;
        case '9': rok=2009;    break;
    }
    //MIESIAC
    switch(kod[1])
    {
        case 'A': miesiac=01;    break;
        case 'B': miesiac=02;    break;
        case 'C': miesiac=03;    break;
        case 'D': miesiac=04;    break;
        case 'E': miesiac=05;    break;
        case 'F': miesiac=06;    break;
        case 'G': miesiac=07;    break;
        case 'H': miesiac=8;    break;
        case 'I': miesiac=9;    break;
        case 'J': miesiac=10;    break;
        case 'K': miesiac=11;    break;
        case 'L': miesiac=12;    break;
    }
    //PIERWSZA CYFRA DNIA
    switch(kod[3])
    {
        case '0': dzien1=0;    break;
        case '1': dzien1=1;    break;
        case '2': dzien1=2;    break;
        case '3': dzien1=3;    break;
    }
    // DRUGA CYFRA DNIA
    switch(kod[4])
    {
        case '0': dzien2=0;    break;
        case '1': dzien2=1;    break;
        case '2': dzien2=2;    break;
        case '3': dzien2=3;    break;
        case '4': dzien2=4;    break;
        case '5': dzien2=5;    break;
        case '6': dzien2=6;    break;
        case '7': dzien2=7;    break;
        case '8': dzien2=8;    break;
        case '9': dzien2=9;    break;
    }

    cout << "Data: " << dzien1 << dzien2 << "." << miesiac << "." << rok << endl;

    return 0;
}
P-119344
Monika90
» 2014-10-26 15:16:17
Można używać znaków w wyrażeniach arytmetycznych
C/C++
int rok( char ch )
{
    return( ch > '4' ? 2000: 2010 ) + ch - '0';
}

int main()
{
    std::string kod;
    std::cin >> kod;
    std::cout << "rok: " << rok( kod[ 0 ] ) << std::endl;
}
P-119446
« 1 »
  Strona 1 z 1