Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2021, 20:50   #1
Lirax
 
Регистрация: 24.10.2021
Сообщений: 6
По умолчанию Lazarus, вывести все буквы, встречающиеся в тексте по одному разу

Дана строка.Вывести все буквы, встречающиеся в тексте по одному разу в строке
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  alf: array ['a'..'z'] of char;
  num: array [1..26] of integer;
  i:integer;
  s:string;
begin
  s:=Edit1.text;
  for i:= 1 to length(s) do
      if (s[i] in ['a'..'z']) then
      num[ord((text[i]) - 96)] += 1;
  for i:= 1 to 26 do
      if num[i] = 1 then
         Label2.Caption := Label2.Caption + (chr(i + 96));

end;

end.
Не могу понять выдает ошибку в этом фрагменте
Код:
num[ord((text[i]) - 96)] += 1;
Lirax вне форума Ответить с цитированием
Старый 06.11.2021, 21:51   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Lirax Посмотреть сообщение
Не могу понять выдает ошибку в этом фрагменте
Код:
num[ord((text[i]) - 96)] += 1;
Это же вам не Си, а Паскаль. Какое может быть += ?
Если прибавить 1, то Inc(...
type_Oleg вне форума Ответить с цитированием
Старый 07.11.2021, 10:59   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

чем больше разнообразных переменныхидентификаторов в одной строке тем больше проблем с отладкой
1. объявите переменные
Код:
var
 c: char;
 n: integer;
2. и напишите вот такой код
Код:
c:=test[i];
n:=ord(c)-96;
num[n]+=1;
какая из строчек будет теперь с ошибкой и КАКОЙ ошибкой?

Цитата:
Какое может быть += ?
Lazarus такое знает.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 07.11.2021, 11:13   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,570
По умолчанию

Чувствуется Сишник
+= нигде больше мне не встречалось.
Я бы ещё перед циклом проинициализировал Label2.Caption
Код:
Label2.Caption := '' ;

Последний раз редактировалось digitalis; 07.11.2021 в 11:16.
digitalis вне форума Ответить с цитированием
Старый 07.11.2021, 13:02   #5
Lirax
 
Регистрация: 24.10.2021
Сообщений: 6
По умолчанию

Всем большое спасибо, что откликнулись. Немного покопавшись у меня все заработало
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s,sub1,sub2:string;
  i:integer;
begin
  s:=edit1.text;
  i:=1;
  while i<=length(s) do begin
    sub1:=s[i];
    sub2:=copy(s,i+1,length(s)-i);
    if pos(s[i],sub2)>0 then
       while pos(sub1,s)>0 do
             delete(s,pos(sub1,s),1)
    else i:=i+1;
  end;
  edit2.text:=s;
end;

end.
Lirax вне форума Ответить с цитированием
Старый 07.11.2021, 18:03   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,570
По умолчанию

Для этого пришлось перекроить весь алгоритм. Это как бы решение несколько другой задачи. Первый вариант был заточен на строчные латинского алфавита, второй - универсальный.
Но мне слабо верится, что человек, начав с
Цитата:
+= 1;
, накропал такой достаточно элегантный вариант. Кому-то проставил?
Или
Цитата:
Немного покопавшись
в сети ?
Впрочем, не моё это дело. Веришь - не веришь - это в церкви.
Главное - есть решение - поделился с обществом.
"Зарубился сам - заруби товарища" © альпинистская заповедь.

Последний раз редактировалось digitalis; 07.11.2021 в 18:09.
digitalis вне форума Ответить с цитированием
Старый 07.11.2021, 22:49   #7
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,672
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
накропал такой достаточно элегантный вариант.
А что в нем элегантного-то? Оно ни ленивое, ни эффективное, ни верное)
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 07.11.2021 в 22:53.
MihalNik вне форума Ответить с цитированием
Старый 07.11.2021, 23:21   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,570
По умолчанию

Протестировал - вроде работает без проблем. Глубоко в текст я не вникал. Можете дать строку, на которой лажает?
Код:
12345176
234576
В один цикл, не занимает вспомогательных массивов. Будь я преподом (чур меня!) - зачет бы поставил.
digitalis вне форума Ответить с цитированием
Старый 07.11.2021, 23:33   #9
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,672
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Протестировал - вроде работает без проблем. Глубоко в текст я не вникал.
Так надо только буквы. Где там их проверка?
А циклы завернуты в copy и pos. Ну и копия строки мало чем от вспомогательного массива отличается.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 07.11.2021 в 23:41.
MihalNik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напечатать все слова последовательности, которые встречаются в строке по одному разу ProLink Visual C++ 0 02.06.2021 20:24
Пройдите в лабиринте от площадки 1 до площадки 8: а) так, чтобы посетить все площадки по одному разу; б) кратчайшим путем. Pavlo__ Общие вопросы C/C++ 0 16.12.2016 23:48
Проверить есть ли цифры не встречающиеся ни разу Ben_Franklin Общие вопросы C/C++ 0 05.05.2016 19:56
встречаются ли в тексте все буквы, которые входят в слово «шина» ENTERPRISE2015 Паскаль, Turbo Pascal, PascalABC.NET 8 21.11.2015 18:42
Текстовые файлы и Turbo Pascal: Напечатать все слова, которые встречаются в заданной последовательности по одному разу Katonka Помощь студентам 0 17.06.2011 01:51