Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 26.06.2009, 00:08   #1 (permalink)
SvarovskI
Новичок
 
Регистрация: 17.06.2009
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Паскаль. Помогите.

помогите плиз с паскале,задача на строки:

1)Как задать количество символов в строковой переменной?

2)Напишите программу шифрования текстового сообщения. Можно использовать следующий способ шифрования: шифровальщик задает ключ=3, тогда в тексте буква «а» заменяется на «г» и т. д. Используются все буквы русского алфавита. Е считается дважды.


заранее очень благодарен!!! =)
SvarovskI вне форума   Ответить с цитированием

Старый 26.06.2009, 00:08
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваш вопрос похож на содержание данных обсуждений

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

Старый 26.06.2009, 12:03   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от SvarovskI Посмотреть сообщение
помогите плиз с паскале,задача на строки:

1)Как задать количество символов в строковой переменной?

2)Напишите программу шифрования текстового сообщения. Можно использовать следующий способ шифрования: шифровальщик задает ключ=3, тогда в тексте буква «а» заменяется на «г» и т. д. Используются все буквы русского алфавита. Е считается дважды.

заранее очень благодарен!!! =)
1) Просто указать в явном виде при задании переменной, например
VAR
S1:STRING[5];
S2:STRING[18];
и т.п. Если не ошибаюсь, допустимо до 255 символов.

2) Вот нарисовал:

I) Шифратор (кодировка DOS; файлы расположены на диске D: , исходный текст в файле D:\d1. Исправьте, как Вам надо):

CONST
Shift=3;
VAR
Ch:CHAR;
N:BYTE;
f,f1:TEXT;
BEGIN
Assign(f,'D:\d1');
ReSet(f);
Assign(f1,'D:\d2');
ReWrite(f1);
REPEAT
Read(f,Ch);
IF (ORD(Ch)>127) AND (ORD(Ch)<160-Shift) THEN
Write(f1, CHR(ORD(Ch)+Shift)) ELSE
IF (ORD(Ch)>159-Shift) AND (ORD(Ch)<160) THEN
Write(f1, CHR(ORD(Ch)-32+Shift)) ELSE
IF (ORD(Ch)>159) AND (ORD(Ch)<176-Shift) THEN
Write(f1, CHR(ORD(Ch)+Shift)) ELSE
IF (ORD(Ch)>175-Shift) AND (ORD(Ch)<176) THEN
Write(f1, CHR(ORD(Ch)+48+Shift)) ELSE
IF (ORD(Ch)>223) AND (ORD(Ch)<240-Shift) THEN
Write(f1, CHR(ORD(Ch)+Shift)) ELSE
IF (ORD(Ch)>239-Shift) AND (ORD(Ch)<240) THEN
Write(f1, CHR(ORD(Ch)-80+Shift)) ELSE
Write(f1,Ch);
UNTIL EoF(f);
Close(f);
Close(f1);
END.

II) Дешифратор:

CONST
Shift=3;
VAR
Ch:CHAR;
N:BYTE;
f,f1:TEXT;
BEGIN
Assign(f,'D:\d2');
ReSet(f);
Assign(f1,'D:\d3');
ReWrite(f1);
REPEAT
Read(f,Ch);
IF (ORD(Ch)>127+Shift) AND (ORD(Ch)<160) THEN
Write(f1, CHR(ORD(Ch)-Shift)) ELSE
IF (ORD(Ch)>127) AND (ORD(Ch)<128+Shift) THEN
Write(f1, CHR(ORD(Ch)+32-Shift)) ELSE
IF (ORD(Ch)>159+Shift) AND (ORD(Ch)<176) THEN
Write(f1, CHR(ORD(Ch)-Shift)) ELSE
IF (ORD(Ch)>159) AND (ORD(Ch)<160+Shift) THEN
Write(f1, CHR(ORD(Ch)+80-Shift)) ELSE
IF (ORD(Ch)>223) AND (ORD(Ch)<224+Shift) THEN
Write(f1, CHR(ORD(Ch)-48-Shift)) ELSE
IF (ORD(Ch)>223+Shift) AND (ORD(Ch)<240) THEN
Write(f1, CHR(ORD(Ch)-Shift)) ELSE
Write(f1,Ch);
UNTIL EoF(f);
Close(f);
Close(f1);
END.

Но если такой вариант не годится, и подразумевается через массивы с тупым перечислением литер (вообще-то вроде так, если судить по "е дважды") - напишите.
Vladimir_S вне форума   Ответить с цитированием
Старый 26.06.2009, 22:53   #3 (permalink)
DjDeniels-61
Member
 
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я вот не пойму почему в обоих программах ты сначало пишешь ReSet, а потом ReWrite,вроде бы должно быть наоборот,он как раз и выдает ошибку на этом месте в программах..
И вроде бы эти команды на файлы,а не на строки...
DjDeniels-61 вне форума   Ответить с цитированием
Старый 27.06.2009, 10:15   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от DjDeniels-61 Посмотреть сообщение
Я вот не пойму почему в обоих программах ты сначало пишешь ReSet, а потом ReWrite,вроде бы должно быть наоборот,он как раз и выдает ошибку на этом месте в программах..
И вроде бы эти команды на файлы,а не на строки...
Так. По пунктам.
1. Конечно "на файлы"! Разберем подробно. Задача: считать содержимое ИМЕЮЩЕГОСЯ на диске файла, затем СОЗДАТЬ НОВЫЙ ФАЙЛ, и в этот новый файл записать некую информацию. В Паскале это решается так:
а) В перечне VAR объявляются две файловые переменные - у меня f и f1.
б) Командой Assign каждая из них связывается с реальным (существующим или создаваемым) файлом на диске компьютера.
в) Если требуется ЧИТАТЬ содержимое файла, то используется команда ReSet(f). Эта команда осуществляет две операции - открывает файл на диске для чтения и устанавливает маркер в самое начало файла. Если требуется произвести ЗАПИСЬ в файл на диске, то используется команда ReWrite(f1). Работает так: если файл существует, то полностью стирается его содержимое, если нет - то файл создается, после чего маркер устанавливается в начало файла, т.е. файл готов к записи.
2. Насчет ошибок. Обе программы оттестированы, никаких ошибок в них нет. А у Вас ошибка возникает вот почему. Программа 1 предполагает, что исходный текст расположен на диске D: в файле по имени d1. На Вашем компьютере имя и расположение может быть другим. Поэтому чтобы эта программа работала, нужно:
а) Заранее создать файл с текстом, который будет кодироваться.
б) Прописать в команде Assign(f, ...) путь к этому файлу и его имя.
в) Аналогично в команде Assign(f1, ...) прописать путь и имя кодированного файла. Создавать его не нужно - сам создастся.
В программе 2 так же, за исключением того, что файл создавать не нужно, она работает с тем, который создала программа 1, а вот пути прописать необходимо.
Вероятно Вы не создали файл, не прописали пути. Отсюда и ошибки.
Vladimir_S вне форума   Ответить с цитированием
Старый 27.06.2009, 20:14   #5 (permalink)
DjDeniels-61
Member
 
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

пасибо,все работает,на будущее буду знать как делать,но мне нужно написать программу на строки,а не на файлы...
DjDeniels-61 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 27.06.2009, 20:52   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Что-й то я малость заплутал... SvarovskI и DjDeniels-61 это что - одно лицо? Заказ-то делал SvarovskI, а приемку осуществляет DjDeniels-61. ЧуднО.
А что значит "на строки"? Способ ввода сообщения с консоли? Поясните, пожалуйста.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2009, 13:08   #7 (permalink)
DjDeniels-61
Member
 
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Решить задачу спомошью строк,а не файлов,вот в чем проблема...
А DjDeniels-61 это он же SvarovskI...
DjDeniels-61 вне форума   Ответить с цитированием
Старый 28.06.2009, 14:03   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от DjDeniels-61 Посмотреть сообщение
Решить задачу спомошью строк,а не файлов,вот в чем проблема...
А DjDeniels-61 это он же SvarovskI...
Тогда напишите толком, как вводится сообщение, подлежащее кодированию, и как выводится результат. Потому что "спомошью строк" - это я, извините, не понимаю.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.06.2009, 14:15   #9 (permalink)
DjDeniels-61
Member
 
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я к вам и обратился,потому что сам не знаю...а сдавать то надо как то...
DjDeniels-61 вне форума   Ответить с цитированием
Старый 28.06.2009, 17:41   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от DjDeniels-61 Посмотреть сообщение
я к вам и обратился,потому что сам не знаю...а сдавать то надо как то...
Ну а я откуда могу знать, что имел в виду Ваш преподаватель? Всё-таки, согласитесь, Вам виднее.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 03:44.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.