Funkcja Insert przechwytywanie z ciągu znaków

0

Witam.
Zastanawiałem się, jak to wykonać, ale nie udało mi się.

Mam program w PASCALU, który musi wczytać N liczb. N jest niewiadome i program musi wiedzieć, ile tych liczb jest. Mam działający kod:

 Readln(losowania);
 for i:= 1 to losowania do
  begin
   Readln(podane);
   polaskreslen:=1; q:=1;
    repeat
     repeat begin insert(podane[q], temp, 0); q:=q+1; end; until ((podane[q]=' ')or(q>length(podane)));
     for e:=1 to length(temp) do insert(temp[e], temp2, 0);
     val(temp2, z, t); temp2:=''; temp:='';
     skreslenia[i,polaskreslen]:=z;polaskreslen:=polaskreslen+1;  q:=q+1;
     if max<polaskreslen then max:=polaskreslen;
    until q>length(podane);
  end;

Mój problem polega na tym, że w linii 7 liczby zapisują się do temp, ale kiedy podaje 54 zapisuje się w odwrotnej kolejności, jako 45. W linii 8 odwracam tą kolejność i wszystko działa, ale... zależy mi na optymalizacji kodu. Czy zna ktoś sposób, w jaki można by się pozbyć tej dodatkowej pętli, która zamienia kolejność?

Dziękuje za pomoc

Pozdrawiam
Martodox

0

tak na wstępie to
" formatuj kod zanim wkleisz"
@cimak
:>

0

No właśnie kod tak "sformatowany", że na niego nawet dokładnie nie spojrzałem. Jednak jeżeli chcesz sobie
wczytać N liczb oddzielonych spacjami - to najlepiej użyć tablicy. Poniższy kod to pokazuje, przyjąłem sobie,
że tablica może mieć maksymalnie 11 elementów, ale jak Tobie potrzeba więcej to możesz zwiększyć. Tak w
sumie to najważniejszy z kodu poniżej jest fragment od while Tekst[I] <> '' do możesz sobie przerobić aby
zamiast do tablicy dopisywał kolejne liczby oddzielone spacją do jednej zmiennej string albo co tylko się da.

program str_tab;

const
  N = 10;

var
  I : integer;
  Tab : array[0..N] of string;
  Str, Tekst, Separator : string;

procedure UstawWartosciTablicy;
begin
  Separator := ' ';
{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
    Dec(I);
    Delete(Tekst, I + 1, Length(Tekst));
  end;

  I := 1;
  while Tekst[I] <> '' do
  begin
    Str := Copy(Tekst, 1, Pos(Separator, Tekst) - 1);
    Tab[I - 1] := Str;
    Delete(Tekst, 1, Pos(Separator, Tekst));
    if Pos(Separator, Tekst) = 0 then
    begin
      Tab[I] := Tekst;
      Exit;
    end;
    I := I + 1;
  end;
end;

procedure WypiszZawartoscTablicy;
begin
  for I := 0 to N do
  begin
    if Tab[I] <> '' then
    begin
      Writeln(Tab[I]);
    end;
  end;
end;

begin
  Write(' Podaj kolejne liczby oddzielone spacjami: ');
  Readln(Tekst);
  UstawWartosciTablicy;
  WypiszZawartoscTablicy;
  Readln;
end.
0

Nie wiem co wy chcecie od mojego kodu [diabel] Jest sformatowany.

Co do samego rozwiązania to przeanalizowałem twój kod i zamiast starej procedury z 3 pętlami, mam nową z jedną pętlą. Dzięki za wskazówkę.

procedure dzielenie;
begin

 pola := 1; q := 1;
  repeat
   begin
    temp := copy(podane, 1, pos(' ', podane) - 1);
    val(temp, z, t); temp := '';
    skreslenia[i, pola] := z;
    pola := pola + 1;
    delete(podane, 1, pos(' ', podane));
    if pos(' ', podane) = 0 then
     begin
      temp := podane;
      val(temp, z, t); temp := '';
      skreslenia[i, pola] := z;
      exit;
     end;
    q := q + 1;
   end;
  until podane[q] = '';


end;

Można zamknąć

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