IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Вывод символов из текста, Помогите, пожалуйста.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Всем привет! У меня вот огромные проблемы с одной задачей на работу с текстом.
Звучит она следующим образом: вывести на экран из введенного текста только те символы, которые встречаются в тексте один раз. Вроде задача не очень сложная, но я недогоняю. Пожалуйста, помогите, мне она уже нужна на завтра! Вот что у меня получилось пока:

Код

Program Lab3;
Uses Crt;
  const
   ni=255;
  var
   simb_freq: array [1..ni] of integer;
   i: byte;
   ascode,longtxt: integer;
   txt_val:string;
begin
   clrscr;
   writeln('Vvedite, pojaluista, text: ');
   writeln;
   readln(txt_val);
   {writeln(length(txt_val));}
   i:=0;
   simb_freq[i]:=0;
    repeat
     simb_freq[i]:=i;
     i:=i+1;
    until ni<=i;
    longtxt:=length(txt_val);
      for i:=0 to longtxt do
       begin
         ascode:=ord(txt_val[i]);
         writeln(ascode:2);
         simb_freq[ascode]:=simb_freq[ascode]+1;
         {writeln(simb_freq[ascode]);}
       end;
    i:=0;
    repeat
      if simb_freq[i]=1 then
      writeln(chr(i));
      i:=i+1;
    until ni<=i;
   readln;
end.




ascode - хранение ASCII-кода текущего элемента строки,
longtxt - длина текста,
txt_val - сам текст,

Последний цикл тут совсем не нужен. Короче, у меня такие были соображения:
вводим текст, потом получаем ASCII-кода текущего элемента текста, далее:
1 вариант - далее делаем выборку тех символов, которые встречаются более 1 раза и после уже отсортированные заносим в массив с последующим выводом.
2 вариант - получаем Аски-коды всех элементов строки, заносим их в массив, но так, как там будут многие символы прописываться по 2 и более раз, то поставить какой-нибудь счетчик, который бы следил за каждой ячейкой, чтобы после можно было при опросе элементов массива узнать, сколько раз туда прописывался символ и если это количество равно 1, то выводить на экран. Вот такие вот соображения(может быть весь глупыеsmile.gif). Если что не понятно, то спрашивайте сразу. Мне уже завтра нужно нести решение, поэтому некогда тянуть время. Всем заранее спасибо за помощь!

Сообщение отредактировано: Kritic -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Значит, так. Я дал тебе полностью работоспособную программу, которая будет выполняться на любом компиляторе Паскаля. Зачем ту ее перекроил по-своему? Смысл вот этого исправления ты мне можешь объяснить:
const 
nj = #255;
var
freq: array [#0..nj] of integer;
Ты просто потерял красивую программу, и приобрел корявую. Смысл-то от этого не изменился, но ЗАЧЕМ?
Цитата
что делает реально Паскаль, когда выполняет данную программу?
Проходит посимвольно по введенной строке, и для каждого символа строки увеличивает соответствующий ему элемент массива на 1 (для этого и используется индексация Char-ом, а не целым числом, как обычно; если использовать целое, придется делать дополнительные преобразования, а зачем, если можно проще?)...
Цитата
И еще: программа работает корректно только 1 раз, то есть если я введу слово "просто", она выдаст буквы "прст", далее , при повторном выполнении(не выходя из нее) она начинает глючить, так как видно в массиве хранятся, информация прошлого, то есть если я далее ввожу слово "лук", она вместо "лук" выводит "лукпрст". Как вот от этого избавиться?

Очистить массив...
    writeln('Пожалуйста, введите текст: ');
writeln;
readln(text);
fillchar(freq, sizeof(freq), #0);
А свою строчку
    freq[j]:=0;
Можешь убрать, она просто обнуляет один элемент массива, причем неизвестно какой...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.05.2024 3:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name