Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
1

Перестановка двух строк в массиве char

12.09.2017, 12:49. Просмотров 862. Ответов 15
Метки нет (Все метки)

Пробую менять строки через временную переменную, но в итоге теряется первая строка

Например массив заполнен двумя записями:

qwerty
cry

При перестановке у меня получается на выходе:

cry

То есть первое слово qwerty пропадает

Меняю таким образом
Pascal
1
2
3
4
5
6
7
8
9
10
     for _i := 1 to 2 do
             begin
                  for _j := 1 to 10 do
                  begin
                       temp := arr[_i, _j];
                       arr[_i, _j] := arr[_i + 1, _j];
                       arr[_i + 1, j] := temp;
                       write(arr[_i, _j]);
                  end;
             end;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2017, 12:49
Ответы с готовыми решениями:

Перестановка строк в двухмерном массиве с заданным условием
Здравствуйте!! помогите ,пожалуйста, с задачей... только ее одну осталось...

Перестановка двух строк матрицы
Для матрицы А, где i изменяется от 0 до N-1, j изменяется от 0 до N-1 написать...

Перестановка строк в двухмерном массиве
помогите пожалуйста! нужно поменять первую строку с третей а вторую с...

Перестановка строк и столбцов в массиве
Помогите, пожалуйста. Составить программу на языке Паскаль заполнения массива...

Перестановка строк в двухмерном массиве
Дан двухмерный массив из n строк и m столбцов. Переставить строки так, чтобы...

15
Puporev
Модератор
54717 / 42123 / 29086
Регистрация: 18.05.2008
Сообщений: 99,429
12.09.2017, 12:58 2
Напишите точное и полное условие задачи.
0
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
12.09.2017, 13:12 3
А что у Вас в третей строке?
0
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 13:15  [ТС] 4
Задание как такового нету, я изучаю паскаль и просто пытаюсь понять почему так происходит

Добавлено через 42 секунды
Третьей строки нету, массив состоит из двух

Добавлено через 1 минуту
Под строку выделяю 10 символов, всего строки 2
0
Puporev
Модератор
54717 / 42123 / 29086
Регистрация: 18.05.2008
Сообщений: 99,429
12.09.2017, 13:16 5
Может быть линейный массив символов array [1..n] of char.
У Вас судя по всему матрица символов array[1..m,1..n] of char.
В матрице длина всех строк одинакова, а у Вас
Цитата Сообщение от retah Посмотреть сообщение
qwerty
cry
Это не матрица.
0
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
12.09.2017, 13:16 6
_i + 1 вот тут Вы вылазите за предела массива, но перед этим что то записываете вместо второй строки, а саму строку отправляете куда то.
0
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 13:17  [ТС] 7
У меня одинаковая длина строк, выделяю 10 под строку(написал выше). Остальные символы пробелы
0
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 13:20  [ТС] 8
Цитата Сообщение от Constantin Cat Посмотреть сообщение
_i + 1 вот тут Вы вылазите за предела массива, но перед этим что то записываете вместо второй строки, а саму строку отправляете куда то.
Как этого избежать? Завести еще один отдельный счетчик?
0
Puporev
Модератор
54717 / 42123 / 29086
Регистрация: 18.05.2008
Сообщений: 99,429
12.09.2017, 13:20 9
Если строк всего 2, то так
Pascal
1
2
3
4
5
6
for i:=1 to 10 do
 begin
  tmp:=a[1,i];
  a[1,i]:=a[2,i];
  a[2,i]:=tmp
 end;
0
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 13:21  [ТС] 10
Цитата Сообщение от Puporev Посмотреть сообщение
Если строк всего 2, то так
А если неизвестное кол-во? Вместо константы заводим счетчик строк?
0
Puporev
Модератор
54717 / 42123 / 29086
Регистрация: 18.05.2008
Сообщений: 99,429
12.09.2017, 13:23 11
Цитата Сообщение от retah Посмотреть сообщение
А если неизвестное кол-во?
А по какому принципу будут переставляться строки?
0
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 13:24  [ТС] 12
Цитата Сообщение от Puporev Посмотреть сообщение
А по какому принципу будут переставляться строки?

Пока не знаю, какое-нибудь условие придумаю.. Ну например по количеству пробелов в строке
0
Constantin Cat
1961 / 1049 / 365
Регистрация: 28.02.2015
Сообщений: 2,326
Завершенные тесты: 1
12.09.2017, 13:31 13
Лучший ответ Сообщение было отмечено retah как решение

Решение

Цитата Сообщение от retah Посмотреть сообщение
А если неизвестное кол-во?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const
  n=2;
  m=10;
var
  arr:array[1..n,1..m]of char;
  _i,_j:integer;
  temp:char;
begin
  arr[1,1]:='a';
  arr[2,1]:='b';
  for _i := 1 to n-1 do
    begin
      for _j := 1 to m do
        begin
          temp := arr[_i, _j];
          arr[_i, _j] := arr[_i + 1, _j];
          arr[_i + 1, _j] := temp;
          write(arr[_i, _j]);
        end;
      writeln;
    end;
  for _j:=1 to m do write(arr[n, _j]);
end.
Добавлено через 41 секунду
У Вас ошибка в коде.
1
Puporev
Модератор
54717 / 42123 / 29086
Регистрация: 18.05.2008
Сообщений: 99,429
12.09.2017, 13:40 14
Цитата Сообщение от retah Посмотреть сообщение
Ну например по количеству пробелов в строке
Вообще это делается так.
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
const m=10;
      n=10;
type str=array[1..n] of char;
     mas=array[1..m] of str;
function spase(s:str):byte;
var i,k:byte;
begin
k:=0;
for i:=1 to n do
if s[i]=' ' then inc(k);
spase:=k;
end;
var arr:mas;
    temp:str;
    i,j:byte;
begin
......................
//перестановка по возрастанию числа пробелов
for i:=1 to m-1 do
for j:=i+1 to m do
if spase(arr[i])>spase(arr[j]) then
 begin
  temp:=arr[i];
  arr[i]:=arr[j];
  arr[j] := temp;
 end;
 ...........................
1
retah
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 30
12.09.2017, 14:14  [ТС] 15
Цитата Сообщение от Constantin Cat Посмотреть сообщение
У Вас ошибка в коде.
Точно! Нижнее подчеркивание забыл, а я голову ломал..
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3906 / 2563 / 2085
Регистрация: 22.11.2013
Сообщений: 7,178
12.09.2017, 16:23 16
Цитата Сообщение от retah Посмотреть сообщение
Нижнее подчеркивание забыл
А зачем вам подчеркивания? Думаете без них никак зрение не попортить, глаз не поломать?
Это же читать просто невозможно...
0
12.09.2017, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2017, 16:23

Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её строк
Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её...

Перестановка в 1-ом массиве
Привет всем ! помогите пожалуйста сделать одну задачку: Дан массив X...

Перестановка элементов в массиве
Задача: Переставить в массиве первый элемент и максимальный. Просьба написать...


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

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

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