Seite 5 von 7 ErsteErste ... 34567 LetzteLetzte
Ergebnis 41 bis 50 von 61

Thema: Die kleine Faultier Programmierschule

  1. #41
    Erfahrener Benutzer
    Orc Slayer Champion Olympic Discus Throw Champion
    gewonnene Turniere: 1
    Registriert seit
    17.07.2011
    Ort
    Bremen
    Beiträge
    150
    Ich habbe Count A usw. deklariert und dann erst gesehen, dass deine Variablen anders heißen. Wer benennt denn bitte seine Variablen deutsch?

  2. #42
    Kaffeemaschinenbesitzer Avatar von lowcut
    Cow Fly Game Champion Top That Champion FWG Pinnball Champion Solarsaurs Champion
    gewonnene Turniere: 2
    Registriert seit
    02.04.2011
    Beiträge
    4.791
    Mache ich manchmal auch.
    natura non facit saltus


  3. #43
    Avatar von gubbel
    Registriert seit
    03.04.2011
    Beiträge
    4.449
    So mittlerweile ein bisschen weiter

    Code:
    PERSON lookup(char* key, PERSON* list)
    {
      PERSON* itemptr;
      itemptr = (PERSON*) bsearch(&key, list, 7, sizeof(list[0]), fcmp);
      cout<<"hello"<<endl;
      return itemptr;
    }
    Ich kann aus obiger Funktion einfach nicht itemptr zurückgeben und versteh nicht warum.
    *itemptr geht problemlos, Ich will aber nicht den Inhalt des Pointers übergeben sondern halt die Adresse damit diese in main von nem pointer entgegengenommen werden kann.

    Einfach itemptr übergeben und ne normale PERSON Variable das annehmen lassen führt aber natürlich zu Access Violation wenns nen NULL pointer hat...

    Arghhh jetzt lag es doch einfach daran das lookup nicht PERSON* ist
    Das hatte Ich eigentlich als erstes probiert, oder dachte Ich zumindest
    Geändert von gubbel (02.06.2016 um 14:11 Uhr)
    A sanity powered pizza vaporizer.

  4. #44
    s̓̍̒͋̌l̎ow̐̔̉̉c̊͋̉ar̄͑ ͪͫ͛ ̓ Avatar von slowcar
    Registriert seit
    03.04.2011
    Ort
    hamburg
    Beiträge
    8.219
    C ist nicht grad meine Spezialität, aber müsstest Du nicht als Rückgabewert einen Pointer angeben, also PERSON*?
    bsearch sagt in der API es will einen pointer auf key, Du dereferenzierst den aber mit &.
    Im ersten Beispiel das ich gefunden habe wird key als lokale variable angelegt: int key = 32; - da wird dann durch das & ein pointer drauf übergeben.
    Ich vermute Du hast das Beispiel falsch umgesetzt. Versuch mal key ohne '&' zu übergeben.
    Edit: Und sollte list nicht ein array von Werten sein? Bei Dir ist list ja ein PERSON pointer.
    Oh what a day! What a lovely day!

  5. #45
    Avatar von gubbel
    Registriert seit
    03.04.2011
    Beiträge
    4.449
    Nope ohne & gibts ne Acess Violation, Ich übergeb die Adresse eines strings und bsearch nimmt das in nem pointer an. Das Proble mwar wirklich PERSON statt PERSON*

    Momentan habsch ein anderes Problem, ich hau mal das ganze Programm mit Kommentaren rein.

    Code:
    #include <iostream>
    #include <cstring>
    #include <stdlib.h>
    
    struct PERSON
    {
       //Version1
       char* name;
    
       //Version2
       //string name;
    
       int phonenr;
    };
    
    int fcmp(const void* a, const void* b)
    {
    	PERSON* personA = (PERSON*)a;
       PERSON* personB = (PERSON*)b;
       //Version 1 
       return(strcmp(personA->name, personB->name));
       //funktioniert grundsätzlich
       
       //Version 2
       //int val=personA->name.compare(personB->name);
    
       //return(val);*/
       //funktioniert beim qsort einwandfrei und stirbt beim bsearch weil er aufeinmal kein a mehr kriegt
    
    }
    
    PERSON* lookup(char* key, PERSON* list)
    {
    	PERSON* itemptr;
       itemptr = (PERSON*) bsearch(&key, list, 7, sizeof(list[0]), fcmp);
       cout<<"hello"<<endl;
       return itemptr;
    }
    
    void main()
    {
    	PERSON* ptr;
    	PERSON list[7];
       list[0].name="Dafoe, Daniel";
       list[0].phonenr=789;
       list[1].name="Wurst, Hans";
       list[1].phonenr=963;
       list[2].name="Schweiß, Axel";
       list[2].phonenr=456;
       list[3].name="SonofUthdsjfdsrid, Uthasdasdasrid";
       list[3].phonenr=321;
       list[4].name="Brei, Grieß";
       list[4].phonenr=147;
       list[5].name="LaFleur, Kevin";
       list[5].phonenr=987;
       list[6].name="Lulu, Lala";
       list[6].phonenr=258;
    
       qsort(list, 7, sizeof(list[0]), fcmp);
       for(int x=0; x<7; x++)
       {
       	cout<<list[x].name<<" "<<list[x].phonenr<<endl;
       }
       ptr=lookup("Brei, Grieß", list);
       if(ptr)
       	cout<<ptr->phonenr<<endl;
       else
       	cout<<"Nicht gefunden!"<<endl;
    
       cout<<"blubb"<<endl;
    }
    A sanity powered pizza vaporizer.

  6. #46
    Avatar von gubbel
    Registriert seit
    03.04.2011
    Beiträge
    4.449
    Ähmmmm ne Frage zu (pseudo)random Funktionalität.

    Unser uralt Borland nahm zur initialisierung einfach randomize(); ohne Parameter. Was genau das macht wird auch nicht erläutert:
    Initialisiert den Zufallszahlengenerator.
    randomize initialisiert den Zufallszahlengenerator mit einem Zufallswert.

    Borland C++-Programmierhandbuch
    Visual kennt jetzt nur noch den ANSI Standard mit srand(seed); wofür man als seed time(NULL) nimmt.
    Das man das am besten nur einmal bei Programmstart macht ist mir klar aber bei mehreren Programmstarts in kurzer Zeit sind die Zahlen sehr ähnlich.
    Das Borland Teil hat da zumindest den Anschein besserer Zufälligkeit erweckt

    Was gäbs denn da an Alternativen?
    Google spuckt mir nur den wie gesagt bekannten Hinweis darauf dass gleich zu Anfang zu initialisieren und dämliche Ideen wie +_getpid aus wo Ich ja völlig aus meiner range rauskomme
    A sanity powered pizza vaporizer.

  7. #47
    s̓̍̒͋̌l̎ow̐̔̉̉c̊͋̉ar̄͑ ͪͫ͛ ̓ Avatar von slowcar
    Registriert seit
    03.04.2011
    Ort
    hamburg
    Beiträge
    8.219
    Der seed muss nur unterschiedlich sein. Wenn er sich nur wenig unterscheidet macht das nichts.
    Nur wenn man vom gleichen seed aus startet bekommt man die gleiche Abfolge von Pseudozufallszahlen.
    Oh what a day! What a lovely day!

  8. #48
    Avatar von gubbel
    Registriert seit
    03.04.2011
    Beiträge
    4.449
    Jo Ich weiß, aber der ist ja unterschiedlich.
    Und es scheint eben doch was zu machen wenn er sich nur wenig unterscheidet (weil systemzeit erst ein paar sekunden später).
    Ganz gleich sind die gar nicht aber 3-4 mal hintereinander 55xx bei %10000 ist nicht toll
    A sanity powered pizza vaporizer.

  9. #49
    s̓̍̒͋̌l̎ow̐̔̉̉c̊͋̉ar̄͑ ͪͫ͛ ̓ Avatar von slowcar
    Registriert seit
    03.04.2011
    Ort
    hamburg
    Beiträge
    8.219
    Zitat Zitat von gubbel Beitrag anzeigen
    Ganz gleich sind die gar nicht aber 3-4 mal hintereinander 55xx bei %10000 ist nicht toll
    Zufall
    Oh what a day! What a lovely day!

  10. #50
    Avatar von gubbel
    Registriert seit
    03.04.2011
    Beiträge
    4.449
    Nee das ist einfach immer ein bisschen höher. Umso mehr Zeit Ich vergehen lasse umso höher.
    Ich kann das jetzt nochmal 10 mal hintereinander laufen lassen und krieg 84xx solange bis wir halt bei 85xx sind
    A sanity powered pizza vaporizer.

Ähnliche Themen

  1. Kleine Hafenrundfahrt
    Von slowcar im Forum Alltägliches
    Antworten: 27
    Letzter Beitrag: 27.05.2018, 13:50
  2. Der kleine Fragen Thread
    Von wisthler im Forum TM Manager
    Antworten: 26
    Letzter Beitrag: 20.08.2012, 08:50
  3. Der kleine HoMM 5-Meditationsthread
    Von Jim im Forum Allgemein
    Antworten: 56
    Letzter Beitrag: 21.03.2012, 13:25
  4. Der kleine Fragen Thread
    Von Smokin' Caterpillar im Forum Naturwissenschaften & Technik
    Antworten: 6
    Letzter Beitrag: 04.05.2011, 22:00

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •