Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
И еще. Моя функция rev_each_word выше читает память по другому, и делает printf. Как написать функцию kat которая будет принимать имя функции rev_each_word , и записывать в строку все printf от нее ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ не хочу идти даже до половины строки для реверса чудес не бывает, нужен алгоритм. Предложи алгоритм как перевернуть последовательность из 5 элементов меньше чем за 2 действия, при этом за один шаг менять можно только любые два. 12345hello Вышеописанные алгоритмы (<=> значит обменять значения) Шаг 1. [1] <=> [5] Шаг 2. [2] <=> [4] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:55 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryда, вспомнил, я ошибся насчет КиР. Вы правы ! Пересматривал 12 стульев недавно, и запомнилась фраза про радикально черный-цвет усов :D Есть ли другой метод ? Я не хочу идти даже до половины строки для реверса, я хочу сделать это в 10 раз быстрее и не в лоб. Как ? Это возможно ? конечно возможно с помощью оптического процессора - один квант и отражение от зеркала дает реверс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 16:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Сейчас, как я понял, для реверса нужно n/2 итераций по две замены в каждой, кстати, может быть быстрее 1 итерация с n заменами сразу, но не суть. Возможно для n= 10^20 f e существует другой алгоритм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:04 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
У меня уже закрываются глаза..завтра буду читать про квант. Спасибо всем C: Спокойных выходных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:07 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ еще. Моя функция rev_each_word выше читает память по другому, и делает printf. Как написать функцию kat которая будет принимать имя функции rev_each_word , и записывать в строку все printf от нее ? Можно, но это очень нездоровый путь, т.к. писать выведенное надо будет в другое место (другой массив), проще сразу писать в другой массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:14 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryзавтра буду читать про квант. Так мы тебя лет на ...дцать потеряем Вот тебе пища для размышлений на выходные :) Изучай рекурсию Код: plaintext 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. Красиво, но неэффективно с точки зрения производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 17:24 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСейчас, как я понял, для реверса нужно n/2 итераций по две замены в каждой, кстати, может быть быстрее 1 итерация с n заменами сразу, но не суть. Возможно для n= 10^20 f e существует другой алгоритм Как бы меньше чем за O(N) не получится. N или N/2. Это конечно хорошо бы формально доказать, но так навскидку вполне очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 20:13 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZiv, что здесь формально доказывать, что нужно (int)(N/2) обменов? Как ни крути, O(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 20:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Тут не обойтись без гипотезы Пуанкаре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 21:59 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковMasterZiv, что здесь формально доказывать, что нужно (int)(N/2) обменов? Как ни крути, O(N) Да, что нужно N/2 обменов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:00 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
На ограниченном множестве {X} можно построить дешифратор и минимизировать его. Какой будет O(n) - Х.З. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:02 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
maytonНа ограниченном множестве {X} можно построить дешифратор и минимизировать его. Какой будет O(n) - Х.З. Кстати, а если n операций запустить параллельно в n потоках, то сложность такого алгорима будет уже О(1) или все-таки еще О(n)? Что там математика про распараллеливание говорит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:14 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Теория алгоритмов эту тему не рассматривает. Но есть IMHO смежные области, которые смотрят в Сети-Петри, Марковские процессы и прочее. P.S. И еще IMHO это экстенсивное развиние It. Поэтому неправославно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2014, 22:34 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, сам запуск N/2 потоков имеет сложность O(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 13:51 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
MasterZivКак бы меньше чем за O(N) не получится. N или N/2. Это конечно хорошо бы формально доказать, но так навскидку вполне очевидно. Реверс за О(1): Код: plaintext 1. 2. Правда заработает только на армах . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2014, 14:19 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Анатолий Широков Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Я вновь вернулся к вашему коду. Переписал его по своему. Алгоритм хороший. а)Но мне не понравилось что интервал полузакрытый, я понимаю что вы вероятнее всего сделали это для Си-строк, чтобы не учитывать конец строки автоматом. Но всё же, мне кажется лучше функция реверса для закрытого участка байт. б)У K&R тоже реализация через for, но мне кажется while будет красивее, ибо в коде Код: plaintext 1. легче допустить ошибку. Хотя, опять таки это вероятно мне легче допустить ошибку, а для остальных в сообществе это очевидно. Потому в корректности данного комментария я не уверен. И потому это просто моё мнение C: в) обратил внимание на участок кода в for Код: plaintext 1. те фактически я постоянно объявляю новую переменную t, мне кажется что объявление лучше сделать выше. До цикла. В связи с моими наблюдениями я решил переписать код(точнее я написал его до вас, а потом посмотрел как сделали вы, но ничего не работало из константного массива символом, и мне пришлось более детально разобрать и ваш и мой код) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1. Как лучше инициализировать объект char ? (я знаю что все элементы надо/желательно инициализировать) Сейчас попробую кое-что сделать, позже выложу. Заключение: Рассуждения выше, ни в коем случае не есть критика вашего кода. Ибо я понимаю, что вы написали чтобы помочь, и не стремясь к идеалам по качеству кода. Но тем не менее мне интересно имеют ли мои комментарии право на жизнь, либо они идут от того что я пока слишком слабо понимаю Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 04:33 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
PS Ошибка выше. Забыл убрать char temp в цикле Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 06:40 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
next PS. Лишняя итерация while(start<=end) Надо так. //реверс закрытого промежутка байт [start,end] void reverse(char* start, char* end) //адрес первого и последнего байта { char temp = 'a'; /*1.1-1.2*/ while (start<end) { char temp = *start; *start = *end; *end = temp; ++start; --end; } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 06:54 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS Ошибка выше. Забыл убрать char temp в цикле Правильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. И инициализация (= 'a') не имеет никакой полезной нагрузки, просто будут выполнены бесполезные действия. Твой код работать будет, но лучше так написать Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 07:17 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_TПравильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. Но я ведь постоянно обновляю новую переменную, постоянно прошу компилятор выделить для неё память ?Или нет ? Я понимаю что лучше объявлять переменную в месте её первого использования, но мне казалось что когда диалог доходит до циклов, это правило немного меняется, и переменную лучше объявить перед началом цикла. Dima_TИ инициализация (= 'a') не имеет никакой полезной нагрузки, просто будут выполнены бесполезные действия. Понимаю Вас. Но может в дальнейшем при поиске ошибок я бы увидел что в какой переменной char всегда хранится 'a', и я подумал бы тогда, я ведь не инициализировал её, в том смысле я бы знал что при объявлении переменных типа char по дефолту будет 'a'(всегд буду инициализировать переменные при объявлении определённым числом/кодом). Может быть это излишки. Дописал функцию принимающую указатель на начало строки и делающую инверсию каждого слова в строке. Код: plaintext 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. Теперь нужно внимательно изучить код Анатолия Широкова и ваш ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:15 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
SashaMercuryDima_TПравильнее оставить его в цикле. Как выше писали не надо давать переменной область видимости больше чем это требует алгоритм. Но я ведь постоянно обновляю новую переменную, постоянно прошу компилятор выделить для неё память ?Или нет ? Нет. Компилятор сам "догадывается" что не надо выделять память каждый раз. Если посмотреть во что компилируются оба варианта то видно что там одно и тоже (при отладке правая кнопка "go to disassembly") Выделение памяти под локальные переменные происходит в момент компиляции, в код вписывается что-то типа "использовать 20ю ячейку стэка под переменную temp", а сам код делает примерно следующее Код: plaintext 1. 2. 3. т.е. в процессе выполнения никаких операций по выделению/освобождению памяти не происходит. Точнее при старте программы выделяется память под стек и далее используется под все локальные переменные. Компилятор просто собирает код так чтобы в 20ю ячейку ничего не было записано пока используется переменная temp. Отсюда также вытекает что объявив temp за циклом ты запрещаешь использовать 20ю ячейку на протяжении выполнения всей функции. В общем пока не заморачивайся. Будешь следить за выделением/освобождением памяти когда явно будешь использовать выделение памяти calloc(), malloc(), new и т.д. SashaMercury... при поиске ошибок я бы увидел что в какой переменной char всегда хранится 'a', и я подумал бы тогда, я ведь не инициализировал её... Инициализируй лучше нулем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:47 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
В твоей функции reverse_each_word() лишняя переменная range_e ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 09:50 |
|
||
|
Ошибки в функции реверса каждого слова строки
|
|||
|---|---|---|---|
|
#18+
Dima_TВ твоей функции reverse_each_word() лишняя переменная range_e Спасибо, и ещё одна ошибка была. Исправил Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2014, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38570105&tid=2019647]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 287ms |

| 0 / 0 |
