Zufallszahlen
Zufallszahlen
Aufgabe:
Erzeugt 1000 Zufallszahlen zwischen 0 und 500, welche in einem Feld abgespeichert
werden. Anschließend sollen diese Zahlen der Größe nach im Feld sortiert werden. Als
Ausgabe erfolgt die Auflistung der sortierten Zahlen auf dem Monitor.
Wie kann ich die Zahlen erstellen und welche Sortiermethode ist die "beste"
Meine gedanken:
Array [0..999] of Integer;
Randomize;
for i:= 0 to 1000 do
zahlen:= random( 500 ) + 1;
dann ausgeben
Erzeugt 1000 Zufallszahlen zwischen 0 und 500, welche in einem Feld abgespeichert
werden. Anschließend sollen diese Zahlen der Größe nach im Feld sortiert werden. Als
Ausgabe erfolgt die Auflistung der sortierten Zahlen auf dem Monitor.
Wie kann ich die Zahlen erstellen und welche Sortiermethode ist die "beste"
Meine gedanken:
Array [0..999] of Integer;
Randomize;
for i:= 0 to 1000 do
zahlen:= random( 500 ) + 1;
dann ausgeben
-
- Beiträge: 200
- Registriert: So 11. Jul 2010, 18:39
- OS, Lazarus, FPC: Linux
- CPU-Target: 64 Bit
- Wohnort: Wien
- Kontaktdaten:
Re: Zufallszahlen
Klingt nach einer Schulaufgabe 
Wie auch immer: Die Erzeugung des Feldes ist schon einmal nicht schlecht, nur nicht Pascal-gerecht
Was das Sortieren betrifft: https://de.wikipedia.org/wiki/Sortierverfahren

Wie auch immer: Die Erzeugung des Feldes ist schon einmal nicht schlecht, nur nicht Pascal-gerecht

Was das Sortieren betrifft: https://de.wikipedia.org/wiki/Sortierverfahren

Ceterum censeo computatores per Pascal docendos esse.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zufallszahlen
Hi!
Sortieren für Doofe - nicht dem Lehrer zeigen! Gibt ne 5!
Winni
Sortieren für Doofe - nicht dem Lehrer zeigen! Gibt ne 5!
Code: Alles auswählen
var zahlen : array[0..999] of integer;
.....
procedure sortDumb;
var i,k, tmp : integer;
begin
for i := 0 to high (zahlen) - 1 do
begin
for k := i+1 to high(zahlen) do
begin
if zahlen[k] < zahlen[i] then
begin // Dreieckstausch
tmp := zahlen[i];
zahlen[i] := zahlen[k];
zahlen[k] := tmp;
end; // if
end; // k
end; // i
end;
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zufallszahlen
Eine 5 ist nicht schlecht, klar ein 6 wäre besser.
Aber was soll am Alogorytmus schlecht sein ?
Für ganz Faule, die Zahlen in eine StringList schreiben.
Dann nur noch die Funktion sorted aufrufen.
Oder noch einfacher ein ListView oder was ähnliches, dann hast es direkt auf dem Schirm.

Aber was soll am Alogorytmus schlecht sein ?
Für ganz Faule, die Zahlen in eine StringList schreiben.
Dann nur noch die Funktion sorted aufrufen.
Oder noch einfacher ein ListView oder was ähnliches, dann hast es direkt auf dem Schirm.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 200
- Registriert: So 11. Jul 2010, 18:39
- OS, Lazarus, FPC: Linux
- CPU-Target: 64 Bit
- Wohnort: Wien
- Kontaktdaten:
Re: Zufallszahlen
An dem Algo ist faul, dass er schweinelangsam ist und eigentlich nur dann schnell ist, wenn er nix zu sortieren hat. Er ist bei Informatikern unter dem Namen Bubblesort berüchtigt.
Ich habe oben einen Link angegeben, wo man sich einen schönen aussuchen kann. Quicksort ist ein 60 Jahre alter Klassiker, dessen Instabilität bei der gestellten Aufgabe wurscht ist. Ansonsten würde ich binäres Insertionsort bevorzugen (weit schneller als die Version in der Liste). Ich gebe den hier nicht an, weil ich die Ursprüngliche Frage für eine Schulaufgabe halte. Das soll der Schüler selbst lösen., da lernt er was
Ich habe oben einen Link angegeben, wo man sich einen schönen aussuchen kann. Quicksort ist ein 60 Jahre alter Klassiker, dessen Instabilität bei der gestellten Aufgabe wurscht ist. Ansonsten würde ich binäres Insertionsort bevorzugen (weit schneller als die Version in der Liste). Ich gebe den hier nicht an, weil ich die Ursprüngliche Frage für eine Schulaufgabe halte. Das soll der Schüler selbst lösen., da lernt er was

Ceterum censeo computatores per Pascal docendos esse.
Re: Zufallszahlen
Vom Sortieren abgesehen, sehe ich noch folgende Probleme:Ronny hat geschrieben: Mo 4. Mai 2020, 17:09 Array [0..999] of Integer;
Randomize;
for i:= 0 to 1000 do
zahlen[ i]:= random( 500 ) + 1;
dann ausgeben
Wieviele Zufallszahlen, meinst du, werden erzeugt, wenn der Zähler von 0 bis 1000 läuft? Oder einfacher zum Mitzählen: lassen wir den Zähler von 0 bis 5 laufen (Grenzen eingeschlossen): 0, 1, 2, 3, 4, 5. Das sind wieviele? Was musst du an der Schleife ändern, damit wirklich 1000 Zahlen erzeugt werden?
Wenn du in der Dokumentation nachschaust (https://www.freepascal.org/docs-html/rt ... andom.html), dann siehst du: "Random(L) returns a random number larger or equal to 0 and strictly less than L", also: die Zahlen stammen aus dem Bereich 0, 1, 2, .., L-2, L-1. Jetzt steht in deiner Aufgabe, du sollst Zahlen "zwischen 0 und 500" erzeugen. Die Frage ist: was ist mit den Grenzen? Das kann ich nicht sagen, das ist eine schwammige Sprechweise, denn es ist nicht klar, ob die 0 und die 500 mit vorkommen dürfen oder nicht. Nehmen wir an: sie dürfen, also es können die Zahlen 0, 1, 2, ... 499, 500 vorkommen. Was ist dann an deinem Aufruf, Random(500)+1, falsch? Überleg dir, was ist die kleinstmögliche und die größtmögliche Zahl, die du damit erhältst. Was musst du ändern, damit es richtig wird? Und zur Übung überlege dir auch den anderen Fall, dass die Endwerte nicht mit in der erzeugten Menge vorkommen dürfen.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zufallszahlen
Hi!diogenes hat geschrieben: Mo 4. Mai 2020, 19:01 An dem Algo ist faul, dass er schweinelangsam ist und eigentlich nur dann schnell ist, wenn er nix zu sortieren hat. Er ist bei Informatikern unter dem Namen Bubblesort berüchtigt.
Doch nicht alles verraten!
Aber mal im Ernst: Das ist das unschöne an den heutigen Mehrprozessor-Rechnern:
Man merkt den Unterschied der Algorithmen kaum noch. Insofern kann man mit obigen 1000 integers
nicht den Unterschied zwischen Bubblesort und Quicksort merken.
Aber Quicksort ist wesentlich eleganter und schneller.
Bubblesort ist nur brut force!
Winni
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zufallszahlen
Hallo!Mathias hat geschrieben: Mo 4. Mai 2020, 18:52 Eine 5 ist nicht schlecht, klar ein 6 wäre besser.![]()
Aber was soll am Alogorytmus schlecht sein ?
Für ganz Faule, die Zahlen in eine StringList schreiben.
Dann nur noch die Funktion sorted aufrufen.
Oder noch einfacher ein ListView oder was ähnliches, dann hast es direkt auf dem Schirm.
Hihi - in die alte Falle des alphabetischen Sortierens geraten:
Alphabetisch ist nämlich 2 > 10 !!!
Das möchtest Du doch wohl nicht.
Bei Deinem Vorschlag müsste man mit führenden Nullen arbeiten - dann klappts, denn
010 > 002
So gehts dann.
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Zufallszahlen
Mal sehen ob Ronny mit den Informationen seine Übung hinbekommen hat.
Tips hat er ja genug bekommen, ob ihn das wohl reicht ?1

Tips hat er ja genug bekommen, ob ihn das wohl reicht ?1
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).