Новые сообщения · Правила  
Страница 1 из 11
Модератор форума: Berestovskiy 
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » С, C++ » Определить является ли заданное слово перевертышем. (Символьные строки "C")
Определить является ли заданное слово перевертышем.
Помогите составить программу:Определить является ли заданное слово перевертышем. Для меня это задача "со звёздочкой". Напишите хотя бы намёк кода.
1 | Автор: JimHart | 2012-01-14, 02:07   |  Репутация: [ + 0 ]
код на Паскале подойдёт?

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
2 | Автор: Berestovskiy | 2012-01-31, 18:32   |  Репутация: [ + 211 ]
Алгоритм:
1. проверить слово на чётное и нечётное кол-во букв.
2.1 Если чётное и длина N, то D:=N\2;
2.2 Если нечётное, то D:=(N-1)\2;
3. Сравниваем в цикле по i=0..D буквы с номерами 1+i и N-i.
4. Внутри цикла 3 нужно учесть флаг (если буквы не равны при сравнении , то флаг:=1).
5. После цикла проверяем условие : если флаг=1, то не перевёртыш. Иначе - перевёртыш.

Закодируй алгоритм на Си и будет тебе счастье! )))
3 | Автор: aufgeklärt | 2012-02-02, 21:57   |  Репутация: [ + 3 ]
3 | Автор: aufgeklärt | 2012-02-02, 21:57   |  Репутация: [ + 3 ]
А не легче:
1)считать строку;
2)второй строке присвоить её наоборот;
3)через фор ту ду проверять соответствие букв и переприсваиаивать булевой переменной тру если одинаковые и если не одинаковые, то выйти с цикла и после цикла написать значение булевой переменной?)


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
4 | Автор: Berestovskiy | 2012-02-03, 00:31   |  Репутация: [ + 211 ]
нет, не проще. Во-первых, флаг можно сделать и булевой переменной- это ДА!
Но цикл i=0..D будет в любом случае минимум в два раза короче, чем само слово+ не нужно вводить дополнительную переменную под обратное слово.
Теперь считаем циклы в твоём варианте:
1 цикл
Quote (Berestovskiy)
присвоить её наоборот

2 цикл
Quote (Berestovskiy)
фор ту ду
(причём двойной длинны относительно D, если рассматриваем худший случай.)

Ну а указание на то, что сравнивать флаг нужно после каждого цикла - рационально! Молодец!
5 | Автор: aufgeklärt | 2012-02-03, 01:58   |  Репутация: [ + 3 ]
Quote (aufgeklärt)
Но цикл i=0..D

На сколько я помню - нумерация элементов строки начинается с 1 :Р
Quote (aufgeklärt)
двойной длинны

зачем двойной длинны?) :
for i:=1 to length(d) do
if s[i]=d[i] then l:=true else begin l:=false;break;
writeln(l);
end.

Как-то так)


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
6 | Автор: Berestovskiy | 2012-02-03, 02:03   |  Репутация: [ + 211 ]


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
6 | Автор: Berestovskiy | 2012-02-03, 02:03   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
На сколько я помню - нумерация элементов строки начинается с 1 :Р

Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения.

Quote (aufgeklärt)
2.1 Если чётное и длина N, то D:=N\2; 2.2 Если нечётное, то D:=(N-1)\2;


Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки.

По твоему алгоритму в худшем случае(если слово-перевёртыш) пройдёт length(s) сравнений.
А по предлагаемому алгоритму в этом же случае пройдёт всего length(s)\2 сравнений.
Суть алгоритма в том, чтобы в цикле сравнить первую букву с последней, вторую с предпоследней и т. д. аж до центра слова. Если слово с нечётным кол-вом букв, то центральную ни с чем сравнивать не нужно.
7 | Автор: aufgeklärt | 2012-02-03, 02:23   |  Репутация: [ + 3 ]
Quote (aufgeklärt)
Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения.


Моя вина)

Quote (aufgeklärt)
Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки.


Да, всё понял:)
Твоя алгоритм пожалуй лучше:)
Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления))
Ну это если не работать с миллиардами слов одновременно)


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
8 | Автор: Berestovskiy | 2012-02-03, 09:00   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления))

Думаю да.
9 | Автор: aufgeklärt | 2012-02-03, 12:02   |  Репутация: [ + 3 ]
Форум ПРОГРАММИСТОВ » ПРОГРАММИРОВАНИЕ » С, C++ » Определить является ли заданное слово перевертышем. (Символьные строки "C")
Страница 1 из 11
Поиск: