Mam do napisania program w C++ Builder 6.
Używając komponentu ListBox jako listy liczb, napisz program sortujący liczby od najmniejszej do największej poprzez pozycjonowanie liczb.
Kod: Zaznacz cały
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->ListBox1->Clear();
randomize();
int i;
for (i=0;i<15;i++)
Form1->ListBox1->Items->Add(random(100000));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int max = Form1->ListBox1->Items->Strings[0].Length();
for(int i = 0; i < Form1->ListBox1->Items->Count; i ++)
{
if(Form1->ListBox1->Items->Strings[i].Length() > max)
max = Form1->ListBox1->Items->Strings[i].Length();
}
for(int i = 0; i < Form1->ListBox1->Items->Count; i ++)
{
while(Form1->ListBox1->Items->Strings[i].Length() != max)
{
Form1->ListBox1->Items->Strings[i] = "0" + Form1->ListBox1->Items->Strings[i];
}
}
String first, secound;
int ileOdjac = 0;
for(int j = 0; j < Form1->ListBox1->Items->Count-1; j ++)
{
for(int i = 0; i < Form1->ListBox1->Items->Count-1; i ++)
{
first = Form1->ListBox1->Items->Strings[i];
secound = Form1->ListBox1->Items->Strings[i+1];
if(max - ileOdjac > 0 )
{
if(first[max - ileOdjac] > secound[max - ileOdjac])
{
Form1->ListBox1->Items->Move(i,i+1);
}
}
}
ileOdjac++;
}
}
//---------------------------------------------------------------------------
PODPOWIEDŹ :
Pozycyjne porządkowanie liczb odbywa się wg prostego algorytmu :
* "dosuń" liczby do prawej,
* porządkuj je po kolei zaczynając od jedności, dziesiątek, setek itd. (jeżeli w którejś liczbie brakuje cyfry przyjmuje się ją za 0 )
np.
1235
0456
6023
0085