| Определить является ли заданное слово перевертышем. | 
|  | 
| 
| Помогите составить программу:Определить является ли заданное слово перевертышем. Для меня это задача "со звёздочкой". Напишите хотя бы намёк кода. |  
|  |  | 
| 
| код на Паскале подойдёт? 
 Нужна помощь? Сюда: vkontakte.ru/berestovskiy
 |  
|  |  | 
| 
| Алгоритм: 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, то не перевёртыш. Иначе - перевёртыш.
 
 Закодируй алгоритм на Си и будет тебе счастье! )))
 |  
|  |  | 
| 
| А не легче: 1)считать строку;
 2)второй строке присвоить её наоборот;
 3)через фор ту ду проверять соответствие букв и переприсваиаивать булевой переменной тру если одинаковые и если не одинаковые, то выйти с цикла и после цикла написать значение булевой переменной?)
 
 Нужна помощь? Сюда: vkontakte.ru/berestovskiy
 |  
|  |  | 
| 
| нет, не проще. Во-первых, флаг можно сделать и булевой переменной- это ДА! Но цикл i=0..D будет в любом случае минимум в два раза короче, чем само слово+ не нужно вводить дополнительную переменную под обратное слово.
 Теперь считаем циклы в твоём варианте:
 1 цикл
 Quote (Berestovskiy) присвоить её наоборот2 цикл
 (причём двойной длинны относительно D, если рассматриваем худший случай.)Quote (Berestovskiy) фор ту ду
 Ну а указание на то, что сравнивать флаг нужно после каждого цикла - рационально! Молодец!
 |  
|  |  | 
| 
| 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
 |  
|  |  
| 
 Нужна помощь? Сюда: vkontakte.ru/berestovskiy
 |  
|  |  | 
| 
| 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 сравнений.
 Суть алгоритма в том, чтобы в цикле сравнить первую букву с последней, вторую с предпоследней и т. д. аж до центра слова. Если слово с нечётным кол-вом букв, то центральную ни с чем сравнивать не нужно.
 |  
|  |  | 
| 
| Quote (aufgeklärt) Так а точ, что 1+i и N-i тебя не смутило? 0 нужен для того, чтобы перед циклом не задавать начальные и конечные элементы сравнения. 
 Моя вина)
 
 
 Quote (aufgeklärt) Здесь D - половина от длины всего слова, а не длина новой сравниваемой строки. 
 Да, всё понял:)
 Твоя алгоритм пожалуй лучше:)
 Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления))
 Ну это если не работать с миллиардами слов одновременно)
 
 Нужна помощь? Сюда: vkontakte.ru/berestovskiy
 |  
|  |  | 
| 
| Quote (Berestovskiy) Ну если его юзать, то я не думаю, что мой слишком замедлит процесс вычисления))Думаю да.
 |  
|  |  |