pow ersetzen
-
LordJaxom schrieb:
Reicht nicht schon das Standardbeispiel min/max zur Abschreckung?
Schlechtes Beispiel. min/max ist nun gerade einer der Fälle, wo ein Macro tatsächlich Vorteile hat. Siehe http://www.ddj.com/cpp/184403774
#include <windows.h> #include <algorithm>=>
#include <windows.h> #undef max #undef min #include <algorithm>Zugegeben, wenn man das nicht weiß, resultieren einige echt eklige Bugs.
-
hmm man soll
#define NOMINMAXnutzen, wobei dann wieder alle anderen Microsoft-Header streiken
Also ist nen bissel doof und am einfachsten wirklich durch #undef NACH allen Microsoft-Headern zu lösen ...
-
Ich kenne die Umgehungsmöglichkeit, wollte auch nur auf das Problem hinweisen. Und das Makro NOMINMAX gab es bestimmt nicht von Anfang an (
Bekämpfung der Symptome)
-
hmpf ich glaub ich hätte besser mal die aufgabenstellung mit gepostet:
Zahlenkonvertierung
Schreiben Sie ein C++-Programm, das positive, ganze Dezimalzahlen in die
entsprechenden Dualzahlen und Oktalzahlen umrechnet.
Hinweise, verbindlich:
- Die Umwandlung in Dualzahlen muss nach der Potenzenmethode, die
Umrechnung in Oktalzahlen nach der Restwertmethode erfolgen.
- Speichern Sie die Ergebnisse in Strings.
- Benutzen Sie einen String-Vektor, um die Ziffern des Oktalsystems zu speichern:
string oktalziffer[8]={"0","1","2","3","4","5","6","7"};
- Der Modulo-Operator % gibt den ganzzahligen Rest der Integer-Division zweier
Zahlen zurück:
11 % 4 = 3
- Die Integer-Division / schneidet die Nachkommastellen des Divisionsergebnisses
ab:
9 / 2 = 4
Testlauf (Eingaben unterstrichen):
Dezimalzahl = ? 255
Umrechnung einer ganzzahligen, positiven Dezimalzahl in
- eine Dualzahl nach der Potenzenmethode : Dualzahl = 11111111
- eine Oktalzahl nach der Restwertmethode: Oktalzahl = 377
Press any key to continue
-
Die Lösung wurde doch schon genannt (auch wenn sie in der anschließenden Diskussion über Makros vs. Inline-Funktionen untergegangen ist). Du brauchst dort nur Potenzen von 2 (
pow(2,i);und dazu reicht der Shift-Operator völlig aus:inline int exp2(int x) { return 1<<x; } ... int i,j;//Gleitkomma-Werte sind hierfür überflüssig ... for(i=0; i<=16; i++) { j = exp2(i);// j = pow(2,i); if(inp_du < j) break; } ...
-
ODer einfach auf die erste Seite auf meine Beiträge achten und mal die anderen gekonnt außer acht lassen ...
-
2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab

inline int exp2(unsigned int x) { return (x==0)? (1): (1<<x); }edit: Das ist natürlich Unsinn

-
Badestrand schrieb:
2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab

Ja - und 1<<0 ergibt rein zufällig auch 1, also erübrigt sich deine Fallunterscheidung

-
CStoll schrieb:
Badestrand schrieb:
2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab

Ja - und 1<<0 ergibt rein zufällig auch 1, also erübrigt sich deine Fallunterscheidung

Ups

Ich hab irgendwie an.. irgendwas anderes gedacht
-
ok, danke ich habs jetzt verstanden und es funktioniert auch.
und viel spaß noch beim diskutieren