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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 21:23   #1
nawka
Новичок
Джуниор
 
Регистрация: 14.01.2012
Сообщений: 2
По умолчанию В одномерном массиве найти наибольший элемент и поменять его местами с последним

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

Код:
unit Unit46;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    GroupBox1: TGroupBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1;
  N, I     : integer ;
     X   : array of integer ;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Begin
	Randomize ;
	N := StrToInt(Edit1.Text) ;
	SetLength(X, N) ;
	Edit2.Text:=' ';
	For  I := 0  to  N-1  do
		Begin
		X[ I ] := Round(Sin(Random(100))*100) ;
Edit2.Text := Edit2.Text +' '+ FloatToStr(X[ I ]) ;
End;
End;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
max:integer;
begin
If  CheckBox1.Checked then Max:=X[0];
Edit3.Text :='';
For  I := 0  to  N-1  do
Begin
If  CheckBox1.Checked then
If  Max < X[I]  then Max := X[I];

End;

If  CheckBox1.Checked then  Edit3.Text:=FloatToStr(max);

End;

end.

Последний раз редактировалось ACE Valery; 14.01.2012 в 22:03.
nawka вне форума Ответить с цитированием
Старый 14.01.2012, 23:56   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

При нахождении максимального, также запоминаем индекс массива.
Допустим:
p:=i;
После нахождения максимального, производим его замену с последним элементом
h:=x[n-1];
x[n-1]:=x[p];
x[p]:=h;
Базиля вне форума Ответить с цитированием
Старый 15.01.2012, 11:21   #3
nawka
Новичок
Джуниор
 
Регистрация: 14.01.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
При нахождении максимального, также запоминаем индекс массива.
Допустим:
p:=i;
После нахождения максимального, производим его замену с последним элементом
h:=x[n-1];
x[n-1]:=x[p];
x[p]:=h;
Извините, а можете написать как это будет выглядеть полностью?)
Так не работает(
Begin
If CheckBox1.Checked then
If Max < X[I] then Max := X[I]; p:=i;
h:=x[n-1];
x[n-1]:=x[p];
x[p]:=h;
nawka вне форума Ответить с цитированием
Старый 15.01.2012, 13:34   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

nawka
не обижайтесь, но Вы настолько бестолко используете
If CheckBox1.Checked
что у меня возникло подозрение, что Вы не понимаете, что такое операторные скобки (ну для чего иногда внутри текста программы встречаются begin ... end )

Да и вообще, мне совсем не ясно и очевидно, что это за чекбокс такой. На что он должен влиять..

подозреваю, что ожидается примерно такой код:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var  I, maxIndex:integer;
      h : integer; 
begin
  maxIndex := 0;
  Edit3.Text :='';
  For  I := 1  to  N-1  do 
   If  X[MaxIndex] < X[I]  then MaxIndex := I;

  {для чего-то отобразим на надписи величину максимального элемента}
  If  CheckBox1.Checked then  Edit3.Text := IntToStr( X[maxIndex] );

  {поменять местами последний элемент и максимальный}
   h := X[MaxIndex];
   X[MaxIndex] := X[N-1];
   X[N-1] := h;
  
End;


p.s. а для чего Вы при заполнении массива случайными числами использовали функцию sin() ?! Врагов запутать хотите?! Этим Вы только ухудшили случайное распределение...

Последний раз редактировалось Serge_Bliznykov; 15.01.2012 в 13:37.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять местами с эл-том на пересечении диагоналей (C#) Vovchik123 Помощь студентам 5 27.12.2011 00:01
Найти мин и поменять его местами со следующим элементом в массиве netiv Паскаль, Turbo Pascal, PascalABC.NET 3 24.10.2011 16:41
В каджом столбце массива А поменять местами первый отрицательный элемент с последним элементом столбца. Carmen Помощь студентам 1 31.05.2011 19:41
найти наибольший и наименьший элемент матрицы B(N x M) и поменять их местами поЛотЕнчик_просТо Общие вопросы C/C++ 2 13.05.2009 12:17
В массиве Р(10) введенном с клавиатуры поменять местами наибольший и наименьший элементы. Делфи. Lerika Помощь студентам 6 23.01.2009 11:52