powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с кодом delphi
7 сообщений из 7, страница 1 из 1
Помогите с кодом delphi
    #39955209
ir1223
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Изучаю делфи и не могу разобраться как сделать код... пытаюсь по примеру но не получается. Вот задание: Подсчитать количество букв от "g" до "k" каждого вводимого слова.
Я представляю себе это так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TForm1.Button1Click(Sender: TObject);
Const
  sp='g,h,i,j,k';
var
  i,j:integer;
  str:String;
begin
  for i := 0 to Memo1.Lines.Count-1 do
    begin
   ??????????????????
    end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;



Помогите!
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955222
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подсчитать количество букв от "g" до "k" каждого вводимого слова.
Вы слова вводите в Memo1, а результат подсчёта должен быть в Memo2 ?
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955261
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ir1223,

Как-то так... Писал прямо здесь. Так что отладчик понадобится :)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function  ChCount(const S:String):integer;
var i:integer;
begin
    Result:=0;
    for i:=1 to Length(S) do
      if CharInSet(S[i],['g','h','i','j','k']) then 
         Inc(Result);      
end;


var L:TStringList;
      i:integer;

//-----------------------------------------
   L:=TStringList.Create;
   L.Delimiter:=' ';
   

   for i:=0 to Memo1.Lines.Count do
   begin
     L.DelimitedText:=Memo1.Lines[i];  // в L - все слова из Memo
     
     for j:=0 to L.Count-1 do
        begin
          if (Trim(S.Strings[J])<>'') then
             Memo2.Lines.Add('Word: '+L.Strings[J]+' Word index: ' +IntToStr(J)+ ' Need char count:'+IntToStr(ChCount(L.Strings[J]));
        end;
   end;
   L.Free;
//-----------------------------------------
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955275
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
Код: pascal
1.
             Memo2.Lines.Add('Word: '+L.Strings[J]+' Word index: ' +IntToStr(J)+ ' Need char count:'+IntToStr(ChCount(L.Strings[J]));

Код: pascal
1.
Memo2.Lines.Add(Format('Word: %s, Word index: %d, Need char count: %d', [L.Strings[J], J, ChCount(L.Strings[J])]));

Приучайте человека сразу к хорошему. И сами привыкайте. :)
Код: pascal
1.
L.Delimiter:=' ';

Если мне не изменяет память, то пробел по умолчанию (всегда?) разделитель. Т.е. строчка лишняя.
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955332
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955494
Набросок за 4 минуты. Реализация стандартных функций диапазона. У нас же диапазонная задача, диапазонная и проверка g к k функцией IsRange а с ней мы можем проверить a-zA-Z а-яА-я и конечно же цифры и прочую лабудень

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function IsRange(const ch: Char; const A, B: Char): Boolean; inline;
begin
  Result := (ch >= A) and (ch <= B);
end;

function IsLetterEng(const ch: Char): Boolean; inline;
begin
  Result := IsRange(ch, 'a', 'z') or IsRange(ch, 'A', 'Z');
end;

function IsLetterRu(const ch: Char): Boolean; inline;
begin
  Result := IsRange(ch, 'а', 'я') or IsRange(ch, 'А', 'Я');
end;

function IsMumber(const ch: Char): Boolean; inline;
begin
  Result := IsRange(ch, '0', '9');
end;




Функа которая собирает чисто английские слова в массив
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
function GetWordsEng(const Text:string): TArray<string>;
label NextChar;
var
  WD: string;
  ch: Char;
  TextLen, CurrentLen, LenWD, CountWords: Cardinal;
begin
  CountWords := 0;
  SetLength(Result, 100);

  TextLen := Text.Length;

  CurrentLen := 1;
  while True do
  begin
    LenWD := 0; // Установлен по умолчанию

  NextChar: // Каак!? Халивар!
    if CurrentLen > TextLen then
      Break;

    while IsLetterEng(Text[CurrentLen + LenWD]) do
      inc(LenWD);

    if LenWD = 0 then
    begin
      inc(CurrentLen);
      goto NextChar; // Плаакать,плаакать
    end;

    if CountWords >= Length(Result) then
      SetLength(Result, High(Result) + 99);

    SetLength(Result[CountWords], LenWD);
    move(Text[CurrentLen], Result[CountWords][1], LenWD * SizeOf(Text[1]));

    inc(CurrentLen, LenWD);
    inc(CountWords);
  end;
  SetLength(Result, CountWords);
end;



Ну а дальше стандартный
Код: pascal
1.
2.
 for WD in GetWordsEng do
   for I := Low(WD) to High(WD) do



С проверкой
Код: pascal
1.
 if IsRange(WD[I], A, B) then
...
Рейтинг: 0 / 0
Помогите с кодом delphi
    #39955521
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с кодом delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]