Wie geht es einfacher ?
-
Hallo,
folgende Aufgabenstellung:
es sei folgende Farbtabelle gegeben (Man verschiebe die erste Zeile nach rechts um die Tabelle zu erhalten, leider kann ich hier keine Tabellen schreiben):
grün rot violett
grün grün gelb blau
rot gelb rot purpur
violett blau purpur violettEs soll ein Programm entwickelt werden, mit welchem man zwei farben eingeben kann (rot, grün, violett). Das Programm gibt dan die Farbe aus, welche beim mischen der beiden eingegeben Farben gemäß der Tabelle ergibt.
Ich habe folgendes entwickelt (Funktioniert auch):
#include<iostream.h> #include<string> using namespace std; string farbe1, farbe2; int farbwert1, farbwert2; int main() { cout<<"Bitte erste Mischfarbe eingeben (rot, gruen, violett)"; cin>>farbe1; if(farbe1=="rot") farbwert1=1; if(farbe1=="gruen") farbwert1=2; if(farbe1=="violett") farbwert1=3; cout<<"\nBitte zweite Mischfarbe eingeben (rot, gruen, violett)"; cin>>farbe2; if(farbe2=="rot") farbwert2=1; if(farbe2=="gruen") farbwert2=2; if(farbe2=="violett") farbwert2=3; int ergfarbe=farbwert1, farbwert2; switch(ergfarbe) { case 1: cout<<"Ergebniss: rot";break; case 2: cout<<"Ergebniss: gelb";break; case 3: cout<<"Ergebniss: purpur";break; case 6: cout<<"Ergebniss: blau"; break; default: cout<<"Ergebniss: unbekannt"; break; } cout<<"\n"; system("PAUSE"); }
Nur kommt mir das sehr kompliziert vor, gibt es eine einfacherer Lösung ?
Ich benutze Bloodshet Dev-C++.
Vielen dank für Eure Hilfe.
-
int ergfarbe=farbwert1, farbwert2;
die zeile ergibt keinen sinn. was soll der, operator da? willst du addieren? subtrahieren? multiplizieren?
-
//anstatt if(farbe1=="rot") farbwert1 = 1; if(farbe1=="gruen") farbwert1 = 2; if(farbe1=="violett") farbwert1 = 3; // würde ich es so schreiben if(farbe1=="rot") farbwert1 = 1; else if(farbe1=="gruen") farbwert1 = 2; else if(farbe1=="violett") farbwert1 = 3; else farbwert=DEFAULT_WERT_FÜR_FARBE;
Wenn ein if stimmt, dann müssen die anderen ja nicht mehr geprüft werden.
-
bau eine map, die den string als key und den zahlenwert als value hat
-
otze schrieb:
int ergfarbe=farbwert1, farbwert2;
die zeile ergibt keinen sinn. was soll der, operator da? willst du addieren? subtrahieren? multiplizieren?
Ups haste recht, sollte multipliziert werden.
-
Shade Of Mine schrieb:
bau eine map, die den string als key und den zahlenwert als value hat
Und wie funktioniert das ?
mit enum irgentwie ? (Bin Anfänger).
Vielen Dank.
-
Mightymod schrieb:
Und wie funktioniert das ?
Du sparst dir das if
ich verstehe deinen algo leider nicht, weil er fehlerhaft ist. Deshalb kann ich dir dafür keine lösung geben.
aber um für "rot" und "blau" die passenden zahlen zu bekommen, kann man
typedef map<string, int> color_t; color_t colors; colors.insert(color_t::value_type("rot", 3)); colors.insert(color_t::value_type("blau", 7));
nun kann man per
cout<<colors["rot"];
3 ausgeben.
das spart eine menge code, weil du dir dadurch eins switch() für strings gebaut hast
-
#include <map> #include <string> #include <iostream> using namespace std; int main() { map<string, size_t> FarbMappe; // @ Shade Of Mine // Warum so kompliziert? FarbMappe["red"] = 1; FarbMappe["blue"] = 2; FarbMappe["green"] = 3; for(map<string, size_t>::const_iterator it = FarbMappe.begin(); it != FarbMappe.end(); ++it) { cout << it->first << "\t=\t" << it->second << endl; } return 0; }
Wenn du ganz lustig bist, kann du die "Farbmappe" auch als constante globale Variable anlegen. Die FarbMappe soll ja allgemein gültig sein, oder?
Eventuell ist eine hash_map besser geeignet. Dafür einfach s/map/hash_map/g.
Aber leider gibt's bei mir kein "hash_map" zum inkludieren.Ausgabe des Programmes:
[hashmap] g++ main.cpp -o main [hashmap] ./main blue = 2 green = 3 red = 1
-
hehejo schrieb:
// @ Shade Of Mine
// Warum so kompliziert?Der op[] ist lahm.
Denn: er sucht zuerst ob der Eintrag existiert. Wenn nicht, dann wird ein Default Objekt erstellt und dieses returned.
-
und schon wieder etwas gelernt!
-
nur ne frage ( anderer ansatz )
gibts keine FARBEN-Klasse so ne art wie COLORREF
dann einfach die 3 Farben eingeben als RGB wert. dann kann man doch addieren und es kommt die mischfarbe raus. Da sparts man sich dann tabellen ect. Besonders wenn er mal anstatt von3 Farben mal von30 Farben wählen muss.