• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzanie poprawności numeru PESEL - zadanie Spoj.

Object Storage Arubacloud
0 głosów
5,336 wizyt
pytanie zadane 28 kwietnia 2016 w C i C++ przez drive879 Nowicjusz (160 p.)

Wykonałem zadanie ze spoja, sprawdzanie poprawności numeru pesel. Mimo że program działa prawidłowo spoj go nie uznaje. "Błędna Odpowiedź". Gdzie jest błąd ktorego nie moge znalesc ? Dopiero zaczynam zabawe ze spojem i programowaniem. Link do zadania: http://pl.spoj.com/problems/JPESEL/  Wstawiam kod:

#include <iostream>

using namespace std;

int main()
{
char pesel[11];
int iloczyny[11] = {1,3,7,9,1,3,7,9,1,3,1};
int ile;
int k;

cin >> ile;

for(int z=1;z<=ile;z++)
{
cin >> pesel;
int suma_a=0;
int suma_b=0;

for(int i=0;i<11;i++)
{
suma_a=(pesel[i]-'0')*iloczyny[i];
suma_b=suma_b+suma_a;
}

k=suma_b%10;
if(k==0)
    cout<<"D"<<endl;
else
    cout<<"N"<<endl;

}

return 0;
}

2 odpowiedzi

+2 głosów
odpowiedź 28 kwietnia 2016 przez Radfler VIP (101,030 p.)
edycja 1 maja 2016 przez Radfler

Zamiast tablicy znaków char[11] użyj std::string. Będzie prościej, bardziej elegancko i prawdopodobnie rozwiąże Twój problem.

#EDIT To ja może dopowiem, dlaczego std::string rozwiązał problem. Wczytując w linijce 16 dane do zmiennej pesel wczytujemy nieokreśloną ilość znaków. Jest to dość niebezpieczne, gdyż tablica może ich zmieścić tylko 11. Na nasze szczęście (lub nie) nasz program dostanie ich dokładnie tyle. Problemem jest null, który jest dopisywany na końcu tablicy (12 znak), a jego rozwiązaniem jest użycie std::string lub po prostu zwiększenie rozmiaru tablicy z 11 do 12.

0 głosów
odpowiedź 25 stycznia 2018 przez merlinx Nowicjusz (140 p.)

Witam, 

Czy moglibyście zobaczyć co z moim kodem nie tak.

Robię to samo zadanie i nie wiem co jest zle.

Wysyłam kod.

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;
int ilosc;

int main()
{
    fstream plik;
    plik.open("PESEL.txt",ios::in);

string linia;
int nr_linii=1;
string t[101];
int kolejny_PESEL=0;

    while(getline(plik,linia))
    {

     switch(nr_linii)
    {
    case 1: ilosc =  atoi(linia.c_str()); break;
    case 2: t[kolejny_PESEL]=linia;break;
    }
       if (nr_linii=2) {nr_linii=1; kolejny_PESEL++;}

     nr_linii++;
        }
plik.close();

for (int i=1 ; i<=ilosc; i++)
    if( ((t[i][0]-48)*1 + (t[i][1]-48)*3 +(t[i][2]-48)*7+ (t[i][3]-48)*9+ (t[i][4]-48)*1+ (t[i][5]-48)*3+ (t[i][6]-48)*7+ (t[i][7]-48)*9 + (t[i][8]-48)*1+ (t[i][9]-48)*3+ (t[i][10]-48)*1)%10==0)

           cout<<"D"<<endl;
           else
           cout<<"N"<<endl;


    return 0;
}

 

1
komentarz 25 stycznia 2018 przez manjaro Nałogowiec (37,390 p.)
I spoj ma niby wczytywać plik z dysku Twojego komputera? Gdzie w zadaniu masz napisane że dane mają być wczytywane z pliku?
komentarz 26 stycznia 2018 przez merlinx Nowicjusz (140 p.)
Dopiero zaczynam i masz rację, źle to zrozumiałem.

Dzięki !!

Podobne pytania

0 głosów
0 odpowiedzi 403 wizyt
pytanie zadane 3 października 2019 w SPOJ przez Bartek K. Nowicjusz (230 p.)
0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez creend Gaduła (4,700 p.)
0 głosów
1 odpowiedź 673 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)

92,570 zapytań

141,422 odpowiedzi

319,644 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...