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.
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.
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
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.
Oto jest mój kod
Bardzo fajny. I co z nim?
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ć...?
- Ustaw zmienną PomiedzySlowami na true
- 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
_13th_Dragon napisał(a):
- Ustaw zmienną PomiedzySlowami na true
- 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.
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ę;
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