символьный тип даных |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
символьный тип даных |
Гость |
Сообщение
#21
|
Гость |
он вообще странноватый если честно, Мама мыла р и если нажали инсерт то надо вывести пробел
|
Shurik_123 |
Сообщение
#22
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
тут смысл фразы "заданный символ не на последнем месте" что за буквой есть хотя-бы 1 символ чтоб его считать
Сообщение отредактировано: Shurik_123 - |
andriano |
Сообщение
#23
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Правильно ли я понял, что Ins является признаком конца текста, вводимого с клавиатуры? (вместо обычного в таких случаях Enter)
Если "да", то задание можно сделать двумя способами: 1. Сначала ввести текст (в массив или строку), затем просмотреть его С КОНЦА и вывести символ, следующий за ПЕРВЫМ ВСТРЕЧЕННЫМ ключевым символом. 2. Построить конечный автомат, который будет анализировать входящие символы, запоминать состояния и нужные символы, следить за окончанием ввода, а по окончании - выводить нужную информацию. Первый вариант проще, но требует памяти для хранения текста, второй - сложнее, но не имеет ограничений по объему вводимого текста. Который выберем? |
Shurik_123 |
Сообщение
#24
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
1 вариант есть вот он
uses crt; препод сказал так нельзя поэтому 2 вариант нужен |
Shurik_123 |
Сообщение
#25
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
1 вариант есть вот он
uses crt; препод сказал так нельзя поэтому 2 вариант нужен, правда он корявый(1 вариант) так как я его не доделывал препод пресек этот метод в стадии написания прохя заметил то что a:string; и сказал что это ты пишешь? надо только char использовать, а этот метод(первый) я тебе не зачту Сообщение отредактировано: Shurik_123 - |
andriano |
Сообщение
#26
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Вообще-то программа содержит ошибку. В частности, она будет заканчивать ввод не только по клавише "Ins", но и по символу "R", т.к. его код как раз 82. Думаю, как с этим бороться, тебе известно, т.к. обработка такой ситуации предусмотрена в исходнике, который ты приводил ранее.
Еще одно замечаниме: я бы стал перебирать полученную строку с конца, а не с начала. Но, думаю, это непринципиально. Итак, остается второй вариант. Надеюсь, что такое конечный автомат, тебе известно. Если нет, можно почитать в Википедии: http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%BC%D0%B0%D1%82 Значит, нам надо отслеживать две ситуации: - предыдущим был ключевой символ и нужно запомнить текущий, - двухсимвольную комбинацию 0,82 - чтобы закончить ввод. Какие бубут предложения по набору состояний автомата? |
Shurik_123 |
Сообщение
#27
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
Надеюсь, что такое конечный автомат, тебе известно. Если нет, можно почитать в Википедии: http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%BC%D0%B0%D1%82 Значит, нам надо отслеживать две ситуации: - предыдущим был ключевой символ и нужно запомнить текущий, - двухсимвольную комбинацию 0,82 - чтобы закончить ввод. Какие бубут предложения по набору состояний автомата? увы не знаю и что-то непонял ничего из википедии( |
andriano |
Сообщение
#28
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Здорово - через 15 минут ответ: "ничего не понял".
Подумай еще, почитай что-нибудь, например, http://forum.shelek.ru/index.php/topic,4745.0.html , воспользуйся поиском... |
Shurik_123 |
Сообщение
#29
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: 0 |
как я понимаю у меня будет три входных символа любой, инсерт, и заданный?
|
andriano |
Сообщение
#30
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Вообще-то "инс" - это два символа подряд. А конечный автомат обрабатывает символы по одному, поэтому "инс" он должен обработать за два прохода.
Еще не следует путать входной алфавит конечного автомата с набором его состояний. Состояние определяется входным символом и предшествующим состоянием. В принципе, в данном случае набор состояний также в значительной степени связан с предыдущим символом. Но в этот набор необходимо включить также начальное и конечное состояния. Итак, состояния: А - начальное, Б - конечное, В - после ключевого символа, Г - после 0 символа - для распознавания "инс", Д - после других символов. И автомат должен предусматривать реакцию на следующие символы: 0, 82, ключевой, все остальные. Постарайся сформулировать правила перехода из одного состояния в другие, исхордя из входного символа. |
Гость |
Сообщение
#31
|
Гость |
админы закрывайте тему я забил на эту задачу, пошел он нгахер тварь эта пусть ставит не зачет и пусть не допускают к сессии и пусть выгоняют ят....
|
Unconnected |
Сообщение
#32
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
А такой вариант не пойдёт? В одном цикле всё, с break... Условие выхода из цикла сделано лишь формально, до него исполнение не дойдёт.
Правда, я не совсем уверен, верно ли сделал выход именно по клавише Insert... -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
Сообщение
#33
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
А такой вариант не пойдёт? В одном цикле всё, с break... Условие выхода из цикла сделано лишь формально, до него исполнение не дойдёт. Что интересно, "степень чудовищности" можно резко снизить, полностью убрав одну строку кода. Но все равно остается непонятно, зачем использовать строку, если нужен лишь один символ. Ну и, опять же, наличие строки приводит к явному ограничению длины вводимого фрагмента текста 255 символами. Цитата Правда, я не совсем уверен, верно ли сделал выход именно по клавише Insert... |
volvo |
Сообщение
#34
|
Гость |
Цитата пусть ставит не зачет и пусть не допускают к сессии и пусть выгоняют В твоем случае это действительно лучший вариант. Причем, не только для тебя, а еще и для тех, кто ХОЧЕТ научиться программировать, и ХОЧЕТ приложить хоть какие-то усилия. А ты сразу поднял руки и сдался. Естественный отбор. Не смог защититься - сожрали. |
Unconnected |
Сообщение
#35
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата Чудовищно. Что интересно, "степень чудовищности" можно резко снизить, полностью убрав одну строку кода. Какую? И почему чудовищно?) Если ты о break;, так он вроде с ним и просил... Цитата Ну и, опять же, наличие строки приводит к явному ограничению длины вводимого фрагмента текста 255 символами. Использование компьютера приводит к ограничению длины вводимого фрагмента текста xxxxxxx символами. Это я к тому, что в условии не оговорен размер текста, а 100 символов это уже текст. Кстати, про последовательность двух символов так и не понял. Получается, надо ловить так: if (c=#0) then (c=#82) then break; ? Или сразу #0#82? Цитата Но все равно остается непонятно, зачем использовать строку, если нужен лишь один символ. Ему сдавать завтра, думаешь, будет он с автоматами ковыряться? Думаю, лучше уж неоптимальное решение, синица в руках.. Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
Сообщение
#36
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Использование компьютера приводит к ограничению длины вводимого фрагмента текста xxxxxxx символами. Это я к тому, что в условии не оговорен размер текста, а 100 символов это уже текст. Неправда, будучи правильно записанным этот алгоритм не имеет никаких ограничений на длину текста. Она может превышать объем оперативной памяти, объем жесткого диска, а также объем всех носителей информации на планете Земля.Почему тогда не ограничить длину текста двумя символами, программа существенно упростится, т.к. по условию в тексте обязательно встречается ключевой символ и он не может быть последним, можно, не раздумывая, выводить на печать второй символ. Цитата Кстати, про последовательность двух символов так и не понял. Получается, надо ловить так: Сам понял, что написал?if (c=#0) then (c=#82) then break; ? Или сразу #0#82? Если ты внимательно почитаешь тему, то обнаружишь, что как нужно поступать в данном случае, я уже написал в одном из предыдущих сообщений. Цитата Ему сдавать завтра, думаешь, будет он с автоматами ковыряться? Думаю, лучше уж неоптимальное решение, синица в руках.. Я думаю, что для всех будет лучше, если наши ВУЗы будут выпускать как можно меньше недоучек с дипломами. Либо пусть осваивает учебную программу, либо пусть его отчисляют. Увы, дано и третье, только это неправильно. |
Unconnected |
Сообщение
#37
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Ну, тогда чтоб переплюнуть все носители на Земле, наверное надо так:
uses crt; -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
Сообщение
#38
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Так проще.
uses crt;Но это по-прежнему не решает проблему неверного условия окончания цикла (верный вариант я здесь публиковать не буду). |
Unconnected |
Сообщение
#39
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата Но это по-прежнему не решает проблему неверного условия окончания цикла Я знаю. Ты говорил, что в этом топе уже рассказывал, как правильно обрабатывать Insert. Если ты имеешь в виду это Цитата Вообще-то "инс" - это два символа подряд. А конечный автомат обрабатывает символы по одному, поэтому "инс" он должен обработать за два прохода. , то у меня возникает вопрос, что значит обработать нажатие за два прохода? Цитата // а как ее еще можно вводить? А вдруг кто-то придумает новый способ?) Эта надпись обработает такую ситуацию. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
andriano |
Сообщение
#40
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
|
Текстовая версия | 19.04.2024 21:14 |