Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 14:21   #1
Ветас
Пользователь
 
Регистрация: 09.11.2007
Сообщений: 45
По умолчанию Просьба помочь с сортировкой массива по убыванию

Здравствуйте, уважаемые форумчане.
Решаю задачу:
Для одномерного массива размерностью 10 упорядочить все его элементы в порядке убывания.

Т.е. ввожу: 1 2 3 4 5 6 7 8 9 10

А в результате упорядочивания у меня получается: 4 3 2 10 9 8 7 6 5 4 3 2

Подскажите, пожалуйста, что не так в программе ?

Код привожу:

Код:
procedure TForm1.Button1Click(Sender: TObject);
 
 var
     a:array[1..10] of integer;
    k,i:integer;
    changed:boolean;
    buf:integer;
begin
 for i:=1 to 10 do
 a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
 repeat
 changed:=false;
 for i:=1 to 10 do
 if a[i]<a[i+1] then begin
 buf:=a[i];
 a[i]:=a[i+1];
 a[i+1]:=buf;
 changed:=true;
 end;
 for i:=1 to 10 do
 Memo1.Lines.Add(IntToStr(a[i])) ;
 until not changed;
 
end;
Ветас вне форума Ответить с цитированием
Старый 11.11.2009, 14:40   #2
UnChanter
Пользователь
 
Аватар для UnChanter
 
Регистрация: 14.12.2008
Сообщений: 65
По умолчанию

Сортировка методом пузырька:
Код:
procedure TForm1.Button1Click(Sender: TObject);
 var
     a:array[1..10] of integer;
    r,i,j:integer;
begin
for i:=2 to 10 do
 for j:=i to 10 do
  if a[j-1]>a[j] then
	begin
	 r:=a[j];
	 a[j]:=a[j-1];
	 a[j-1]:=r;
	end;
end;
UnChanter вне форума Ответить с цитированием
Старый 11.11.2009, 14:52   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Недописал еще один цикл:
Код:
for j:=1 to 10 do
for i:=1 to 10 do
 if a[i]<a[i+1] then begin
 buf:=a[i];
 a[i]:=a[i+1];
 a[i+1]:=buf;
 changed:=true;
 end;
Читай внимательно про сортир. пузырьком
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2009, 15:00   #4
Ветас
Пользователь
 
Регистрация: 09.11.2007
Сообщений: 45
По умолчанию

Большое спасибо, но при вводе всех значений в StringGrid и при нажитаа кнопки Упорядочить" программа выкидывает ошибку is not valid integer value"

В компонент StringGrid в10 ячеек вводятся элементы массива. Затем нажимается кнопка "Упорядочить" и элементы массива попадают в компонент Memo в упорядоченном по убыванию порядке.

Код всей программы:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
    
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Math;

{$R *.dfm}



procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('Вы уверены, что хотите выйти ?',mtConfirmation, [mbYes,mbNo],0)=mrYes then
CanClose:=true
else
CanClose:=false;
end;


procedure TForm1.Button1Click(Sender: TObject);

 var
 a:array[1..10] of integer;
    r,i,j:integer;
    changed:boolean;
    buf:integer;
begin
a[i]:=StrToInt(StringGrid1.Cells[i-1,0]);
 for i:=2 to 10 do
 for j:=i to 10 do
 if a[j-1]>a[j] then
 begin
r:=a[j];
a[j]:=a[j-1];
a[j-1]:=r
end;

 for i:=2 to 10 do
 Memo1.Lines.Add(IntToStr(a[i])) ;


end;



end.
Просьба большая помочь
Ветас вне форума Ответить с цитированием
Старый 11.11.2009, 15:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
a[i]:=StrToIntDEF(StringGrid1.Cells[i-1,0],0);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2009, 15:46   #6
Ветас
Пользователь
 
Регистрация: 09.11.2007
Сообщений: 45
По умолчанию

Попробовал, не получилось

В компонент StringGrid в10 ячеек вводятся элементы массива. Затем нажимается кнопка "Упорядочить" и элементы массива попадают в компонент Memo в упорядоченном по убыванию порядке.

Большая просьба, помочь в написании программы
Ветас вне форума Ответить с цитированием
Старый 11.11.2009, 16:30   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Попробовал, не получилось
Код в студию )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просьба помочь с задачей. kry Паскаль, Turbo Pascal, PascalABC.NET 9 11.01.2009 13:53
Просьба помочь новичку со списками. cbst Общие вопросы C/C++ 4 13.06.2008 19:32
Просьба помочь с состовлением формулы... c_zurab Microsoft Office Excel 1 11.03.2008 01:35
Просьба помочь с решением уравнения Stelix Помощь студентам 9 14.11.2007 19:00