suche c/c++ profis die mir helfen können



  • hi,

    ich muss bis sonntag ein programm abgeben und weiß nicht wie ich es machen soll!
    es geht um den quicksort. dieser algorithmuss soll runtime-argumente sortieren und ausgeben! bis hier hin kein problem! allerdings sollen auch die einzelnen schritte ausgegeben werden. hier ist die musterlösung:
    http://doris.informatik.fh-wiesbaden.de/linn/info1HA1.htm

    ich weiß nicht wie ich das machen soll! bis jetzt hab ich nur die erste zeile ausgeben können(ohne recursionstiefe)! kann mir jemand weiter helfen?



  • hier antwortet niemand, nicht weil es schwer, es ist blos wie machen für niemanden die hausaufgaben

    werde konkreter wo du probleme hast

    ich sage das nicht weil ich jemand ärgern will, sondern weil ich dir den weg zeigen will wie du hier infos aus den forum bekommst



  • Ich denke dein Problem ist, dass du nicht weißt wie du den Algorithmus implementieren sollst. Ich kann dir ein wenig aus dem Kopf helfen:
    - Das Prinzip ist dir klar mit dem durchwandern und vertauschen falls rechtes Element kleiner?
    - Wenn ja brauchst du dir bei jedem Durchgang nur per bool-Flag zu merken ob vertauscht wurde (Bei vertauschen auf true setzen). Vor jedem neuen Schleifendurchgang prüftst du ob das Flag z.B. bNotSorted gesetzt ist. Wenn nicht hast du fertig sortiert. So wie ich das jetzt im Kopf habe brauchst du keine Rekursion. Gibt aber sicherlich bessere Implementierungen 🙄
    In der Regel verwendet man für sowas std::sort



  • also ich will ja nicht das einer hier meine hausaufgaben macht!!! davon war überhaupt nicht die rede!!! davon hätt ich auch überhaupt nichts!!! schließlich studiere ich informatik und will selbst in ferner zukunft eigenständig programm entwerfen!!! dachte nur das ich hier einen professionellen c/c++ler kennen lernen würde!!! ich hab da nähmlich einiges an fragen!!! also wie ich den algorithmus implementieren soll und wie er funktioniert das weiß ich! ich weiß nur nicht wie ich die einzelnen schritte ausgeben soll!!! ich hoffe das diesmal mein post genau durchgelesen wird und dann geantwortet wird! sorry aber wenn ich sowas lese fang ich an zu kochen! ich bin doch kein 5ft klässler mehr der andere leute bittet seine hausaufgaben zu machen!!! vielleicht findet sich ja noch einer der mir intelligente antworten geben kann!!!



  • Du hast ja recht, aber "Die Wichtigkeit eines Newspostings im Usenet ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen."



  • Aber hier gibt es durchaus professionelle Programmierer!



  • na dann bin ich ja mal gespannt ob sich hier einer meldet!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • Original erstellt von morpheus0023:
    ich weiß nur nicht wie ich die einzelnen schritte ausgeben soll!!! ich hoffe das diesmal mein post genau durchgelesen wird und dann geantwortet wird! sorry aber wenn ich sowas lese fang ich an zu kochen! ich bin doch kein 5ft klässler mehr der andere leute bittet seine hausaufgaben zu machen!!! vielleicht findet sich ja noch einer der mir intelligente antworten geben kann!!!

    Auf intelligente Fragen gibt es auch intelligente Antworten. Zunächst einmal. Weißt du nicht was du nach jedem Durchgang ausgeben sollst, wie du es ausgeben sollst, oder wann du es wohin ausgeben sollst? Fragen über Fragen. Also werd doch bitte mal präziser wenn dir geholfen werden soll. Aus deinen Fragen verstehe ich, dass du eine Zeile ausgeben kannst aber anscheinend nicht in der Lage bist dies nach jedem Schleifendurchlauf, bzw. jeder Rekursion zu machen. Poste doch mal ein Stück Code und dir kann sicher geholfen werden.



  • ich würde mir vielleicht mal ein c++-buch zulegen bzw. on tut lesen.....
    so schwer is die aufgabe wirklich nicht !!
    ausserdem: ich bin auch dafür, dass die leute hier nicht die "faulheit" anderer unterstützen !



  • hier mein kompletter code:

    #include <iostream>
    using namespace std;

    void quicksort(int array[], int anf, int end)
    {

    int l = anf;
    int r = end;
    int pivot = array[(l+r)/2];
    int tmp;

    do
    {
    while((array[l] < pivot) && (l < end)) l++;
    while((array[r] > pivot) && (r > anf)) r--;

    if (l <= r)
    {
    tmp = array[l];
    array[l] = array[r];
    array[r] = tmp;
    l++;
    r--;
    }

    }while(l <= r);

    if(anf < r)
    quicksort(array,anf,r);
    if(l < end)
    quicksort(array,l,end);
    }
    /*void ausgabe(int array[], int max)
    {

    for (int i=1; i <= max; i++)
    cout<<" "<<array[i];
    } */
    int main(int argc, char *argv[])
    {

    int max=argc-1,z,i,j;
    int array[max];

    for (i=1;i<=max;i++)
    {
    //j=i+1;
    z=atoi(argv[i]);
    array[i]=z;
    }
    quicksort(array, 0, max);
    //ausgabe(array, max);

    for(i=1;i<=max;i++)
    cout<<" "<<argv[i]; //ausgabe der unsort zahlen

    cout<<"\n";
    char string[max];
    char a='<';
    cout<<a;
    for(i=1;i<=max;i++)
    {
    string[i]='-';
    cout<<string[i];

    }
    char b='>';
    cout<<b;

    return 0;
    }



  • Bitte mach das in Code tags

    dein Code
    


  • Wenn ich das Musterbeispiel richtig verstanden habe soll jedes mal wenn etwas
    in Quicksort getauscht wird alle aktuellen Zahlen ausgegeben werden.
    Du must nur gucken wo etwas getauscht wird und dort die Zahlen ausgeben.



  • ich hoff is ist richtig:

    #include <iostream>
    using namespace std;
    
    void quicksort(int array[], int anf, int end)
    {
    
      int l = anf;
      int r = end;
      int pivot = array[(l+r)/2];
      int tmp;
    
      do
      {
         while((array[l] < pivot) && (l < end))  l++;
         while((array[r] > pivot) && (r > anf))  r--;
    
         if (l <= r)
         {
             tmp = array[l];
             array[l] = array[r];
             array[r] = tmp;
             l++;
             r--;
         }
    
      }while(l <= r);
    
      if(anf < r)
        quicksort(array,anf,r);
      if(l < end)
        quicksort(array,l,end);
    }
    /*void ausgabe(int array[], int max)
    {
    
            for (int i=1; i <= max; i++)
                    cout<<" "<<array[i];
    }   */  
    int main(int argc, char *argv[])
    {
    
        int max=argc-1,z,i,j;
        int array[max];
    
        for (i=1;i<=max;i++)     
        {
                //j=i+1;
            z=atoi(argv[i]);        
            array[i]=z;
        }
      quicksort(array, 0, max);
    //ausgabe(array, max);
    
       for(i=1;i<=max;i++)        
       cout<<" "<<argv[i];      //ausgabe der unsort zahlen
    
      cout<<"\n";    
      char string[max]; 
      char a='<';
      cout<<a;    
      for(i=1;i<=max;i++)
      {
        string[i]='-';
        cout<<string[i];
    
      }
      char b='>';    
      cout<<b;      
    
    return 0;
    }
    


  • so leicht es ist leider nicht c newbie.
    das hab ich schon ausprobiert, kommt nur scheisse bei raus.
    vielleicht kann ja mal einer den code compilieren und mir evtl. ein tip geben.



  • wenn ich das richtig verstanden hab, musst du vor

    tmp = array[l];
             array[l] = array[r];
             array[r] = tmp;
    

    noch ein

    cout << "Swapping " << l << " <-> " << r << endl;
    


  • also das mit deim swaping da funzt überhaupt ned! ka was du dir da bei gedacht hast! bin allerdings etwas weiter gekommen, vielleicht kann ja mal einer drüber schauen und mit der musterlösung vergleichen. bin für jeden tipp zu haben!

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    
    void ausgabe_bereich(int array[], int rekur_counter, int max, int pivot) 
    { 
        int i;
    
        cout<<" sort: ";
        for (int i=1; i <= max; i++)
            cout<<" "<<array[i];
    
        cout<<"\n";
    
        char string[max]; 
      char a='<';
      cout<<"rekur_counter: "<<rekur_counter<<" "<<a;    
        for(i=1;i<=max;i++)
      {
        string[i]='-';
        cout<<string[i]<<string[i];
    
      }
      char b='>';    
      cout<<b;      
    
       cout<<"  pivot: "<<pivot<<endl;
    
       /*int i;
    
         for(i=0; i<l; i++) 
       { 
           printf("    "); 
       } 
       printf("<"); 
       for(; i<r; i++) 
       { 
           printf("----"); 
       } 
       printf("-->\n"); 
    
       */
    
    }   
    void quicksort(int array[], int anf, int end)
    {
        static int rekur_counter;
    
        rekur_counter++;
    
        int l = anf;
      int r = end;
      int pivot = array[(l+r)/2];
      int tmp;
    
      do
      {
        while((array[l] < pivot) && (l < end))  l++;
        while((array[r] > pivot) && (r > anf))  r--;
    
            if (l <= r)
        {
            tmp = array[l];
          array[l] = array[r];
          array[r] = tmp;
          l++;
          r--;
    
        }
        }while(l <= r);
    
      if(anf < r)
        quicksort(array,anf,r);
        if(l < end)
            quicksort(array,l,end);
    
        rekur_counter--;
    
        ausgabe_bereich(array,rekur_counter,end,pivot);
    
    }
    void ausgabe(int array[], int max)
    {
        cout<<"sort:   ";
        for (int i=1; i <= max; i++)
            cout<<" "<<array[i];
    
        cout<<"\n";
    }
    
    int main(int argc, char *argv[])
    {
    
        int max=argc-1,z,i,j;
        int array[max];
    
        for (i=1;i<=max;i++)     
            {
                //j=i+1;
                z=atoi(argv[i]);        
                array[i]=z;
            }
    
      quicksort(array, 0, max);
    
        //ausgabe(array, max);
    
        cout<<" unsort: ";
        for(i=1;i<=max;i++)        
        cout<<" "<<argv[i];     //ausgabe der unsort zahlen
    
    return 0;
    }
    


  • Jedes mal wenn etwas getauscht wird,

    if (l <= r)
    {
     tmp = array[l];
     array[l] = array[r];
     array[r] = tmp;
     l++;
     r--;
    }
    

    soll der aktuelle Bereich ausgegeben werden.
    *winkmitdemzaunpfahl*


Anmelden zum Antworten