Mashnar Temat założony przez niniejszego użytkownika |
PESEL klasy » 2017-03-08 20:51:30 Mam pewien problem.Tworze program ktory bedzie z numeru pesel sprawdzał czy jest odpowiedni , date urodzenia itp itd. Musze zrobic funkcje ( a raczej metode) ktora bedzie ustawiac sie nad odpowiednim miejscu ( czyli jak mamy pesel 4569483399) i potrzebuje odczytac rok to zeby sie na 2 pozycji zatrzymal(wypisal mi 45) Napisałem cos takiego int Pesel::cyfra( int pozycja ) { long long int x; long long int y; x = PESEL; for( int i = 0; i < 11 - pozycja; i++ ) { x = PESEL / 10; } y = x % 10; cout << y; }
I mi nic nie wyrzuca , tzn 1 mi wyrzuca.Prosiłbym o pomoc.Tutaj cały kod #include <iostream> #include <fstream> #include <cstring>
using namespace std;
class Pesel { private: char * imie; char * nazwisko; public: long long int PESEL; Pesel(); Pesel( char * imie1, char * nazwisko1, long long PESEL ); ~Pesel(); void ustaw_imie( char * imie_1 ); void ustaw_nazwisko( char * nazwisko_1 ); void ustaw_pesel( long long int PESEL_1 ); public: int cyfra( int pozycja ); public: int rok(); int miesiac(); int dzien(); int CzyKobieta(); int CzyPoprawny(); void Wypisz(); }; int Pesel::cyfra( int pozycja ) { long long int x; long long int y; x = PESEL; for( int i = 0; i < 11 - pozycja; i++ ) { x = PESEL / 10; } y = x % 10; cout << y; } void Pesel::ustaw_imie( char * imie_1 ) { int x; if( imie != 0 ) { delete[] imie; } x = strlen( imie_1 ); imie = new char[ x - 1 ]; strcpy( imie, imie_1 ); } void Pesel::ustaw_nazwisko( char * nazwisko_1 ) { int x; if( imie != 0 ) { delete[] nazwisko; } x = strlen( nazwisko_1 ); nazwisko = new char[ x - 1 ]; strcpy( nazwisko, nazwisko_1 ); } Pesel::Pesel() { imie = 0; ustaw_imie( " " ); nazwisko = 0; ustaw_nazwisko( " " ); PESEL = 0; } Pesel::Pesel( char * imie1, char * nazwisko1, long long PESEL1 ) { imie = 0; ustaw_imie( imie1 ); nazwisko = 0; ustaw_nazwisko( nazwisko1 ); PESEL = PESEL1; } Pesel::~Pesel() { delete[] imie; delete[] nazwisko; }
int main() { Pesel pes( "Jan", "Hajzer", 12345678912 ); pes.cyfra( 2 ); }
|
|
1aam2am1 |
» 2017-03-08 20:57:08 Dlaczego w pętli ciągle dzielisz PESEL a nie x? |
|
Bielan |
» 2017-03-08 20:58:55 Zastanów się czy nie będzie ci wygodniej przetrzymywać PESELu w std::string a wyciągać dane za pomocą std::string::substr i konwertować za pomocą stringstream ? Dodatkowo Generalnie kod jest bardzo chaotyczny i użycie std::string chociaż dla imienia i nazwiska bardzo pomogą. |
|
Mashnar Temat założony przez niniejszego użytkownika |
» 2017-03-08 21:03:52 Własnie w tym problem , ze prowadzacy cwiczenia nie pozwolil nam korzystac z biblioteki string.. W petli dziele ten PESEL ponieważ jak dziele to przecinek sie przesuwa i dostaje ciag taki jaki potrzebuje.. ale cos mi tutaj nie działa.. |
|
Mashnar Temat założony przez niniejszego użytkownika |
» 2017-03-08 21:07:52 Co do tego , ze funkcja nie zwraca , to tak ale jak pisze return x%10 , to nic nie wypisuje kompletnie na ekran. |
|
Bielan |
» 2017-03-08 21:16:06 Pomyśl jak napisać treść dwóch funkcji o takich sygnaturach. Potem pomyśl jak użyć ich w programie.
void PodzielPesel( long long pesel, int cyfry[ 11 ] ) { }
int ObliczWartosc( int start, int koniec, int cyfry[ 11 ] ) { }
Pierwsza funkcja pozwoli ci raz napełnić tablicę konkretnymi cyframi (możesz sobie wtedy też zawsze sprawdzić czy dobre liczby się wstawiają). Druga pozwoli pobierać dowolny ciąg (za pomocą mnożenia przez kolejne dziesiątki oraz sumowania). |
|
Mashnar Temat założony przez niniejszego użytkownika |
» 2017-03-08 21:20:18 Czyli mam rozumieć , że tamta funkcja co jest napisana jest bez sensu? Wiem o co chodzi ( chyba) , tyle ze mielismy to bez tablic zrobic. |
|
carlosmay |
» 2017-03-08 21:20:40 Nie prościej od razu wyznaczyć rok, zamiast pętlę angażować? #include <iostream>
int main() { unsigned long long PESEL; std::cin >> PESEL; unsigned rok = PESEL / 1000000000; std::cout << rok << '\n'; } |
|
« 1 » 2 |