Zufallszahlen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Ronny
Beiträge: 1
Registriert: Mo 4. Mai 2020, 17:07

Zufallszahlen

Beitrag von Ronny »

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

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Zufallszahlen

Beitrag von diogenes »

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 :D
Ceterum censeo computatores per Pascal docendos esse.

Benutzeravatar
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

Beitrag von Winni »

Hi!

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;

Winni

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von Mathias »

Eine 5 ist nicht schlecht, klar ein 6 wäre besser. :wink:

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

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Zufallszahlen

Beitrag von diogenes »

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 :)
Ceterum censeo computatores per Pascal docendos esse.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Zufallszahlen

Beitrag von wp_xyz »

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
Vom Sortieren abgesehen, sehe ich noch folgende Probleme:

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.

Benutzeravatar
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

Beitrag von Winni »

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.
Hi!

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

Benutzeravatar
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

Beitrag von Winni »

Mathias hat geschrieben:
Mo 4. Mai 2020, 18:52
Eine 5 ist nicht schlecht, klar ein 6 wäre besser. :wink:

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.
Hallo!

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

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von Mathias »

Stimmt. :oops:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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

Beitrag von af0815 »

Mal sehen ob Ronny mit den Informationen seine Übung hinbekommen hat. :mrgreen:

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).

Antworten