1 / 1 / 0
Регистрация: 11.05.2014
Сообщений: 147

Элементы массива на четных позициях отсортировать по возрастанию, а на нечетных – по убыванию

04.07.2014, 01:27. Показов 8514. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот задание:

Составить программу для сортировки массива размерностью элементов целого типа по следующему принципу: элементы на четных позициях по возрастанию, а на нечетных – по убыванию. Размерность массива вводится с клавиатуры. Отсортированную матрицу в отформатированном виде вывести в текстовый файл. Открыть файл для чтения и вывести его содержимое на экран.

я так понял, что работаю со всеми элементами массива, а не с каждой его строкой.

допустим, у нас есть массив:
1 2 3 4 5
6 7 8 9 10

результат сортировки по массиву должен быть таким:
9 2 7 4 5
6 1 8 3 10.
тут, формально, получается что я работаю с одномерным массивом, а потом перевожу его в двумерный

или же наоборот. нужно искать четные/нечетные в каждой строке двумерного массива и тогда там менять местами?
тогда будет:
5 2 3 4 1
10 7 8 9 6




для первого случая программа работает, но немного косячит. вот она
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 program sааа;
 uses crt;
 var mas:array[1..100,1..100] of integer;
 i,i1,j,j1,m,n:integer;
 tmp:integer;
 Begin
 writeln('введите размерность строк');
 readln(m);
 writeln('введите количество столбцов');
 readln(n);
      writeln('введите массив');
      for i:=1 to m do begin
      for j:=1 to n do begin
      read(mas[i,j]);
 
      end;
      writeln;
      end;
     for i:=1 to m-1 do begin
     for j:=1 to n-1 do
  if odd(mas[i,j]) then   begin
    for i1:=i+1 to m do
    for j1:=j+1 to n do
      if odd(mas[i1,j1]) and (mas[i1,j1] > mas[i,j]) then
    begin
                   tmp:=mas[i,j];
                   mas[i,j]:=mas[i1,j1];
                   mas[i1,j1]:=tmp;
              end;
    if odd(mas[i1,j1]) and (mas[i1,j1] < mas[i,j]) then
    begin
                   tmp:=mas[i,j];
                   mas[i,j]:=mas[i1,j1];
                   mas[i1,j1]:=tmp;
                   end;
                  end;
                   end;
      writeln('отсортированный массив:');
      for i:=1 to m do begin
      for j:=1 to n do
      write(mas[i,j],' ');
       writeln;
      end;
 
end.
эта программа выдает на массив массив:
1 2 3 4 5
6 7 8 9 10

такой результат:
9 2 7 4 5
6 1 8 3 10. здесь 1 и 3 находятся на неверных местах. посоветуйте, пожалуйста, что делать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2014, 01:27
Ответы с готовыми решениями:

Отсортировать элементы вектора, на нечетных местах - по убыванию, на четных местах - по возрастанию
дан вектор размера n состоящий из целых положительных и отрицательных элементов отсортировать вектор о следующему правилу элементы...

Разделить одномерный массив на два. Элементы, размещенные на четных и нечетных позициях
Очень нужно решить задачу... 3 ДНЯ ТУПЛЮ СПАСАЙТЕ:wall: Задан одномерный массив действительных чисел из элементов. Сформируйте из этого...

Отсортировать элементы четных строк матрицы по возрастанию значения, а нечетных - по убыванию значения
Помогите написать код, с описанием(Новичок). Отсортировать элементы четных строк матрицы по возрастанию значения, а нечетных - по...

7
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
04.07.2014, 10:12
1. Не увидел в задании ничего про двумерный массив.
2. Что такое "чётная позиция" элемента в двумерном массиве не могу себе представить.
3. odd(mas[i,j]) проверяет чётность элемента массива, а не позиции.

Добавлено через 18 минут
Например, так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var
  a: array [1..100] of integer;
  i, j, t, n: integer;
  s: string;
  f: text;
begin
  Randomize;
  Write('Введите число элементов: '); ReadLn(n);
  WriteLn('A=');
  for i:=1 to n do begin
    a[i]:=Random(100); Write(a[i]:4);
  end; WriteLn;
  for i := n downto 2 do
    for j := 2 to i do
      if odd(i) xor (a[j] < a[j-1]) then begin
        t := a[j]; a[j] := a[j-1]; a[j-1] := t;
      end;
  Assign(f,'matrix.txt'); Rewrite(f);
  WriteLn(f,'A''=');
  for i:=1 to n do begin
    Write(f,a[i]:4);
    if i mod 20 = 0 then WriteLn(f);
  end; WriteLn(f);
  Close(f); Reset(f);
  while not eof(f) do begin
    ReadLn(f,s); WriteLn(s);
  end;
  Close(f);
end.
Добавлено через 15 минут
Если речь о двумерном массиве и элементы считаются построчно, малой кровью схитрить можно так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  m, n, nn, i, j, t: integer;
  a: array [1..100*100] of integer;
begin
  Randomize;
  Write('Введите размерность матрицы m n: '); ReadLn(m,n);
  nn:=m*n;
  WriteLn('A=');
  for i:=1 to nn do begin
    a[i]:=Random(100); Write(a[i]:4);
    if i mod n = 0 then WriteLn;
  end;
...
То есть, хранить одномерный массив, двумерный симулировать при выводе, выводя построчно по n элементов в строке.
0
 Аватар для Don_Omare
78 / 80 / 70
Регистрация: 18.12.2013
Сообщений: 210
04.07.2014, 15:54
bormant, хитрить для двумерного необязательно

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
program ps2;
 
uses
  crt;
 
const
  n = 5;
 
var
  i, j, max, maxi, maxj, k, m, b: integer;
  A: array[1..n, 1..n] of integer;
 
begin
  Textcolor(12);
  writeln('Ваша матрица: ');
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      A[i, j] := random(99);
      write(A[i, j]:3);
    end;
    writeln;
  end;
  Max := A[1, 1];
  Textcolor(10);
  
  for k := 1 to n do
  begin
    for m := 1 to n do
    begin
      for i := 1 to n do
      begin
        for j := 1 to n do
        begin
          if (i > k) or ((i = k) and ((j = m) or (j > m))) then  
            
            if A[i, j] > max then
            begin
              max := A[i, j];
              maxi := i;
              maxj := j;
            end;
        end;
      end;  
      max := 0;
      b := A[k, m];
      A[k, m] := A[maxi, maxj];
      A[maxi, maxj] := b;
    end;
  end;
  
  
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      write(A[i, j]:3);
    end;
    writeln;
  end;
  readln
end.
Добавлено через 1 минуту
P.S. это обычная сортировка по убыванию. При желании, автор, можете подогнать данную программу под свою задачку.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
04.07.2014, 16:11
Don_Omare,
вот и я говорю, нет смысла делать сложно на ровном месте, когда можно сделать просто. Ваш пример кода -- наглядная тому иллюстрация
0
 Аватар для Don_Omare
78 / 80 / 70
Регистрация: 18.12.2013
Сообщений: 210
04.07.2014, 16:20
bormant, полезнее будет немного пошевелить мозгами и подумать над сложным. Прибавится капелька логики.

p.s. Не хвалюсь, а привожу пример. Пол года назад когда мы это проходили в универе, многие не сделали это задание, некоторые решили эту задачу как Вы. Но учитель сказал, что лучшее решение мое. Ибо додуматься до
Pascal
1
2
3
4
5
6
7
8
9
  for k := 1 to n do
  begin
    for m := 1 to n do
    begin
      for i := 1 to n do
      begin
        for j := 1 to n do
        begin
          if (i > k) or ((i = k) and ((j = m) or (j > m)))
куда более труднее чем до
Pascal
1
a: array [1..100*100] of integer;
Добавлено через 3 минуты
Цитата Сообщение от bormant Посмотреть сообщение
схитрить
ну и оригинальность иногда тоже не помешает.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
04.07.2014, 16:22
PS. Перевод из линейного индекса в двумерный и обратно тоже несложен. Особенно для индексов, начинающихся от 0. Пусть k - линейный индекс, тогда для построчного хранения строка i:=k div n; столбец j:=k mod n; обратно: k:=i*n+j;

46 строка вызывает сильное сомнение, раз уж хранить индексы максимума, зачем сам максимум:
Pascal
1
2
3
maxi:=1; maxj:=1;
...
if a[i,j]>a[maxi,maxj] then ...
0
 Аватар для Don_Omare
78 / 80 / 70
Регистрация: 18.12.2013
Сообщений: 210
04.07.2014, 16:30
Цитата Сообщение от bormant Посмотреть сообщение
раз уж хранить индексы максимума, зачем сам максимум:
Верно подметили
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,157
Записей в блоге: 1
04.07.2014, 16:32
Цитата Сообщение от Don_Omare Посмотреть сообщение
куда более труднее
это обычный инвариант одномерного случая:
Pascal
1
2
3
for i:=1 to n do
  for j:=1 to n do
    if j>i then ...
просто в одномерном обычно так не пишут, поскольку внутренний цикл легко сразу сделать как for j:=i+1 to n do ...
Но додуматься, да, надо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2014, 16:32
Помогаю со студенческими работами здесь

Отсортировать по убыванию элементы, стоящие на четных местах, а элементы стоящие на нечетных местах - по возрастанию
Дан вектор размером N. Отсортировать по убыванию элементы, стоящие на четных местах, а элементы стоящие на нечетных местах - по возрастанию

Отсортировать элементы четных строк матрицы по возрастанию, а нечетных - по уменьшению значения
Отсортировать элементы четных строк матрицы по возрастанию, а нечетных - по уменьшению значения.

Отсортировать все элементы массива по убыванию и по возрастанию
привет всем. в общем такая задача. дан двумерный массив из десяти чисел. требуется: вывести исходный массив. сгенерировать для...

Отсортировать элементы нечетных строк массива целых чисел по убыванию
Отсортировать элементы нечетных строк массива целых чисел по убыванию. Сортировка прямой выбор.

Отсортировать элементы массива, с чётными индексами - по возрастанию, с нечётными - по убыванию
Организуйте массив содержащий 20 целых чисел. Отсортируйте отдельно элементы с четными инднксами по возрастанию, и элементы с нечетными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru