Wypisywanie wyrazów.

0

Witam , potrzebuję aby ktoś mi pomógł zrobić program który z podanego dowolnego zdania wypisze mi wyrazy zaczynające się i kończące na tą samą literę . Korzystałem z wbudowanych w Pascala funkcji delete , pos a także pętli for i instrukcji warunkowej if jednak bez większych efektów . Jestem początkującym użytkownikiem pascala i bardzo mi zależy na Waszej pomocy.Z góry dziękuje za pomoc.

0

Jestem początkującym użytkownikiem pascala i bardzo mi zależy na Waszej pomocy

Czyli na gotowcu?

Korzystałem z wbudowanych w Pascala funkcji delete , pos a także pętli for i instrukcji warunkowej if jednak bez większych efektów

Jak korzystałeś, co robiłeś. Pokaż to może uda nam się znaleźć błąd w twoim rozumowaniu.

0

A pokaż jak próbowałeś to zrobić. Mnie się wydaje że wystarczy tak:

  • czytamy stringa aż do spacji
  • sprawdzamy czy string[1] = string[długość stringa] i jeśli tak to go wypisujemy
0

Oto jest mój kod

uses crt;
var i,d:integer;
    zdanie,a,c:string;
begin
        writeln('Wpisz zdanie:');
        readln(zdanie);
        c:=' ';
        zdanie:=Lowercase(zdanie);
                for i:=1 to length(zdanie) do begin
                a:=zdanie[i];
                        if a=' ' then
                        begin
                        delete(a, pos(' ', a), 1);
                        delete(a, pos('.', a), 1);
                        delete(a, pos(',', a), 1);
                        if a<>' ' then
                        begin
                        d:=length(a);
                        c:=c+a;
                        end;
                        if a[1]=a[d] then
                        writeln(a);
                        end;
                end;
readkey;
end.
 
1

Oto jest mój kod

Bardzo fajny. I co z nim?

1

A formatować to nie uczyli...?

var
  I, D: integer;
  Zdanie, A, C: string;
begin
  WriteLn('Wpisz zdanie: ');
  ReadLn(Zdanie);

  C := ' ';
  Zdanie := LowerCase(Zdanie);

  for I := 1 to Length(Zdanie) do
  begin
    A := Zdanie[I];

    if A = ' ' then
    begin
      Delete(A, Pos(' ', A), 1);
      Delete(A, Pos('.', A), 1);
      Delete(A, Pos(',', A), 1);

      if A <> ' ' then
      begin
        D := Length(A);
        C := C + A;
      end;

      if A[1] = A[D] then
        WriteLn(A);
    end;
  end;
end.

Ja np. dostaję taką informację podczas kompilacji:

[Warning] Project1.dpr(34): Variable 'D' might not have been initialized
Może by warto było się nad nią zastanowić...?

1
  1. Ustaw zmienną PomiedzySlowami na true
  2. Dla każdego znaku z wiersza ...
    2.1. Jeżeli znak jest litera oraz PomiedzySlowami jest true to ustaw PomiedzySlowami na false i zapamiętaj indeks znaku w zmiennej Początek
    2.2. Jeżeli znak nie jest litera oraz PomiedzySlowami jest false to ustaw PomiedzySlowami na true oraz jeżeli znak pod indeksem Początek jest taki sam jak poprzedni znak to wypisz słowo.
    2.3. koniec pętli
0
_13th_Dragon napisał(a):
  1. Ustaw zmienną PomiedzySlowami na true
  2. Dla każdego znaku z wiersza ...
    2.1. Jeżeli znak jest litera oraz PomiedzySlowami jest true to ustaw PomiedzySlowami na false i zapamiętaj indeks znaku w zmiennej Początek
    2.2. Jeżeli znak nie jest litera oraz PomiedzySlowami jest false to ustaw PomiedzySlowami na true oraz jeżeli znak pod indeksem Początek jest taki sam jak poprzedni znak to wypisz słowo.
    2.3. koniec pętli

Pierwszy raz robię program tego typu i mało rozumiem z tego co mi tu napisałeś ,można trochę jaśniej ? (pkt 2.1 i 2.2)

Shalom napisał(a):
  • czytamy stringa aż do spacji
  • sprawdzamy czy string[1] = string[długość stringa] i jeśli tak to go wypisujemy

Próbowałem zrobić jak piszesz ale coś musiałem pomylić w kodzie

 uses crt;
var
A,B,C:integer;
zdanie,d,wyrazy:string;

 begin
 A:=0;
 writeln('Podaj zdanie: ');
 readln(zdanie);
 wyrazy:=Lowercase(zdanie);

  for B:=1 to length(zdanie) do
  begin
  A:=A+1;
  C:=A;

   if wyrazy[A]=#32 then
   C:=C-1;

    if wyrazy[1]=wyrazy[C] then
    d:=copy(wyrazy,1,C);
    writeln(d);
    Delete(wyrazy,1,C);

     if wyrazy[1]<>e[C] then
     Delete(wyrazy,1,C);
  end;
 readkey;
end.
1

No to może najpierw napisz sobie procedurę/funkcję, która podzieli wprowadzone zdanie na wyrazy, a później sprawdzi się w pętli po wszystkich wyrazach czy któreś pasuje do wzorca? Może i tak będzie prościej bo widzę, że zaplątałeś się;

0

Może przy każdym wierszu swojego programu przypisz to co realizujesz z podanego algorytmu.
widzę tylko 2. i 2.3 ; reszta to bezsensownie powrzucane instrukcje.

EDIT
Zacznij myśleć, jeżeli nie chcesz lub nie możesz i jedynie potrzebujesz gotowca to zapraszam do działu praca lub na PW.
za darmo gotowca nie dostaniesz

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