Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
-
Luminofor
- Użytkownik
- Posty: 1373
- Rejestracja: 27 lis 2007, 17:17
- Lokalizacja: Polska
Post
autor: Luminofor » 04 lip 2009, 23:03
Jak zwykle będę wdzięczny za wszelkie uwagi, spostrzeżenia i komentarze.
Kod: Zaznacz cały
#include <iostream>
#include <math.h> // do poteg
using 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];
}
}
-
zenzee
- -
- Posty: 75
- Rejestracja: 25 lip 2008, 10:41
- Lokalizacja: Samoa Zachodnie
Post
autor: zenzee » 05 lip 2009, 23:53
Witam.
Pozwoliłem sobie skrócić zapis kodu.
Czy to trzyma się kupy,bo efekt jest taki sam jak u Ciebie ,
czy jak zwykle tylko mi się zdaje.
Kod: Zaznacz cały
#include <iostream>
#include <cmath>
using namespace std;
void binary(int liczba);
int main()
{
int n;
cout << "Podaj n: ";
cin >> n;
cout << n << "-bitowy Kod Graya: " << "\n\n";
int i = 0;
int biezacy=0;
long int licznik=0;
while (i<pow(2.,n))
{
binary((biezacy^(biezacy=i)>>1));
cout << " Przeliczonych kombinacji: " << ++licznik << "\n";
++i;
}
return 0;
}
//******************************************
void binary(int liczba)
{
int tablica[100],i = 0;
do
{
tablica[i++]=liczba%2;
}while(liczba/= 2);
while(i)
{
--i;
cout << tablica[i];
}
}
-
Luminofor
- Użytkownik
- Posty: 1373
- Rejestracja: 27 lis 2007, 17:17
- Lokalizacja: Polska
Post
autor: Luminofor » 06 lip 2009, 0:12
Faktycznie, można tak skrócić, ale wychodzi na to samo.

Działa.

Btw. swój kod pisałem na szybko "aby działał", oczywiście można to skrócić na 1000 sposobów.

-
zenzee
- -
- Posty: 75
- Rejestracja: 25 lip 2008, 10:41
- Lokalizacja: Samoa Zachodnie
Post
autor: zenzee » 06 lip 2009, 0:14
Jednak dobry podręcznik kupiłem.
Dzięki.

-
Luminofor
- Użytkownik
- Posty: 1373
- Rejestracja: 27 lis 2007, 17:17
- Lokalizacja: Polska
Post
autor: Luminofor » 06 lip 2009, 0:15
zenzee pisze:Jednak dobry podręcznik kupiłem.
Symfonia? Czy coś innego? Ja mam na składzie najnowszą Symfonię i Thinking in C++ którego jeszcze nie ruszyłem.
No i materiał z wykładów i parę pdfów

-
zenzee
- -
- Posty: 75
- Rejestracja: 25 lip 2008, 10:41
- Lokalizacja: Samoa Zachodnie
Post
autor: zenzee » 06 lip 2009, 0:17
"Szkoła programowania "by Stephen Prata.
[ Dodano: 2009-07-06, 10:07 ]
W sumie zmienna licznik też jest niepotrzebna:
Kod: Zaznacz cały
while (i<pow(2.,n))
{
binary((biezacy^(biezacy=i)>>1));
cout << " Przeliczonych kombinacji: " << ++i << "\n";
}