Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
илья9696
74 / 74 / 17
Регистрация: 15.11.2014
Сообщений: 436
Завершенные тесты: 1
#1

Сравнение и смена местами строк в двумерном массиве - Turbo Pascal

09.09.2017, 21:55. Просмотров 155. Ответов 9
Метки нет (Все метки)

Возникли проблемы с разработкой алгоритма.


Пример:

Допустим есть двумерный массив типа char, в нем хранится такая запись(пусть в данном случае будет три строки)

1 строка "sdfssd 134 sdfsf"
2 строка "sdfssdfbnn 8348 sdfsf"
3 строка "sdfssdf 892123 sdfsf"

Мне требуется отсортировать строки (например по убыванию чисел) в зависимости от числа которое находится где-то в строке

То есть после сортировки должно быть так:

1 строка "sdfssd 892123 sdfsf"
2 строка "sdfssdfbnn 8348 sdfsf"
3 строка "sdfssdf 134 sdfsf"

Подскажите алгоритм действий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2017, 21:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение и смена местами строк в двумерном массиве (Turbo Pascal):

В двумерном массиве, с одинаковым количеством столбцов и строк, поменять местами элементы, расположенные симметрично относительно главной диагонали - Turbo Pascal
В двумерном массиве, который имеет одинаковое количество столбцов и строк, поменять местами элементы, расположенные симметрично...

В двумерном массиве поменять местами k и l столбцы местами. - Turbo Pascal
В двумерном массиве поменять местами k и l столбцы местами.

Меняем местами строки в двумерном массиве - Turbo Pascal
Дан массив A(3,3). Поменять местами 2 и 1 строки массива.

Меняем местами элементы в двумерном массиве - Turbo Pascal
Дан массив A(3,3). Поменять местами элементы массива с номерами 3,2 и 2,2

Поменять местами элементы в Двумерном массиве - Turbo Pascal
Здравствуйте!Мир Вам и Вашему дому. Помогите с таким заданием. Поменять местами соседние элементы в массиве! Например : 1 2 3 4 5 ...

В двумерном массиве 3X5 поменять местами 2 и 5 столбцы - Turbo Pascal
В двумерном массиве 3X5 поменять местами 2 и 5 столбцы вывести на экран исх матрицу результирующую матрицу

9
Puporev
Модератор
52403 / 40250 / 13582
Регистрация: 18.05.2008
Сообщений: 93,049
10.09.2017, 11:49 #2
А конкретное задание есть? Если да, приведите его максимально точно.
0
илья9696
74 / 74 / 17
Регистрация: 15.11.2014
Сообщений: 436
Завершенные тесты: 1
10.09.2017, 13:13  [ТС] #3
Считать из файла и занести в двумерный массив char все элементы файла (файл заполнен таким форматом строк, как я привел, строк сколько угодно).

Затем выбрать из этого массива две строки c самыми большими числами и занести их в другой файл.
0
Puporev
Модератор
52403 / 40250 / 13582
Регистрация: 18.05.2008
Сообщений: 93,049
10.09.2017, 13:31 #4
Обычно если строки из файла нужно считать посимвольно в матрицу, то длины строк все одного размера.
И метод сортировки указан? А то тут одному на днях похожую программу делал,так он написал, что ему нужна сортировка вставками, пришлось переделать. Хотя он все равно нифига не понял. Не одногруппник?
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3557 / 2251 / 1152
Регистрация: 22.11.2013
Сообщений: 5,922
10.09.2017, 13:41 #5
Обожаю такие "непротиворечивые" задания:
Цитата Сообщение от илья9696 Посмотреть сообщение
занести в двумерный массив char все элементы файла ... строк сколько угодно
Особенно когда результатом должно быть:
Цитата Сообщение от илья9696 Посмотреть сообщение
выбрать из этого массива две строки
0
илья9696
74 / 74 / 17
Регистрация: 15.11.2014
Сообщений: 436
Завершенные тесты: 1
10.09.2017, 13:49  [ТС] #6
Ничего не противоречит, просто надо не только результат в файл записать, но и полностью содержимое первого файла.

И какое это вообще имеет значение? Вопрос в другом стоит.

А что изменится, если строки будут одинакового размера?
0
Puporev
Модератор
52403 / 40250 / 13582
Регистрация: 18.05.2008
Сообщений: 93,049
10.09.2017, 13:52 #7
Цитата Сообщение от илья9696 Посмотреть сообщение
А что изменится, если строки будут одинакового размера?
Да просто не нужно будет их уравнивать поскольку в матрице все строки одного размера.

Добавлено через 1 минуту
Я просил точный текст задания, а не Ваши домыслы. Если его нет, до свидания.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3557 / 2251 / 1152
Регистрация: 22.11.2013
Сообщений: 5,922
10.09.2017, 14:07 #8
Цитата Сообщение от илья9696 Посмотреть сообщение
Ничего не противоречит
Да? Давайте перечислять.

1) Размеры современных носителей перешагнули порог в несколько терабайт, а оперативной памяти на вашей машине вряд ли больше 64 гигабайт. А если посмотреть на раздел -- Turbo Pascal, то обычно вашей программе доступно около 600 килобайт, а в сегменте данных непрерывным куском 64 килобайта.
Как предлагаете впихнуть невпихуемое (например, весь файл в 2 гигабайта в 64 или 600 килобайт памяти)?

2) не указаны ограничения на длину строки файла, а массив-то прямоугольный, все строки одинаковой длины.
У вас есть рецепт для бесконечной строки, или скажем, строки, превышающей 64 килобайта, 640 килобайт?

3) не указано ограничение на количество чисел в строке, в задании не сказано, что число в строке только одно, не сказано, что делать с остальными числами -- брать первое или последнее, брать максимальное и т.п.

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

Всё еще не видно противоречий?
0
Puporev
Модератор
52403 / 40250 / 13582
Регистрация: 18.05.2008
Сообщений: 93,049
10.09.2017, 14:30 #9

Не по теме:

И тут Остапа понесло...©



Добавлено через 19 минут
Вот Вы пишете
Цитата Сообщение от илья9696 Посмотреть сообщение
Подскажите алгоритм действий.
Посмотрите эти темы, особо пост номер 6 во второй теме.
Как сформулированы задания, как их выполнять.
Определить средний возраст мужчин в группе
Не запускается программа
Я думаю что Вы как-то связаны с теми товарищами и задание Ваше должно быть похожим.
Может сами напишете программу, а то если я буду писать всей группе одно и то же, препод может не понять юмора.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3557 / 2251 / 1152
Регистрация: 22.11.2013
Сообщений: 5,922
10.09.2017, 15:48 #10
Остапа принесло:
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
const
  Digits = ['0'..'9'];
  MLines=10; MLineLen=81; NSel=2;
 
function cmp(var x, y; n: Word): Integer;
var
  a: array [0..0] of ShortInt absolute x;
  b: array [0..0] of ShortInt absolute y;
  i: Integer;
begin
  for i:=0 to n-1 do
    if a[i]<>b[i] then begin
      cmp:=a[i]-b[i]; Exit;
    end;
  cmp:=0;
end;
var
  a: array [0..MLines-1,0..MLineLen] of Char;
  b, c: array [0..MLines-1] of Byte;
  d: array [0..MLines] of Integer;
  n, i, j, k, t: Integer;
begin
  Assign(input,'input.txt'); Reset(input);
  Assign(output,'output.txt'); Rewrite(output);
  { прочитаем не больше MLines строк }
  n:=0;
  while (n<MLines) and not EoF do begin
    ReadLn(a[n]);
    { поищем первое число и его длину }
    j:=0; while not (a[n,j] in [#0]+Digits) do Inc(j);
    while a[n,j]='0' do Inc(j); b[n]:=j;
    while a[n,j] in Digits do Inc(j); c[n]:=j-b[n];
    Inc(n);
  end;
  Close(input);
  { выполним NSel проходов пузырька, NSel бОльших всплывут }
  for i:=0 to n-1 do d[i]:=i;
  for i:=0 to NSel-1 do
    for j:=n-2 downto i do
      if (c[d[j+1]]>c[d[j]]) or 
         (c[d[j+1]]=c[d[j]]) and 
         (cmp(a[d[j+1],b[d[j+1]]],a[d[j],b[d[j]]],c[d[j]])>0)
      then begin
        t:=d[j+1]; d[j+1]:=d[j]; d[j]:=t;
      end;
  for i:=0 to NSel-1 do WriteLn(a[d[i]]);
  Close(output);
end.
Добавлено через 29 минут
Или без доп. функции сравнения участков памяти:
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
const
  Digits = ['0'..'9'];
  MLines=10; MLineLen=81; NSel=2;
var
  a: array [0..MLines-1,0..MLineLen] of Char;
  b, c: array [0..MLines-1] of Byte;
  d: array [0..MLines] of Integer;
  n, i, j, k, t, d1, d2, p1, p2: Integer;
begin
  Assign(input,'input.txt'); Reset(input);
  Assign(output,'output.txt'); Rewrite(output);
  { прочитаем не больше MLines строк }
  n:=0;
  while (n<MLines) and not EoF do begin
    ReadLn(a[n]);
    { поищем первое число и его длину }
    j:=0; while not (a[n,j] in [#0]+Digits) do Inc(j);
    while a[n,j]='0' do Inc(j); b[n]:=j;
    while a[n,j] in Digits do Inc(j); c[n]:=j-b[n];
    Inc(n);
  end;
  Close(input);
  { выполним NSel проходов пузырька, NSel бОльших всплывут }
  for i:=0 to n-1 do d[i]:=i; { используем перестановку индекса }
  for i:=0 to NSel-1 do
    for j:=n-2 downto i do begin
      d1:=d[j]; d2:=d[j+1];
      if c[d2]=c[d1] then begin
        k:=0; p1:=b[d1]; p2:=b[d2];
        while (k<c[d1]) and (a[d1,p1+k]=a[d2,p2+k]) do Inc(k);
        if a[d1,p1+k]<a[d2,p2+k] then begin
          t:=d[j+1]; d[j+1]:=d[j]; d[j]:=t;
        end;
      end else if c[d2]>c[d1] then begin
        t:=d[j+1]; d[j+1]:=d[j]; d[j]:=t;
      end;
    end;
  for i:=0 to NSel-1 do WriteLn(a[d[i]]);
  Close(output);
end.
0
10.09.2017, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2017, 15:48
Привет! Вот еще темы с ответами:

В двумерном массиве поменять местами максимальный и минимальный элементы - Turbo Pascal
Задача: В двумерном массиве поменять местами максимальный и минимальный элементы program change; var A : Array of integer; ...

В двумерном массиве поменять местами минимальный и масксимальный элемент - Turbo Pascal
В ЗАДАННОЙ СТРОКЕ матрицы поменять местами максимальный и минимальный элементы

В двумерном массиве 4 на 4 поменять местами третью строку и второй столбец - Turbo Pascal
в двумерном массиве 4 на 4 поменять местами третью строку и второй столбец

В двумерном массиве 5´5 поменять местами первый и последний столбцы. - Turbo Pascal
32.Решить задачу в Turbo Pascal.В двумерном массиве 5´5 поменять местами первый и последний столбцы.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru