Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с кодом delphi / 7 сообщений из 7, страница 1 из 1
08.05.2020, 11:11
    #39955209
ir1223
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с кодом delphi
Всем привет!
Изучаю делфи и не могу разобраться как сделать код... пытаюсь по примеру но не получается. Вот задание: Подсчитать количество букв от "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
08.05.2020, 11:52
    #39955222
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с кодом delphi
Подсчитать количество букв от "g" до "k" каждого вводимого слова.
Вы слова вводите в Memo1, а результат подсчёта должен быть в Memo2 ?
...
Рейтинг: 0 / 0
08.05.2020, 13:13
    #39955261
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с кодом delphi
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
08.05.2020, 13:26
    #39955275
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с кодом delphi
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
08.05.2020, 14:56
    #39955332
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с кодом delphi
...
Рейтинг: 0 / 0
08.05.2020, 23:13
    #39955494
Помогите с кодом delphi
Набросок за 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
09.05.2020, 06:38
    #39955521
Помогите с кодом delphi
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите с кодом delphi / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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