Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- int main() {
- int nint, i, bitParity;
- char choice;
- choice = 'a';
- nint = 0;
- do {
- if (nint <= 0) {
- cout << "non è stato inserito un numero positivo e intero!" << endl;
- choice = 'a';
- }
- if (choice == 'b') {
- cout << nint << endl; //stampo il numero così com'è
- } else {
- if (choice == 'c' || choice == 'd') { //stampo il numero in formato binario
- bitParity = 0;
- i = 32;
- do {
- /*conversione da b10->b2, metodo delle potenze di 2^(pos.), come funziona:
- 1-prendo 2^(exp) (parto con exp=32 bit, giusto per essere capace di rappresentare un numero stratosferico)
- 2-vedo se è <= nint
- -> se no: stampa il bit '0' balza al pto 3)
- -> se si: -fai nint = nint - 2^exp; -stampa '1'
- 3-prendo 2^(exp-1) e ripeto da pto 2), fino a exp==0
- */
- if (pow(2, i) <= nint) {
- cout << "1";
- nint = nint - pow(2, i);
- bitParity = !bitParity; //spiego sotto a cosa serve
- } else {
- cout << "0";
- }
- i = i - 1;
- } while (i >= 0);
- if (choice == 'd') {
- /* stampa il bit di parità, come funziona:
- il bit di parità è uno '0' od un '1' messo a destra del numero binario
- -'0' quando la somma degli '1' del binario è pari
- -'1' quando la somma è dispari
- -fare bitParity = !bitParity significa switchare '0' od '1' ogni volta che ti capita un '1' di fronte.
- */
- cout << bitParity;
- }
- cout << endl;
- }
- }
- cout << "(a) Inserisci" << endl;
- cout << "(b) stampa valore in decimale" << endl;
- cout << "(c) stampa valore in binario" << endl;
- cout << "(d) genera errore sul bit di parità bM" << endl;
- cout << "(e) uscita" << endl;
- cin >> choice;
- if (choice == 'a') {
- cout << "inserisci un numero" << endl;
- cin >> nint;
- }
- } while (choice != 'e');
- cout << "chiudo" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement