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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2014, 15:53   #1
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию Дан массив размера N. Поменять местами его минимальный и максимальный элементы.

Дан массив размера N. Поменять местами его минимальный и максимальный элементы.
Нужна помощь в написании прогараммы.
nadyaH вне форума Ответить с цитированием
Старый 20.03.2014, 16:02   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
MinI := 1;
MaxI := 1;
for i:=2 to N do begin
  if A[i]<A[MinI] then MinI := i;
  if A[i]>A[MaxI] then MaxI := i;
end;
if  MaxI<>MinI then begin
  tmp := A[MinI];
  A[MinI] := A[MaxI];
  A[MaxI] := tmp;
end;

p.s. tmp переменная того же типа, что и элементы массива A
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2014, 20:29   #3
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
type
TArray = array[1..40] of Integer;
function ArrayToString(a: TArray; N: integer): string;
var
  i: integer;
begin
  result := '';
  for i:=1 to N-1 do
    result := result  + IntToStr(a[i])+',';
  result := result  + IntToStr(a[N]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
N,minI,MaxI,i,tmp:integer;
a:TArray;
begin
Randomize;
for i:=1 to N do A[i] := Random(41);
MinI := 1;
MaxI := 1;
for i:=2 to N do begin
  if A[i]<A[MinI] then MinI := i;
  if A[i]>A[MaxI] then MaxI := i;
end;
if  MaxI<>MinI then begin
  tmp := A[MinI];
  A[MinI] := A[MaxI];
  A[MaxI] := tmp;
end;
end;
RichEdit1.Lines.Clear;(RichEdit1, ошибку выдаёт)
RichEdit1.Lines.Append(ArrayToString(a,n));
RichEdit2.Lines.Clear;
RichEdit2.Lines.Append(ArrayToString(tmp));
end.
nadyaH вне форума Ответить с цитированием
Старый 20.03.2014, 22:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ошибка раз:
Код:
rocedure TForm1.Button1Click(Sender: TObject);
var
N,minI,MaxI,i,tmp:integer;
a:TArray;
begin
Randomize;
for i:=1 to N do A[i] := Random(41);
чему равно в данном случае N ?!?!? Его нужно задавать, перед тем как использовать!
сравните со своими предыдущими программами, там откуда бралось N ?


Цитата:
Код:
RichEdit2.Lines.Append(ArrayToString(tmp));
ну это вообще ни в какие ворота!!! Мало того, что переменная tmp - НЕ МАССИВ!
Так её выводить ещё и бессмысленно! Вам выбранное мной имя для этой переменной ни о чём не сказало? tmp это сокращенное temporary, означает "временная" (промежуточная). Она используется для обмена. Выводить её в принципе нет смысла. Ну, если уж и выводить (я не знаю, зачем она Вам, ну, допустим, зачем то нужна), тогда это надо делать через RichEdit2.Lines.Append( IntToStr(tmp) );
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2014, 10:03   #5
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Код:
{$R *.dfm}
type
TArray = array[1..40] of Integer;
function ArrayToString(a: TArray; N: integer): string;
var
  i: integer;
begin
  result := '';
  for i:=1 to N-1 do
    result := result  + IntToStr(a[i])+',';
  result := result  + IntToStr(a[N]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
N,minI,MaxI,i,tmp:integer;
a:TArray;
begin
N:=StrToInt(Edit1.Text);
Randomize;
for i:=1 to N do A[i] := Random(41);
RichEdit1.Lines.Clear;
RichEdit1.Lines.Append(ArrayToString(a,n));
MinI := 1;
MaxI := 1;
for i:=2 to N do begin
  if A[i]<A[MinI] then MinI := i;
  if A[i]>A[MaxI] then MaxI := i;
end;
if  MaxI<>MinI then begin
  tmp := A[MinI];
  A[MinI] := A[MaxI];
  A[MaxI] := tmp;
end;
RichEdit2.Lines.Clear;
RichEdit2.Lines.Append(ArrayToString(a,n));
end;end.
Вроде работает.Но почему то если в конце есть минимальный или максимальный элемент, программа не меняет число на нужное.

Последний раз редактировалось nadyaH; 21.03.2014 в 10:05.
nadyaH вне форума Ответить с цитированием
Старый 21.03.2014, 10:42   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от nadyaH Посмотреть сообщение
Но почему то если в конце есть минимальный или максимальный элемент, программа не меняет число на нужное.
думаю, что Вы ошибаетесь.

p.s. уберите выделенную красным строчку
Цитата:
Код:
if  MaxI<>MinI then begin
  tmp := A[MinI];
  A[MinI] := A[MaxI];
  A[MaxI] := tmp;
end;
RichEdit2.Lines.Clear;
RichEdit2.Lines.Append(ArrayToString(a,n));
end
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2014, 14:05   #7
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Смысл задания поменять только максимальный и минимальный элемент?
т.е.
массив например: 2,3,2,6,7,8,9,2
то при выполнении получится такой
массив: 9,3,2,6,7,8,2,2.
(2 и 9 поменялись местами.)?
Или нужно что бы все минимальные и максимальные элементы поменялись местами,т.е.
ответ будет таким: 9,3,9,6,7,8,2,9
???

А Программа меняет все минимальные элементы до максимального элемента, а если после максимального элемента повторяется минимальный элемент, то программа уже его не меняет на максимальный эл-т.
Т.е. массив получается: 9,3,9,6,7,8,2,2
Я не поняла смысл задачи.
nadyaH вне форума Ответить с цитированием
Старый 21.03.2014, 14:10   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Поменять местами его минимальный и максимальный элементы
Думаю тот, кто давал задание лучше знает, чем на форуме. Я бы у него сначала поинтересовался. А так не вижу в задании упоминаний о том, что делать, если минимальных и/или максимальных несколько
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.03.2014, 14:21   #9
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Ясно.Спасибо всем за помощь!
nadyaH вне форума Ответить с цитированием
Старый 21.03.2014, 15:52   #10
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Менять всех попавшихся!

Цитата:
Сообщение от nadyaH Посмотреть сообщение
Смысл задания поменять только максимальный и минимальный элемент?
Программа меняет все минимальные элементы до максимального элемента, а если после максимального элемента повторяется минимальный элемент, то программа уже его не меняет на максимальный эл-т.
А по-моему, вы лучше всех поняли смысл задачи. Вам предложили школьный вариант* решения — а вы подошли со всей душой!

Похожая коллизия уже обсуждалась: http://programmersforum.ru/showthrea...=245151&page=2

Цитата:
Сообщение от Аватар Посмотреть сообщение
…не вижу в задании упоминаний о том, что делать, если минимальных и/или максимальных несколько
Завзятый программист рассматривает все варианты. И, кстати, nadyaH в этом преуспела!
__________________
* будто бы замена касается лишь первого минимума

Последний раз редактировалось Sasha_Smirnov; 21.03.2014 в 15:58.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти максимальный и минимальный элементы в массивах и поменять их местами. kolia_y Паскаль, Turbo Pascal, PascalABC.NET 1 11.12.2013 17:47
Найти максимальный и минимальный элементы списка и поменять их местами Slavik3 Общие вопросы C/C++ 4 15.10.2012 09:41