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

Spoj Pesel(bląd kompilacji)

VPS Starter Arubacloud
0 głosów
677 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,170 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez Ostry Nowicjusz (150 p.)
0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 22 lutego 2023 w C i C++ przez alfutek Początkujący (360 p.)
0 głosów
1 odpowiedź 342 wizyt
pytanie zadane 1 listopada 2019 w C i C++ przez creend Gaduła (4,700 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...