Wiyam.
Dawno sam nie pisałem z żadnym problemem, a przez rozwiązywania tylko banałów sam się zamotałem i nie radzę sobie z wydaje mi
się dosyć prostym problemem. Chodzi o napisanie funkcji, ktora działała by pod Delphi także w konsoli ale bez użycia dodatkowych
modułów nie licząc funkcji IntToStr oraz StrToInt. Dostałem zapytanie na PMkę o zadanie właśnie w ktorym program oprócz tego że
z podanego zakresu ma wypisać liczby pierwsze to też sprawdzić czy z podanych liczb da się ułożyć inną liczbę. Nie szło mi wcale w
konsolowej to zacząłem coś modzić pod VCL żeby zobaczyć czy dobrze kombinuje. Mianowicie chodzi o to że jak w CałaLiczba mamy
na przykład 123 a w Zestaw 122 to zwróci False, ale dla Liczby 12 i Zestawu 122 będzie zwracalo True. Czyli podsumowując, chodzi
o to że jak mamy zestaw liczb 12311 to to możemy z nich ułożyć CałąLiczbę 12, 31, 311 ale 323 już nie. I wiem, że trochę pokrętnie
to wytłumaczyłem, ale być może ktoś sie zlituje i poda jakiś prosty kod. Ten mój źle działa. Nie wychodzi mi sprawdzanie powtórzen,
bo nie wiem czy w ogóle zliczam to jak należy, a nawet jeśli tak to później nie mam pomysłu na końcowe określenie rezultatu funkcji.
//...
var
Form1 : TForm1;
LItm : TListItem;
const
Pft : array[boolean] of string = ('Fałsz', 'PRAWDA');
implementation
{$R *.dfm}
function UnikalnaLiczba(CalaLiczba, Zestaw : integer) : boolean;
var
S : string;
I, Liczba, Licznik : integer;
TabPrawdy : array[0..9] of boolean;
TablicaL, TablicaZ : array[0..9] of Byte;
begin
Licznik := 0;
UnikalnaLiczba := False;
for I := Low(TablicaL) to High(TablicaL) do
begin
TablicaL[I] := 0;
TablicaZ[I] := 0;
TabPrawdy[I] := False;
end;
for I := 1 to Length(IntToStr(CalaLiczba)) do
begin
Liczba := StrToInt(IntToStr(CalaLiczba)[I]);
TablicaL[Liczba] := TablicaL[Liczba] + 1;
end;
for I := 1 to Length(IntToStr(Zestaw)) do
begin
Liczba := StrToInt(IntToStr(Zestaw)[I]);
TablicaZ[Liczba] := TablicaZ[Liczba] + 1
end;
for I := Low(TabPrawdy) to High(TabPrawdy) do
begin
TabPrawdy[I] := (TablicaL[I] > 0) and (TablicaZ[I] > 0) and (TablicaL[I] <= TablicaZ[I]);
if TabPrawdy[I] = True then
begin
Licznik := Licznik + 1;
end;
end;
UnikalnaLiczba := Licznik = Length(IntToStr(CalaLiczba));
with Form1 do
begin
LV1.Items.Clear;
for I := Low(TablicaL) to High(TablicaL) do
begin
LItm := LV1.Items.Add;
Litm.Caption := IntToStr(I);
LItm.SubItems.Add(IntToStr(TablicaL[I]));
LItm.SubItems.Add(IntToStr(TablicaZ[I]));
Litm.SubItems.Add(Pft[TabPrawdy[I] = True])
end;
end;
end;
procedure TForm1.Button1Click(Sender : TObject);
begin
Caption := Pft[UnikalnaLiczba(StrToInt(Edit1.Text), StrToInt(Edit2.Text)) = True];
end;