ich peil garnix ...
-
Beende dein Studium!
-
Silke_verzweifelt du schneides die selber ins fleisch, irgend wann werden die aufgaben schwerer und die leute die es für dich machen wollen/können weniger
und dann wird dir dir übung fehlen ums selber zu machen
wenn du deswegen durch fällst, melde dich hier noch mal als abschreckens beispiel
-
Original erstellt von Silke_verzweifelt:
**bisher kann ich etwas java programmieren und nun habe
ich nach 4 Vorlesungen c++ folgende Aufgabe
die ich bis Montag hinkriegen muss ....
**Ist leider ne aufgabe für c. in c++ paßt das net. aber das wird deinen lehrer nicht stören. mein beileid, es gibt leider viele, die c++ nicht lernen, sondern bei c bleiben und es als c++ verkaufen.
die aufgabe ist an sich klar und hübsch. ich nehme an, der index soll nach artikelnummern sein und nicht nur die neuen artikel sollen indiziert sein. schätze, sehr schnelle leute brauchen 2 stunden dafür und langsamere auch mal nen tag oder 2. also wirste keinen finden, ders dir macht. solltest hardware bieten und damit junge aufstrebende programmier unterstützen.
übrigens ist die aufgabe schlichweg ein unverschämter hammer, wenns erst 4 c++-vorlesungen gab.
-
hey seid ihr fix,
@volkard ...hardware bieten und damit junge aufstrebende programmier unterstützen... *laechel* sorry bin arm wie kirchenmaus, bafög immer schnell wech aber cafe_chen und n talk das is alles was ich bieten kann.
Leider bin ich die einzigste Frau in dem Kurs und wenn ich in der Vorlesung Fragen stelle, verdrehn alle die Augen ....@entelechie ...ein entsprechendes c++ Programm schreibst... super Idee wow genau das schwebt mir vor. Logo zahl ich den Cafe am Samstag wenn dus mir bis dahin beigebracht hast wie ich an das Problemchen rangehe...
@Dimah nur weil eigentlich alle meiner Komilitonen(leider alle männlich) schon einigermassen c/c++ programmieren können setzte der Prof eben ein gewisses Basiswissen voraus. Auf meinen Einwand hin hiess es ... lass dir von anderen helfen... toll wa !
@Knuddlbaer das schau ich mir jetzt an
Thx
also was ich an code bisher habe???
nix denn ich setz mich erst ran wenn ich genau weiss wie und was ich machen muss.
event. mach ich mir vorher ne übersicht in pseudo-code.
ich poste einfach mal was mir alles klar is ...Binär-Suche : weil die Suchzeit dann nich linear mit der Datei-Grösse ansteigt sondern nur in etwa logarithmus der Dateigrösse. Also wichtig in grossen Datensätzen. Nur wie implementiere ich so ein Suchmuster?
Die Datensätze müssen wohl durch ein Trennzeichen in die Datei geschrieben werden, in java würd ich da nen "token" für benutzen, in c++??Primär/Index-Datei:die Primär und Index-Datei ist nach dem selben Feld sortiert. Die Indexdatei enthält dann einen Eintrag je Block aus der Primärdatei
vielleicht ne Struktur in der Art definieren:
struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };das erstmal .... vielleicht auch gerne anhaltspunkte .. egal hauptsache es hilft mir irgendwie weiter....
Silke
-
Original erstellt von Silke_verzweifelt:
**
struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };
**[cpp]
struct artikel_Eingabe
{
int art_Nr;
char art_Bez[255]; // !!
float art_Preis;
};// oder (ist aber C**++
**#include <string>
class Artikel {
int Nr;
float Preis;
std::string Bezeichnung;
};[/cpp]
-
warum nimmst du in c++ auf einmal class statt struct?
-
Original erstellt von Silke_verzweifelt:
also was ich an code bisher habe???
nix denn ich setz mich erst ran wenn ich genau weiss wie und was ich machen muss.fehler. man fummelt sich sowas langsam zurecht und lernt währenddessen. und man probiert viel aus. 20 stunden sind da schnell wech, das ist normal.
event. mach ich mir vorher ne übersicht in pseudo-code.
halt ich für hilfreich.
ich poste einfach mal was mir alles klar is ...
gut. dann kann ich besser widersprchen.
Binär-Suche : weil die Suchzeit dann nich linear mit der Datei-Grösse ansteigt sondern nur in etwa logarithmus der Dateigrösse. Also wichtig in grossen Datensätzen.
korrekt.
Nur wie implementiere ich so ein Suchmuster?
im internet eins finden. egal, welche sprache. und nach c++ übersetzen. wird zwar ne array-version sein, aber zu ner datei-version kannstes umbasteln.
Die Datensätze müssen wohl durch ein Trennzeichen in die Datei geschrieben werden, in java würd ich da nen "token" für benutzen, in c++??
nein. der kasper denkt bestimmt an direktzugriffsdateien. das heißt, du nimmst die ne feste datensatzlänge und kannst dann den 53. datensatz leicht lesen mit fseek(53*sizeof(Datensatz));read(&data,sizeof(Datensatz)); oder so.
Primär/Index-Datei:die Primär und Index-Datei ist nach dem selben Feld sortiert. Die Indexdatei enthält dann einen Eintrag je Block aus der Primärdatei
nein. hauptdatei ist gar nicht sortiert. beim eintragen wird einfach der datensatz hinten drangeklatscht. und in den sortierten index wird ein verweis drauf geschrieben. so muß nur der kleine index sortiert sein, was viel schneller geht, als die haupt-datei sortiert zu halten.
vielleicht ne Struktur in der Art definieren:
struct artikel_Eingabe { int art_Nr; char art_Bez; float art_Preis; };art_Bez sollte eher ein array of chars sein, nicht nur ein einzelner buchstabe. also char art_Bez[20]; oder so.
-
erstmal vorweg:
ich bin mir sicher, dass dir hier niemand das programm schreiben
wird; du wirst lediglich loesungsvorschlaege und antworten
zu konkreten fragen erhalten.
was dimah, dir versucht hat zu sagen: nimm dir ein buch ueber
c++ (oder schau mal im internet nach tutorials, schon mal auf www.c-plusplus.net nachgesehen? -> tutorials, links, faq) und arbeite
dich mal in die sprache ein, dass bringt dir mehr als eine feritge
loesung von irgendjemandem.also, ich geb dir mal ein paar weiter dankanstoesse:
die idee mit der struktur ist ok, aber da du ja c++ prog. sollst nimm eine
klasse (fast wie in java). fuer die bezeichung kannst du, fast wie in java,
die klasse string (kleingeschrieben!) benutzen (dazu musst du noch
ein include <string> machen).
das saehe dann so aus:#include <string> using namespace std; class Artikel { public: Artikel( int nr, string& bez, double preis ); private: int nr; string bez; double preis; } sieht fast wie in java aus :)
binaere suche? google, buch?
trennzeichen? ein char ( ' ', ';', '#',...)?
dateien? tutorial, faq, buch?
fuer die index-/primaer-datei schau dir die funktionen tellg, seekp
der fstreams an, und wirf mal nen blick in die faq.
-
Original erstellt von entelechie:
die klasse string (kleingeschrieben!) benutzen (dazu musst du noch
ein include <string> machen).ich halte struct und ein char-array hier für angemessen. weils die direktzugriffe vereinfacht.
-
toll dass ihr mir überhaupt antwortet, ich mein ich hab 4 Leutz aus der Uni angerufen und die sagten ..keine Zeit ...
@KingRuediger ...klar das muss n char-arry sein
auch ne Klasse ist sicher gut(oop)
@volkard ... solltest mir mal Unterricht geben *fg* ...Direktzugriffsdateien.. das heißt, du nimmst die ne feste Datensatzlänge... das klingt gut! thx und auch richtig dass die Primärdatei garnich sortiert wird sondern nur die Index-datei aus der ein Zeiger auf den Datensatz in der Primärdatei verweist , vielleicht in etwa so ? --> (sizeof( primarystruct) * pos)
@entelechie ich schau mir die Funktionen an, thx.
-
ich überleg grad ...
es wird ja nur in der Index-Datei gesucht. Diese hat die Zuordnung "art_Nr" => "offset", und beides könnte man als Integer darstellen . Also die Index-Datei einfach mit jeweils Integer-Paaren füllen. Ein Integer sind 4 Bytes d.h. es reicht, wenn man auf die Index-Datei einfach in 8-Byte-Schritten zugreift, ohne Trennzeichen.
Ist so ein gedanklicher Ansatz gut?Silke
-
Original erstellt von Silke_verzweifelt:
**ich überleg grad ...
es wird ja nur in der Index-Datei gesucht. Diese hat die Zuordnung "art_Nr" => "offset", und beides könnte man als Integer darstellen . Also die Index-Datei einfach mit jeweils Integer-Paaren füllen. Ein Integer sind 4 Bytes d.h. es reicht, wenn man auf die Index-Datei einfach in 8-Byte-Schritten zugreift, ohne Trennzeichen.
Ist so ein gedanklicher Ansatz gut?Silke**
ja, du solltest aber wg. der Portabilität nicht 8, sondern 2*sizeof(int) nehmen.
-
jo.
-
mit strings aus c++ wirds eklig, weil die ne variable länge haben, also würd ich eben solche char arrays nehmen. für 4 c++ vorlesungen isses schon bisschen happig...
wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?
-
Original erstellt von Korbinian:
wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?Eingabe wird immer halbiert.
-
Original erstellt von <KingRuediger>:
Eingabe wird immer halbiert.Weil nur alle 2*sizeof(int) gelesen wird, und nicht alles? (vermut mal ja :p)
-
Original erstellt von Korbinian:
mit strings aus c++ wirds eklig, weil die ne variable länge haben, also würd ich eben solche char arrays nehmen. für 4 c++ vorlesungen isses schon bisschen happig...
wieso steigt doe suchdauer bei binary search eigentlich nur logarithmisch im vgl. zur dateigröße an?wie sochste denn in nem worterbuch? ungefähr so (es hat 1000 seiten):
//1000 kandidaten
bei seite 500 aufschlagen. ah, es steht weiter hinten.
//nur noch 500 kandidaten
bei seite 750 aufschlagen. ah, es steht weiter vorne.
//nur noch 250 kandidaten
usw.
nach 10 mal blättern nur noch 1 kandidat.für ein buch mit ner million seiten braucht man nur 20 mal blättern. bei ner milliare nur 30 mal.
-
ahjo. aber in genau diesem fall ist das doch eigentlich wurscht oder? ich mein, wenn die indexdatei eh sortierte werte in form von
00000000 11001001 00000001 10001100 00000010 11100110 00000011 00011001 00000100 10011001 ... ...
enthält, dann brauch ich doch auf diese datei kein binary search verwenden. wenn ich weis, dass die 2*x bytes groß ist, dann habe ich x datensätze. ist die zahl dann nächer bei 0, fang ich vorne mit dem durchgehen an, ist sie näher bei x, fang ich hinten an. problem dann nur: sind die artikelnummern belibige (eindeutige) zahlen, können z.b. 500 datensätze in der indexdatei sein (id 5000 - 5499), und meine methode fängt, wenn sie nach datensatz 5000 frägt, am ende der datei an.
Binary search heist also immer, dass in der Mitte des [arrays/datei/xyz] angefangen wird?
-
die artikelnummern sind beliebige zahlen.
und natürlich ist binäre suche gut bei großen mengen. nicht lachhafte 500 datensätze. die werden ja auf einmal gelesen. nein, 1000000 datensätze. also ne 8mb-datei nur der index. liest du die ganz durch, biste alt und grau, bis die zahl gefunden ist. machste aber binäre suche, brauchste nur 20 zugriffe. bei ner zugriffzeit von 10ms also ne lachhafte fünftel sekunde. une bei doppelt so vielen daten eben 21 zugriffe. würdest du die ganze indexdatei lesen, würdtest du bei doppelt so vielen daten doppelt so lange brauchen.
-
und wieso eigentlich 'binäre' suche? weil die daten binär verglichen/ausgelesen werden, aber wohl nicht wegen dem suchvorgang oder...