chemisches Rechnen...
-
bin mal so frei und zeige Dir auf wie sich das akari bezogen auf Dein
Problem vorstellt!Habe aber auch gegooooooogelt da ich lange nicht mehr mit Standard C++ gearbeitet habe bei mir funzt es habs mit DevCpp getütelt!
Hier der Code:/* Autor: sclearscreen thema: Molare Massen aus textdatei lesen und in eine std::map einlesen Beispieldaten: O=1 key wäre hier O mit Wert 1 in std::map H=16 key wäre hier H mit Wert 16 in std::map ich denke mir so dachte sich das AKARI */ #include <cstdlib> #include <iostream> #include <map> #include <string> #include <fstream> using namespace std; int main(int argc, char *argv[]) { map<string,string> mol_massen; string element, mol; string token; // enthält jeweils mal Elemt dann dessen Molzahl //////////////////////////////////// // Datei mit Molaren Massen auslesen string dateizeile; ifstream moldatei("mol.txt"); // hier stehen jeweil auf separater Zeile H=1 // O=16 do { // Eine Zeile aus einer datei holen: Bsp.: H=16 moldatei >> dateizeile; if(moldatei.eof()) break; // Molzahl holen (nach Gleichheitszeichen) token = dateizeile.substr(dateizeile.find("=")+1); mol = token; // Element holen (vor Gleichheitszeichen) token = dateizeile.substr(0, (dateizeile.length() - token.length() - 1)); element = token; // So jetzt in die map eintüten, wobei element der Schlüssel ist beispielsweise Sauerstoff bei O=2 mol_massen[element] = mol; } while(!moldatei.eof()); //////////////////////////////////////////////////////////////////////// // Test des map - Objektes (Assoziativer Container der STL) // molare Masse von Sauerstoff ausgeben, Schlüssel hier O für Sauerstoff string key = "O"; string ausgabe = mol_massen[key]; cout << ausgabe << endl; system("PAUSE"); return EXIT_SUCCESS; }mfg sclearscreen

-
@sclearscreen: Danke das war schon etwas erhellend.
Eine Map ist also wie eine Tabelle in der ich Wert und Bezeichner zuordnen kann.
Probleme:
1.Habe die cstdlib leider nicht (bcb1). (Deswegen jetzt etwas theoretisch)
2. Habe dassclearscreen schrieb:
////////////////////////////////////////////////////////////////////////
// Test des map - Objektes (Assoziativer Container der STL)
// molare Masse von Sauerstoff ausgeben, Schlüssel hier O für Sauerstoff
string key = "O";
string ausgabe = mol_massen[key];
cout << ausgabe << endl;system("PAUSE");
return EXIT_SUCCESS;
}noch nicht so genau verstanden. Wie greift das Programm zur Laufzeit auf die Map zu? Was hat
int main(int argc, char *argv[])zu bedeuten? Der Builder beschwert sich "Declaration missing;.". Ich habe die Deklaration auch nicht verstanden...
Bin leider noch Anfänger.
DiV
-
Sorry,
int main(int argc, char *argv[]ist sicher nur der Konolenaufruf...

-
NEO26 schrieb:
Sorry,
int main(int argc, char *argv[]ist sicher nur der Konolenaufruf...

ja es ist nen Konsolenproggie
die cstdlib is nur drin wegen dem Aufruf
system("Pause");sonst sieht man keine Ausgabe
cin.get();hätte es auch getan, ich bin aber faul und habe das automatisch generierte Codegrüst von DevCpp so genommen wie es war!
Grüsse von sclearscreen

-
trotzdem kannst du denn Code so in deinem CBuilderBorland übernehmen der kann ja schliesslich auch die Libs und Headers für dei STL eintüteln weil der die auch kennen sollte!
-
statt aus der Textdatei musst Du halt Zeilenweise aus deiner Memo - Komponente lesen (bedeutet kleine Änderung innerhalb der while - Schleife und weglassen
des ifstream - Objektes in meinem Code)mfg sclearscreen

-
statt
return EXIT_SUCCESS;schreibst du bei deinem Builder
return 0;und fertig
-
Ums noch runder zu machen
die while - Schleife muss so angepasst werden
das das Ding bezogen aufMemo1->Linesarbeitet
etwa solange im Memo Zeile vorhanden sind
{extrahieren jeweils aus einer Zeile den Wert vor dem Gleichheitszeichen sowie
den Wert nach dem Gleichheitszeichen.
}so nun ists aber gut.
ich will Dir nicht den Spass verderben! Du machst das schon

-
@ Danke für die Mühe!!
Das Memo brauch ich eigendlich nicht mehr, wenn ich die map habe.
Allerdings meckert er beimap<string,string> mol_massen;"Too few arguments in template class name 'map'."
Was fehlt?
DiV
-
Er meint es wären zu wenig Argumente!
das ist aber komische die map ist ein Conatainer der hat ja bloss 2 Template - Parameter einen für den SchüsselDatentyp und eine WertDatentyp der für den Schlüssel abgelegt wirdDu hast aber
#include <map>gemacht, hmm das ist kommisch
-
Bei mir sieht das so aus:
//--------------------------------------------------------------------------- #include <vcl\vcl.h> #pragma hdrstop #include "Unit1.h" #include <iostream> #include <map> #include <string> #include <fstream> //--------------------------------------------------------------------------- #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; map<string,string> mol_massen; string element, mol; string token; // enthält jeweils mal Elemt dann dessen Molzahl //////////////////////////////////// // Datei mit Molaren Massen auslesen string dateizeile; ifstream moldatei("mol.txt"); // hier stehen jeweil auf separater Zeile H=1 // O=16 do { // Eine Zeile aus einer datei holen: Bsp.: H=16 moldatei >> dateizeile; if(moldatei.eof()) break; // Molzahl holen (nach Gleichheitszeichen) token = dateizeile.substr(dateizeile.find("=")+1); mol = token; // Element holen (vor Gleichheitszeichen) token = dateizeile.substr(0, (dateizeile.length() - token.length() - 1)); element = token; // So jetzt in die map eintüten, wobei element der Schlüssel ist beispielsweise Sauerstoff bei O=2 mol_massen[element] = mol; } while(!moldatei.eof()); //////////////////////////////////////////////////////////////////////// // Test des map - Objektes (Assoziativer Container der STL) // molare Masse von Sauerstoff ausgeben, Schlüssel hier O für Sauerstoff string key = "O"; string ausgabe = mol_massen[key]; cout << ausgabe << endl; system("PAUSE"); return; }Aber vielleicht hat mein Builder auch einen Stich weg... Hab gerade den BCB6 (FUL-Lizenz) bestellt.
-
In meiner Hilfe steht zusätzlich kann man bei der Instanzierung einen dritten Template - Parameter angeben, der ein Funktionsobjekt darstellt was die Wert innerhalb das map nach dem Schlüssel sortiert das wäre dann wie soll man sagen ein Sortieralgorithmenobjekt!
Das Teil ist aber optional und die Instanzierung mit
map<string,string> mol_massen;oder
std::map<std::string ,std::string> mol_massen;sollte aussreichen.
Welche Version hat eigentlich dein Compiler?
-
Im übrigen der BCBuilder arbeitet wenns um GUI geht bei TextBoxen etc. mit
AnsiStringmach deshalb mal aus
map<string, string> mol_massen; map<Ansistring, Ansistring> mol_massen;
-
Da ist der Algo auch kompatibel zu Borlands String - Klassentyp
und Du kannst#include <string>rausschmeissen
-
AnsiString schmeckt ihm auch nicht besser ->Gleicher Error...
-
also habe jetzt gerade das c++ Guru - Buch zur Hand was viel zum Thema STL
und somit Assoziative Container enthält -> Die C++ Programmiersprache Bjarne Stroustrupp und dort wird der Container genauso instanziert wie ich schon schrieb! Das sollte also gehen wenn dein Compiler meckert dann ist er ein verdammter Eigenbrödler und weicht vom Standard ab.mfg sclearscreen
-
es kann somit nur an der STL - Library liegen die Dein Compiler/IDE mitbringt!
Wiso hast Du eigentlich keine bcb.help bei deiner IDE sowas ist auf jeden Fall wichtig weil man kann nicht alles im Gopp haben. Du solltest da irgenwann Abhilfe schaffen!
-
Vielen Dank für die Hilfe!
Wenn ich eine stabile Entwicklungsumgebung habe, komme ich mit der map und meinem (noch nicht ganz fertigen) Parser wohl über die Runden.
Jetzt muß ich aber erstmal nach Hause...
Schönen Abend noch ...
-
Ich würde auch empfehlen mehrere Compiler auf dem Rechner rumhullern zu haben
damit man diversen Code auf verschieden Compilern testen kann. Ich habe hier bei mir bestimmt wenn ich Linux einrechne 4 C/C++ Compiler auf meinem System am Start.
-
Empfehlung als freie IDE DevCpp
nabend auch also denn