Ciao ragazzi, tra circa 4 mesi avrò una gara di robotica e mi sto preparando cercando di imparare il c++ per usare al meglio arduino.
Il mio professore di TPSIT ci ha assegnato questo problema:
---------------------------------------------------------------------------------------------------
Scrivere un programma in C++ (o in Java) che legga un numero n > 0 e scriva la rappresentazione di –n in
complemento a 2 su k bit. Se non è possibile scrivere : “impossibile”.
Esempio: se n vale 3 e k vale 4 l’output sarà 1101. Se invece k vale 2 o 1 scriverà “impossibile”.
---------------------------------------------------------------------------------------------------
Il programma in Java l'ho già fatto dato che è il linguaggio che tratto principalmente ad informatica, ma in TPSIT stiamo affrontando il c++ (anche perché al biennio non ho fatto nulla, solo pascal e pseudocodifica).
Questa è la mia soluzione, spero mi possiate aiutare!
P.S.: Sono nuovo in questo forum
codice:
#include <iostream>
#include <stdio.h>
using namespace std;
int potenza(int i, int k){
int pot = 1;
for (int j = 0; j<k; j++){
pot*=i;
}
return pot;
}
bool isRappresentabileInC2(int n, int nBit){
int min = -potenza(2, nBit-1);
int max = (min*(-1))-1;
return (n >= min)&& (n <= max);
}
void rappresentazioneInBinario(int n, int nBit, int vett[]){
int quoziente = n;
for(int i = nBit-1; i>0; i--){
vett[i] = quoziente%2;
quoziente /= 2;
}
}
void rappresentazioneInC2(int vett[], int nBit){
bool isPrimoUnoSuperato = false;
int i = nBit-1;
for(; !isPrimoUnoSuperato; i--){
if(vett[i] == 1){
isPrimoUnoSuperato = true;
}
}
for(int j = i; j>=0; j--){
if (vett[j]==0){
vett[j]=1;
}else{
vett[j]=0;
}
}
}
int main(){
cout << "Inserisci un numero n \n";
int n = 0;
cin >> n;
cout << "Inserisci il numero di bit sul quale vuoi rappresentarlo in C2 \n";
int nBit = 0;
cin >> nBit;
int vett[nBit];
if (isRappresentabileInC2(n, nBit)){
rappresentazioneInBinario(n, nBit, vett);
rappresentazioneInC2(vett, nBit);
for (int i = nBit - 1; i >= 0; i--)
cout << vett[i];
cout << "\n";
} else {
cout << "Impossibile";
cout << "\n";
}
return 0;
}