Leogict utworzono 4 lipca 2009 utworzono 4 lipca 2009 Jak zwykle będę wdzięczny za wszelkie uwagi, spostrzeżenia i komentarze. #include <iostream>#include <math.h> // do potegusing namespace std;void binary(int liczba);int main(){ int n,biezacy=0,nastepny,grey; long int licznik=0; cout << "Podaj n: "; // liczba bitow cin >> n; cout << n << "-bitowy Kod Graya: " << "\n\n0"; for(int i=0; i<pow(2.,n); i++) // wlasciwa petla, od 0 do 2^n { ++licznik; biezacy=i; nastepny=biezacy>>1; grey=biezacy^nastepny; // wyznaczanie i-tego wyrazu kodu Graya binary(grey); // zamiana na postac binarna i wyswietlenie cout << " Przeliczonych kombinacji: " << licznik << "\n"; } return 0;}//******************************************void binary(int liczba) // zamiana liczby dziesietnej na dwojkowa{ int tablica[100]={0},i=0; while(liczba) { tablica[i++]=liczba%2; liczba=liczba/2; } for(int j=i-1; j>=0; j--) { cout << tablica[j]; }}
rafalluz komentarz 5 lipca 2009 komentarz 5 lipca 2009 (edytowane) Nie używaj wywołania funkcji przy sprawdzaniu warunku stopu pętli, bo wartość funkcji jest liczona za każdym razem, a się nie zmienia. Więc zamiast: for(int i=0; i<pow(2.,n); i++) Daj: double y=pow(2.,n);for(int i=0; i<y; i++) Zamiast liczba=liczba/2; możesz też dać liczba >>= 1;
Leogict komentarz 5 lipca 2009 Autor komentarz 5 lipca 2009 Nie używaj wywołania funkcji przy sprawdzaniu warunku stopu pętli, bo wartość funkcji jest liczona za każdym razem, a się nie zmienia. Więc zamiast:KOD for(int i=0; i<pow(2.,n); i++) Daj: KOD double y=pow(2.,n); for(int i=0; i<y; i++) Tak zrobiłem i zmierzyłem czas wykonania programu dla obu przypadków i w obu przypadkach dla n=15 czas wykonania programu wynosił 25 sekund. Więc czy to coś daje? Jeżeli taki, to milisekundy.
rafalluz komentarz 5 lipca 2009 komentarz 5 lipca 2009 (edytowane) W tym przypadku może nie dawać wiele. Nie zmienia to faktu, że to dobra praktyka programistyczna. Pow pewnie wykonuje się relatywnie szybko, spróbuj zagnieżdżonych pętli do miliona i funkcji SQRT albo STRLEN. Albo daj powiedzmy n=30.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.