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

Pochodna zadania ze SPOJ - pesel (1261. Pesel)

Ostatnio zmodyfikowano 2015-11-20 13:48
Autor Wiadomość
maciaas87
Temat założony przez niniejszego użytkownika
Pochodna zadania ze SPOJ - pesel (1261. Pesel)
» 2015-11-18 15:57:36
hej,
od rana mecze się z tym programem - wstępnie już działa (wg algorytmu podanego na spoj, który chyba nie jest do końca prawidłowy jeśli chodzi o sprawdzanie peselu, ale mniejsza z tym).
problem jest we wprowadzaniu danych do tablicy t_pesel[11] - chciałbym, żeby pesel był wpisywany całym ciągiem, a nie odbywał się poprzez wprowadzanie kolejnych liczb (oczywiście żeby była możliwość przypisania tego do tablicy).
próbowałem już robić cin np. 11 rożnych zmiennych a potem przypisanie ich do tablicy (czyli np cin >> a >> b...>>n, ale nie sprawdza to się ponieważ po każdej pojedynczej cyfrze muszę wciskać "enter", żeby przeskoczyć do kolejnego cina... a jeśli wpisze cały pesel np 87091121630 to cin to traktuje jako pierwszą liczbę.


C/C++
using namespace std;

int main()


{
   
    int t_pesel[ 11 ];
    int t_algo[ 11 ];
    int liczba;
   
   
    for( int i = 0; i < 11; i++ )
   
    {
        cout << "Wprowadz " <<( i + 1 ) << " liczbe peselu" << endl;
        cin >> liczba;
        t_pesel[ i ] = liczba;
       
    }
   
    cout << "Twoj pesel: ";
   
    for( int i = 0; i < 11; i++ )
    {
        cout << t_pesel[ i ];
    }
   
    t_algo[ 0 ] = t_pesel[ 0 ] * 1;
    t_algo[ 1 ] = t_pesel[ 1 ] * 3;
    t_algo[ 2 ] = t_pesel[ 2 ] * 7;
    t_algo[ 3 ] = t_pesel[ 3 ] * 9;
    t_algo[ 4 ] = t_pesel[ 4 ] * 1;
    t_algo[ 5 ] = t_pesel[ 5 ] * 3;
    t_algo[ 6 ] = t_pesel[ 6 ] * 7;
    t_algo[ 7 ] = t_pesel[ 7 ] * 9;
    t_algo[ 8 ] = t_pesel[ 8 ] * 1;
    t_algo[ 9 ] = t_pesel[ 9 ] * 3;
    t_algo[ 10 ] = t_pesel[ 10 ] * 1;
   
    cout << endl;
   
   
    cout << "Algorytm sprawdzajacy: ";
   
    for( int i = 0; i < 11; i++ )
    {
       
        cout << t_algo[ i ];
    }
   
    int suma = 0;
    for( int i = 0; i < 11; i++ )
   
    {
        suma = suma + t_algo[ i ];
       
    }
   
    cout << endl;
   
    cout << "Suma wynosi: " << suma << endl;
   
    if( suma > 0 )
    {
        if( suma % 10 == 0 )
             cout << "pesel jest ok" << endl;
        else
             cout << "pesel jest bledny";
       
    }
   
   
    return 0;
}
P-140336
michal11
» 2015-11-18 16:40:30
Wczytuj jako string i konwertuj później każdą cyfrą na inta.
P-140337
maciaas87
Temat założony przez niniejszego użytkownika
» 2015-11-18 21:57:56
dzięki za info. znalazłem w google taki sposób zamiany str na int:
C/C++
string str = "123";
int i = atoi( str.c_str() );

faktycznie konwertuje stringa do int... ale załóżmy ze wpisuje stringa str 89010101012 -> konwertuje na int liczba, który to po konwersji również będzie równał się  89010101012.
jak mogę teraz zrobić, żeby t[0]=8, t[1]=9, t[2]=0..., t[11]=2 (tzn. przypisać pierwsza cyfrę int do tablicy).

P-140360
Monika90
» 2015-11-18 22:13:58
Żeby skonwertować pojedynczy znak, należy odjąć od niego '0' 
str[ 0 ] - '0'
P-140362
maciaas87
Temat założony przez niniejszego użytkownika
» 2015-11-18 22:55:11
dzięki za info - ale mam prośbę- czy mogłabyś mi podać na przykładzie bo nie za bardzo rozumiem niestety...
P-140366
Monika90
» 2015-11-18 23:15:29
C/C++
std::cout << "podaj pesel: ";
std::string number;
std::cin >> number;
int sum = 0;
for( char digit: number )
{
    sum += digit - '0';
}

std::cout << "suma cyfr peselu: " << sum << std::endl;
To powinno wystarczyć, mam nadzieję.
P-140367
maciaas87
Temat założony przez niniejszego użytkownika
» 2015-11-19 09:09:27
dzięki... jednak nie wystarcza :(...

ogólnie rozumiem ten zapis... ale dalej mam problem żeby zapisać skonwertowane liczby w tablicy. Twoj zapis wyswietli mi sumę liczb peselu, a ja nie wiem jak zrobic, żeby pierw zapisal te liczby do tablicynr1...
musze to zrobic, po na pojedynczych liczbach z peselu musza zostac wykonanie dzialania (np. pierwsza liczba peselu *1, druga l.p * 3 itd...)
P-140370
maciaas87
Temat założony przez niniejszego użytkownika
» 2015-11-19 09:54:47
nie wiem do końca czemu, ale w końcu działa takie coś :):

C/C++
cout << "Wprowadz pesel: " << endl;
cin >> p;
for( int i = 0; i < 11; i++ )
{
    t_pesel[ i ] = p[ i ] - '0';
}

czy jest to rozwiązanie ok ?
czyli np. pesel 88091102620
czyli skonwertowany string do int, przypisuje automatycznie dane do tablicy nowej zmiennej tak ?
p[0] = 8, p[1]=8, p[2]=0... , p[11]=0 ;[/i]


nie dokonca rozumiem czemu dziala... bo nie uzylem przeciez zadnej zmiany string na int typu atoi albo char digit: itp...

prosze o wyjasnienie czemu dziala...:)
P-140372
« 1 » 2
  Strona 1 z 2 Następna strona