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

Spoj Pesel(bląd kompilacji)

0 głosów
1,338 wizyt
pytanie zadane 28 września 2017 w C i C++ przez Reccon Nowicjusz (240 p.)

Witam. Pisałem sobie programik na Spoju, po komentarzach widziałem, że będzie zabawa ale i tak się podjąłem
Problem polega na tym, że wyskakuje błąd kompilacji z jakiegoś powodu(czyli mojego).

Mój kod:

#include <iostream>
#include <string>
using namespace std;

void konwert(long long);

int main()
{	
	int ile;
	long long pesel;
	
	cin >> ile;
	for (int i = 0; i < ile; i++)
	{
		cin >> pesel;
		konwert(pesel);
	}

	system("pause");
	return 0;
}

void konwert(long long pes)
{
	int x;
	int liczba[11];
	int mnoznik[11] = { 1,3,7,9,1,3,7,9,1,3,1 };
	string liczby[11];

	string pesel = to_string(pes);
	for (int i = 0; i < 11; i++)
	{
		liczby[i] = pesel[i];
		liczba[i] = stoi(liczby[i]);
	}

	for (int i = 0; i < 11; i++)	liczba[i] *= mnoznik[i];
	
	x = liczba[0];
	for (int i = 1; i < 11; i++)	x += liczba[i];

	x %= 10;
	if (x == 0) cout << "D" << endl;
	else cout << "N" << endl;
}


Zrobiłem to za pomocą C++ 11 i stringów bo nie miałem innego pomysłu w głowie. U mnie wszystko działa nawet sprawdzałem przykładowe pesele z internetu i tez działa tak więc proszę o pomoc tutaj ^^ Czekam na odpowiedzi :)

2 odpowiedzi

0 głosów
odpowiedź 29 września 2017 przez Reccon Nowicjusz (240 p.)
 
Najlepsza

Dla ciekawskich. Te zadanie jest popsute. Po wielu godzinach kod wygląda tak(Nie patrz póki nie rozwiązałeś):

#include <iostream>

using namespace std;

int main()
{
	int ile;
	int result;
	int liczby[11];
	int mnoznik[11] = { 1,3,7,9,1,3,7,9,1,3,1 };

	char znak[12];

	cin >> ile;
	for (int i = 0; i < ile; i++)
	{
		result = 0;
		cin >> znak;
		for (int j = 0; j < 11; j++)
		{
			liczby[j] = znak[j];
			liczby[j] -= 48;
			liczby[j] *= mnoznik[j];
			result += liczby[j];
		}result %= 10;
		if (result == 0) cout << "D" << endl;
		else cout << "N" << endl;
	}
	return 0;
}

Kod zaakceptował się. Czemu? Nie mam pojęcia możliwe, że dzięki wyzerowaniu sumy result przed każdym obrotem pętli :) Walczcie do końca nawet z tak głupim zadaniem ^^
PS. Każda inna wersja tego kodu prawdopodobnie była dobra lecz nie zerowałem sumy wcześniej więc.. :)

komentarz 21 stycznia 2018 przez Maciej3206 Użytkownik (570 p.)
Witam,

ja nieco inaczej interpretuję treść zadań - sądzę, że program powinien najpierw wczytać dane dla wszystkich prób, a następnie wypisać wyniki, tak jak to zostało opisane w przykładzie opisu zadania. Poza tym Pesel jest liczbą i prosta operacją można w pętli wyselekcjonować poszczególne cyfry (1 krok - wyznaczenie modułu, 2 krok odjęcie wartości modułu od pierwotnej wartości peselu, 3 krok - nową wartość modułu należy podzielić przez 10).

Maciej
+1 głos
odpowiedź 28 września 2017 przez cyklop123 Bywalec (2,790 p.)
wydajemi się że w 33 przypisujesz chara do integera
komentarz 28 września 2017 przez Reccon Nowicjusz (240 p.)
W 33 linijce przypisuje pierwszą literę 'pesel' do tablicy 'liczby' a w 34 linijce konwertuje tablice 'liczby' na inty.
komentarz 28 września 2017 przez cyklop123 Bywalec (2,790 p.)
a czy można przypisać literę do inta ? bo wydaje mi się że nie
komentarz 28 września 2017 przez Reccon Nowicjusz (240 p.)
Raczej nie można ale można przypisać pojedynczą literę ze stringa do innego stringa z tablicą a tego innego "przekształcić" w inta za pomocą stoi. (pogmatwane) Tam są dwie podobne zmienne do siebie liczbA i liczbY. LiczbA jest intem a liczbY jest stringiem.

Podobne pytania

0 głosów
2 odpowiedzi 1,520 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez Ostry Nowicjusz (150 p.)
0 głosów
1 odpowiedź 834 wizyt
pytanie zadane 22 lutego 2023 w C i C++ przez alfutek Początkujący (360 p.)
0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez creend Gaduła (4,700 p.)

93,742 zapytań

142,677 odpowiedzi

323,296 komentarzy

63,326 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...