Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Brauche Hilfe mit Arrays!!!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
11.10.2003, 23:31 Uhr
~DoffDoff
Gast


Hallo

Ich habe folgende Aufgabe zu lösen und habe leider keinen Plan!! Ich weiß nicht wo ich anfangen soll usw. Ich bin für jeden Tip und für jede Hilfe dankbar.


C++:
#include <iostream.h> // Hier wird die Klasse und Instanz von cout definiert
#include <conio.h>         // Hier wird die getch() Funktion definiert
#include <stdlib.h>         // Hier wird die rand() Funktion definiert
#include <time.h>


int main(int argc, char *argv[])
{
short z;        // Nimmt neue Zufallszahl auf
short zaehler;    // Zaehlt die bereits abgelegten Zufallszahlen
short ergebnis[15];// Hier werden die Zufallszah. als Array Elemente abgelegt
short i;        // Diverse Schleifenindexe
short j;
short k;


// Noch keine Zufallszahl abgelegt

zaehler = 0;

// Zufallsgenerator wird initialisiert

srand( (unsigned)time( NULL ) );


// Durchlaufe deise Schleife 15-mal bis alle 15 Zufallszahlen in das
// ergebnis Array einsortiert sind

for (i = 0; i < 15; i++) {
z = rand();    // Hole eine neue Zufallszahl

    // Hier bitte mit Hilfer einer for Schleife
    // die Position des ersten Elementes, das grösser
    // als der neue Zufalsswert ist, bestimmen
    // Diese Position

    // ..... Code einfügen....  //


    // Hier bitte anhand der gefunden Position feststellen
    // ob die neue Zufallszahl an das Ergebnis-Array angehängt werden
    // kann oder in das Array einsortiert werden muss

if (/..../) {
// Neue Zufallszahl an das Array anhaengen

// ...... Code einfügen .......  //
        }
else {
// Alle Zahlen hinter der Einfügeposition um eine position
// nach hinten schieben
// ACHTUNG! Dabei keine noch nicht verschobenen Werte überschreiben

// ... Code einfügen .... //

// Neue Zufallszahl an der Einfügeposition ablegen

// ..... Code eingügen .... //
        }

// Zaehler für abgelegte Zahlen um 1 erhöhen
zaehler = zaehler + 1;
    }


// Ergenis-Array in aufsteigender Reihenfolge ausgeben
for (i = 0; i < zaehler; i++) {
cout << ergebnis[i] << endl;
    }

// Warte auf Tastendruck (Return)
getch();
}



--edit: Pablo- [ cpp ] tags gesetzt, für so langen Code bitte Code Tags verwenden--

Dieser Post wurde am 11.10.2003 um 23:36 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.10.2003, 23:45 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich vermute mal das du sowas suchst
vorsicht ungetestet dirket gepostet


C++:
int main(){

int i,j,x,zufallszahlen[15];
srand( (unsigned)time( NULL ) );

for(i=0;i<15;i++)zufallszahlen[i]=rand()%100;

for(j=0;j<15-1;j++)
  for(i=j+1;i<15;i++)
   if(zufallszahlen[j]>zufallszahlen[i]){x=zufallszahlen[j];zufallszahlen[j]=zufallszahlen[i];zufallszahlen[i]=x;}

}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.10.2003 um 23:55 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.10.2003, 23:56 Uhr
Pablo
Supertux
(Operator)


conio.h weg damit, das ist nicht portabel und benutze lieber getchar()

Für die Erstellung des Array brauchst du z nicht.


C++:
for(i=0; i<15;++i)
    ergebnis[i] = rand();



Sei int maxArray die Position des Array mit der größten Zahl. Der folgende Code soll den ersten Ersetzen, den ich oben geschrieben hab, denn ich mache 2 Schritte auf einmal

C++:
ergebnis[0]=rand();
maxArray=0;
for (i=1; i<15; ++i){
  ergebnis[i] = rand();
  maxArray = ergebnis[maxArray] < ergebnis[i] ? maxArray : i;
}



Zitat:

/ Hier bitte anhand der gefunden Position feststellen
// ob die neue Zufallszahl an das Ergebnis-Array angehängt werden
// kann oder in das Array einsortiert werden muss


Welche andere Zufallszahl?

Was willst du eigentlich machen bzw. welche ist die Aufgabe?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.10.2003, 23:58 Uhr
Pablo
Supertux
(Operator)


Ach so, hab falsch gesehen, ich werde nachdenken.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.10.2003, 09:56 Uhr
~DoffDoff
Gast


Hier habe ich mal die Aufgabestellung. Ich hoffe die hilft etwas.

// Aufgabe:
// --------
//
// Mit Hilfe der rand() Funktion sollen 15 Zufallszahlen vom Datentyp short generiert werden
// und in aufsteigender Reihenfolge in ein short-Array abgelegt werden.
// Der Inhalt des Arrays soll dann mit cout auf der Konsole ausgegeben werden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.10.2003, 10:30 Uhr
Pablo
Supertux
(Operator)



C++:
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <time.h>
#include <algorithm>

int main()
{
        short arr[15];
        srand(time(NULL)%1000);

        for(int i=0; i<15; ++i)
                arr[i]=rand()%500; // Beschränkung auf [0,...,500]


        const int N = sizeof(arr) / sizeof(short);
        sort(arr, arr+N);

        for(int j=0; j<15; ++j)
                std::cout << j+1 << ". Zahl: " << arr[j] << std::endl;

        return EXIT_SUCCESS;
}



So, das ist (glaube ich), was du willst, oder?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 12.10.2003 um 10:32 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.10.2003, 10:37 Uhr
Pablo
Supertux
(Operator)


Das gefällt mir besser:

C++:
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <time.h>
#include <algorithm>

inline bool comp(short x, short y) {return x<y;}

int main()
{
        short arr[15];
        srand(time(NULL)%1000);

        for(int i=0; i<15; ++i)
                arr[i]=rand()%500; // Beschränkung auf [0,...,500]


        const int N = sizeof(arr) / sizeof(short);
        stable_sort(arr, arr+N,comp);

        for(int j=0; j<15; ++j)
                std::cout << j+1 << ". Zahl: " << arr[j] << std::endl;

        return EXIT_SUCCESS;
}


Das ist aufsteigende Sortierung. Wenn du aber in bool comp das "<" kleiner Operator in return x < y; in ">" größer Operator (also return x>y; ) umwandelst, dann kriegst du absteigende Sortierung. Und läuft in O(N*log(N)) und O(N*log(N)²) im Worst Case.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 12.10.2003 um 16:42 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.10.2003, 11:21 Uhr
~DoffDoff
Gast


Hallo

Erstmal vielen Dank für deine Hilfe. Aber beim Ausführen bekomme ich filgende Fehlermeldung:


call to undefined function 'stable_sort'

Kannst du mir weiterhelfen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.10.2003, 11:39 Uhr
Oliver
S2-Pixelgeneral


Hallo,


C++:
#include <stdlib.h>
#include <iostream>
#include <limits.h>
#include <time.h>
#include <algorithm>
[b]using namespace std;[/b]
inline bool comp(short x, short y) {return x<y;}

int main()
{
        short arr[15];
        srand(time(NULL)%1000);

        for(int i=0; i<15; ++i)
                arr[ i ]=rand()%500; // Beschränkung auf [0,...,500]


        const int N = sizeof(arr) / sizeof(short);
        stable_sort(arr, arr+N,comp);


        //sort(arr, sizeof(arr)/sizeof(int));
        for(int j=0; j<15; ++j)
                std::cout << j+1 << ". Zahl: " << arr[j] << std::endl;

        return EXIT_SUCCESS;
}


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 12.10.2003 um 11:40 Uhr von Oliver Müller editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.10.2003, 16:38 Uhr
~(un)wissender
Gast


@Oliver Müller
Ich glauber, das dein inlineing von deiner comp-Funktion nicht beachtet wird,
Generell können C++-Compiler keine Funktion über einem Pointer inlinen und genau das versuchst du.
Mach statt dessen ein Funktionenobjekt:


C++:
struct MyComp {
    bool operator()(short x, short y) {
        return x < y;
   }
};

//der Aufruf
stable_sort(arr, arr+N, MyComp());



Das wird mit ziemlicher Sicherheit geinlined() und ist damit deutlich performanter.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: