Работа с текстом..., помогите с алгоритмом.. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Работа с текстом..., помогите с алгоритмом.. |
Роман |
13.03.2011 12:13
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
Здравствуйте, нужна ваша помощь....
Вот текст задания: Составить алгоритм и программу обработки фразы (строки текста), находящемся в текстовом файле Inputtxt.txt. В результате работы программы в файле отчета необходимо в алфавитном порядке расположить буквы из которых состоит текст с их количеством. Пример: Содержание исходного файла Inputtxt.txt слово "МАМА" В результате работы программы получен файл следующего вида: Буква Количество А 2 М 2 (служебная информация, не более 2 байт для каждого символа фразы) В служебной информации должны быть закодированы (зашифрованы) данные о каждой букве фразы. В дальнейшем, при запуске этой программы входным файлом должен стать файл отчета со служебной информацией. В результате работы должен быть получен текст исходной фразы в файле с именем Output.txt Вот собственно начал писать программу:
То есть я описал массив, записал аски коды символов в него, собственно возникла проблема с подсчетом количества символов(символы как русские так и англ.), зашифровал я методом Atbash, думаю расшифровать смогу при повторном запуске программы, метку в виде звёздочек поставил, а вот как ее потом определить пока не думал Сообщение отредактировано: Роман - 13.03.2011 12:14 |
volvo |
13.03.2011 14:46
Сообщение
#2
|
Гость |
Цитата В служебной информации должны быть закодированы (зашифрованы) данные о каждой букве фразы. Это невозможно. Хочешь пример? Пожалуйста:В дальнейшем, при запуске этой программы входным файлом должен стать файл отчета со служебной информацией. В результате работы должен быть получен текст исходной фразы в файле с именем Output.txt А-1 Г-1 Р-1 У-1 Внимание, вопрос: какое слово было в исходном файле, УГАР, или РАГУ? То есть, я не спрашиваю у тебя, как вообще ты собираешься определять по такой скудной информации, какая буква на какой позиции стояла. Допустим, у тебя есть даже словарь русского языка, и сможешь определить список слов, которые можно составить, имея определенные буквы в определенном количестве. И даже в этом случае невозможно решить задачу, ибо омонимы будут мешать... А уж если несколько слов во входной фразе - то... Вывод: надо хранить не только данные, сколько каких букв было, но и какие-то данные о расположении тех или иных букв, какую-то доп. информацию... Уточняй задание. |
Роман |
15.03.2011 12:15
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
Вобщем уточнил: расположить надо не по алфавиту а по аски кодам что упрощает задачу. ( впринципе по алфавиту располагает, только знаки препинания ставит первыми)
Всем спасибо, подумал подумал и сделал сам, только в программе делается запрос: Расшифровать текст? если нажимаешь y -расшифровывает, если -n, то нет. Но преподаватель сказал что это не критично, так что лаба вроде бы готова!!! Даже не знаю нужно ли код выкладывать?))) P.S только одна проблема: у больших букв код Аски другой, поэтому программа считает большие и маленькие буквы отдельно думаю не критично, но хотелось бы избавиться от данной беды, или никак? Сообщение отредактировано: Роман - 15.03.2011 12:28 |
Lapp |
16.03.2011 5:09
Сообщение
#4
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вобщем уточнил: расположить надо не по алфавиту а по аски кодам что упрощает задачу. ( впринципе по алфавиту располагает, только знаки препинания ставит первыми) Непонятно. Проблема, о которой говорил volvo осталась, где и была. Поясни, плз, как ты из этого:А 2 М 2 - делаешь МАМА? Почему не АМАМ или АММА? Цитата Всем спасибо, подумал подумал и сделал сам, только в программе делается запрос: Расшифровать текст? если нажимаешь y -расшифровывает, если -n, то нет. Но преподаватель сказал что это не критично, так что лаба вроде бы готова!!! Даже не знаю нужно ли код выкладывать?))) Заинтриговал.. Не понимаю, как запрос помогает расшифровке. Да, я хотел бы увидеть код, если это возможно, пожалуйста. Просто для того, чтоб понять условие задачи.Цитата P.S только одна проблема: у больших букв код Аски другой, поэтому программа считает большие и маленькие буквы отдельно думаю не критично, но хотелось бы избавиться от данной беды, или никак? Если рассчитывать только на латинский алфавит, то это просто. Используй функцию UpCase(c:char):char из модуля System (который подключен всегда по умолчанию).А если ты хочешь иметь дело с русскими буквами тоже, то несколько сложнее, и тому же зависит от кодовой страницы (1251, 866..) Если тебе это действительно нужно - скажи, объясним. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Роман |
16.03.2011 14:51
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
все-таки хотелось бы чтобы программа расшифровывала данные после 2 го запуска. Как ни пытался сделать условие, что при прочтении файла log.txt (там появляются знаки ******), если есть эти символы(*) то начать расшифровывать... но чтото при запуске программа выдавала ошибку
|
Lapp |
16.03.2011 15:07
Сообщение
#6
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Ага, ясно.. Я невнимательно читал просто. Восстановление текста производится не по частотам символов, а по "служебной информации" в конце файла )).
все-таки хотелось бы чтобы программа расшифровывала данные после 2 го запуска. Как ни пытался сделать условие, что при прочтении файла log.txt (там появляются знаки ******), если есть эти символы(*) то начать расшифровывать... но чтото при запуске программа выдавала ошибку Ты все же непонятно изъясняешься. Ты правда думаешь, что мы можем указать на ошибку, когда ты пишешь "но чтото при запуске программа выдавала ошибку". Ни кода, ни даже номера ошибки.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Роман |
16.03.2011 16:09
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
короче отказался я от идеи считывать "здездочки", так как считаю это невозможным все-таки
и последний вопрос: можно сделать так, чтобы допустим когда возникает ошибка, программа не закрывалась, а выдавала текстовое сообщение и только после нажатия клавиши закрывалась? Допустим отсутствует файл input.txt. Программа сразу не закрывается а выдает сообщение что файл отсутствует. P.S чуть попозже выложу весь код... |
Unconnected |
16.03.2011 16:27
Сообщение
#8
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Посмотри тут.
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Lapp |
16.03.2011 16:28
Сообщение
#9
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
короче отказался я от идеи считывать "здездочки", так как считаю это невозможным все-таки и последний вопрос: можно сделать так, чтобы допустим когда возникает ошибка, программа не закрывалась, а выдавала текстовое сообщение и только после нажатия клавиши закрывалась? Допустим отсутствует файл input.txt. Программа сразу не закрывается а выдает сообщение что файл отсутствует. P.S чуть попозже выложу весь код... Search the forum "+compiler* +direct*" (in russian), or just "{$I-}" -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
-Дмитрий- |
5.05.2011 16:35
Сообщение
#10
|
Гость |
Если не сложно выложите окончательный вариант кода
|
techno |
21.05.2011 5:52
Сообщение
#11
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: 1 |
Вот идеально выполненное задание.)))
P.S. это я Роман, просто пароль забыл))) и простите что так долго, программу написал давным давно, но руки не доходили выложить... Сообщение отредактировано: techno - 21.05.2011 6:57 |
Lapp |
21.05.2011 6:25
Сообщение
#12
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Вот идеально выполненное задание. Ха ). Ты зайди сюда через пару годиков, когда поднатореешь в программировании - улыбнешься своему абсолютизму.. )) До идеальности ему так же далеко, как Жигулям до Тоеты )). Меня особо улыбнуло
A[i]:=A[i]+1, легко заменяемое на Inc(A[i]). Причем, есго нужно ставить только один раз (после перевода). Условие and (i<=255)тоже выглядит странно, если учесть, что номер символа просто не бывает больше 255 . Ну, я не буду проводить полный разбор.. Но в целом все же неплохо! А главное - молодец, что вернулся и запостил код , +1. Цитата P.S. это я Роман, просто пароль забыл))) Выслать на мыло? Пиши мне в личку.-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
-TarasBer- |
21.05.2011 11:49
Сообщение
#13
|
Гость |
> if (i>=224) and (i<=255) then begin
> if (i=184) then begin > if (i>=97) and (i<=122) then begin Что такое 224,255,184,97,122? |
Роман |
22.05.2011 8:14
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
> if (i>=224) and (i<=255) then begin > if (i=184) then begin > if (i>=97) and (i<=122) then begin Что такое 224,255,184,97,122? 1) Диапазон аски кодов маленьких русских букв. 2) Аски код маленькой буквы ё 3) Диапазон аски кодов маленьких английских букв Далее идет смещение акси кодов до аски кодов больших букв. Делается это для того, чтобы большие и маленькие буквы считались вместе, а не по отдельности... |
Lapp |
22.05.2011 10:11
Сообщение
#15
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
1) Диапазон аски кодов маленьких русских букв. 2) Аски код маленькой буквы ё 3) Диапазон аски кодов маленьких английских букв Далее идет смещение акси кодов до аски кодов больших букв. Делается это для того, чтобы большие и маленькие буквы считались вместе, а не по отдельности... Роман, ты не понял. Тарас прекрасно знает коды всех букв (может, наизусть). Он имел в виду, что так писать нельзя, иначе потом в коде сам не разберешься. Желательно все эти величины занести в константы и в коде использовать уже их. Типа так: constИли как-то иначе, но смысл в том, что желательно не использовать голые числа. Правда, лично я особо на это в данном случае не стал бы нажимать, поскольку по крайней мере все это прокомментировано. Не знаю, понял ты или нет, но назвав свой код идеальным, ты просто должен был ожидать поток подколок ). Так что, пожинай плоды )) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
22.05.2011 10:38
Сообщение
#16
|
Гость |
> Тарас прекрасно знает коды всех букв (может, наизусть)
Давно забыл, на самом деле. > Rus866StartHigh= 224; Почему никто не напишет просто 'а'..'я'? Зачем вообще эти цифры тут нужны? |
Роман |
22.05.2011 11:30
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Реальное имя: Роман Репутация: 0 |
|
Lapp |
23.05.2011 10:21
Сообщение
#18
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Почему никто не напишет просто 'а'..'я'? Зачем вообще эти цифры тут нужны? Пишут )). Сам я всегда так делал. Но если открыть потом этот код в western или еще в какой-нить кодировке, становится совсем ничего неясно )). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 27.04.2024 12:03 |