kodo12323
niby działa jak tak zmieniłem ale powiesz mi czy jest dobrze?
kodo12323
jednak nie działa bo za każdym razem jest mężczyzna, gdzie jest błąd ?
brt369
błąd jest taki że PESEL ma zawsze 11 liter w twoim kodzie zrobiłeś że jeśli długość PESELU nie jest parzysta (a długość peselu zawsze wynosi 11) to ktoś jest mężczyzną, żeby twój kod działał najpierw musisz czy liczba 10 (W kodzie musiałem napisać 9) jest parzysta, czyli np. w peselu RRMMDDNNNPK interesuję cię liczba pod literą P
kodo12323
czyli co mam dodać do tego programu, w sensie co tam napisać? bo tak to nie wiem jak zrobić tak jak napisałeś
brt369
po pierwsze musisz wiedzieć jaka jest litera 10, zrobiłem to linią
char plecChar = pesel.at(9);
Teraz możesz zamienić linijkę kodu z: if (pesel.size()-1 % 2 == 0) Na: if (stoi(to_string(plecChar)) % 2 == 0)
Po drugie dodał bym linijke sprawdzającą czy PESEL jest poprawny:
Odpowiedź:
Wersja na sprawdzaniu na char:
#include <iostream>
#include <string>
using namespace std;;
int main()
{
setlocale(LC_CTYPE, "Polish"); // polskie znaki
string pesel;
cout << "Podaj swój pesel (uważaj żeby nie zrobić spacji na początku lub na końcu!): ";
std::getline(std::cin, pesel);
char plecChar = pesel.at(9);
if (pesel.length() != 11) {
cout << "Podałeś błędny pesel!";
}
else if (plecChar == '0' || plecChar == '2' || plecChar == '4' || plecChar == '6' || plecChar == '8')
{
cout << "Jesteś kobietą\n";
}
else if (plecChar == '1' || plecChar == '3' || plecChar == '5' || plecChar == '7' || plecChar == '9') {
cout << "Jesteś mężczyzną\n";
}
}
Wersja na sprawdzanie na parzystość:
#include <iostream>
#include <string>
using namespace std;;
int main()
{
setlocale(LC_CTYPE, "Polish"); // polskie znaki
string pesel;
cout << "Podaj swój pesel (uważaj żeby nie zrobić spacji na początku lub na końcu!): ";
std::getline(std::cin, pesel);
char plecChar = pesel.at(9);
if (pesel.length() != 11) {
cout << "Podałeś błędny pesel!";
}
else if (stoi(to_string(plecChar)) % 2 == 0)
{
cout << "Jesteś kobietą\n";
}
else if (stoi(to_string(plecChar)) % 2 != 0) {
cout << "Jesteś meżczyzną\n";
}
}
Wersja na sprawdzanie na parzystość
,poprawiłem literówki
#include
using namespace std;;
int main()
{
setlocale(LC_ALL, "Polish");
string pesel;
cout << "Podaj pesel:" ;
getline(cin, pesel);
;
if (pesel.size()-1 % 2 == 0)
{
cout << "Jesteś kobietą";
}
else if (pesel.size()-1 % 2 != 0) {
cout << "Jesteś meżczyzną";
}
}
w twoim kodzie zrobiłeś że jeśli długość PESELU nie jest parzysta (a długość peselu zawsze wynosi 11) to ktoś jest mężczyzną,
żeby twój kod działał najpierw musisz czy liczba 10 (W kodzie musiałem napisać 9) jest parzysta, czyli np. w peselu RRMMDDNNNPK interesuję cię liczba pod literą P
char plecChar = pesel.at(9);
Teraz możesz zamienić linijkę kodu z:
if (pesel.size()-1 % 2 == 0)
Na:
if (stoi(to_string(plecChar)) % 2 == 0)
Po drugie dodał bym linijke sprawdzającą czy PESEL jest poprawny:
if (pesel.length() != 11) {
cout << "Podałeś błędny pesel!";
}