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

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

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

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

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

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

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

Код:
for i:=1 to N do
  for j:=i+1 to N do
    if A[i] >= A[j] then begin
        t := A[i];
        A[i] := A[j];
        A[j] := t
        end;
end;
Что нужно исправить, чтобы последний элемент массива не сортировался?
nadyaH вне форума Ответить с цитированием
Старый 23.03.2014, 19:08   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Нужно взять бинарный поиск, найти место вставки, сдвинуть массив, вставить..
Poma][a вне форума Ответить с цитированием
Старый 23.03.2014, 19:33   #4
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

И как это сделать?
nadyaH вне форума Ответить с цитированием
Старый 23.03.2014, 19:44   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
Что нужно исправить, чтобы последний элемент массива не сортировался?
использовать N - 1 в цикле вместо N
rrrFer вне форума Ответить с цитированием
Старый 23.03.2014, 20:07   #6
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию

Все равно так же .Нечего не меняет.
nadyaH вне форума Ответить с цитированием
Старый 23.03.2014, 20:10   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
И как это сделать?
Вот так : тыц + тыц
Poma][a вне форума Ответить с цитированием
Старый 23.03.2014, 20:32   #8
nadyaH
Форумчанин
 
Регистрация: 24.10.2013
Сообщений: 130
По умолчанию Делфи 7

Код:
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;
function SortirArray (a: TArray;N:integer): string;
 var
 i,j,t:integer;
 begin
  for i:=1 to (N-2) do
  for j:=i+1 to (N-1) do
    if A[i] >= A[j] then begin
        t := A[i];
        A[i] := A[j];
        A[j] := t
        end;
if N=(t+1) then a[n]:=t+1
end;

procedure TForm1.Button1Click(Sender: TObject);
var
N,t,j,i:integer;
a:TArray;
begin
randomize;
  N:=StrToInt(Edit1.Text);
for i:=1 to n do
      a[i] := random(40);
RichEdit1.Lines.Clear;
RichEdit1.Lines.Append(ArrayToString(a,n));
RichEdit2.Lines.Clear;
begin
for i:=1 to N do   (если здесь поменять N на N-1, то в конце вылазет какое то большое число.)
  for j:=i+1 to N do
    if A[i] >= A[j] then begin
        t := A[i];
        A[i] := A[j];
        A[j] := t
        end;
end;
RichEdit2.Lines.Append(ArrayToString(a,i)); (выдаёт отсортированный массив без последнего элемента)
RichEdit3.Lines.Clear;
SortirArray(a,i); 
RichEdit3.Lines.Append(ArrayToString(a,i));
end;end.
Что нужно исправить чтобы программа работала правильно?

Последний раз редактировалось nadyaH; 24.03.2014 в 11:12.
nadyaH вне форума Ответить с цитированием
Старый 24.03.2014, 11:16   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Код:
for i:=1 to N do   (если здесь поменять N на N-1, то в конце вылазет какое то большое число.)
это неверно. ОБЯЗАТЕЛЬНО должно быть
Код:
for i:=1 to N-1 do
  for j:=i+1 to N do
  ...
но это всё не так важно.
Вы решаете НЕ ТУ задачу.
Вы сортируете массив ЦЕЛИКОМ. Это неправильно!
По условию задачи у Вас массив уже изначально задан упорядоченным (кроме последнего элемента).
Вот один последний элемент и нужно вставить в нужную позицию!


Кстати, правильное заполнение массива, как описано в условии задачи легко реализовать кодом:
Код:
  randomize;
  N:=StrToInt(Edit1.Text);
  if N < 1 then Exit;
  a[1] := random(10);
  for i:=2 to n-1 do
      a[i] := a[i+1] + 1 + random(10);
  a[n] := Random(n+10);
....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.03.2014, 12:35   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Цитата:
это неверно. ОБЯЗАТЕЛЬНО должно быть
Во втором цикле тоже N-1 должно быть )
rrrFer вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив X(N,M).Найти номера столбцов массива,все элементы которых четны. Из полученных значений сформировать одномерный массив. darwin1 Паскаль, Turbo Pascal, PascalABC.NET 3 16.03.2014 13:31
подкорректировать: Дан массив, все элементы которого упорядочены. Найти количество различных элементов в данном массиве ( Delphi ) schibeki Помощь студентам 9 20.02.2014 09:39
Дан массив из 18 вещественных чисел, все элементы которого различны. Не могу сделать вывод результатов. ( на С ) Максим28 Помощь студентам 4 22.11.2013 02:38
Соединить два массива а и b в массив с так, чтобы его элементы были упорядочены по возрастанию. Поправить код. dmitriy20104 Паскаль, Turbo Pascal, PascalABC.NET 10 08.08.2012 11:21