[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
Solved

# How to find the bigger number.

Posted on 2006-07-04
Medium Priority
209 Views
Hi...

This is easy i guess... I'm just not in thinging mode... right now and i want it fast.

So...
I have 120 integers and i want to find the 3 bigger numbers.
I need a smart way to do this with few lines.

0
Question by:CodedK
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2
• 2

LVL 17

Accepted Solution

TheRealLoki earned 500 total points
ID: 17038552
to find the bigger of 2 numbers you can use
uses math;
i := max(j, k);

1 way for you to get the top 3 would be to have the numbers in a sorted list
eg.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, math,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
numberlist: TList;
end;

var
Form1: TForm1;

function comparenumbers(Item1, Item2: Pointer): Integer;

implementation

{\$R *.DFM}

function comparenumbers(Item1, Item2: Pointer): Integer;
begin
if Integer(Item1) < Integer(Item2) then result := -1
else if Integer(Item1) > Integer(Item2) then result := 1
else result := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
numberlist := TList.create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
numberlist.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
// make sure the numbers are sorted
numberlist.Sort(comparenumbers);
// now grab the top 3 numbers and display them
for i := (numberlist.count -1) downto (numberlist.count -3) do
end;

end.
0

LVL 17

Expert Comment

ID: 17038610
I know you said "a few lines" but really it's just "sort" then the for loop :-)
here's a way to do it assuming the get the numbers from somewhere else

procedure TForm1.Button2Click(Sender: TObject);
var
sl: TStringList;
i, value: integer;
s: string;
begin
sl := TStringlist.create;
try
sl.sorted := True;
i := 0; // first index from whatever source of numbers you have
while (i < numberlist.count) do  // last index from whatever source of numbers you have
begin
// get the number using index i from your source numbers and convert it to a 10 length padded string
SL.Add(Format('%10d', [ integer(numberlist[i]) ] )); // if you need bigger numbers, use a number > %10
inc(i); // go to the next number
end;
// now grab the top 3 numbers and display them
for i := (sl.count -1) downto (sl.count -3) do
begin
value := StrToInt( sl[i] );
end;
finally
sl.free;
end;
end;
0

LVL 17

Assisted Solution

mokule earned 500 total points
ID: 17039472
Not so briliant but possibly faster method.

procedure TForm1.Button1Click(Sender: TObject);
const
numcount = 100;
var
intnum: array[0..numcount-1] of integer;
i: integer;
b1,b2,b3: integer;
begin
// fill in the array
for i := 0 to numcount-1 do
intnum[i] := random(1500);

if intnum[0] > intnum[1] then
begin
b1 := intnum[0];
b2 := intnum[1];
end
else
begin
b1 := intnum[1];
b2 := intnum[0];
end;
b3 := intnum[2]-1;

for i := 3 to numcount-1 do
begin
if intnum[i] > b3 then
begin
if intnum[i] > b2 then
begin
b3 := b2;
if intnum[i] > b1 then
begin
b2 := b1;
b1 := intnum[i];
end
else
b2 := intnum[i];
end
else
b3 := intnum[i];
end;
end;
end;
0

LVL 16

Author Comment

ID: 17039804
Thank you both.

There is a small problem... I need to know the var that holds the bigger value...
Example : bigger 3 =>(a14, a87, a2)... not only the value.
---------------------------------------------

Since all the numbers will be finally loaded in a Chart maybe there is another way...

X axis represents the variable (a0, a1, a2...a120).

I've loaded all the vars in a TChart !
So with the command :

Chart1.SeriesList.Series[0].MaxYValue; .... i will find the bigger number.

Is there a command for this :
(For this Y which is the X) ???
(And with a for loop decreasing by 1 from the bigger y which is the next bigger y) ?

I hope i make sense.... Thank you very much :)
0

LVL 16

Author Comment

ID: 17039859
Forget it... Thank you for your time :)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …
###### Suggested Courses
Course of the Month13 days, 6 hours left to enroll