Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
1

Дана строка, состоящая из М символов. Вывести все перестановки символов данной строки

09.04.2012, 22:13. Показов 4688. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с решением задачи. (Pascal)
Дана строка, состоящая из М символов. Вывести все перестановки символов данной строки.
2<=M<=8

Example:AB - AB , BA
122 - 122, 212, 221


Заранее ОГРОМНОЕ спасибо!!!!!

Или может здесь можно что-нибудь исправить. Это программа, генерирующая все перестановки из N компонент, обозначенных N первыми буквами латинского алфавита. А как тогда цифры????


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
const
 alphabet : string[8] = 'ABCDEFGH';
 type
 barray = array [1..100] of byte;
 var
 b : barray;
 N,M,i,j,k : byte;
 z : longint;
 Procedure WriteB(B:barray);
 begin
 Inc(Z); Write (Z:3,' : ');
 for i:=1 to M do write(alphabet[b[i]]);
 writeln;
 end;
 Procedure SwapB(var B:barray;i,k:byte);
 var x : byte;
 begin
 x:=B[i]; B[i]:=B[k]; B[k]:=x;
 end;
 Procedure PermuteAll(B:barray;N:byte);
 var i,k,j : byte;
 begin
 WriteB(B);
 while (true) do
 begin
 i:=N;
 while (i>0) and (B[i]>=B[i+1]) do i:=i-1;
 if i=0 then exit;
 for j:=i+1 to N do
 if (B[j]>B[i]) then K:=j;
 SwapB(B,i,k);
 for j:=i+1 to (i+ ((N+1-i) div 2)) do SwapB(B,j,N+i+1-j);
 WriteB(B);
 end;
 end;
 begin
 readln(N,M);
 for i:=1 to M do b[i]:=i;
 PermuteAll(B,M);
 while (true) do
 begin
 i:=M;
 while (i>0) and (b[i]=N-m+i) do Dec(i);
 if i=0 then exit;
 Inc(B[i]);
 for j:=i+1 to M do B[j]:=B[j-1]+1;
 PermuteAll(B,M);
 end;
 readln;
 end.
Добавлено через 24 минуты
Или вот например, но выводит кучу повторений.
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
var
  a: array[0 .. 20] of char;
    n: integer ;
procedure print(T: integer);
var i: integer;
begin
  for i := 1 to T do write(a[i]:3);
  writeln
end;
 
procedure swap(var a, b: char);
var T: char;
begin T := a; a := b; b := T end;
 
procedure solve(T: integer);
var i: integer;
begin
  if T >= n then print(t)
  else
    for i := T + 1 to n do begin
      swap(a[T+1], a[i]);
      solve(T+1);
      swap(a[t+1], a[i])
    end
end;
 
var
  i: integer;
  s: string;
 
begin
  readln(s);
  n := length(s);
 
  for i := 1 to n do a[i] := s[i];
  solve(0)
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2012, 22:13
Ответы с готовыми решениями:

Дана строка символов, состоящая из букв и цифр. Вывести на экран число, состоящее их цифр данной строки
Дана строка символов, состоящая из букв и цифр. Вывести на экран число, состоящее их цифр данной...

Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной строки.
Дана строка, состоящая из M попарно различных символов. Вывести все перестановки символов данной...

Дана строка, состоящая из N попарно различных символов. Вывести все перестановки символов данной строки
Здравствуйте. Дана строка, состоящая из M попарно различных символов. Вывести все перестановки...

Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры
Нужна прога... Дана строка символов, состоящая из букв и цифр. Удалить из строки все цифры. Буду...

9
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
09.04.2012, 22:53 2
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
 var a, b: array[1..255] of integer; 
 s:string;
 len, i:integer;
 procedure rec(t:integer);
 var i:integer;
 begin
 if t>len then begin
  for i:=1 to len do write(chr(b[i]));
  writeln();
  Exit;
 end;
 for i:=1 to 255 do
  if a[i]>0 then begin
  b[t]:=i;
  dec(a[i]);
  rec(t+1);
  inc(a[i]);  
  end;
 end;
 
 begin
 writeln('Введите строку');
 read(s);
 len:=Length(s);
 for i:=1 to len do
 inc(a[ord(s[i])]);
 rec(1); 
 end.
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 23:03  [ТС] 3
Так то же самое выводит
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
09.04.2012, 23:14 4
Цитата Сообщение от Helen236 Посмотреть сообщение
Так то же самое выводит
что тоже самое?
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 23:24  [ТС] 5
При вводе ав
ab
ab
ba
ab
ab
ba
ba
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
09.04.2012, 23:29 6
Цитата Сообщение от Helen236 Посмотреть сообщение
При вводе ав
ab
ab
ba
ab
ab
ba
ba
а у меня при вводе ab выдает:
ab
ba
0
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 23:41  [ТС] 7
в ABC паскале?
Я так проверяла, у меня другого нет

Добавлено через 1 минуту
Все проходит!!!! Это я сморозила немножко. Спасибо ОГРОМНОЕ!!!!!

Добавлено через 7 минут
Валерий, а вы не подскажете, что значит ошибка компиляции???
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
10.04.2012, 06:23 8
Цитата Сообщение от Helen236 Посмотреть сообщение
что значит ошибка компиляции???
Значит не создан файл на на машинно-ориентированном языке (исполняемый файл). Причины - чаще всего неправильно написанный исходный код (для Вас исходный код на Паскале).
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
11.04.2012, 23:06  [ТС] 9
Вот еще одно решение, если кому понадобиться
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
type str8 = string[8];
 
procedure Permute(const t,s: str8);
var
  i,j: integer;
  lenS : byte;
  ch : char;
begin
  lenS := length(s);
  if lenS=0 then
    writeln(t)
  else
    for i:=1 to lenS do begin
      ch := s[i];
      j:=1;
      while s[j]<>ch do inc(j);
      if j=i then
        Permute(t+ch, Copy(s,1,i-1)+Copy(s,i+1,Length(s)-i))
    end;
end;
 
 
var
  s    : str8;
  ch   : char;
  i, j : integer;
 
begin
    readln(s);
 
  { отсортируем символы в строке: }
  for i := 1 to length(s) - 1 do begin
      for j := i + 1 to length(s) do
        if s[j] < s[i] then begin
          ch := s[i];
          s[i] := s[j];
          s[j] := ch;
        end;
    end;
 
  Permute('',s);
end.
0
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 11
07.12.2013, 17:02 10
а если строка расположена в файле?
0
07.12.2013, 17:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2013, 17:02
Помогаю со студенческими работами здесь

Вывести все перестановки символов данной строки
Здравствуйте! Условие задачи: Дана строка, состоящая из N (1 ≤ N ≤ 8) попарно...

Дана строка, состоящая из символов. Удалить из этой строки все цифры, записав в другую строку
Проблема в том, что я не знаю как в строке a := ord('0') div 10; сделать перечисление от 0 до 9...

Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки
Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки....

Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки
Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru