Аноним | Вход | зарегистрировать новую учетную запись | 2024-12-22 13:47 MSK |
моя сводка | список инцидентов | журнал изменений | план развития | моя учетная запись |
Просмотр подробностей проблемы [ перейти к комментариям ] | [ история изменений ] [ печать ] | ||||||||
Номер | Проект | Категория | Видимость | Создан | Изменен | ||||
0000077 | FireURQ | интерпретатор | общая | 2009-08-29 22:05 | 2009-09-05 10:49 | ||||
Инициатор | Best | ||||||||
Ответственный | fireton | ||||||||
Приоритет | обычный | Серьезность | малая | Воспроизводимость | всегда | ||||
Состояние | закрыт | Решение | решен | ||||||
Платформа | Операционная система | Версия ОС | |||||||
Версия продукта | 1.0.6 | ||||||||
Целевая версия | 1.0.7 | Решен в версии | 1.0.7 | ||||||
Суть | 0000077: Действия с длиной строки | ||||||||
Подробности | Не уверен баг это или нет, но я получаю вот такой результат: instr x=k pln #%x$ #x$ #x+1$ >>k 1 1 Когда хочу получить такой: >>k 1 2 Прав я или урка? | ||||||||
Метки | Нет прикрепленных меток. | ||||||||
Вложенные файлы | |||||||||
Комментарии | |
(0000092) Nolite (инициатор) 2009-08-30 00:02 |
Может, это прояснит ситуацию: instr x=k pln #%x$ #x$ # #x$+1$ #%x+1$ >>k 1 2 k |
(0000093) fireton (администратор) 2009-08-30 00:45 |
Наверное, прав ты. Будем посмотреть. |
(0000094) frodo (инициатор) 2009-08-30 01:08 изменен: 2009-08-30 01:18 |
Конструкцию " #x+1$ " фурка и досурка обрабатывают одинаково. Разница только в том, что для фурки х=1 (длина строковой переменной), а для досурки х=0 (для любой строки). "1" в ответе фурки означает, что при сложении строковой и численой переменной строковая не изменилась (как и должно быть), и ее длина по-прежнему равна одному символу А вот конструкцию #%x+1$ досурка не понимает (в отличие от фурки!), ей нужно что-то вроде y = x + 1 pln #%y$ только тогда выводится "k". Так что, получается, фурка ведет себя даже лучше(?) досурки. Права урка! |
(0000095) Best (инициатор) 2009-08-30 10:31 |
>pln #%x$ #x$ # #x$+1$ #%x+1$ про # #x$+1# я знаю, но это выглядит как-то нелепо, к тому же легко написать ##x$+1$, что вызовет ошибку >при сложении строковой и численой переменной строковая не изменилась (как и должно быть), и ее длина по-прежнему равна одному символу я ведь не пытаюсь изменить длину, я пытаюсь всего лишь вывести число равное длине плюс адин |
(0000096) frodo (инициатор) 2009-08-30 10:55 изменен: 2009-09-04 16:16 |
UPD: Давай по-порядку. Что происходит, если интерпретатор встречает "#x+1$" ? 1. Берет значение х. Как видно из программы, х = "k". 2. Складывает строку "k" с числовой константой 1. А как представить текстом число? Тут есть два варианта: 3а. Пустой строкой, как любую необъявленную переменную, т.е. имеем выражение "k" + "" = "k". Тогда длина строки "#x+1$" будет равна длине строки "k", т.е. единице. 3б. Соотв. символом, в нашем случае "1". Тогда да, x+1 = "k1", и его длина #x+1$ = len("k1") = 2. Но тогда и #x+2$ = len("k2") = 2; где len() - длина строки. IMHO, результат программы -- это случай 3а. 3б. -- это бесполезный теоретический вариант. UPD(2): А "длина строки плюс один" это #x$+1, заключенное в #$, т.е. ##x$+1$. |
(0000104) fireton (администратор) 2009-09-04 16:33 |
Короче вот что. Решатель видел, что первое значение - строка и включал режим сложения строк. Второе значение он пытался тоже представить строкой. Но строковое представление числа - пустая строка (так в досурке). Поэтому результатом получалось первоначальное значение ("k"). Теперь режим сложения строк включается только в случае, если оба операнда - строки. В противном случае он включает режим сложения чисел. А числовое значение строки - всегда длина строки (в фурке). Поэтому результат будет правильный. |
история изменений | |||
Дата изменения | Пользователь | Поле | Изменить |
2009-08-29 22:05 | Best | Новый инцидент | |
2009-08-29 22:05 | Best | Ответственный | => fireton |
2009-08-30 00:02 | Nolite | Комментарий добавлен: 0000092 | |
2009-08-30 00:45 | fireton | Комментарий добавлен: 0000093 | |
2009-08-30 00:45 | fireton | Состояние | новый => назначен |
2009-08-30 00:45 | fireton | Целевая версия | => 1.0.7 |
2009-08-30 01:08 | frodo | Комментарий добавлен: 0000094 | |
2009-08-30 01:09 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 01:10 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 01:18 | frodo | Комментарий изменен: 0000094 | |
2009-08-30 10:31 | Best | Комментарий добавлен: 0000095 | |
2009-08-30 10:55 | frodo | Комментарий добавлен: 0000096 | |
2009-08-31 17:23 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 13:49 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 16:16 | frodo | Комментарий изменен: 0000096 | |
2009-09-04 16:33 | fireton | Комментарий добавлен: 0000104 | |
2009-09-04 16:33 | fireton | Состояние | назначен => отработан |
2009-09-04 16:33 | fireton | Решен в версии | => 1.0.7 |
2009-09-04 16:33 | fireton | Решение | открыт => решен |
2009-09-05 10:49 | fireton | Состояние | отработан => закрыт |
Copyright © 2000 - 2024 MantisBT Team |