Ĺadny brzuch
witam chodzi mi mianowicie o to:
1. użytkownik podaje liczbe naturalną n
2. użytkownik liczbę z zakresu (2<=k<=1)
3. liczba n jest zapisywana w systemie pozycyjnym o wartości k
No i właśnie...jak ją zapisać w takim systemie? Szukałem w google ale nie doszukałem się niestety.
2. użytkownik liczbę z zakresu (2<=k<=1)
tak wiem, też to zauważyłem, ale taką mam treść zadania. Sprawdzałem kilka razy. Narazie potrzebuje dowiedzieć się jak liczbę n zmienić na podany system, a potem się będe głowił czy to jestprawidłowe. Masz pomysł?
http://www.it.aplus....y&which=systemy
słuchajcie mam taki kodzik:
/ konwersja while (liczWej != 0) { temp = liczWej % sysWyj; if (temp<10) liczWyj+='0'+temp; else liczWyj+='A'+temp-10; liczWej/=sysWyj; } // odwrócenie kolejności cyfr w otrzymanej liczbie for (unsigned int i=0;i<liczWyj.size()/2;++i) { pom=liczWyj[i]; liczWyj[i]=liczWyj[liczWyj.size()-i-1]; liczWyj[liczWyj.size()-i-1]=pom; }
Napisane w c++ a musze to przepisać do pascala. Wiadome jest, że tak po prostu spisać nie moge. Część odpowiedzialną za konwerse przerobiłem bo to proste, ale nie moge sobie poradzić z odwróceniem liczby. Czy ma ktoś jakiś pomysł jak to do pascala wsadzic?
Nie wiem jak dokladnie chcesz zmienic kolejnosc cyfr, ale proponuje zaminic liczbe na string (inttostr), poprestawiac znaki i spowrotem do liczby (strtoint) :)
Dobra z pascala dałem sobie spokój. Wszedłem na c++ i są efekty. Troche źródeł i zmontowałem coś takiego
#include <iostream> #include <string> using namespace std; bool ZliczCyfry( unsigned int liczWej, unsigned int sysWyj ) { unsigned int result = 0; if (liczWej==0) return 1; while( liczWej != 0 ) { liczWej /= sysWyj; result++; } return result; } unsigned int DajCyfre( unsigned int liczWej, unsigned int sysWyj, unsigned int cyfra ) { while (cyfra) { liczWej /= sysWyj; cyfra--; } return (liczWej % sysWyj); } bool SprawdzLiczbe( unsigned int liczWej, unsigned int sysWyj ) { unsigned int ilosc_cyfr = ZliczCyfry( liczWej, sysWyj ); unsigned int ilosc_iteracji = ilosc_cyfr / 2; unsigned int i; for( i = 0; i < ilosc_iteracji; i++ ) { if (DajCyfre( liczWej, sysWyj, i ) != DajCyfre( liczWej, sysWyj, ilosc_cyfr-i-1 )) return false; } return true; if(true) cout <<"tak"; else cout <<"nie"; } int main() { unsigned int sysWyj; unsigned long int liczWej; string liczWyj=""; unsigned int temp; char pom; // pobieranie danych cout <<"Podaj POPRAWNA naturalna liczbe w systemie dziesietnym: "; cin >>liczWej; cin.ignore(); cout <<"Podaj system liczbowy danych wyjsciowych (2-36): "; cin >> sysWyj; cin.ignore(); if (sysWyj<2 || sysWyj>36) { cout <<"System liczbowy danych wyjsciowych jest nieprawidlowy\n"; cout <<"\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; } // konwersja while (liczWej != 0) { temp = liczWej % sysWyj; if (temp<10) liczWyj+='0'+temp; else liczWyj+='A'+temp-10; liczWej/=sysWyj; } // odwrócenie kolejności cyfr w otrzymanej liczbie for (unsigned int i=0;i<liczWyj.size()/2;++i) { pom=liczWyj[i]; liczWyj[i]=liczWyj[liczWyj.size()-i-1]; liczWyj[liczWyj.size()-i-1]=pom; } unsigned int dzielnik = 1; unsigned int tmp = liczWej; while (tmp) { dzielnik *= sysWyj; tmp /= sysWyj; } tmp = liczWej; while( dzielnik > sysWyj ) { dzielnik /= sysWyj; if ((tmp / dzielnik) != (tmp % sysWyj)) cout <<"NIE"; tmp %= dzielnik; tmp /= sysWyj; dzielnik /= sysWyj; } unsigned int zliczcyfry = ZliczCyfry(liczWej, sysWyj); unsigned int sprwadzliczbe = SprawdzLiczbe(liczWejm sysWyj); cout <<"tmp "<<tmp<<'\n'; cout <<"ZLICZ CYFRY: "<<ZliczCyfry<<'\n'; cout <<"sprawdz liczbe: "<<SprawdzLiczbe<<'\n'; cout <<"Otrzymana liczba: "<<liczWyj<<'\n'; cout <<"\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; }
Niestety nie zwraca od zbyt dobrze wyników. Bezbłędnie działą tylko
cout <<"Otrzymana liczba: "<<liczWyj<<'\n';
reszta zwraca to samo niezaleznie od wartosci. ktos widzi blad?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
1. użytkownik podaje liczbe naturalną n
2. użytkownik liczbę z zakresu (2<=k<=1)
3. liczba n jest zapisywana w systemie pozycyjnym o wartości k
No i właśnie...jak ją zapisać w takim systemie? Szukałem w google ale nie doszukałem się niestety.
2. użytkownik liczbę z zakresu (2<=k<=1)

tak wiem, też to zauważyłem, ale taką mam treść zadania. Sprawdzałem kilka razy. Narazie potrzebuje dowiedzieć się jak liczbę n zmienić na podany system, a potem się będe głowił czy to jestprawidłowe. Masz pomysł?
http://www.it.aplus....y&which=systemy
słuchajcie mam taki kodzik:
/ konwersja while (liczWej != 0) { temp = liczWej % sysWyj; if (temp<10) liczWyj+='0'+temp; else liczWyj+='A'+temp-10; liczWej/=sysWyj; } // odwrócenie kolejności cyfr w otrzymanej liczbie for (unsigned int i=0;i<liczWyj.size()/2;++i) { pom=liczWyj[i]; liczWyj[i]=liczWyj[liczWyj.size()-i-1]; liczWyj[liczWyj.size()-i-1]=pom; }
Napisane w c++ a musze to przepisać do pascala. Wiadome jest, że tak po prostu spisać nie moge. Część odpowiedzialną za konwerse przerobiłem bo to proste, ale nie moge sobie poradzić z odwróceniem liczby. Czy ma ktoś jakiś pomysł jak to do pascala wsadzic?
Nie wiem jak dokladnie chcesz zmienic kolejnosc cyfr, ale proponuje zaminic liczbe na string (inttostr), poprestawiac znaki i spowrotem do liczby (strtoint) :)
Dobra z pascala dałem sobie spokój. Wszedłem na c++ i są efekty. Troche źródeł i zmontowałem coś takiego
#include <iostream> #include <string> using namespace std; bool ZliczCyfry( unsigned int liczWej, unsigned int sysWyj ) { unsigned int result = 0; if (liczWej==0) return 1; while( liczWej != 0 ) { liczWej /= sysWyj; result++; } return result; } unsigned int DajCyfre( unsigned int liczWej, unsigned int sysWyj, unsigned int cyfra ) { while (cyfra) { liczWej /= sysWyj; cyfra--; } return (liczWej % sysWyj); } bool SprawdzLiczbe( unsigned int liczWej, unsigned int sysWyj ) { unsigned int ilosc_cyfr = ZliczCyfry( liczWej, sysWyj ); unsigned int ilosc_iteracji = ilosc_cyfr / 2; unsigned int i; for( i = 0; i < ilosc_iteracji; i++ ) { if (DajCyfre( liczWej, sysWyj, i ) != DajCyfre( liczWej, sysWyj, ilosc_cyfr-i-1 )) return false; } return true; if(true) cout <<"tak"; else cout <<"nie"; } int main() { unsigned int sysWyj; unsigned long int liczWej; string liczWyj=""; unsigned int temp; char pom; // pobieranie danych cout <<"Podaj POPRAWNA naturalna liczbe w systemie dziesietnym: "; cin >>liczWej; cin.ignore(); cout <<"Podaj system liczbowy danych wyjsciowych (2-36): "; cin >> sysWyj; cin.ignore(); if (sysWyj<2 || sysWyj>36) { cout <<"System liczbowy danych wyjsciowych jest nieprawidlowy\n"; cout <<"\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; } // konwersja while (liczWej != 0) { temp = liczWej % sysWyj; if (temp<10) liczWyj+='0'+temp; else liczWyj+='A'+temp-10; liczWej/=sysWyj; } // odwrócenie kolejności cyfr w otrzymanej liczbie for (unsigned int i=0;i<liczWyj.size()/2;++i) { pom=liczWyj[i]; liczWyj[i]=liczWyj[liczWyj.size()-i-1]; liczWyj[liczWyj.size()-i-1]=pom; } unsigned int dzielnik = 1; unsigned int tmp = liczWej; while (tmp) { dzielnik *= sysWyj; tmp /= sysWyj; } tmp = liczWej; while( dzielnik > sysWyj ) { dzielnik /= sysWyj; if ((tmp / dzielnik) != (tmp % sysWyj)) cout <<"NIE"; tmp %= dzielnik; tmp /= sysWyj; dzielnik /= sysWyj; } unsigned int zliczcyfry = ZliczCyfry(liczWej, sysWyj); unsigned int sprwadzliczbe = SprawdzLiczbe(liczWejm sysWyj); cout <<"tmp "<<tmp<<'\n'; cout <<"ZLICZ CYFRY: "<<ZliczCyfry<<'\n'; cout <<"sprawdz liczbe: "<<SprawdzLiczbe<<'\n'; cout <<"Otrzymana liczba: "<<liczWyj<<'\n'; cout <<"\nNacisnij ENTER aby zakonczyc...\n"; getchar(); return 0; }
Niestety nie zwraca od zbyt dobrze wyników. Bezbłędnie działą tylko
cout <<"Otrzymana liczba: "<<liczWyj<<'\n';
reszta zwraca to samo niezaleznie od wartosci. ktos widzi blad?