26.06.2009, 00:08 | #1 (permalink) |
Новичок
Регистрация: 17.06.2009
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль. Помогите.
1)Как задать количество символов в строковой переменной? 2)Напишите программу шифрования текстового сообщения. Можно использовать следующий способ шифрования: шифровальщик задает ключ=3, тогда в тексте буква «а» заменяется на «г» и т. д. Используются все буквы русского алфавита. Е считается дважды. заранее очень благодарен!!! =) |
26.06.2009, 00:08 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ваш вопрос похож на содержание данных обсуждений Помогите решить. Паскаль Паскаль. Помогите срочно Помогите с лабораторкой, Паскаль Помогите разобраться, Паскаль Помогите решить задачи на Паскаль Помогите решить задачу в Паскаль |
26.06.2009, 12:03 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
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. Но если такой вариант не годится, и подразумевается через массивы с тупым перечислением литер (вообще-то вроде так, если судить по "е дважды") - напишите. |
|
26.06.2009, 22:53 | #3 (permalink) |
Member
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я вот не пойму почему в обоих программах ты сначало пишешь ReSet, а потом ReWrite,вроде бы должно быть наоборот,он как раз и выдает ошибку на этом месте в программах..
И вроде бы эти команды на файлы,а не на строки... |
27.06.2009, 10:15 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
1. Конечно "на файлы"! Разберем подробно. Задача: считать содержимое ИМЕЮЩЕГОСЯ на диске файла, затем СОЗДАТЬ НОВЫЙ ФАЙЛ, и в этот новый файл записать некую информацию. В Паскале это решается так: а) В перечне VAR объявляются две файловые переменные - у меня f и f1. б) Командой Assign каждая из них связывается с реальным (существующим или создаваемым) файлом на диске компьютера. в) Если требуется ЧИТАТЬ содержимое файла, то используется команда ReSet(f). Эта команда осуществляет две операции - открывает файл на диске для чтения и устанавливает маркер в самое начало файла. Если требуется произвести ЗАПИСЬ в файл на диске, то используется команда ReWrite(f1). Работает так: если файл существует, то полностью стирается его содержимое, если нет - то файл создается, после чего маркер устанавливается в начало файла, т.е. файл готов к записи. 2. Насчет ошибок. Обе программы оттестированы, никаких ошибок в них нет. А у Вас ошибка возникает вот почему. Программа 1 предполагает, что исходный текст расположен на диске D: в файле по имени d1. На Вашем компьютере имя и расположение может быть другим. Поэтому чтобы эта программа работала, нужно: а) Заранее создать файл с текстом, который будет кодироваться. б) Прописать в команде Assign(f, ...) путь к этому файлу и его имя. в) Аналогично в команде Assign(f1, ...) прописать путь и имя кодированного файла. Создавать его не нужно - сам создастся. В программе 2 так же, за исключением того, что файл создавать не нужно, она работает с тем, который создала программа 1, а вот пути прописать необходимо. Вероятно Вы не создали файл, не прописали пути. Отсюда и ошибки. |
|
27.06.2009, 20:14 | #5 (permalink) |
Member
Регистрация: 16.06.2009
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
пасибо,все работает,на будущее буду знать как делать,но мне нужно написать программу на строки,а не на файлы...
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
27.06.2009, 20:52 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Что-й то я малость заплутал... SvarovskI и DjDeniels-61 это что - одно лицо? Заказ-то делал SvarovskI, а приемку осуществляет DjDeniels-61. ЧуднО.
А что значит "на строки"? Способ ввода сообщения с консоли? Поясните, пожалуйста. |
28.06.2009, 17:41 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|