Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ermitteln kleinster Zahl

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 ]
000
03.12.2005, 17:40 Uhr
Konne



Hallo,
Ich muss ein Programm in C schreiben, bei dem ich eingegebene Zahlen sortieren soll.
Und zwar soll ich die kleinste Zahl herausfinden,diese an erste Stelle setzen und die Zahl an der ersten Stelle an die Stelle der kleinsten Zahl setzen.

nun hab ich zwar heraugefunden, wie ich die Zahlen tausche, aber wie kann ich die kleinste Zahl ermitteln? Die Zahlen stehen in einem Array.

Über Anregungen würde ich mich freuen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.12.2005, 17:53 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Das kannst du mit du mit Insertsort oder Selectionsort machen (die haben eine quadratische Laufzeit) oder mit Quicksort oder Shellsort machen, die eine laufzeit von n(log n) haben. Die letzten beiden sind also schneller. Einfach mal googlen, da findest sicher einige Code beispiele !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.12.2005, 19:08 Uhr
predator



Wie war das mit den Kanonen und Spatzen?

@Konne
Wenn du einfach die kleinste Zahl in einem Array haben willst, brauchst du eine Variable z.b. "kleinsteZahl", der du 0 zuweist. Dann kannst du eine for-Schleife for(int i=0; i<(AnzahlElemente); i++) laufen lassen, und in jedem Durchlauf außer dem letzten prüfen, ob die Zahl an der Stelle i kleiner als die an der Stelle "kleinsteZahl" ist. Wenn ja, speicherst du i in der Variablen "kleinsteZahl".
Nachdem die Schleife fertig ist, kannst du einfach die Stelle 0 des Arrays mit der Stelle "kleinsteZahl" des Arrays vertauschen.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.12.2005, 19:34 Uhr
Konne



ja aber wenn ich kleinsteZahl auf 0 setze, wie soll die dann wissen, welches die kleinste Zahl ist? Und wieso das letzte nicht prüfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.12.2005, 19:41 Uhr
RedEagle




C++:
int min(unsigned int *numbers, int count)
{
unsigned int lowest=0xFFFFFFFF;
for(int i=0; i<count; i++) if(numbers[i] < lowest) lowest = numbers[i];
return lowest;
}


*numbers: Addresse zu einer liste von n Zahlen
count: Anzahl der Zahlen
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.12.2005, 20:18 Uhr
predator




Zitat von Konne:
ja aber wenn ich kleinsteZahl auf 0 setze, wie soll die dann wissen, welches die kleinste Zahl ist?

Also die Bezeichnung "kleinsteZahl" war wohl ein bisschen ungeschickt gewählt, denn sie enthält nicht die kleinste Zahl, sondern nur die Stelle der kleinsten Zahl im Array. Also schreib überall mal z.b. "StelleKleinsteZahl".
Das wird am Anfang auf 0 gesetzt, weil das erste Element eines Arrays ja die Stelle 0 hat, z.b. foo[0].
Danach (in der Schleife) wird für jede Stelle des Arrays geprüft, ob sie kleiner als die Stelle "StelleKleinsteZahl" ist. Wenn ja, wird diese Stelle in "StelleKleinsteZahl" gespeichert, und es geht weiter.


Zitat von Konne:
Und wieso das letzte nicht prüfen?

Dann würdest du auf eine Stelle des Arrays zugreifen, die es gar nicht gibt (wegen (i+1))

@RedEagle
Ich glaube, das bringt Konne nicht besonders viel...
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.12.2005, 21:07 Uhr
Konne



Also irgendwie klappt es nicht. Mal ne blöde Frage, soll das StelleKleinsteZahl dann ein Array sein,oder einfach int stellekleinstezahl=0;
Dann mach ich die for schleife, und in die for-Schleife dann ne if schleife um zu prüfen, ob die Zahlen in meinem Array kleiner sind als die in dem stellekleinstezahl?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.12.2005, 21:29 Uhr
predator




Zitat von Konne:
Mal ne blöde Frage, soll das StelleKleinsteZahl dann ein Array sein,oder einfach int stellekleinstezahl=0;

Ein int.


Zitat von Konne:
Dann mach ich die for schleife, und in die for-Schleife dann ne if schleife um zu prüfen, ob die Zahlen in meinem Array kleiner sind als die in dem stellekleinstezahl?

if ist keine Schleife (es wird nämlich nichts wiederholt)

Ansonsten merk ich schon, dass ich heut irgendwie nur Müll rede, muss wohl noch der Restalkohol sein
Wenn sich also etwas widersprechen sollte, wunder dich nicht!
Also, schau mal hier:

C++:
#include <iostream>

int main ()
{
    // Test-Array mit 10 Elementen
    int array[10] = { 11, 5, 103, 54, 89, 2459, 67, 233, 2, 1000 };
    int StellekleinsteZahl=0; // für die Stelle des kleinsten Elements

    // for-Schleife über die Elemente des Arrays
    for(int i=0; i<10; i++)
    {
        // Wenn das Element an der Stelle i kleiner als das Element an der bisherigen kleinsten Stelle ist, diese Stelle "StellekleinsteZahl" zuweisen
        if(array[i] < array[StellekleinsteZahl])
            StellekleinsteZahl=i;
    }

    // Stelle der kleinsten Zahl ausgeben, in diesem Fall 8
    std::cout << StellekleinsteZahl << std::endl;
    // kleinste Zahl ausgeben, in diesem Fall 2
    std::cout << array[StellekleinsteZahl] << std::endl;
    
    // Vertauschen
    int tmp = array[0];
    array[0] = array[StellekleinsteZahl];
    array[StellekleinsteZahl] = tmp;

    return 0;
}


--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.12.2005, 22:21 Uhr
Konne



Hm, ok,jetzt weiß ich was du gemeint hast,aber irgendwie funktioniert es nicht. Kann es sein, dass man außer der Eingabe "Stelle der Kleinsten Zahl ausgeben" noch was anderes in C eingeben muss? Du hast je jetzt den Quellcode von C++ genommen. Und ich programmier in C...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.12.2005, 22:49 Uhr
predator



Ach so, hab ich gar nicht drauf geachtet

Ich kenn mich mit C zwar nicht gut aus, aber aus den Compilerfehlermeldungen schließe ich, dass es

C++:
int i;
for(i=0; i<10; i++)

heißen muss.

Außerdem musst du noch die Ausgabe des Programms ändern, soweit ich mich erinnere, müsste es so gehen:

C++:
printf("%d\n", StellekleinsteZahl);
printf("%d\n", array[StellekleinsteZahl]);


Dazu musst du halt statt iostream stdio einbinden.
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.

Dieser Post wurde am 03.12.2005 um 22:50 Uhr von predator editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: