x-kom hosting

[C++] n-bitowy Kod Graya

Leogict
utworzono
utworzono

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
komentarz (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
komentarz
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
komentarz (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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.