Programowanie zstępujące to rozbijanie problemu na małe podproblemy (metody klasy C++, lub funkcje C)
W przypadku zadania 59.2 może to wyglądać następująco (brakuje tylko obsługi pliku):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <iostream> using namespace std; //brakuje: angielska przestrzeń nazw //zwraca string z liczby int //nie trzeba używać standardu c++11 z tą funkcją string to_string_fx(int number) { char b[ 32 ]; //stary string 32 znaki itoa( number, b, 10 ); //zamieniamy number na string b w systemie 10 string wynik(b); //zamiana starego stringu char[] na zmienną typu string return wynik; } //zwraca string zapisany od tyłu string odwroc_str(string str) { string odwr_str = ""; for (int i=0; i<str.length(); i++) //tyle razy, ile długość stringu odwr_str = str[i] + odwr_str; //doklejamy znaki ale na początku 81 -> 18 im bardziej cyfra z tyłu liczby tym później doklejona return odwr_str; } //zwraca liczbę w odwrotnej kolejności: 18 -> 81 int odwroc_liczbe(int liczba) { int wynik; string liczba_str = to_string_fx(liczba), //zamien liczbe na string liczba_odwr_str = ""; liczba_odwr_str = odwroc_str(liczba_str); //odwroc string wynik = (int) strtol(liczba_odwr_str.c_str(), NULL, 10); //zamienc odwrocony string na liczbe return wynik; //zwroc odwrocona liczbe } //zwraca: //true - jeśli str jest palindromem //false - jeśli nie jest bool sprawdz_czy_palindrom(string str) { //w petli wczytaj string do połowy i sprawdz str[0] == str[str.length()-1] czy pierwsza jest == ostatnia for (int i=0; i<str.length()/2; i++) if (str[i] != str[str.length()-1-i]) //[0]!=[str.length()-1] ostatnia, [1]!=[str.length()-2] przedostatnia return false; return true; } //zwraca odpowiedz na zadanie 59.2 czyli //true - jeśli suma liczby i jej odwrotnosci jest palindromem //false - jeśli nie jest bool zadanie59_2(int liczba) //sprawdza czy suma liczby+odwr jest palindromem { string wynik_str = to_string_fx( liczba+odwroc_liczbe(liczba) ); return sprawdz_czy_palindrom(wynik_str); } int main(int argc, char** argv) { //cout << odwroc_liczbe(81); //trzeba dopisać obsługę plików cout << (zadanie59_2(19) ? "TAK" : "NIE"); return 0; } |