Edit i program, któy sprawdza czy słowa mają samogłoski

0

Witam,

Piezę program z polem edycyjnym, polem memo i dwoma przyciskami (Koniec i Licz). Po naciśnięciu przycisku Koniec program ma kończyć działanie, zaś po naciśnięciu przycisku Licz program ma wypisać w polu memo wszystkie te słowa z pola edycyjnego, które na każdej nieparzystej pozycji mają samogłoskę. Przez słowo rozumiemy w tym zadaniu maksymalny ciąg znaków różnych od spacji.
na razie kombinuję dla jednego słow jak to zrobić i mam coś takiego:

linia:=Edit1.Text;
i:=1;
while not (linia[i]=' ') do
begin
slowo:=slowo+linia[i];
inc(i);
end;
j:=1;
repeat
if slowo[j] in ['i', 'y', 'e', 'a', 'o', 'u', 'ą', 'ę'] then
begin
inc(j);
jest:=true;
end
else
begin
break;
jest:=false;
End;
until j>=length(slowo);
if jest=true then label1.caption:=slowo;

Ale coś wynik nie jest poprawny.

Może mi ktoś udzielić jakiśwskazówek - będę bardzo wdzięczny.

Pozdrawiam
Tpokala

0

Ja bym to tak rozwiązał:

 
   linia:=Edit1.Text;
  i:=1;
  while not (linia[i]=' ') do
    begin
      slowo:=slowo+linia[i];
      inc(i);
    end;

    j:=1;
    jest := FALSE;
    repeat
      if slowo[j] in ['i', 'y', 'e', 'a', 'o', 'u', 'ą', 'ę'] then
      begin
        jest := TRUE;
      end;
      inc(j);
    until j>=length(slowo);
  if jest=true then label1.caption:=slowo;

Ale nie jestem pewien czy o to dokładnie Ci chodziło

0
Mick napisał(a)

Ja bym to tak rozwiązał:

 
   linia:=Edit1.Text;
  i:=1;
  while not (linia[i]=' ') do
    begin
      slowo:=slowo+linia[i];
      inc(i);
    end;

    j:=1;
    jest := FALSE;
    repeat
      if slowo[j] in ['i', 'y', 'e', 'a', 'o', 'u', 'ą', 'ę'] then
      begin
        jest := TRUE;
      end;
      inc(j);
    until j>=length(slowo);
  if jest=true then label1.caption:=slowo;

Ale nie jestem pewien czy o to dokładnie Ci chodziło

To też nie działa tak jak powinno

0
  1. Pętla, którą zrobiłeś zwróci wartość TRUE dla wyrazów, które kończą się samogłoską a wartość FALSE dla wyrazów, które kończą się spółgłoską (przeanalizuj sobie krok po kroku jej działanie dla przykładowych wyrazów). Musisz zmienić warunek opuszczenia pętli, poza tym jak już znajdziesz pierwszą samogłoską dalsze szukanie w tym wyrazie nie ma sensu, więc będzie to również optymalniejsze.

  2. Zainteresuj się funkcją Pos

0

Może to bedzie pomocne

procedure TForm1.Button1Click(Sender: TObject);
const
 s :string = 'jakikolwiek string zawierający samogłoski dgffgfdg';
var
 StringList :TStringList;
 i, j       :Byte;
 IsAble     :Boolean;
begin
 Memo1.Clear();
 StringList := TStringList.Create();
 with StringList do
  begin
   Delimiter := ' ';
   DelimitedText := s;
   for i := 0 to Count-1 do
    begin
     IsAble := False;
     for j := 1 to Length(Strings[i]) do
      if (UpCase(Strings[i][j]) in ['A','Ą','E','Ę','I','O','Ó','Y']) then
         if Odd(j) then
            begin
             IsAble := True;
             Break;
            end; // if Odd...
     if IsAble Then Memo1.Lines.Add(Strings[i]);
    end; // for i...
  end; // with StringList do
end; // Button1Click

1 użytkowników online, w tym zalogowanych: 0, gości: 1