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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2010, 22:51   #1
Sadisto
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 10
По умолчанию Массивы: поменять местами 2 элемента

Здравствуйте, друзья! Мне нужна помощь, немного путаюсь
Задача: в одномерном массиве найти максимальный и минимальный элементы, и далее с помощью temp поменять их местами.

На форме есть стринггрид, где количество элементов задается через n (реализовано).

Как мне реализовать сие? (Насколько я прикидываю, max записывается в переменную temp, далее на его место пишется min, затем из temp берется max и пишется на место min) как то так. Либо выдергивать их по индексам из массива
Вот мои поиски


Поиск максимума(и его индекс):
Код:
procedure TForm1.btn1Click(Sender: TObject);
Var
  n,i,imax: integer;
  max:real;
  a: array[1..10] of real;
begin
  n:=StrToInt(edt1.Text);
  For i:= 1 to n Do
      a[i]:=StrToFloat(strngrd1.Cells[i, 1]);
  imax:=1;
  max:=a[1];
  For i:= 2 to n Do
    If a[i]>max Then
    Begin
      imax:=i;
      max:=a[i]
    End;
    lbl2.Caption :='MAX  = '+  FloatToStr(max);
    lbl3.Caption :='iMAX  = '+ IntToStr(imax);
    strngrd1.col:=imax;
    strngrd1.row:= 1;
  end;
Поиск минимума(и его индекс):
Код:
procedure TForm1.btn2Click(Sender: TObject);
Var
  n,i,imin: integer;
  min:real;
  a: array[1..10] of real;
begin
  n:=StrToInt(edt1.Text);
  For i:= 1 to n Do
      a[i]:=StrToFloat(strngrd1.Cells[i, 1]);
  imin:=1;
  min:=a[1];
  For i:= 2 to n Do
    If a[i]<min Then
    Begin
      imin:=i;
      min:=a[i]
    End;
    lbl4.Caption :='MIN  = '+  FloatToStr(min);
    lbl5.Caption :='iMIN  = '+ IntToStr(imin);
    strngrd1.col:=imin;
    strngrd1.row:= 1;
  end;
Sadisto вне форума Ответить с цитированием
Старый 04.02.2010, 23:10   #2
cyberandom
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 35
По умолчанию

Код:
begin
 temp:= a[imin];
 a[imin]:= a[imax];
 a[imax]:= temp;
end;
Только надо массив и переменные imax, imin бъявить в начале программы чтобы процедуры могли их использовать

можно проще, без использования temp

Код:
begin
 a[imin]:= a[imin] + a[imax];
 a[imax]:= a[imin] - a[imax];
 a[imin]:= a[imin] - a[imax];
end;
cyberandom вне форума Ответить с цитированием
Старый 04.02.2010, 23:32   #3
Sadisto
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 10
По умолчанию

хм, вот а как это реализовать? Чтобы он запомнил из предыдущей процедуры эти элементы? Он их ищет, а далее отображает и все..
Sadisto вне форума Ответить с цитированием
Старый 04.02.2010, 23:32   #4
CodeExpert
Заблокирован
 
Регистрация: 30.10.2009
Сообщений: 468
Радость

sg.rar
ну вот как бы что-то навоял, дальше доделывайте сами, мой мозг ленится работать после экзамена...
CodeExpert вне форума Ответить с цитированием
Старый 04.02.2010, 23:41   #5
Sadisto
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 10
По умолчанию

CodeExpert, спасибо, но у Вас кнопка перестановки не работает)) щас разберусь плотнее

Вот полностью мой код, туда хочу вмонтировать на 3 кнопку процедуру перестановки)

В теории нужно как то индексы максимума и минимума глобально запомнить, чтоб из другой процедуры к ним обратиться)) На практике же - теряюсь..
Код:
type
  TForm1 = class(TForm)
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Поиск МАКСИМУМА
procedure TForm1.Button1Click(Sender: TObject);
Var
  n,i,imax: integer;
  max:real;
  a: array[1..10] of real;
begin
  n:=StrToInt(Edit1.Text);
  For i:= 1 to n Do
      a[i]:=StrToFloat(StringGrid1.Cells[i, 1]);
      imax:=1;
      max:=a[1];
        For i:= 2 to n Do
        If a[i]>max Then
          Begin
            imax:=i;
             max:=a[i]
          End;
    Label2.Caption :='MAX  = '+  FloatToStr(max);
    Label3.Caption :='iMAX  = '+ IntToStr(imax);
    StringGrid1.col:=imax;
    StringGrid1.row:= 1;
  end;
//Конец

//Поиск МИНИМУМА
procedure TForm1.Button2Click(Sender: TObject);
Var
  n,i,imin: integer;
  min:real;
  a: array[1..10] of real;
begin
  n:=StrToInt(Edit1.Text);
  For i:= 1 to n Do
      a[i]:=StrToFloat(StringGrid1.Cells[i, 1]);
  imin:=1;
  min:=a[1];
  For i:= 2 to n Do
    If a[i]<min Then
    Begin
      imin:=i;
      min:=a[i]
    End;
    Label4.Caption :='MIN  = '+  FloatToStr(min);
    Label5.Caption :='iMIN  = '+ IntToStr(imin);
    StringGrid1.col:=imin;
    StringGrid1.row:= 1;
  end;
  //КОНЕЦ


//Перестановка элементов ?? :)
procedure TForm1.Button3Click(Sender: TObject);
var



procedure TForm1.Button4Click(Sender: TObject);
begin
  Form1.close
end

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var n, i:integer;
begin
  if key = #13 then
  Begin
    n:=StrToInt(Edit1.Text);
    Edit1.Enabled:=True;
   StringGrid1.RowCount:= 2;
   StringGrid1.ColCount :=n+1;
    For i:= 1 to n Do
      StringGrid1.Cells[i, 0]:=IntToStr(i);
   StringGrid1.setfocus
  End;
end;

end.

Последний раз редактировалось Stilet; 05.02.2010 в 08:20.
Sadisto вне форума Ответить с цитированием
Старый 05.02.2010, 00:01   #6
CodeExpert
Заблокирован
 
Регистрация: 30.10.2009
Сообщений: 468
По умолчанию

Цитата:
но у Вас кнопка перестановки не работает))
-
ну я как бы написал же:
Цитата:
дальше доделывайте сами,
П.с. СКИНЬТЕ УЖЕ ПРОЕКТ сюда!, я переделаю как нужно...
CodeExpert вне форума Ответить с цитированием
Старый 05.02.2010, 00:02   #7
CodeExpert
Заблокирован
 
Регистрация: 30.10.2009
Сообщений: 468
По умолчанию

P.s. было бы правильнее imax&imin сделать глобальными переменными, ведь как вы потом собираетесь осуществить перестановку ?
CodeExpert вне форума Ответить с цитированием
Старый 05.02.2010, 00:39   #8
Sadisto
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 10
По умолчанию

Вот проект)
Процедура перестановки это Button3, пустая
Вложения
Тип файла: rar pr.rar (192.3 Кб, 23 просмотров)

Последний раз редактировалось Sadisto; 05.02.2010 в 00:43.
Sadisto вне форума Ответить с цитированием
Старый 05.02.2010, 01:01   #9
CodeExpert
Заблокирован
 
Регистрация: 30.10.2009
Сообщений: 468
Радость

Держите, там чисто сделал основные переменные глоабальными, и далее с ними работал, вообщем разберетесь
pr.rar
С вас "+"-ик=)
CodeExpert вне форума Ответить с цитированием
Старый 05.02.2010, 01:21   #10
Sadisto
Пользователь
 
Регистрация: 20.12.2009
Сообщений: 10
По умолчанию

Благодарю, разобрался!! + ик поставил)
Sadisto вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поменять местами научите Паскаль, Turbo Pascal, PascalABC.NET 13 08.01.2009 13:43
ПОменять значения местами qip2005 Паскаль, Turbo Pascal, PascalABC.NET 6 24.12.2008 23:38
Поменять местами абзацы Иллидан Microsoft Office Word 1 16.09.2008 08:14
поменять местами столбцы veter_s_morya SQL, базы данных 4 29.06.2008 13:36