analiza i operacje na strignu

0

Witam. Mam taki temat do opracowania:
Musze napisac program pobierajacy w ktorym podaje jakis ciag znakow i string jest formatowany w nastepujacy sposob.

Przykład 1
tekst : Matematyka
wynik: MMMMMMMMMMaaaaaaaaatttttttteeeeeeemmmmmmaaaaattttyyykka
Przykład 2
tekst : Ala ma kota
wynik: AAAlla mma kkkkoootta

Co do 1 przykladu to sobie poradzilem. Wystarczylo napisac 2 petle i jest jednak co w przypadku gdy w stringu jest kilka wyrazow? Prosze o pomoc.

Kod jaki napisalem do tej pory:

program bbb;
var
napis,tmp:string;
dlugosc,i,j,a:integer;
begin

 tmp:=' ';

napis:='matematyk';
dlugosc:=Length(napis);
a:=dlugosc;

for i:=1 to dlugosc do
begin
for j:=1 to a do
tmp:=tmp+napis[i];
a:=a-1;
end;


writeln('napis ',tmp);
readln;
end.
0

Czy to jest ogólnonarodowe zadanie maturalne? Już trzeci raz widzę to ostatnimi dniami.

BTW: Wyrazy oddzielone są spacją. Czyli w pętli która idzie po stringu sprawdzaj czy napis[i] = ' ', a dalej już chyba wiesz co robić prawda?

0

to ja wiem ze trzeba tak sprawdzać. Tylko ze pozniej trzeba przerobic 2 petle. Bo ona powiela napis caly, wiec jak bedzie ala ma kota to a zamiast 3 razy zostanie wyswietlkone 11 razy.

Wiec sprawdze sobie ze np na 4 miejscu jest spacja. Wiec trzeba zrobic zeby 1 znak zostal wypisany 4-1 czyli 3 razy(nie liczac spacji oczywiscie) to to wiem jeszcze jak zrobic. Sek tkwi w tym ze nie bardzo wiem jak sobie poradzic z teszta wyrazow.

Moze jakas podpowiedz?

0

Wystarczyło pogooglowac, wiadomo że w niektórych językach jak php do rozbicia stringa na osobne elementy
po podaniu separatora służy funkcja Explode. Można jej wersję dla Delphi znaleźć na jednym forum polskim,
z taką przeszkadzającą reklamą. Ja kiedyś znalazłem, w oryginale rozbija ona tekst na elementy dodawane
do StringGrid. Wystarczy zmienić tę funkcję tak aby dodawała do tablicy stringów. Masz poniżej gotowca,
bo źle zabrałeś się za temat według mnie. A i tak już inna osoba chciała na tym forum podać kod do tego
zadania w zamian "za wiersz na swoją cześć" czyli za friko. Także zarobić się nie da. A i tak pozostałe do
rozwiązania zadanie z rysowaniem "figur" w postaci znaków "-<:>-" i w oddzielaniem "|", a przy nim to
trzeba się więcej napracować może, bo trzeba trochę pomyślęć. To akurat zadanie (nie jest to chyba na
maturę tylko na zaliczenia, bo teraz jest na nie "sezon") jest banalne i wystarczy tylko chwilę pomyśleć.

program uszek_zad2;

{$APPTYPE CONSOLE}

const
  MaxSlow = 10;
  Separator = ' ';

var
  Str, Tekst : string;
  Tab : array[1..MaxSlow] of string;

procedure UstawWartosciTablicy;
var
  I : integer;
  X : Integer;
begin
{usuwanie zbędnych spacji z poczatku jezeli sa}
  I := 1;
  while Tekst[I] = Separator do
  begin
    Delete(Tekst, I, 1);
  end;
{usuwanie zbędnych spacji z konca jeżeli sa}
  I := Length(Tekst);
  while Tekst[I] = Separator do
  begin
    I := I - 1;
    Delete(Tekst, I + 1, Length(Tekst));
  end;
{rozdziela wpisany tekst na kolejne elementy tablicy}
  I := Low(Tab);
  Str := Tekst;
  X := Pos(Separator, Str);
  while X > 0 do
  begin
    Tab[I] := Copy(Str, 1, X - 1);
    if X <= Length(Str) then
    begin
      Str := Copy(Str, X + Length(Separator), Length(Str));
    end;
    X := Pos(Separator, Str);
    I := I + 1;
  end;
  if (Length(Str) > 0) then
  begin
    Tab[I] := Str;
  end;
end;

procedure WypiszZawartoscTablicy;
var
  S, Rezultat : string;
  I, J, K, Dlugosc : integer;
begin
  Str := '';
  for I := Low(Tab) to High(Tab) do
  begin
    if Tab[I] <> '' then
    begin
      S := Tab[I];
      Rezultat := '';
      Dlugosc := Length(S);
      J := 1;
      repeat
        for K := 1 to Dlugosc do
        begin
          Rezultat := Rezultat + S[J];
        end;
        J := J + 1;
        Dlugosc := Dlugosc - 1;
      until J > Length(S);
      Str := Str + Rezultat + ' ';
    end;
  end;
  Writeln(Str);
end;

begin
  repeat
    Write('Wpisz wyrazy oddzielone spacjami: ');
    Readln(Tekst);
  until Tekst <> '';
  UstawWartosciTablicy;
  WypiszZawartoscTablicy;
  Readln;
end.

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