Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 21:02   #1
Julia2707
Новичок
Джуниор
 
Регистрация: 10.03.2013
Сообщений: 2
По умолчанию Переставить буквы в обратном порядке

требуется переставить буквы в слове в обратном порядке в excel с помощью какой-то функции, например в ячейке А1 вводится слово "город", в ячейке А2 с помощью функции "дорог"
Julia2707 вне форума Ответить с цитированием
Старый 10.03.2013, 21:09   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Ну, сам алгоритм перевёртывания на Делфи выглядит так
Код:
n:=length(st);

for i:=1 to (n div 2) do
	st[i]:=st[n-i+1];
Добавлено: в этом коде ошибка. Вместо st[i]:=st[n-i+1] следует обменивать st[n-i+1] и s[i] значениями.

Последний раз редактировалось Вадим Мошев; 10.03.2013 в 21:46.
Вадим Мошев вне форума Ответить с цитированием
Старый 10.03.2013, 21:14   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Способ стандартными функциями:

Но можно такое сделать и стандартными формулами. Сразу оговорюсь — стандартными формулами сделать это можно, но не совсем просто. Но можно. И для этого потребуется гораздо больше манипуляций, чем через VBA. Хотя для кого-то, возможно, способ формулами будет более прост, чем через VBA. Для начала необходимо будет включить интеративные вычисления в функциях:

Excel 2003: Сервис-Параметры-Вычисления-ставим галочку Интерации
Excel 2007: Меню-Параметры Excel-Формулы-Включить интеративные вычисления
Excel 2010: Файл-Параметры-Формулы-Включить интеративные вычисления
Устанавливаем предельное число интераций — 1. Допустим само слово у нас в ячейке А1. Тогда формула будет выглядеть следующим образом:

=ЕСЛИ(ДЛСТР(B1)>=ДЛСТР(A1);B1;ЕСЛИ( ДЛСТР(B1)=1;ПСТР(A1;ДЛСТР(A1);1);B1 )&ПСТР(A1;ДЛСТР(A1)-ДЛСТР(B1);1))

Но это не все. При внесении формулы в ячейку она сразу не выдаст необходимый результат. Необходимо пересчитывать формулу до тех пор, пока все слово не перевернется(я просто нажал и удерживал клавишу F9). Лично я сделал формулу, как говорится, «из спортивного интереса». Но кому-то, возможно, будет гораздо проще так, чем через VBA. В приложенном файле помимо рассмотренных примеров есть еще один, котрый лично мне не нравиться тем, что он «растягивается» на несколько ячеек. Это не очень удобно, но избавляет от необходимости включать интерации. Но это, пожалуй, единственный положительный момент в данном способе. Сама формула такова:

=ЕСЛИ(СТОЛБЕЦ(A:A)>ДЛСТР($A1);»";B1 &ПСТР($A1;ДЛСТР($A1)+1-СТОЛБЕЦ(A:A);1))

Слово в ячейке A1, B1 должна быть пустой, а уже с B3 начинается формула.
http://www.excel-vba.ru/tag/rabota-s-tekstom/
код для VBA там же
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 10.03.2013, 21:20   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вадим, ты слегка не прав
Наверное, всё-таки надо так :
Swap написать, думаю, не составит труда..
Код:
n:=length(st);

for i:=1 to (n div 2) do
	Swap(st[i],st[n-i+1]);
Poma][a вне форума Ответить с цитированием
Старый 10.03.2013, 21:44   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Роман
Блин, точно, Swap. И чего это меня дёрнуло написать присваивание...?
Вот что бывает, когда не пользуешься компиляторами.

да, а если воспользоваться тем кодом с ошибкой, то мы получим на выходе симметричную строку:
На входе: 12345
На выходе будем иметь: 54345
Вадим Мошев вне форума Ответить с цитированием
Старый 10.03.2013, 21:52   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вадим, а мне что-то сразу не понравился один оператор присваивания.. Решил я всё это загнать в компилятор. Лень было напистаь 12345 или abсd, и я взял пример ТС : город - дорог.. Твоя программа выдавала 'дород'. Потом я пять минут плясал с +1 и -1, пока до меня не дошло
Poma][a вне форума Ответить с цитированием
Старый 10.03.2013, 22:07   #7
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

еще вариант (Ексель)
модуль
Код:
Function rvs$(s$)
rvs = StrReverse(s)
End Function
Лист формула А2 =rvs(A1)
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переставить в обратном порядке столбцы mimit Помощь студентам 1 30.11.2012 00:06
Как переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами? xEk Помощь студентам 1 09.05.2012 21:20
Переставить элементы массива в обратном порядке Mayers Общие вопросы C/C++ 3 06.05.2012 12:15
Переставить слова в предложении в обратном порядке TLiX Помощь студентам 1 31.03.2012 19:57
Переставить строки в обратном порядке на фортране Александррррррр Помощь студентам 0 18.12.2011 19:38