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

Instrukcja warunkowa if else, przy dodawaniu pełnego roku do peselu

Ostatnio zmodyfikowano 2015-02-11 13:05
Autor Wiadomość
forneus89
Temat założony przez niniejszego użytkownika
Instrukcja warunkowa if else, przy dodawaniu pełnego roku do peselu
» 2015-02-08 13:13:12
Witam,
Treść zadania które mam rozwiązać:
- Czy numer PESEL składa się z 11 cyfr. Jeżeli nie, program wypisze komunikat: "PESEL musi miec 11 cyfr".
- Sprawdzi poprawność numeru poprzez zbadanie poprawności cyfry kontrolnej. Jeżeli numer nie jest poprawny, na konsoli zostanie wypisane:      "Niepoprawna cyfra kontrolna".
- Sprawdzi płeć zakodowaną w PESELu, i wypisze ją na konsolę: "mezczyzna" lub "kobieta".
- Wypisze datę urodzenia zakodowaną w PESELu w formacie DD.MM.RRRR. Dla dnia i miesiąca mniejszych od 10 należy użyć zera wiodącego,                 np. zamiast "5.1.2000" program wyświetli "05.01.2000".
Po wyświetleniu powyższych komunikatów program powinien się zakończyć.
Wszystko działa do momentu gdzie mam wyświetlić rok gdy podaje na przykład pesel o numerze 670203 wyświetla się prawidłowo 03.02.1967 ale gdy podam pesel 100203 powinno mi wyświetlić 03.02.2010 a nie 03.02.1910. Oczywiście założenie jest że osób przed 1930 rokiem już nie ma dlatego dopisuje daty z peselu poniżej 30 do roku 2000.  próbowałem to zrobić to if i else ale nie działa while żeby spełniło warunek też nie działa próbowałem również przez modulo ale również mi nie działało. Przesyłam kod może ktoś z was zauważy błąd w kodzie lub uchybienie.
 
C/C++
#include <iostream>
using namespace std;
int main()
{
    string pesel;
    int i, a, b, c, d, e, f, g, h, j, k, suma;
   
    cout << "Prosze podac pesel:";
    cin >> pesel;
    if( pesel.length() != 11 ) {
        cout << "PESEL musi miec 11 cyfr";
    }
   
    a =( pesel[ 0 ] ); //zamienia char na int by mozna było obliczyc
    b =( pesel[ 1 ] );
    c =( pesel[ 2 ] );
    d =( pesel[ 3 ] );
    e =( pesel[ 4 ] );
    f =( pesel[ 5 ] );
    g =( pesel[ 6 ] );
    h =( pesel[ 7 ] );
    i =( pesel[ 8 ] );
    j =( pesel[ 9 ] );
    k =( pesel[ 10 ] );
    suma =( a + 3 * b + 7 * c + 9 * d + e + 3 * f + 7 * g + 9 * h + i + 3 * j + k ) % 10;
    if( suma != 0 ) cout << "Niepoprawna cyfra kontrolna";
   
    {
        if( j % 2 || j == 0 ) cout << "mezczyzna" << endl; // reszta z dzielenia przez 2 (0=falsz,a 1=prawda)
        else cout << "kobieta" << endl;
       
    }
   
    if( a <= 2 )
    {
        cout << pesel[ 4 ] << pesel[ 5 ] << "." << pesel[ 2 ] << pesel[ 3 ] << ".";
        cout << "20" << pesel[ 0 ] << pesel[ 1 ] << endl;
    }
    else
    {
        cout << pesel[ 4 ] << pesel[ 5 ] << "." << pesel[ 2 ] << pesel[ 3 ] << ".";
        cout << "19" << pesel[ 0 ] << pesel[ 1 ] << endl;
    }
    return 0;
}
 Z góry dzięki za pomoc.
P-126184
pekfos
» 2015-02-08 14:18:05
Niepoprawnie zamieniasz char na int.
P-126186
forneus89
Temat założony przez niniejszego użytkownika
» 2015-02-08 15:38:00
Jeśli źle zamieniam string(char) na int to dlaczego w obliczeniu sumy traktuje podane litery jako cyfry ?
spróbowałem przez atoi(pesel.c_str()); ale to nic nie zmienia nadal nie rozpoznaje jako cyfra.
P-126192
pekfos
» 2015-02-08 16:09:45
znak - '0'
P-126194
aksen
» 2015-02-08 17:36:53
> Jeśli źle zamieniam string(char) na int to dlaczego w obliczeniu sumy traktuje podane litery jako cyfry ?
dlatego że do zmiennych: int i, a, b, c, d, e, f, g, h, j, k
wpisywałeś kody ASCII poszczególnych cyfr z pesel (to też liczby) zamiast cyfr które zamierzałeś wpisać


Masz tu jeszcze jeden błąd:

C/C++
cout << "Prosze podac pesel:";
cin >> pesel;
if( pesel.length() != 11 ) {
    cout << "PESEL musi miec 11 cyfr";
}

Jeśli pesel nie ma 11 cyfr program wypisuje komunikat i przechodzi do bezsensownych obliczeń.
Pytanie o pesel mogłoby być w pętli do-while do czasu podania poprawnego
P-126198
forneus89
Temat założony przez niniejszego użytkownika
» 2015-02-09 18:17:10
Czyli jeśli dobrze rozumiem to po prostu wydzieliłem pojedynczo w tablicach cyfry które cyframi już były, jeśli źle zrozumiałem proszę o poprawienie.
Ale skoro źle zamieniam char na int to dlaczego metody jak np. ( static_cast<int> (pesel[0])<=2 ) czy atoi itp. mi nie działają bo wynik nadal jest taki sam również próbowałem ze znakiem '0' ale nie wiem czy dobrze go zadeklarowałem.
A jeśli chodzi o ostatnią uwagę, że program bez sensu wylicza coś jeśli nawet pesel nie posiada 11 cyfr czy też ma ich za dużo robię ściśle wedle zadania w którym nie ma nic zawartego o zakończeniu lub ponownym poproszeniu o pin.   
P-126255
Brunon3
» 2015-02-10 17:15:45
C/C++
do( pesel.length() != 11 ) {
    cout << "Prosze podac pesel:";
    cin >> pesel;
} while

:)
P-126299
pekfos
» 2015-02-10 17:18:21
C/C++
do( pesel.length() != 11 ) {
    cout << "Prosze podac pesel:";
    cin >> pesel;
} while

:)
Co to ma być..?
P-126300
« 1 » 2
  Strona 1 z 2 Następna strona