Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Mehrere Integer-Werte, welcher ist am größten?


Pyr0cracker - Fr 20.06.03 20:28
Titel: Mehrere Integer-Werte, welcher ist am größten?
Hallo,
gibts eine einfache Idee dies zu bewerkstelligen?

Danke schonmal,


Tweafis - Fr 20.06.03 20:34

falls deine Zahlen alle größer als null sind dann:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function greatest(nrs: array of integer): integer;
var x:integer;
begin
  result := 0;
  for x:= Low(nrs) to High(nrs) do
    if nrs[x] > result then result := nrs[x];
end;


falls doch, dann probier mal result := 0 durch result := Lo(Integer) oder Low(Integer) zu erstetzen ????


Carola82 - Sa 21.06.03 13:43
Titel: Integerwerte sortieren?
Hätte auch ein (vielleicht ein wenig kompliziertes) Prog, aber es läuft :)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
program Sortexcep;
{$APPTYPE CONSOLE}
uses sysutils;
var v_schublade: array[1..10of integer;
    v_sort: array[1..10of integer;
    i,v,k:integer;
    c:char;
procedure p_fail;
    begin
       writeln('Es ist eine Exception aufgetreten '+
       'das Prog wird beendet!');
       readln;
       halt;    //man geht aus der Schleife raus und das Prog wird riguros beendet
    end;   //of p_fail

Begin
   writeln('Die ist ein Prog, das 10 Zahlen sortiert.');
   for i:=1 to 10 do
      begin
         Writeln('Geben sie bitte die ',i,'. Zahl ein');
         try
           Readln(v_schublade[i]);
         except
           on EINOUTERROR do p_fail;
         end;
      end;
   begin
      writeln('Wollen sie die Zahlen a)ufsteigend oder ab)steigend sortiert haben?');
      readln(c);
      case c of
          'a','A'begin
              writeln('Zahlen aufsteigend sortiert:');
              for k:=1 to 10 do
                begin
                 v:=1;        //Zähler muss immer wieder auf "1" gesetzt werden!!!
                  for i:=1 to 10 do //d.h. das Array mit [k] ist "statisch"
                    begin                             //[i] läuft vorbei...
                       if v_schublade[k]>v_schublade[i]
                       then v:=v+1
                    end;
                 v_sort[v]:=v_schublade[k];
                   end;
       end;
   'b','B'begin
              writeln('Zahlen absteigend sortiert:');
              for k:=1 to 10 do
                 begin
                   v:=1;
                   for i:=1 to 10 do
                     begin
                        if v_schublade[k]<v_schublade[i]
                        then v:=v+1
                     end;
                   v_sort[v]:=v_schublade[k];
                 end;
            end;
   end//of case
for v:=1 to 10 do
      begin
         writeln(v_sort[v]);
      end;
   writeln('Druecken sie "Enter" um das Prog zu beenden');
   readln;
end;
end.
[/delphi]


Wolff68 - So 22.06.03 18:15

@Tweafis:
Um das ganze auch für negative Zahlen zu machen, brauchst Du nur die erste Zuweisung von Result zu ändern:

Erste, (schlechte) Möglichkeit:
Setze den Startwert auf den niedrigsten erlaubten Integer result := -2147483648Was aber in ein paar Jahren zu Problemen führen kann, falls Integer auf 64-Bit geändert wird.

Zweite, (gute) Möglichkeit:
Fang nicht mit 0 an, sondern mit der ersten Zahl aus dem Array !

Delphi-Quelltext
1:
result := nrs[Low(nrs)];                    

Danach kannst die For-Schleife natürlich ab Low(nrs)+1 laufen lassen.


Tweafis - So 22.06.03 18:18

Hmm, stimmt, hab ich nicht dran gedacht.