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


Ответ
 
Опции темы Опции просмотра
Старый 23.03.2014, 20:48   #1 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Турбо Паскаль. Файлы, работа с текстом

Требуется написать программу, считывающую данные из текстового файла; затем данные записываются в файл прямого доступа (компоненты файла являются целого или вещественного типа (если входные данные символы, то сначала нужно перевести их в коды, а потом записать в файл)); обработать данные (использовать прямой доступ к компонентам файла) и записать результат в текстовый файл
задание: Напечатать в алфавитном порядке все буквы, входящие в текст
Светик123 вне форума   Ответить с цитированием

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

Я думаю, что тут найдется много полезного для вас

Турбо Паскаль. Тип запись
Турбо Паскаль. Рекурсии
Программа в Турбо-Паскаль 7,0

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

Свет, а может сами, а? И рад был бы помочь, да только вот этим самым прямым доступом отродясь не пользовался за ненадобностью, а разбираться - лень душит.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.03.2014, 22:35   #3 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

а можете подсказать алгоритм выполнения задания? (Напечатать в алфавитном порядке все буквы, входящие в текст). не представляю, как это выполнить. как отсортировать?
Светик123 вне форума   Ответить с цитированием
Старый 23.03.2014, 23:08   #4 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

я не совсем осознал задание. т.е. если буква встречается несколько раз, то ее надо столько раз и вывести? или по разу?
хотя в любом случае первое, что пришло в голову. создать массив по количеству букв (33). пробежаться в цикле по строке. и та буква что есть, отметить в массиве.
mass[0..32] of boolean; а если еще и буквы считать, то инкремент.
poiu вне форума   Ответить с цитированием
Старый 24.03.2014, 08:44   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Светик123 Посмотреть сообщение
а можете подсказать алгоритм выполнения задания? (Напечатать в алфавитном порядке все буквы, входящие в текст). не представляю, как это выполнить. как отсортировать?
Цитата:
Сообщение от poiu Посмотреть сообщение
первое, что пришло в голову. создать массив по количеству букв (33). пробежаться в цикле по строке. и та буква что есть, отметить в массиве.
Света, я бы действовал так: создал не только массив, но и множество (Set of) - либо символьное (Char), либо, если сделан переход к кодам букв, байтовое (Byte). Первоначально множество объявляется пустым. Затем, проходя по исходному тексту, проверяем, содержится ли следующий символ (или его код) в нашем множестве, и если нет - то присоединяем его к множеству. Таким образом, в итоге множество будет содержать все буквы, встречающиеся в тексте, причем каждая - в одном экземпляре (правда, помним, что строчные и прописные буквы - разные). Далее проходим весь алфавит либо символами, либо кодами (причем лучше пАрами: буква прописная - та же строчная) и проверяем, есть ли данный символ в множестве, и если да - отправляем этот символ в выходной файл.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.03.2014, 13:06   #6 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

какой хитрец)))
я то просто думал отметить в массиве совпадение букв. и потом просто пробежаться по нему и вывести те, что отмечены. вот только как уже было ранее сказано не предусмотрел большие маленькие буквы.
poiu вне форума   Ответить с цитированием
Старый 24.03.2014, 14:05   #7 (permalink)
Debianer
Member
 
Регистрация: 07.08.2012
Адрес: Находка, Приморский край
Сообщений: 336
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1671
По умолчанию

Прописные и строчные - просто при проверке использовать UpperCase(), дабы сущности не плодить
Debianer вне форума   Ответить с цитированием
Старый 24.03.2014, 14:38   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Debianer Посмотреть сообщение
Прописные и строчные - просто при проверке использовать UpperCase(), дабы сущности не плодить
Не, мы эт... по рабоче-крестьянски. Например, так:
Код:
Var
 f1,f3:Text;
 f2:File of Byte;
 i,Cd:Byte;
 Ch:Char;
 Lt:Set of Byte;
 b1,b2:boolean;

Begin
 Assign(f1,'D:\Shakesp.txt');
 ReSet(f1);
 Assign(f2,'D:\Sh_1');
 Rewrite(f2);
 Lt:=[];
 Repeat
  Read(f1,Ch);
  Write(f2,Ord(Ch));
 Until EoF(f1);
 Close(f1);
 Close(f2);
 ReSet(f2);
 i:=0;
 Repeat
  Seek(f2,i);
  Read(f2,Cd);
  If Not(Cd in Lt) then Lt:=Lt+[Cd];
  Inc(i);
 Until EoF(f2);
 Close(f2);
 Assign(f3,'D:\Sh_2');
 Rewrite(f3);
 for i:=1 to 26 do
  begin
   b1:=false;
   b2:=false;
   If (i+96) in Lt then b1:=true;
   If (i+64) in Lt then b2:=true;
   If b1 then write(f3,Chr(i+96),' ') else if b2 then write(f3,'  ');
   If b2 then write(f3,Chr(i+64));
   If b1 or b2 then writeln(f3);
  end;
 Close(f3);
End.
Некоторые пояснения.
1. Программа ориентирована ИСКЛЮЧИТЕЛЬНО на латиницу. С кириллицей у меня напряг - использую DOS-кодировку. Но если нужно, можно легко переделать под кириллицу.
2. Файлы расположены на диске D. Имя исходного - Shakesp.txt, имена двух других - Sh_1 и Sh_2. Естественно, всё это можно изменить в программе.
Миниатюры
nc01.jpg   nc02.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 24.03.2014, 15:12   #9 (permalink)
poiu
Member
 
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
По умолчанию

оу как интересно. ни разу не юзал Lt:Set of Byte;
с ним все намного проще выглядит во всяком случае =)
poiu вне форума   Ответить с цитированием
Старый 24.03.2014, 21:07   #10 (permalink)
Светик123
Member
 
Регистрация: 02.03.2014
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Владимир, ваша программа написана в турбо паскале или в абс?
Светик123 вне форума   Ответить с цитированием
Ads

Яндекс

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

Метки
турбо паскаль


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

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




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

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