1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Здравствуйте, нужна ваша помощь.... Вот текст задания:
Составить алгоритм и программу обработки фразы (строки текста), находящемся в текстовом файле Inputtxt.txt. В результате работы программы в файле отчета необходимо в алфавитном порядке расположить буквы из которых состоит текст с их количеством. Пример: Содержание исходного файла Inputtxt.txt слово "МАМА" В результате работы программы получен файл следующего вида:
Буква Количество А 2 М 2 (служебная информация, не более 2 байт для каждого символа фразы)
В служебной информации должны быть закодированы (зашифрованы) данные о каждой букве фразы. В дальнейшем, при запуске этой программы входным файлом должен стать файл отчета со служебной информацией. В результате работы должен быть получен текст исходной фразы в файле с именем Output.txt
Вот собственно начал писать программу:
Program labb; uses crt; var k,j,m,g,d,l:integer; I,O: text; s:char; A: array [1..255] of integer; begin m:=0; assign (I,'Input.txt'); reset(I); while not Eof(I) do begin m:=m+1; read(I, s); A[m]:=ord(s); writeln(A[m]); end; Close(I); assign(O,'Output.txt'); l:=0; for k:=1 to 255 do begin if (A[k]<>0) then begin append(O); write(O,chr(A[k]),' - ',l); writeln(O); end; end; Close(O); g:=0; assign(O,'Output.txt'); append(O); writeln(O,'***********************************'); for j:=1 to m do begin append(O); g:=g+1; A[g]:=256-A[g]; write(O,chr(A[g]));
end; Close(O); readkey; end. }
То есть я описал массив, записал аски коды символов в него, собственно возникла проблема с подсчетом количества символов(символы как русские так и англ.), зашифровал я методом Atbash, думаю расшифровать смогу при повторном запуске программы, метку в виде звёздочек поставил, а вот как ее потом определить пока не думал
Program lab1; uses crt; var i,l:integer; {переменная i в используется в циклах, l – для хранения ASCII кода символа} M,O,B: text; {текстовые переменные} s:char; {символьная переменная, для чтения файла} A: array [0..255] of byte; {массив используется в качестве счетчика}
begin {$I-} {Директива компилятора, отключение проверки ошибок ввода-вывода} assign(M,'Input.txt'); {Назначение файловым переменным имен внешних файлов} assign(O,'log.txt'); assign(B,'Output.txt'); reset(M); {Открытие файла Input.txt для чтения} if (IOResult<>0) then begin {Если файл Input.txt не существует} writeln('Файл input.txt не существует!'); rewrite(M); {Создание пустого файла Input.txt} writeln('Создан пустой файл input.txt, внесите в него текст для обработки'); writeln('Нажмите любую клавишу для выхода'); readkey; {Ожидание нажатия клавиши} exit; {Выход из программы} end; reset(O); {Открытие файла log.txt для чтения} {$I+} {Директива компилятора, включение проверки ошибок ввода-вывода} if (IOResult=0) then begin {Если файл log.txt существует, то} rewrite(B); {Создание файла output.txt} Writeln('Создан файл, содержащий исходный текст Output.txt'); while not Eof(O) do begin {пока файл log.txt не кончиться….} read(O,s); {Посимвольное чтение файла log.txt} l:=ord(s); {перевод из символа в ASCII код} if l=38 then begin {Если встречается символ с кодом равным 38(&) – ключ, то все символы до него стираются} rewrite(B); continue; {прерывание цикла, сам ключ не будет записываться в файл Output.txt} end; l:=l+5; {Дешифровка} write(B,chr(l)); {Запись исходного (дешифрованного) текста в файл Output.txt} end; close(O); {Закрытие файла log.txt} close(B); {Закрытие файла output.txt} end else begin {Если файл log.txt не существует…} writeln('Чтобы расшифровать текст запустите программу заново'); end; while not Eof(M) do begin {Пока файл input.txt не закончится…} read(M, s); {Посимвольное чтение файла input.txt} i:=ord(s); {перевод из символа в ASCII код} A[i]:=A[i]+1; {Подсчет количества символов} if (i>=224) and (i<=255) then begin i:=i-32; {Смещение ASCII кодов маленьких русских букв} A[i]:=A[i]+1; {суммирование количества маленьких букв к большим} end; if (i=184) then begin i:=i-16; {Смещение ASCII кода буквы ”ё”} A[i]:=A[i]+1; {суммирование количества маленьких букв ”ё” к большим ”Ё”} end; if (i>=97) and (i<=122) then begin i:=i-32; {Смещение ASCII кодов маленьких английских букв} A[i]:=A[i]+1; {суммирование количества маленьких букв к большим} end; end; Close(M); {Закрытие файла input.txt} Rewrite(O); {Открытие log.txt на запись} write(O,chr(209),chr(232),chr(236),chr(226),chr(238),chr(235)); {Текст: Символ} writeln(O,' ',chr(202),chr(238),chr(235),'-',chr(226),chr(238)); {Текст: Кол-во} for i:=192 to 223 do begin {Запись в файл log.txt количества русских букв} if A[i]<>0 then writeln(O,' ',chr(i),' - ',A[i]); end; if A[168]<>0 then begin {Запись в файл количества букв ”Ё”} writeln(O,' ',chr(168),' - ',A[168]); end; for i:=65 to 90 do begin {Запись в файл количества английских букв} if A[i]<>0 then writeln(O,' ',chr(i),' - ',A[i]); end; writeln(O,'------------------------------------'); {Разделитель} write(O,chr(38)); {Запись в файл log.txt ключа, чтобы отделить фразу от служебной информации} reset(M); {Открытие файла input.txt на чтение} while not Eof(M) do begin {Пока файл input.txt не кончится…} read(M,s); {Посимвольное чтение файла input.txt} l:=ord(s); {перевод из символа в ASCII код} l:=l-5; {Смещение ASCII кодов на 5 влево (шифрование)} write(O,chr(l)); {запись зашифрованного текста в файл log.txt} end; Close(M); {Закрытие файла input.txt} Close(O); {Закрытие файла log.txt} Writeln('Создан файл со служебной информацией log.txt'); Writeln('Нажмите любую клавишу чтобы выйти'); readkey; {Ожидание нажатия клавиши} end.
P.S. это я Роман, просто пароль забыл))) и простите что так долго, программу написал давным давно, но руки не доходили выложить...