Тип Char
|
|
Сейчас прохожу тему с работой символов, прошел урок по теме Char, но не могу выполнить задание. Надо написать программу расшифровки 4-буквенного однословного сообщения. Для получения 4 букв нужно ввести 3 строки. Далее расшифровать полученные четыре буквы по такому алгоритму: вместо первой и третьей букв подставить соответственно буквы, отстоящие от них по алфавиту на две буквы назад, а вторую и четвертую буквы оставить без изменения. Для проверки дали пример, ввод трех строк: FINISHED OR PENDING? С обычной расшифровкой у меня вышло FOPE, тупо первые символы высветились, но никак не могу сделать правильный вывод, должно вывестись DONE. Вот код с которым у меня выходит FOPE, скажите, что нужно дописать для правильного завершения задания: Code var A,B,C,D: char; begin writeln('вести символы'); readln(A); writeln(A); writeln('ввести еще символы'); readln(B); writeln(B); writeln('ввести еще несколько символов'); readln(C,D); writeln(C,D); writeln('конечный шифр - ',A,B,C,D); readln end.
№ 1 | Автор: женек |
2012-09-07, 19:03
--------->
|
|
|
Во первых - я задания не понял..
Чар - это переменная для одного символа.Т.е. вписывать туда ты можешь что угодно, но в той переменной будет записан лишь первый символ..
Если не тяжело: Объясни задание "на пальцах": разъясню что и как... По твоему коду: Что ты делаешь: Считал строку символов, думая что там все символы, хотя в переменной А остался самый первый символ Считал строку символов, думая что там все символы, хотя в переменной Б остался самый первый символ Считал строку символов, думая что там все символы, хотя в переменной Ц и Д остались самые первые символы Вывел на экран АБЦД
Т.е. Если бы ввод был таким: Qwerty Wertyu ERttyu То вывод был таким: QWER
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (женек) Во первых - я задания не понял..
Чар - это переменная для одного символа.Т.е. вписывать туда ты можешь что угодно, но в той переменной будет записан лишь первый символ..
Если не тяжело: Объясни задание "на пальцах": разъясню что и как... По твоему коду: Что ты делаешь: Считал строку символов, думая что там все символы, хотя в переменной А остался самый первый символ Считал строку символов, думая что там все символы, хотя в переменной Б остался самый первый символ Считал строку символов, думая что там все символы, хотя в переменной Ц и Д остались самые первые символы Вывел на экран АБЦД
Т.е. Если бы ввод был таким: Qwerty Wertyu ERttyu То вывод был таким: QWER Ну смотри, замени слова Qwerty Wertyu ERttyu на мои: Finished Or PEnding У тебя выйдет FOPE, а мне надо изменить код так, чтобы выдавало не FOPE, а DONE. То есть вместо F должно быть D, вместо P надо выводить N, а O и P оставить на месте, чтобы при тех же фразах вместо FoPe выводило DoNe. Если еще точнее, то надо поменять две буквы. В учебнике есть функции Pred и Succ. В описание написано, что одна функция возвращает предшествующий элемент, а вторая возвращает последующий элемент. Добавив в код A:=Pred(A) у меня вместо F в слове FINISHED стала выводиться E,а мне надо изменить на D.
№ 3 | Автор: женек |
2012-09-07, 22:06
--------->
|
|
№ 3 | Автор: женек |
2012-09-07, 22:06
--------->
|
|
|
пред - даёт тебе предыдущее значение, по алфавиту предыдущая от Ф - Е, так что выдаёт оно тебе правильно букву Е. Также- если А=5, а ты напишешь А:=pred(A); Ты получишь А = 4. Как я понял задание: Нужно вывести последнюю букву первого слова, потом первую букву второго, после третюю букву третего и вторую третего.. Правильно?
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) Нужно вывести последнюю букву первого слова, потом первую букву второго, после третюю букву третего и вторую третего.. Правильно? Да.
№ 5 | Автор: женек |
2012-09-08, 17:13
--------->
|
|
|
Как я понял из задания то брать надо: из 1 предложения - 1 букву (a), из 2 -1 (b), из 3 -1,2 (c,d). Затем изменяем А и С на буквы стоящие перед ними через 1, относительно алфавита, а не предложения. Если так то код будет следующим: program slova; uses crt; var a,b,c,d:char; a1,c1:integer; begin writeln('Vvedite 1 stroku'); readln(a); writeln('Vvedite 2 stroku'); readln(b); writeln('Vvedite 3 stroku'); readln(c,d); a:=pred(pred(a)); c:=pred(pred(C)); writeln (a,b,c,d); readkey; end.
|
|
|
Quote (HWOARANG) Как я понял... Правильно понял и сделал тоже правильно, спасибо. Только я не понял как пользоваться функцией Pred, я прошу у вас правильный ответ когда подумав сам так и не смог понять, а сравнив свой код с вашим, понимаю где ошибки и как правильно делать. А тут не понял... Можете мне привести несколько примеров или сказать как правильно работает функция Pred, вот ты написал a:=pred(pred(a)); и стала выявляться буква предшествующая через одну букву назад по алфавиту, а как сделать,чтобы например при таком же слове выводилась не D, а E,C,G или H? Ну, чтобы я понял суть функций Pred и Succ.
№ 7 | Автор: женек |
2012-09-08, 20:03 | Изменено: женек - Сб, 2012-09-08, 20:04
--------->
|
|
|
функция pred возвращает предыдущий элемент (это не обязательно элемент алфавита, может быть множество и т.д.), а функция succ возвращает элемент следующий по списку. Объясню на примере алфавита: A, B,C,D,E,F,G и т.д. Перед буквой F стоит E. То есть результатом строки a:=pred(a); будет буква E, а результатом строки a:=succ(a); будет G Строку a:=pred(pred(a)); Можно расписать на 2 строки, более понятные: a:=pred(a); //была F - стала E a:=pred(a); //была E - стала D
|
|
|
Теперь понял, большое спасибо за объяснение.
№ 9 | Автор: женек |
2012-09-11, 17:52
--------->
|
|
|
"Спасибо" принимается в виде повышения репутации ( Зелёный плюсик:) ).
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Пока я разбирался с компом пришлось на пару дней забросить изучение азов программирования. Открыл последнее задание (которое вы мне уже объяснили в этой теме) и снова "завис" на нем... вы мне дали код как правильно из слов finished or pending вместо первых символов вывести предыдущие, но вот, что мне стало не понятно Code program slova; uses crt; var a,b,c,d:char; a1,c1:integer; begin writeln('Vvedite 1 stroku'); readln(a); writeln('Vvedite 2 stroku'); readln(b); writeln('Vvedite 3 stroku'); readln(c,d); a:=pred(pred(a)); c:=pred(pred(C)); writeln (a,b,c,d); readkey; end. Функция a:=pred(pred(a)); выявила на экран не символ F? а символ стоящий на две буквы назад по алфавиту. Вопросы: Код a:=pred(pred(a)); вывел букву стоящую от F на два знака назад по алфавиту то есть D, а как сделать, чтобы вывел из этого слова (FINISHED) букву S, тоже меняя буквы по алфавиту? Так же в вашем коде знаки заменяют следующие и предыдущие по алфавиту, введя a:= pred (a) покажется буква предыдущая F по алфавиту (E), а как прописать код, чтобы выводил последующие и предыдущие знаки не по алфавиту, а поочередно слову, чтобы у меня предыдущая стояла Е, а не D. Если написал не понятно, то мне надо,чтобы при использовании функции pred эта функция вывела предыдущую букву слова, а не алфавита.
№ 11 | Автор: женек |
2012-09-15, 19:52
--------->
|
|
|
Хорошо, что последние слова написал)) Учи строки, свойства и действия над ними.. В кратце: var //поле для объявления переменных s:string; //объявляем переменную s begin //начало работы программы readln(s); //считываем строку writeln(s[5]); //выводим на экран 5-й элемент этой строки end. //конец работы программы
Т.е. ты сможешь обращаться к элементам слова побувенно, а не поалфавитно)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Что-то я не то сделал. Напоминаю, что мне из слов finished or pending надо вывести фразу "DONE" я уже сделал как надо по заданию, использовав код который вместо первой и третьей букв подставит соответственно буквы отстоящие от них по алфавиту, но для закрпления материала решил еще подставить буквы использовав замену не по алфавиту. Вообщем прочитал то, что написал Berestovskiy, но что-то не получилось, фраза "done" не вывелась. Вот код: Code var a,b,c,d:string; begin writeln ('ведите 1 строку'); readln (a); writeln ('ведите 2 строку'); readln (b); writeln ('введите 3 строку'); readln (c,d); readln (a[8]); readln (c[3]); write(a,b,c,d); readln end. Какие ошибки я допустил?
№ 13 | Автор: женек |
2012-09-15, 21:44
--------->
|
|
|
ахахах)) очень даже забавно)) смотри: var a,b,c:string; begin writeln('Введите 1-ю строку'); readln(a); writeln('Введите 2-ю строку'); readln(b); writeln('Введите 3-ю строку'); readln(c); writeln(a[length(a)],b[1],c[3],c[2]); end.
Что-бы понять в чём суть - почитай лекцию по строкам, думаю разберёшься
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) Что-бы понять в чём суть - почитай лекцию по строкам, думаю разберёшься В интернете можно найти такую видео лекцию нормальную? А то сам искал везде надо скачивать видео, при этом надо платить за просмотр. еще мне не понятно, что в твоем коде значит: a[length(a)] почему там как и с другими переменными не стоит ["число"] P.S. И если не сложно найди мне такую лекцию в онлайн, мало того, что я нахожу только платные так я не знаю, что именно мне надо там, о чем должны рассказывать)
№ 15 | Автор: женек |
2012-09-15, 23:25 | Изменено: женек - Сб, 2012-09-15, 23:28
--------->
|
|
№ 15 | Автор: женек |
2012-09-15, 23:25 | Изменено: женек - Сб, 2012-09-15, 23:28
--------->
|
|
|
гугли, гугли и ещё раз гугли) скачай пару книг по ТП, поройся там, поищи на ютубе.. [quote=женек]еще мне не понятно, что в твоем коде значит: a[length(a)] [/quote] length - это одно из свойств строк, которое возвращает значение длинны строки.. т.е.: если строка будет такой: a:='qwerty'; то значение length(a) будет = 6. Просто я за ранее не мог знать какой длинна будет первого слова, вот для этого и использовал именно такое свойство:)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
А если строка будет такой: a:='qwerty1'; то значение length(a) будет = 7. Я правильно понял? И на какую именно тему мне искать лекции, что в гугле и ютубе вводить?
№ 17 | Автор: женек |
2012-09-15, 23:44 | Изменено: женек - Сб, 2012-09-15, 23:45
--------->
|
|
|
Да, всё правильно понял) Ищи лучше книгу, там всё по пунктам разбито не зря) Как раз повторишь может то что уже прошёл, может чего нового там найдёшь и будешь учить дальше))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Хотел начать проходить новую тему, но перед этим попытался ответить на контрольный вопросы... Прочитав вопросы я понял, что тему о-о-о-о-очень хреново понял, не ответил не на один из вопросов( Можете дать мне на них ответы, чтобы тему разобрать еще раз?) Я уверен, что для вас эти ответы проще-простого. 1. Сколько всего различных символов кодируется таблицей ASCII? 2. Какой объем памяти требуется для кодирования одного символа? А 15 символов? 3. Какой тип данных в Паскале предназначен для хранения символьной информации? Сколько символов можно поместить в одну переменную этого типа? 4. Какой код у буквы «F»? Какой символ кодируется кодом 87? 5. В программе определены 3 переменные (a,b,c:char;). В ответ на инструкцию readln(b,а,с); пользователь ввел текст Леша. В каком месте памяти оказалась каждая из введенных букв? 6. Каков будет результат выполнения инструкции c:=succ(pred(succ('D')))? 7. Какое значение получит переменная i в операторе i := pred(ord('F’) - 2)? Если вопросы действительно легкие прошу не смеяться, что я их не разобрал. Все же я сам учу паскаль, а самому без объяснения это трудно.
№ 19 | Автор: женек |
2012-09-16, 12:36
--------->
|
|
|
На большинство: google.com На те которые с кодом: У тебя ест компилятор, заходи, тестируй, проверяй:)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|