Einführungskurs/Zufallszahlen, BubbleSort, Balkendiagramme (Pascal)

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Pascal</language>
== Definition und Ausgabe eines eindimensionalen Arrays ==

<code id="4d30ce9b43949">
var Zahlen: Array of integer;

procedure fillZahlen(var arr: Array of integer; minimum, maximum: integer);
var i, n: integer;
begin
 n := maximum-minimum;
 setArrayLength(arr, n+1);
 for i := 0 to n do arr[i] := minimum+i;
end;

procedure ZahlenAusgabe(arr: Array of integer);
var i: integer;
begin
 for i := 0 to length(arr)-1 do begin
  if i = length(arr)-1 then 
   writeln(arr[i]) else
  write(arr[i]+', ');
 end;
end;
</code>

<run id="4d30ce9b43b15">
fillZahlen(Zahlen, -5, 10);
ZahlenAusgabe(Zahlen);
</run>

== Zufallszahlen ==

<code id="4d30ce9b439b6">
procedure ZufallsZahlen(var arr: Array of integer; n, minimum, maximum: integer);
var i: integer;
begin
 setArrayLength(arr, n);
 for i := 0 to n-1 do
  arr[i] := random(maximum-minimum+1)+minimum;

,2
32
3end;
</code>

<run id="4d30ce9b43b97">
ZufallsZahlen(Zahlen, 20, 10, 200);
ZahlenAusgabe(Zahlen);
</run>

== BubbleSort ==

<code id="4d30ce9b43a34">
procedure BubbleSort(var arr: Array of integer);
var h, i, j: integer;
begin
 for j := 0 to length(arr)-1 do
  for i := j to length(arr)-1 do
   if arr[i] < arr[j] then begin
    h := arr[i];
    arr[i] := arr[j];
    arr[j] := h;
   end;
end;
</code>

<run id="4d30ce9b43bf5">
ZufallsZahlen(Zahlen, 20, 10, 100);
ZahlenAusgabe(Zahlen);
writeln('Sortiert:');
BubbleSort(Zahlen);
ZahlenAusgabe(Zahlen);
</run>

==Darstellung im Balkendiagramm ==
<code id="4d30ce9b43a95">
procedure BalkenDiagramm(arr: Array of integer; canvas: integer);
var Rand, MaxBreite, MaxHoehe, i: integer;
    balkenBreite, balkenMinValue, balkenMaxValue, y, y0: real;
begin
 selectCanvas(canvas);
 canvas_clear();
 Rand := 50;
 MaxBreite := 400 - 2*Rand;
 MaxHoehe  := 300 - 2*Rand;
 balkenBreite := MaxBreite/length(arr);

 // Minimum und Maximum im Array suchen
 balkenMinValue := 0;
 balkenMaxValue := 0;
 for i := 0 to length(arr)-1 do begin
  if arr[i] < balkenMinValue then balkenMinValue := arr[i];
  if arr[i] > balkenMaxValue then balkenMaxValue := arr[i];
 end;

 // Balken zeichnen
 y0 := balkenMaxValue/(balkenMaxValue-balkenMinValue)*MaxHoehe+Rand;
 for i := 0 to length(arr)-1 do begin
  y := -MaxHoehe/(balkenMaxValue-balkenMinValue)*arr[i]; 
  canvas_rect(round(Rand+i*balkenBreite),round(y0),round(balkenBreite),round(y));
 end;
end;
</code>

<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
'''Ungeordnete Zufallszahlen:'''
<canvas w="400" h="300"></canvas>
</td>
<td>&nbsp;</td>
<td align="center">
'''Geordnete Zufallszahlen:'''
<canvas w="400" h="300"></canvas>
</td>
</tr>
</table>

<run id="4d30ce9b43c52">
ZufallsZahlen(Zahlen, 50, 0, 1000);
BalkenDiagramm(Zahlen, 1);
BubbleSort(Zahlen);
BalkenDiagramm(Zahlen, 2);
writeln('ok');
</run>