Advertisement
buonaseva_fatelo

Untitled

Oct 28th, 2023 (edited)
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8.  
  9. int main() {
  10.     int nint, i, bitParity;
  11.     char choice;
  12.  
  13.     choice = 'a';
  14.     nint = 0;
  15.     do {
  16.         if (nint <= 0) {
  17.             cout << "non è stato inserito un numero positivo e intero!" << endl;
  18.             choice = 'a';
  19.         }
  20.         if (choice == 'b') {
  21.             cout << nint << endl; //stampo il numero così com'è
  22.         } else {
  23.             if (choice == 'c' || choice == 'd') { //stampo il numero in formato binario
  24.                 bitParity = 0;
  25.                 i = 32;
  26.                 do {
  27.                     /*conversione da b10->b2, metodo delle potenze di 2^(pos.), come funziona:
  28.                     1-prendo 2^(exp) (parto con exp=32 bit, giusto per essere capace di rappresentare un numero stratosferico)
  29.                     2-vedo se è <= nint
  30.                     -> se no: stampa il bit '0' balza al pto 3)
  31.                     -> se si: -fai nint = nint - 2^exp; -stampa '1'
  32.                    
  33.                     3-prendo 2^(exp-1) e ripeto da pto 2), fino a exp==0
  34.                    
  35.                     */
  36.                     if (pow(2, i) <= nint) {
  37.                         cout << "1";
  38.                         nint = nint - pow(2, i);
  39.                         bitParity = !bitParity; //spiego sotto a cosa serve
  40.                     } else {
  41.                         cout << "0";
  42.                     }
  43.                     i = i - 1;
  44.                 } while (i >= 0);
  45.                 if (choice == 'd') {
  46.                     /* stampa il bit di parità, come funziona:
  47.                     il bit di parità è uno '0' od un '1' messo a destra del numero binario
  48.                     -'0' quando la somma degli '1' del binario è pari
  49.                     -'1' quando la somma è dispari
  50.                     -fare bitParity = !bitParity significa switchare '0' od '1' ogni volta che ti capita un '1' di fronte.
  51.                     */
  52.                     cout << bitParity;
  53.                 }
  54.                 cout << endl;
  55.             }
  56.         }
  57.         cout << "(a) Inserisci" << endl;
  58.         cout << "(b) stampa valore in decimale" << endl;
  59.         cout << "(c) stampa valore in binario" << endl;
  60.         cout << "(d) genera errore sul bit di parità bM" << endl;
  61.         cout << "(e) uscita" << endl;
  62.         cin >> choice;
  63.         if (choice == 'a') {
  64.             cout << "inserisci un numero" << endl;
  65.             cin >> nint;
  66.         }
  67.     } while (choice != 'e');
  68.     cout << "chiudo" << endl;
  69.     return 0;
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement