IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

4 страниц V < 1 2 3 4 >  
 Ответить  Открыть новую тему 
> символьный тип даных
сообщение
Сообщение #21


Гость






он вообще странноватый если честно, Мама мыла р и если нажали инсерт то надо вывести пробел
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


тут смысл фразы "заданный символ не на последнем месте" что за буквой есть хотя-бы 1 символ чтоб его считать

Сообщение отредактировано: Shurik_123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Правильно ли я понял, что Ins является признаком конца текста, вводимого с клавиатуры? (вместо обычного в таких случаях Enter)

Если "да", то задание можно сделать двумя способами:

1. Сначала ввести текст (в массив или строку), затем просмотреть его С КОНЦА и вывести символ, следующий за ПЕРВЫМ ВСТРЕЧЕННЫМ ключевым символом.
2. Построить конечный автомат, который будет анализировать входящие символы, запоминать состояния и нужные символы, следить за окончанием ввода, а по окончании - выводить нужную информацию.

Первый вариант проще, но требует памяти для хранения текста, второй - сложнее, но не имеет ограничений по объему вводимого текста.
Который выберем?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


1 вариант есть вот он
uses crt;
var
a:string;
s,k:char;
i,nomer:integer;
begin
writeln('vvedite bukvu');
readln(k);
writeln('vvedite stroku do ins');
repeat
s:=readkey;
write(s);
a:=a+s;
until s=#82;
writeln;
for i:=1 to length(a) do
if a[i]=k then nomer:=i;
writeln('sleduyushaya bukva=',a[nomer+1]);
readln;
end.

препод сказал так нельзя поэтому 2 вариант нужен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


1 вариант есть вот он
uses crt;
var
a:string;
s,k:char;
i,nomer:integer;
begin
writeln('vvedite bukvu');
readln(k);
writeln('vvedite stroku do ins');
repeat
s:=readkey;
write(s);
a:=a+s;
until s=#82;
writeln;
for i:=1 to length(a) do
if a[i]=k then nomer:=i;
writeln('sleduyushaya bukva=',a[nomer+1]);
readln;
end.

препод сказал так нельзя поэтому 2 вариант нужен, правда он корявый(1 вариант) так как я его не доделывал препод пресек этот метод в стадии написания
прохя заметил то что a:string; и сказал что это ты пишешь? надо только char использовать, а этот метод(первый) я тебе не зачту

Сообщение отредактировано: Shurik_123 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вообще-то программа содержит ошибку. В частности, она будет заканчивать ввод не только по клавише "Ins", но и по символу "R", т.к. его код как раз 82. Думаю, как с этим бороться, тебе известно, т.к. обработка такой ситуации предусмотрена в исходнике, который ты приводил ранее.
Еще одно замечаниме: я бы стал перебирать полученную строку с конца, а не с начала. Но, думаю, это непринципиально.
Итак, остается второй вариант.
Надеюсь, что такое конечный автомат, тебе известно. Если нет, можно почитать в Википедии: http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%BC%D0%B0%D1%82

Значит, нам надо отслеживать две ситуации:
- предыдущим был ключевой символ и нужно запомнить текущий,
- двухсимвольную комбинацию 0,82 - чтобы закончить ввод.

Какие бубут предложения по набору состояний автомата?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Цитата(andriano @ 25.12.2009 17:59) *


Надеюсь, что такое конечный автомат, тебе известно. Если нет, можно почитать в Википедии: http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%BC%D0%B0%D1%82

Значит, нам надо отслеживать две ситуации:
- предыдущим был ключевой символ и нужно запомнить текущий,
- двухсимвольную комбинацию 0,82 - чтобы закончить ввод.

Какие бубут предложения по набору состояний автомата?

увы не знаю и что-то непонял ничего из википедии(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Здорово - через 15 минут ответ: "ничего не понял".
Подумай еще, почитай что-нибудь, например, http://forum.shelek.ru/index.php/topic,4745.0.html , воспользуйся поиском...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


как я понимаю у меня будет три входных символа любой, инсерт, и заданный?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Вообще-то "инс" - это два символа подряд. А конечный автомат обрабатывает символы по одному, поэтому "инс" он должен обработать за два прохода.
Еще не следует путать входной алфавит конечного автомата с набором его состояний. Состояние определяется входным символом и предшествующим состоянием.
В принципе, в данном случае набор состояний также в значительной степени связан с предыдущим символом. Но в этот набор необходимо включить также начальное и конечное состояния.
Итак, состояния:
А - начальное,
Б - конечное,
В - после ключевого символа,
Г - после 0 символа - для распознавания "инс",
Д - после других символов.

И автомат должен предусматривать реакцию на следующие символы: 0, 82, ключевой, все остальные.

Постарайся сформулировать правила перехода из одного состояния в другие, исхордя из входного символа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Гость






админы закрывайте тему я забил на эту задачу, пошел он нгахер тварь эта пусть ставит не зачет и пусть не допускают к сессии и пусть выгоняют ят....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


А такой вариант не пойдёт? В одном цикле всё, с break... Условие выхода из цикла сделано лишь формально, до него исполнение не дойдёт.

uses crt;
var c,f:char;
s:string;
i,z:byte;
begin
writeln('Vvedite iskomiy simvol');
f:=readkey;
writeln('Teper popsimvolno vvodite stroku');
i:=1;
repeat
c:=readkey;
s[i]:=c;
inc(i);
if (c=f) then z:=i;
if (c=#0) then break;
until (c=#0);
writeln(s[z]);
readln;
end.



Правда, я не совсем уверен, верно ли сделал выход именно по клавише Insert...


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Unconnected @ 25.12.2009 21:24) *

А такой вариант не пойдёт? В одном цикле всё, с break... Условие выхода из цикла сделано лишь формально, до него исполнение не дойдёт.
Чудовищно.
Что интересно, "степень чудовищности" можно резко снизить, полностью убрав одну строку кода.
Но все равно остается непонятно, зачем использовать строку, если нужен лишь один символ. Ну и, опять же, наличие строки приводит к явному ограничению длины вводимого фрагмента текста 255 символами.
Цитата

Правда, я не совсем уверен, верно ли сделал выход именно по клавише Insert...
Неверно. Как я уже писал, Insert - последовательность двух кодов 0 и 82. А у тебя окончание ввода будет происходить по любой управляющей клавише: "стрелки", "Del", "End", "Home"...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Гость






Цитата
пусть ставит не зачет и пусть не допускают к сессии и пусть выгоняют
В твоем случае это действительно лучший вариант. Причем, не только для тебя, а еще и для тех, кто ХОЧЕТ научиться программировать, и ХОЧЕТ приложить хоть какие-то усилия. А ты сразу поднял руки и сдался. Естественный отбор. Не смог защититься - сожрали.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Чудовищно.
Что интересно, "степень чудовищности" можно резко снизить, полностью убрав одну строку кода.


Какую? И почему чудовищно?) Если ты о break;, так он вроде с ним и просил...

Цитата

Ну и, опять же, наличие строки приводит к явному ограничению длины вводимого фрагмента текста 255 символами.


Использование компьютера приводит к ограничению длины вводимого фрагмента текста xxxxxxx символами.smile.gif Это я к тому, что в условии не оговорен размер текста, а 100 символов это уже текст.

Кстати, про последовательность двух символов так и не понял. Получается, надо ловить так:

if (c=#0) then (c=#82) then break;


? Или сразу #0#82?

Цитата
Но все равно остается непонятно, зачем использовать строку, если нужен лишь один символ.


Ему сдавать завтра, думаешь, будет он с автоматами ковыряться? Думаю, лучше уж неоптимальное решение, синица в руках..

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #36


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Unconnected @ 25.12.2009 22:12) *
Использование компьютера приводит к ограничению длины вводимого фрагмента текста xxxxxxx символами.smile.gif Это я к тому, что в условии не оговорен размер текста, а 100 символов это уже текст.
Неправда, будучи правильно записанным этот алгоритм не имеет никаких ограничений на длину текста. Она может превышать объем оперативной памяти, объем жесткого диска, а также объем всех носителей информации на планете Земля.
Почему тогда не ограничить длину текста двумя символами, программа существенно упростится, т.к. по условию в тексте обязательно встречается ключевой символ и он не может быть последним, можно, не раздумывая, выводить на печать второй символ.
Цитата
Кстати, про последовательность двух символов так и не понял. Получается, надо ловить так:

if (c=#0) then (c=#82) then break;


? Или сразу #0#82?
Сам понял, что написал?
Если ты внимательно почитаешь тему, то обнаружишь, что как нужно поступать в данном случае, я уже написал в одном из предыдущих сообщений.
Цитата

Ему сдавать завтра, думаешь, будет он с автоматами ковыряться? Думаю, лучше уж неоптимальное решение, синица в руках..

Я думаю, что для всех будет лучше, если наши ВУЗы будут выпускать как можно меньше недоучек с дипломами. Либо пусть осваивает учебную программу, либо пусть его отчисляют. Увы, дано и третье, только это неправильно. sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #37


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну, тогда чтоб переплюнуть все носители на Земле, наверное надо так:

uses crt;
var c,f:char;
d:string[2];
begin
writeln('Vvedite iskomiy simvol');
f:=readkey;
writeln('Teper popsimvolno vvodite stroku');
repeat
c:=readkey;
if (c=f) then
begin
d:='';
d:=d+c;
c:=readkey;
if (c=#0) then break;
d:=d+c;
end;
until (c=#0);
writeln(d[2]);
readln;
end.





--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #38


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Так проще.
uses crt;
var c1,с2,f:char;
begin
writeln('Vvedite iskomiy simvol');
f:=readkey;
writeln('Teper popsimvolno vvodite stroku'); // а как ее еще можно вводить?
repeat
c1:=readkey;
if (c1=f) then
c2:=readkey;
until (c1=#0);
writeln(с2);
readln;
end.

Но это по-прежнему не решает проблему неверного условия окончания цикла (верный вариант я здесь публиковать не буду).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #39


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Но это по-прежнему не решает проблему неверного условия окончания цикла


Я знаю. Ты говорил, что в этом топе уже рассказывал, как правильно обрабатывать Insert. Если ты имеешь в виду это
Цитата

Вообще-то "инс" - это два символа подряд. А конечный автомат обрабатывает символы по одному, поэтому "инс" он должен обработать за два прохода.

, то у меня возникает вопрос, что значит обработать нажатие за два прохода?

Цитата
// а как ее еще можно вводить?


А вдруг кто-то придумает новый способ?) Эта надпись обработает такую ситуацию.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #40


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(Unconnected @ 25.12.2009 23:13) *
, то у меня возникает вопрос, что значит обработать нажатие за два прохода?
Мне кажется, достаточно ответить на вопросы:
А что значит "за один проход"?
Проход чего?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V < 1 2 3 4 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 21:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name