Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ символьный тип даных

Автор: Shurik_123 24.12.2009 19:41

Известно, что во вводимом тексте встречается заданная буква, причем не на последнем месте. Требуется вывести символ этого текста, который непосредственно следует за последним вхождением этой буквы. Ввод продолжать до нажатия ‘Ins’ на дополнительной клавиатуре.
помогите плиз

Автор: andriano 24.12.2009 21:21

Покажи, что сделал, и напиши, что именно не получается.

Автор: Shurik_123 24.12.2009 22:06

я вообще смысл заания не понял дать хоть намек в какую сторону идти и что вообще делать надо


Var ch: Char;
k: integer;
Begin
Read(ch);
k:=0;
While ch<>#10 Do
Begin

очень срочно надо последняя работа чтоб зачет получить(

Автор: andriano 24.12.2009 23:05

Я, кстати, по твоему описанию тоже не понял. Не мог бы ты привести точный текст задания?

Автор: Shurik_123 24.12.2009 23:12

Цитата(andriano @ 24.12.2009 19:05) *

Я, кстати, по твоему описанию тоже не понял. Не мог бы ты привести точный текст задания?

это задание так звучит в методичке
другой формулировки нет
вогт ворд с заданием у мя 15 вариант

Автор: andriano 25.12.2009 0:32

1. Символ, я так понимаю, вводится с клавиатуры. А откуда берется строка?

2. Вот представь, что строка написана на листе бумаге и тебе самому нужно выполнить задание вручную. Что бы ты стал делать?

Автор: Гость 25.12.2009 0:55

1 набираешь символы в ряд и выходит строка)
2 сначала бы исключил все буквы которые встречаются перед пробелом , а потом по идеии должна остаться буква или несколько и написать букву которую стоит после нее наверно так, но я не уверен

Автор: Shurik_123 25.12.2009 0:57

это я был забыл зайти)

Автор: andriano 25.12.2009 1:06

Цитата(Гость @ 24.12.2009 20:55) *

1 набираешь символы в ряд и выходит строка)
Т.е. также вводится с клавиатуры?
Цитата

2 сначала бы исключил все буквы которые встречаются перед пробелом , а потом по идеии должна остаться буква или несколько и написать букву которую стоит после нее наверно так, но я не уверен
В условии я не обнаружил слова "пробел". С чего бы это?

Еще раз: пусть у нас есть фраза "Мама мыла раму", а ключевой символ "а". Что необходимо сделать?

Автор: Shurik_123 25.12.2009 1:22

по идеии вывести букву м из слова раМу

Добавлено через 1 мин.
да текст вводится с клавиатуры, и че то я действительно сочинил про пробел

Автор: TarasBer 25.12.2009 1:30

Цитата(Shurik_123 @ 24.12.2009 21:22) *

по идеии вывести букву м из слова раМу


А почему не пробел после слова "мыла"?
КАК ты определил, что надо вывести именно эту букву?

Автор: Shurik_123 25.12.2009 1:33

символ этого текста, который непосредственно следует за последним вхождением этой буквы, последняя а стоит перед м в слове раму

Добавлено через 1 мин.
мне что то стало более понятно а как сделать чтоб он считал а находил последню из них?

Автор: TarasBer 25.12.2009 3:11

Цитата(Shurik_123 @ 24.12.2009 21:33) *

последняя а стоит перед м в слове раму


А я считаю, что последняя "а" в словы "мыла". Почему это не так?
Пока не научишься смотреть на своё мышление со стороны, формализуя его, вычленяя из мыслей чёткий алгоритм - ничего не напишешь.

Автор: Shurik_123 25.12.2009 18:30

крочь я понял задание
выберается буква и надо вывести символ стояший за ней после ее последнего ввода
например выбрали буву z а строка выглядит вот так
adszcdewzpoytz823
то я должен вывести 8.
я вот что написал:

Program pr8;
Uses
Crt;
Var
k,c,c1 : char;
l : boolean;
Begin
writeln(' vvedite zadanyiy bykvy');
readln(k);
Writeln('Symbola');
Writeln('===========');
While true do
begin
C:=readkey;
write©;
if c<>#0 then
begin
if (k=c) then
begin
textcolor(lightblue);
c1:=c;
L:=True
end
else
begin
textcolor(white);
L:=False
end;
end
else
begin
c:=readkey;
if c=#82then
begin
textcolor(yellow);
writeln(с1);
break;
textcolor(yellow);
writeln(с1);
end
end;
end;
Readln;
End.

и тут надо кроче сделать так чтоб с1 он передавал символ после последнего повторения симвлола обозначенного переменой K , т.е который будет окрашен последним

Автор: andriano 25.12.2009 19:42

Давай еще раз перечитаем условие и сравним с тем, что содержится в приведенной программе.
Вопрос первый: в условии просили раскрашивать символы разным цветом? А зачем ты это делаешь?
Вопрос второй: тебе никто не говорил, что конструкция "while true do", обязательно требующая в теле цикла "break" или "goto" является дурным стилем, и ее нужно избегать?
И, кстати, сюда же: ты в курсе, что операторы, стоящие после "break" НИКОГДА не будут выполнены? Так зачем же их писать?
Вопрос третий: ты пытаешься произвести разбор вводимого текста одновременно с его вводом. Скажи, млжно ли, еще до того, как текст введен целиком, точно определить ПОСЛЕДНЕЕ вхождение какого-либо символа? Или ты всерьез намерен написать программу, обладающую телепатическими способностями?

Давай вернемся к началу.
Ты совершенно верно указал, какую букву надо выводить в "Мама мыла раму". Попытайся теперь восстановить и описать словами алгоритм, по которому ты лично действовал, когда решал эту задачу (т.е. искал нужную букву).

Автор: Гость 25.12.2009 20:08

1 раскрасить препод седня на паре попросил для наглядности
2 говориkb , но препод сам сказал писать через break а про то что надо до него писать то это я когда копировал часиями строки местами перепутал
а как еще можно эту чушь сделать не используя строку это условие лабы, у меня есть со стпрокой решение я его давно написал но он не принимает требует такой вариант( через char)

Автор: Гость 25.12.2009 20:12

3 алгоритм такой был нашел последнюю встречающуюся а и посмотрел на следующий символ и записал его вот такой алгоритм

Автор: Shurik_123 25.12.2009 20:16

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

Автор: Гость 25.12.2009 21:02

так обидно из-за этой чужи вылететь из универа((((((((, но оно так и выходит(

Автор: andriano 25.12.2009 21:13

Странный какой-то у вас препод. Первый раз слышу, чтобы просили с break.

Так еще раз: как без телепатии, не имея ПОЛЬНОСТЬЮ текста, можно определить последнее вхождение какого-либо символа?
Например, ты ужеполучил "Мама мыла р". Как ты узнаешь, пора уже выводить следующий за "а" символ или нужно ждать очередную "а"?

Автор: Гость 25.12.2009 21:25

он вообще странноватый если честно, Мама мыла р и если нажали инсерт то надо вывести пробел

Автор: Shurik_123 25.12.2009 21:27

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

Автор: andriano 25.12.2009 21:41

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

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

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

Первый вариант проще, но требует памяти для хранения текста, второй - сложнее, но не имеет ограничений по объему вводимого текста.
Который выберем?

Автор: Shurik_123 25.12.2009 21:49

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 вариант нужен

Автор: Shurik_123 25.12.2009 21:49

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 использовать, а этот метод(первый) я тебе не зачту

Автор: andriano 25.12.2009 21:59

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

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

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

Автор: Shurik_123 25.12.2009 22:14

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


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

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

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

увы не знаю и что-то непонял ничего из википедии(

Автор: andriano 25.12.2009 22:19

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

Автор: Shurik_123 25.12.2009 22:37

как я понимаю у меня будет три входных символа любой, инсерт, и заданный?

Автор: andriano 25.12.2009 23:08

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

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

Постарайся сформулировать правила перехода из одного состояния в другие, исхордя из входного символа.

Автор: Гость 25.12.2009 23:58

админы закрывайте тему я забил на эту задачу, пошел он нгахер тварь эта пусть ставит не зачет и пусть не допускают к сессии и пусть выгоняют ят....

Автор: Unconnected 26.12.2009 1: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...

Автор: andriano 26.12.2009 1:50

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

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

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

Автор: volvo 26.12.2009 2:08

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

Автор: Unconnected 26.12.2009 2:12

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


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

Цитата

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


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

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

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


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

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


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

Автор: andriano 26.12.2009 2:22

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

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


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

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

Я думаю, что для всех будет лучше, если наши ВУЗы будут выпускать как можно меньше недоучек с дипломами. Либо пусть осваивает учебную программу, либо пусть его отчисляют. Увы, дано и третье, только это неправильно. sad.gif

Автор: Unconnected 26.12.2009 2:51

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

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.




Автор: andriano 26.12.2009 3:06

Так проще.

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.

Но это по-прежнему не решает проблему неверного условия окончания цикла (верный вариант я здесь публиковать не буду).

Автор: Unconnected 26.12.2009 3:13

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


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

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

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

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


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

Автор: andriano 26.12.2009 3:17

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

Автор: Unconnected 26.12.2009 3:19

Насколько я понял, ты имел в виду цикл. Т.е. обработать за две итерации.

Автор: andriano 26.12.2009 14:56

Естественно.
Правда, это было написано для реализации конечным автоматом. Т.к. предложенная тобой реализация таковой, строго говоря, не является, то логичнее делать проверку в один проход.
Да и вообще, конечный автомат в основном позволяет на этапе проектирования предусмотреть ВСЕ варианты поведения при различных входных данных, в том числе и недопустимых, и, таким образом, еще и диагностировать ошибки.
На практике же построенный (на бумаге) конечный автомат затем упрощают и оптимизируют. В частности, отходят от требования обрабатывать один символ за один проход цикла.
В той раскладке, кстати, которую я ранее приводил, целесообразно объединить начальное состояние с состоянием после "других" клавиш и таким образом таблица состояний будет иметь вид:
0 - после "других" клавиш, начальное,
1 - после ключевой клавиши,
2 - после 0 (т.е. ловим код управляющей клавиши),
3 - конечное.

По горизонтали - входные символы, по вертикали - состояния.

Код
+---+------+----------+---+----------+
|   | 0    | 82       | f |другой    |
+---+------+----------+---+----------+
| 0 | 2    | 0        | 1 | 0        |
|   | нет  |нет       |нет|нет       |
+---+------+----------+---+----------+
| 1 | 0    | 0        | 1 | 0        |
|   |ошибка|запоминаем|нет|запоминаем|
+---+------+----------+---+----------+
| 2 | 0    | 3        | 0 | 0        |
|   |ошибка|нет       |нет|нет       |
+---+------+----------+---+----------+
| 3 | -    | -        | - | -        |
+---+------+----------+---+----------+
По этому автомату в принципе тоже можно написать довольно громоздкую программу с вложенными case.

Автор: Гость 26.12.2009 20:27

volvo ты мне скажи зачем геофизику програмирование???
и я над этой задачкой дня три сидел, а не сразу сдался

Автор: Unconnected 26.12.2009 20:50

Если в курсе есть программирование, значит, это кому-нибудь нужно... rolleyes.gif

Ну решение в теме есть, тебе только надо сделать выход именно по Insert.

Автор: andriano 26.12.2009 21:07

Цитата(Гость @ 26.12.2009 16:27) *

volvo ты мне скажи зачем геофизику програмирование???
и я над этой задачкой дня три сидел, а не сразу сдался

1. Ты ведь хочешь получить диплом о ВЫСШЕМ образовании и даже не задумываешься, а чем, собственно, отличается высшее образование от среднего специального. Объясныть я это сейчас тебе не буду. Долго слишком. Надеюсь, лет через 15 сам поймешь. Если, конечно, будешь стремиться выучиться, а не просто получить диплом.

2. Я, например, решаю задачи в области геофизики, и использую для этого численное моделирование физических процессов, которое, в свою очередь, невозможно без программирования.

3. Я наблюдал за твоими сообщениями тоже дня 3. И заметил, что тебе было лень даже написать что-то длиннее одной строки. На мои вопросы ответить не пытался, разобраться с приведенными ссылками не удосужился...

Автор: Гость 26.12.2009 21:48

3. Я наблюдал за твоими сообщениями тоже дня 3. И заметил, что тебе было лень даже написать что-то длиннее одной строки. На мои вопросы ответить не пытался, разобраться с приведенными ссылками не удосужился...
это я не отвечал на твои воппросы?
это я написал не больше одной строки? а то что я выложил два варианта своей работы в которой явно больше 1 строки
и я посмотрел те сылки что ты мне дал, там все слишком запутано, если бы сейчас не был декабрь я бы обязательно разобрался, а сейчас у меня просо не хватает времени!!!! така по все предметам зачетные контрольные и к ним надо готовится

Автор: Гость 26.12.2009 21:50

Unconnected, спасибо но ваш вариант не подходит так как вы используете строчный тип string

Автор: Shurik_123 26.12.2009 22:03

andriano, просто вы видели какие задание дал препод другим там чтоб написать минут 3 понадобится , а мне ерунду эту(
задание вот к примеру
1. Вводить символы с клавиатуры. Присвоить логической переменной L значение ‘true’, если выполняются указанные условия, и значение ‘false’ иначе:
• значением L является символ '*';
• значением L является символ 'а';
• значением L является цифра..
вот решение:

program LAB8moe;
uses crt;
var c: char;
L:boolean;
begin
clrscr;
textcolor(3);
writeln('simvol | L');
writeln('==============');
repeat
c:=readkey;
if (c='*') or (c='a') or ( (ord©>=48) and (ord©<=57) ) then
begin
L:=true;
writeln (c,' | ',L)
end
else begin
L:=false;
writeln (c,' | ',L)
end;
until c=#79;
writeln('==============');
readkey
end.

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


М
Тэги!


Автор: andriano 26.12.2009 22:21

Мне кажется, из программы нужно убрать все лишнее.

program LAB8moe;
uses crt;
var
c : char;
L : boolean;
begin
writeln('simvol | L');
writeln('==============');
repeat
c:=readkey;
L := (c='*') or (c='a') or (c in ['0'..'9']);
writeln (c,' | ',L)
until c=#79;
writeln('==============');
readkey
end.

Ты что-то путаешь. В частности, строковый и символьный типы данных.
В любом случае, если возникают какие-либо сомнения, текст условия нужно приводить ДОСЛОВНО.

Автор: Гость 26.12.2009 22:35

ничего я не путаю на название не обращай внимание я просто свою неправильную переделал под другой вариант а моя это та с выводом последующего символа... там в задании даже есть слово строка значит оно должно решаться черз строковый тип string, а не через символьный char как он это требует

Автор: Unconnected 27.12.2009 1:05

Цитата
Unconnected, спасибо но ваш вариант не подходит так как вы используете строчный тип string


У меня, наверное, на аватаре крупными буквами написано ЭКСТРАСЕНС, раз ты считаешь, что я могу догадаться, какой тип надо использовать? Или в первом посте это дописано очень мелким шрифтом?

Автор: Гость 27.12.2009 1:27

Unconnected у вас не написано на аве что вы экстрасенс, но я считаю что судя из заголовка темы символьный тип даных понятно что задачу через символьный тип решать надо

Автор: Unconnected 27.12.2009 1:33

Там и слово данных с одной Н, а я всё равно буду с двумя писать;)

Вариант andriano первой задачи, если ты не заметил, использует символы.

Автор: Гость 27.12.2009 1:39

не спорю но надо же , чтоб он выводил эту строчку, а тогда по его алгоритму он пропускает этот символ и не пишет его в строке

Автор: Unconnected 27.12.2009 2:09

Сложно сделать вывод символа?

Автор: Гость 27.12.2009 2:23

  repeat
c1:=readkey;
write(c1){ выводит се символы в строчку}
if (c1=f) then
c2:=readkey;{ считывает символ идущий за заданным, но не вносит в стоку}
until (c1=#0);
writeln(с2);

и тогда выходит что в строке стоит не тот символ который он считал

Автор: Unconnected 27.12.2009 2:24

Или я туплю, или одно из двух.

Автор: Гость 27.12.2009 2:31

ну вот пример что делает этот цикл вот я выбрал букву z аданой тогда потом набираю следующие
asdfzxcvbn инсерт
он вот что выведет строку asdfzcvbn
а затем запишет что за заданм символом стоит x
а на самом деле выходит с

Автор: Unconnected 27.12.2009 2:44

Сделал вывод символов для кода andriano, всё работает. Больше ничего не добавлял.

uses crt;
var c1,c2,f:char;
begin
writeln('Vvedite iskomiy simvol');
f:=readkey;writeln(f);
writeln('Teper popsimvolno vvodite stroku');
repeat
c1:=readkey;
write(c1);
if (c1=f) then
begin
c2:=readkey;
write(c2);
end;
until (c1=#0);
writeln;
writeln(c2);
readln;
end.


Автор: Гость 27.12.2009 2:50

точно, спасибо вам большое, теперь век жизни буду вам благодарен

Автор: Lapp 27.12.2009 11:29

Цитата(Гость @ 26.12.2009 22:50) *
точно, спасибо вам большое, теперь век жизни буду вам благодарен

Считаю это просьбой поднять рейтинг andriano (+1) и Unconnected (+1).
Shurik_123, если ты ты не забывал логиниться постоянно, ты ьы сейчас и сам имел возможность сделать это лично.

Автор: Shurik_123 27.12.2009 14:11

именно так, им по +1
и тут небольшое добавление есть вот если считываемый символ равен задому, то повторять считывание с2)

program laba8;
uses crt;
var c1,c2,f:char;
begin
textcolor(yellow);
textbackground(red);
clrscr;
writeln('Vvedite iskomiy simvol');
f:=readkey;writeln(f);
writeln('Teper popsimvolno vvodite stroku');
repeat
c1:=readkey;
write(c1);
if (c1=f) then
begin
repeat
c2:=readkey;
write(c2);
until c2<>f;
end;
until (c1=#0);
writeln;
writeln(c2);
readln;
end.

Автор: Unconnected 27.12.2009 14:27

Я так понял, ты хотел сказать, что при некоторых входных данных программа работает неправильно?smile.gif При каких?

Автор: andriano 27.12.2009 14:45

Цитата(Гость @ 26.12.2009 18:35) *

ничего я не путаю на название не обращай внимание я просто свою неправильную переделал под другой вариант а моя это та с выводом последующего символа... там в задании даже есть слово строка значит оно должно решаться черз строковый тип string, а не через символьный char как он это требует

Знаешь, в любом языке (будь то русский или Паскаль) есть определенные правила, которых необходимо придерживаться.
При нарушении этих правил для Паскаля компилятор сообщит об ошибке.
При нарушении правил русского языка текст сообщения становится непонятен читателю.
Пожалуйста, не забывай знаки препинания, особенно точки, иначе твой текс становится совершенно нечитаемым.

Автор: Shurik_123 27.12.2009 14:55

Цитата
Я так понял, ты хотел сказать, что при некоторых входных данных программа работает неправильно? При каких?

в последней с циклом учтены все условия) , а в передыдущиу при вводе двух заданных символах он бы выводил заданный), но я это исправил вставив цикл
repeat
c2:=readkey;
write(c2);
until c2<>f;

Цитата
Знаешь, в любом языке (будь то русский или Паскаль) есть определенные правила, которых необходимо придерживаться.
При нарушении этих правил для Паскаля компилятор сообщит об ошибке.
При нарушении правил русского языка текст сообщения становится непонятен читателю.
Пожалуйста, не забывай знаки препинания, особенно точки, иначе твой текст становится совершенно не читаемым.

хорошо . учту в дальнейшем.

Автор: Unconnected 27.12.2009 14:57

Ага, вот теперь понятно)