kleiner Dualrechner

hallo HaBo'ianer.

da ich mal wieder nich pennen kann (und klausurphase hab und deswegen keine party mache und weil freundin schon pennt ^^), habe ich mal eben noch einen kleinen dualrechner gecodet.

habe bit-shiften eingebaut, weil ich das noch nicht kannte und damit mal arbeiten wollte (also nächste kommt der operator "|=" - bitweises oder! kann mir noch ned soviel drunter vorstellen ^^)

naja lange rede, kurzer sinn. heir der code mit wenig kommentare:P

Code:
#include <iostream>
#include <string>
using namespace std;

string bin(int &nummer, int &exp);
int myPOW(int base, int expo);

int main(){
	int zahl;
	int zahl_;
	int i=0;
	string dual;

	cout << "Zahl >> ";
	cin >> zahl;
	zahl_ = zahl;

	// shiftet die zahl sollange bis 0
	do{
		i++;
		zahl_ = zahl >> i;
	}while(zahl_>0);
	i = i--; // i-1 = groeste exponentenstelle

	zahl_ = zahl; 

	dual = bin(zahl_, i); // es werden nur referenzen uebergeben
	cout << "Zahl: " << zahl << endl;
	cout << "in Dual: " << dual << endl;
	return 0;
}


string bin(int &nummer, int &exp){
	string dual;
	int nr;
	for(int i=0;i<=exp;exp--){ // funktioniert nach der restwert methode
		nr = myPOW(2, exp);
		if(nummer>=nr){
			dual = dual + "1";
		}
		else dual = dual + "0";
		if(nummer>=nr) nummer = nummer - nr;
	}
	return dual;
}

int myPOW(int base, int expo){
	int returner=base;

	for(int i=1;i<expo;i++){
		returner = returner*base;	

	}
	if(expo==0) return 1;
	return returner;
}
 
habe bit-shiften eingebaut, weil ich das noch nicht kannte und damit mal arbeiten wollte (also nächste kommt der operator "|=" - bitweises oder! kann mir noch ned soviel drunter vorstellen ^^)
  • and: 1 und 1 = 1(True); sonst = 0(False)
  • or: wenn eines der beiden operatoren gleich 1 dann = 1; sonst = 0
  • xor: wenn nur eines der beiden operatoren gleich 1 dann = 1; sonst = 0

delphi code:
Code:
if (x=1) and (y=x) --> beide müssen stimmen damit das gesamtergebnis stimmt
if (x=1) or (y=2) --> eines muss stimmen, damit ....
if (x=1) xor (y=3) --> nur eines darf stimmen !

Ansonsten
Super gemacht :)
 
So hättest du ca. 507 Bytes gespart :D^^

Code:
#include <iostream>
#include <string>
using namespace std;

string bin(int &nummer, int &exp);
int myPOW(int base, int expo);

int main(){
	int zahl,zahl_,i=0;
	string dual;

	cout << "Zahl >> ";
	cin >> zahl;
	zahl_ = zahl;

	// shiftet die zahl sollange bis 0
	do{
		i++;
		zahl_ = zahl >> i;
	}while(zahl_>0);
	--i; // i-1 = groeste exponentenstelle # i = i-- ist irgendwie nicht sinnvoll oder?

	zahl_ = zahl;

	dual = bin(zahl_,i); // es werden nur referenzen uebergeben
	cout << "Zahl: " << zahl << endl;
	cout << "in Dual: " << dual << endl;
	system("PAUSE");
	return 0;
}

string bin(int &nummer,int &exp){
	string dual;
	int nr;
	for(int i=0;i<=exp;exp--){ // funktioniert nach der restwert methode
		nr = myPOW(2,exp);
		dual += nummer>=nr?"1":"0"; // geändert
		nummer = nummer>=nr?nummer-nr:nummer; // geändert
	}
	return dual;
}

int myPOW(int base, int expo){
	int returner=base;

	for(int i=1;i<expo;i++) returner *= base; // geändert

	return expo==0?1:returner;
}

Gruß
Keci
 
Original von Keci
So hättest du ca. 507 Bytes gespart :D^^

Gruß
Keci

hätte ich mir diese bytes nur im code oder auch in der exe gespart? ^^

Code:
		dual += nummer>=nr?"1":"0";
		nummer = nummer>=nr?nummer-nr:nummer;

und

Code:
for(int i=1;i<expo;i++) returner *= base;

habe ich nur entdeckt.
sind ja quasi if selektionen bzw und operatoren zusammengefasst ?

die frage ist halt, was macht der compiler / linker damit? ^^
 
So.. Hab meinen vorigen Beitrag mal verändert ;)

Ich denke mal sowohl als auch, aber immer ist es nicht der Fall.
 
Code:
--i; // i-1 = groeste exponentenstelle # i = i-- ist irgendwie nicht sinnvoll oder?
// und:
system("PAUSE");


also zu zeile 1:
könnte auch i--; sein ^^

und system("PAUSE"); versteh ich gerade nich, bei mir bleibt die console eigntl. immer offen ^^
 
Zurück
Oben