Funkcja zwracająca tekst utworzony z elementów tablicy zwierający tylko litery - problem

0

Witam, napisałem program który za za zadanie wykonać kilka rzeczy.

Pierwszy problem pojawia się w funkcji "tekst" ponieważ funkcja zwraca mi tylko pierwszą podaną w tablicy literę a ma zwracać tekst utworzony z podanych liter. Poniżej kod.

Drugi problem. Mam za zadanie napisać procedura(arg.tablica,element,pozycja) wyszukująca najmniejszy element i jego pozycję. Całkowicie nie rozumiem jak to niby ma się odbywać i co przykładowo ma być tym najmniejszym elementem?

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type tablica = array [1..10] of char;

function duze (t:tablica) : byte;
var
  i:integer;
  ilosc:byte;
  begin
    ilosc:=0;
    for i:=1 to 10 do
    begin
      if (t[i] >= 'A') and (t[i] <='Z') then
      inc(ilosc);
    end;
    result:=ilosc
  end;

function suma (t:tablica) : integer;
var
  i:integer;
  tabl:array [1..10] of integer;
  ilosc:byte;
  sum:integer;
 begin
   ilosc:=0;
   for i:=1 to 10 do
   begin
     if (t[i]>='0') and (t[i]<='9') then
     begin
     inc(ilosc);
     tabl[ilosc]:= ord(t[i])-48;
     end;
   end;
   sum:=0;
   for i:=1 to ilosc do
   begin
     sum:=sum+tabl[i];
   end;

   result:=sum;
 end;

function tekst (t:tablica):string;
var
    s:string;
    i:byte;
    ilosc:byte;
  begin
       ilosc:=0;
       s:=' ';
      for i:=1 to 10 do
      begin
        if (t[i] in ['A'..'Z']) or (t[i] in ['a'..'z']) then
           begin
        inc(ilosc);
        s[ilosc]:=t[i];
           end;
      end;
      result:=s;
  end;



var             //main
  tab:tablica;
  i:byte;
  f_in:Text;

begin
  for i:=1 to 10 do
  begin
       write('podaj ',i,' element tablicy ');
       readln(tab[i]);
  end;

  for i:=1 to 10 do
  begin
       writeln(i,' element tablicy wynosi ',tab[i]);
  end;
  writeln('Ilosc duzych liter wynosi',duze(tab));
  writeln('Suma podanych liczb= ', suma(tab));
  writeln('Tekst z liter to: ', tekst(tab));

  assign(f_in, 'c:/onp/plik.txt');
  reset(f_in);

  for i:=1 to 10 do
  begin
    read(f_in, tab[i]);
    if (tab[i] <> ' ') and (tab[i] <> '.') then  writeln(tab[i])
  end;

  close(f_in);
  readln;
end.
1

Funkcja Tekst według mnie powinna wyglądać tak, bo Twoja jest w ogóle bez sensu. Nie możesz tak ustawiać wartości zmiennej S, której nie nadałeś żadnej długości przez SetLength. W ogóle zmienna S jest według mnie zbędna. Poza tym popracuj nad formatowaniem, bo masz je trochę błedne. A z tymi wartościami elementów też nie wiem o co chodzi, bo tutaj operujesz na tekście, a jedynymi wartościami liczbowymi są ilości znaków. Chyba, że w tabilicy charów mają być też znaki jako cyfry i z nich masz je zamieniać na liczby i na przykład podać największą oraz najmniejszą ich sumę. Ale to byś musiał sprecyzować gdzie jest dokładna i oryginalna treść tego zadania. Często przy zadaniach podaje się przykładowe wejście i oczekiwane wyjście. Być może chodzi o kilka różnych tablic znaków z wartościami zamienionymi na liczby, gdzie podajemy która ma największą i najmniejszą sumę. Ale to tylko moje zgadywanie.

function Tekst(T : Tablica) : string;
var
  I : integer;
begin
  Result := '';
  for i := Low(T) to High(T) do
  begin
    if (T[I] in ['A'..'Z']) or (T[I] in ['a'..'z']) then
    begin
      Result := Result + T[I];
    end;
  end;
end;
0

A może lepiej tak:

function Tekst(T:Tablica):String;
var I:integer;
begin
  Result := '';
  for I:=Low(T) to High(T) do if T[I] in ['A'..'Z','a'..'z'] then Result:=Result+T[I];
end;

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