Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

C++ Klausur-Übungsaufgabe. Wo liegt mein Fehler?





Frage

Hallo Ich habe folgendes, relativ dringendes Problem: Ich schreibe am Freitag eine Klausur in EDV (Einführungskurs) und sitze schon den halben Tag an einer Übung zur Klausurvorbereitung. Es geht um das einlesen, sortieren und schreiben von binär codierten zahlen. die aufgabe kann man hier nachlesen: [url]http://www.fbi.fh-darmstadt.de/~berthold/cub_ueb03_7.doc[/url] Dazu habe ich folgendes Programm geschrieben das ich jetzt aber wegen eines einzigen Fehler den ich partout nicht verstehe nicht zum laufen bekomme. Meines erachtens müsste das doch so funktionieren. Oder habe ich einen Denkfehler gemacht? Die Fehlermeldung lautet: "strcmp' : Konvertierung des Parameters 1 von 'class istream' in 'const char *' nicht moeglich" [code]#include <fstream.h> #include <conio.h> #include <string.h> #include <iomanip.h> #include <stdlib.h> void lesen(int nr); void mischen(); void main() { lesen(1); lesen(2); mischen(); lesen(3); } void lesen(int nr) { if (nr==1) { int zaehler1=0; float binzahl1; ifstream bindat1("datei1.dat",ios::binary|ios::nocreate); while (!bindat1.eof()) { bindat1.read((char*)&binzahl1,sizeof(binzahl1)); cout<<binzahl1<<" "; zaehler1++; if (zaehler1%8==0) cout<<endl; } cout<<"\n\nDie Datei 'datei1.dat' enthaelt "<<zaehler1<<" Zahlen!\n"<<endl; } if (nr==2) { int zaehler2=0; float binzahl2; ifstream bindat2("datei2.dat",ios::binary|ios::nocreate); while (!bindat2.eof()) { bindat2.read((char*)&binzahl2,sizeof(binzahl2)); cout<<binzahl2<<" "; zaehler2++; if (zaehler2%8==0) cout<<endl; } cout<<"\n\nDie Datei 'datei2.dat' enthaelt "<<zaehler2<<" Zahlen!\n"<<endl; } if (nr==3) { int zaehler3=0; float binzahl3; ifstream bindat3("datei3.dat",ios::binary|ios::nocreate); while (!bindat3.eof()) { bindat3.read((char*)&binzahl3,sizeof(binzahl3)); cout<<binzahl3<<" "; zaehler3++; if (zaehler3%8==0) cout<<endl; } cout<<"\n\nDie Datei 'datei3.dat' enthaelt "<<zaehler3<<" Zahlen!\n"<<endl; } } void mischen() { float binmisch1,binmisch2,binmisch3; ifstream bindat1("datei1.dat",ios::binary|ios::nocreate); ifstream bindat2("datei2.dat",ios::binary|ios::nocreate); ofstream binschreib("datei3.dat",ios::binary|ios::app); while (!bindat1.eof()) { bindat1.read((char*)&binmisch1,sizeof(binmisch1)); binschreib.write((char*)&binmisch1,sizeof(binmisch1)); } while (!bindat2.eof()) { bindat2.read((char*)&binmisch2,sizeof(binmisch2)); binschreib.write((char*)&binmisch2,sizeof(binmisch2)); } bindat1.close(); bindat2.close(); binschreib.close(); fstream templese("datei3.dat",ios::out|ios::binary|ios::in); templese.seekp(0,ios::end); templese.seekg(0); int i,j; int n=sizeof(templese); for (i=0;i<n-1;i++) { for (j=i+1;j<n;j++) { if (strcmp(templese.seekg(i),templese.seekg(j))>0) { templese.seekp(j); templese.seekp(i); } } } }[/code] Bitte helft mir, das ist echt ziemlich wichtig! VIELEN DANK SCHONMAL!!

Antwort 1 von michael.schon.vergeben

Hi,
kleiner Tipp:

lass das lieber einen machen, der sich damit auskennt.

Antwort 2 von Habichnet

@michael

muss ich die antwort verstehen??

Antwort 3 von semi

seekg positioniert nur den Zeiger innerhalb der Datei. Du mußt danach die zwei Werte auslesen und vergleichen.

Übrigens, bei mir spinnt entweder der Compiler oder die FPU des Prozessors. :)
Wie sieht bei Dir die Ausgabe der folgenden Schleife aus?

for(float i=0.0f; i<10.0f; i+=0.1f)
  cout << i << endl;
Bei mir zeigt es ab 7.7 nur noch Blödsinn an.
...
7.7
7.79999
7.89999
7.99999
8.09999
8.2
...

Nanu? Prozessor am A....?
Ist ein Athlon XP 2400+

Gruß,
Michael

Antwort 4 von semi

Ehhmm. OK war nur die Streamklasse.
cout.precision(2); löst das Problem.
CPU wird nicht in die Tonne gehauen :-)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: