Cześć, siema!
Mam problem. Otóż mam zadanie domowe do szkoły, w którym muszę napisać program symulujący kontrolę parzystości bitów w pamięci komputera. Dodatkowo muszę dodać moduł wskazujący na uszkodzony bit. I tu jest problem: otóż muszę zamienić liczbę binarną na dziesiętną. Nie jest to jednak takie proste jakby się wydawało, ponieważ bity, które mają być przeliczane na postać dziesiętną są wartością funkcji.
Oto kod:
// Program symulujący kontrolę parzystości bitów
#include <iostream>
#include <math.h>
#include <iso646.h>
#include <conio.h>
using namespace std;
//Inicjalizacja funkcji
int XOR(int pozycja,int D7, int D6,int D5,int D4,int D3,int D2,int D1,int D0) //Funkcja 'XORująca' bity i wyświetlająca bity parzystości
{
int wynik;
switch(pozycja)
{
case 1:
wynik = D7 xor D6 xor D4 xor D3 xor D1;
cout << wynik;
break;
case 2:
wynik = D7 xor D5 xor D4 xor D2 xor D1;
cout << wynik;
break;
case 4:
wynik = D6 xor D5 xor D4 xor D0;
cout << wynik;
break;
case 8:
wynik = D3 xor D2 xor D1 xor D0;
cout << wynik;
break;
}
return 0;
}
void PracaZProgramem() //Funkcja rozpoczynająca pracę z programem
{
int itD[8];
cout << "----------------------------------------------------------------------------" << endl;
cout << endl;
cout << "\t\t\t\tECC Simulator" << endl;
cout << "\n\n\n\n" << endl;
cout << " Napisz 8-bitowe slowo za kazdym bitem wciskajac enter lub oddzielajac je\n spacjami:\n" << endl;
cin >> itD[7] >> itD[6] >> itD[5] >> itD[4] >> itD[3] >> itD[2] >> itD[1] >> itD[0];
cout << endl;
cout << "----------------------------------------------------------------------------" << endl;
cout << endl;
// Wyświetlenie ciągu wpisanych bitów
cout << "Twoj ciag bitow to: " << itD[7] << itD[6] << itD[5] << itD[4] << itD[3] << itD[2] << itD[1] << itD[0] << endl;
cout << endl;
// Zdefiniowanie krótszej nazwy bitu parzystości
#define P0 XOR(1,itD[7],itD[6],itD[5],itD[4],itD[3],itD[2],itD[1],itD[0]);
#define P1 XOR(2,itD[7],itD[6],itD[5],itD[4],itD[3],itD[2],itD[1],itD[0]);
#define P2 XOR(4,itD[7],itD[6],itD[5],itD[4],itD[3],itD[2],itD[1],itD[0]);
#define P3 XOR(8,itD[7],itD[6],itD[5],itD[4],itD[3],itD[2],itD[1],itD[0]);
// Wyświetlenie bitów parzystości
cout << "Bity parzystosci:" << endl;
cout << endl;
cout << "P0= ";
P0;
cout << endl;
cout << "P1= ";
P1;
cout << endl;
cout << "P2= " ;
P2;
cout << endl;
cout << "P3= ";
P3;
cout << endl;
// Wyświetlenie kodu Hamminga
cout << "\n\nKod Hamminga: ";
P0;
P1;
cout << itD[7];
P2;
cout << itD[6] << itD[5] << itD[4];
P3;
cout << itD[3] << itD[2] << itD[1] << itD[0] << endl;
int itP[4];
itP[3] = P3;
itP[2] = P2;
itP[1] = P1;
itP[0] = P0;
cout << "\nUszkodzony bit znajduje sie na pozycji ";
cout << endl;
}
void OProgramie()
{
cout << "----------------------------------------------------------------------------" << endl;
cout << endl;
cout << "\t\t\t\tECC Simulator" << endl;
cout << endl;
cout << " ECC Simulator to symulator kontroli parzystosci bitow w pamieci komputera.\n Aby zaczac prace z programem nalezy wpisac liczbe '1'. ";
cout << "Nastepnie trzeba podac\n ciag bitow oddzielajac je spacjami i nacisnac klawisz 'Enter'. ";
cout << "Program\n zasymuluje dzialanie kontroli parzystosci i dopisze '1' lub '0' w zaleznosci";
cout << " od tego czy wpisalismy parzysta liczbe jedynek czy nie oraz 'powie', ktory\n bit jest uszkodzony.\n\n";
cout << " Zycze milej pracy :)" << endl;
}
//Funkcja główna
int main()
{
int iwybor;
//Interfejs "graficzny"
cout << endl;
cout << "\t\t\t\tECC Simulator" << endl;
cout << "\t\t\t--------------------------" << endl;
cout << endl;
cout << "\tECC Simulator to program majacy za zadanie zasymulowac korekcje\n\t\t\tbledow podanego ciagu bitow." << endl;
cout << "\tWiecej o programie oraz instrukcja obslugi po wpisaniu liczby '2'" << endl;
cout << endl;
cout << " +------------------------------+" << endl;
cout << " |\t Menu |" << endl;
cout << " +------------------------------+" << endl;
cout << " | [1] Zacznij prace z programem|" << endl;
cout << " | [2] O programie |" << endl;
cout << " | [3] Koniec pracy z programem |" << endl;
cout << " +------------------------------+" << endl;
cout << endl;
//Główny kod programu
cout << " Co chcesz robic?: ";
cin >> iwybor;
switch(iwybor)
{
case 1:
PracaZProgramem();
break;
case 2:
OProgramie();
break;
case 3:
return 0;
break;
default:
while(iwybor < 1 || iwybor > 3)
{
cout << " Podales zla liczbe. Podaj liczbe z menu: ";
cin >> iwybor;
switch(iwybor)
{
case 1:
PracaZProgramem();
break;
case 2:
OProgramie();
break;
case 3:
return 0;
break;
}
}
}
_getch();
}
Już wyjaśniam długość kodu. Jednym z wymogów tego zadania było stworzenie programu dla obcej osoby, a nie dla mnie. Program musi więc być zrozumiały i przejrzysty dla obcej osoby. Taka osoba ma wiedzieć jak się posłużyć tym programem.
A mi konkretnie chodzi o zamianę liczby binarnej stworzonej z elementów
P3, P2, P1, P0
w takiej właśnie kolejności.
Nie wiem czy wiecie o co mi chodzi :D. Jak coś to się pytajcie o konkrety. A i nie zrozumcie mnie źle. Ja nie proszę o gotowy kod tylko o konkretną podpowiedź.