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ę. 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; }
|
|
michal11 |
» 2015-11-18 16:40:30 Wczytuj jako string i konwertuj później każdą cyfrą na inta. |
|
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: 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). |
|
Monika90 |
» 2015-11-18 22:13:58 Żeby skonwertować pojedynczy znak, należy odjąć od niego '0' str[ 0 ] - '0' |
|
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... |
|
Monika90 |
» 2015-11-18 23:15:29 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ę. |
|
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...) |
|
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ś :): 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...:) |
|
« 1 » 2 |