Форумы-->Форум для внеигровых тем--> 1|2
Автор | знающие паскаль! |
необходимо написать программу, которая бы выводила из строки вводимой с клавиатуры все перестановки ее с соседними буквами.
то есть из слова кот должно вывести
кот
лот
лпт
лпу
лпс
лну
лнс
ну и так далее
то есть каждая буква должна смениться на соседнюю - предыдущую или следующую.
var s:string;
procedure change(i:integer);
begin
s[i]:=chr(ord(s[i])-1);
if i<>length(s) then change(i+1) else begin
writeln (s);
end;
s[i]:=chr(ord(s[i])+1);
if i<>length(s) then change(i+1) else begin
writeln (s);
end;
end;
begin
readln (s);
change (1);
end.
Вот моя идея, но выводится не всё
йнс
йнт
йос
йот
кнс
кнт
кос
кот | Если слово обязательно из 3-х букв, то тройной цикл. Если произвольной длины, я бы рекурсию делал. | для FireSwarm:
я тоже рекурсию делал но не выходит | Это самое неадекватное в ФВТ что я видел. | для Zael_Hell:
фвт не только для взаимообщения быдло-троллей, знаешь | фвт ещё и для взаимопомощи быдло-троллей, знаешь | Где слово из 3 букв которое на заборе пишут! | для Крылатая:
нечего сказать, не надо зафлуживать. я спрашивал, у тех кто реально знает сабж | для Большая Злюка:
нигде, но я тебе разрешаю написать его себе на лбу и свалить из топика | для Маг-Лесник:
фвт не только для взаимообщения быдло-троллей, знаешь
Я вооще не тот и не другой знаешь ли. Я флудер!
И да я знаю паскаль на уровне 7-ого класса, но тут явно уровень выше. | нигде, но я тебе разрешаю написать его себе на лбу и свалить из топикао, господин! | Чуток доработал. но вывод все равно не тот.
var s:string;
procedure change(i:integer);
begin
s[i]:=chr(ord(s[i])-1);
writeln(s);
if i<>length(s) then change(i+1);
s[i]:=chr(ord(s[i])+1);
writeln(s);
if i<>length(s) then change(i+1);
end;
begin
readln (s);
change (1);
end.
Окно вывода:
йот
йнт
йнс
йнт
йот
йос
йот
кот
кнт
кнс
кнт
кот
кос
кот | для Маг-Лесник:
Попробуй простой способ.
Организуем метод. Он принимает слово и число. Число - номер изменяемой буквы. Если буква последняя, то мы выводим слово три раза, меняя эту букву. Если нет, то мы три раза вызываем этот метод, передавая туда слово с изменённой буквой и указателем на следующую букву.
Код сейчас не напишу, негде. А на форуме не удобно. | Ну я же говорю не адекватное. Я напишу так а ты думай.
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я.
Это просто не правдо ли? | Тема про сиськи ? | не понял задачу. Вот есть "кот". Задача - все перестановки с соседними буквами. С соседними по алфавиту? Переставлять сразу все буквы надо сразу? То есть из "кот" должно получится "ймс"? Или сначала 1-ю, 2 не меняем, потом 2-ю, 1 и 3 не меняем или как? Можно подробней? | Паскаль же для школьников 6-го класса. Вот Delfi для настоящих мужиков. Тема ни о чём. | а что, Delphi чем то отличается от старого доброго Паскаля? Только формочками. Объекты ведь были уже в Паскале, ЕМНИП | Кароч, на джаве это вотаквот:
void fun(String s) {
fun(s, 0);
}
void fun(String s, int i) {
char ch = s.charAt(i);
if (s.length() == i + 1) {
System.out.println(s.substring(0, i) + (char)(ch - 1));
System.out.println(s.substring(0, i) + (char)(ch));
System.out.println(s.substring(0, i) + (char)(ch + 1));
} else {
if (i == 0) {
fun((char)(ch - 1) + s.substring(i + 1), i + 1);
fun((char)(ch) + s.substring(i + 1), i + 1);
fun((char)(ch + 1) + s.substring(i + 1), i + 1);
} else {
fun(s.substring(0, i) + (char)(ch - 1) + s.substring(i + 1), i + 1);
fun(s.substring(0, i) + (char)(ch) + s.substring(i + 1), i + 1);
fun(s.substring(0, i) + (char)(ch + 1) + s.substring(i + 1), i + 1);
}
}
}
Сейчас попробуем на паскаль перевести. | procedure TForm1.fun_main(ss: string);
begin
fun(ss, 1);
end;
procedure TForm1.fun(s: string; i: integer);
var ch: string;
begin
ch:= Copy(s, i, 1);
if Length(s) = i then
begin
lbl2.Caption:= lbl2.Caption + Copy(s, 1, i - 1) + Chr((Ord(ch[1]) - 1));
lbl2.Caption:= lbl2.Caption + #10#13;
lbl2.Caption:= lbl2.Caption + Copy(s, 1, i - 1) + ch;
lbl2.Caption:= lbl2.Caption + #10#13;
lbl2.Caption:= lbl2.Caption + Copy(s, 1, i - 1) + Chr((Ord(ch[1]) + 1));
lbl2.Caption:= lbl2.Caption + #10#13;
end
else if (i = 1) then
begin
fun(Chr((Ord(ch[1]) - 1)) + Copy(s, i + 1, 100), i + 1);
fun(ch + Copy(s, i + 1, 100), i + 1);
fun(Chr((Ord(ch[1]) + 1)) + Copy(s, i + 1, 100), i + 1);
end
else
begin
fun(Copy(s, 1, i - 1) + Chr((Ord(ch[1]) - 1)) + Copy(s, i + 1, 100), i + 1);
fun(Copy(s, 1, i - 1) + ch + Copy(s, i + 1, 100), i + 1);
fun(Copy(s, 1, i - 1) + Chr((Ord(ch[1]) + 1)) + Copy(s, i + 1, 100), i + 1);
end;
end;
Только вывод в консоль самостоятельно сделай. |
1|2К списку тем
|