witam
ładnych pare lat nie babrałem się w delphi, a nawet jak się babrałem to nie szło najlepiej :P
i teraz potrzebuje pomocy w napisaniu prostego programu
a mianowicie ma to być kalkulator
jest 26 liczb np. 2626, 273, 1027...
ten kalkulator miałby te wszystkie liczby pododawać w każdej możliwej kombinacji
ALE interesują mnie tylko wyniki typu 1000, 2000, 3000 itd aż do 10000 <-- żeby mi je wyszukał.
np. 150+500+350=1000 <--taki wynik mi wyświetli,
150+540+350=1040 <-- tego mi nie wyświetli, bo szukam wyników tysięcznych (2000, 5000 itd.)
proszę o jakieś wskazówki, czy fragmenty kodu, nie wiem jak to jakoś logicznie połączyć
jeśli ktoś jest w stanie pomóc to byłbym bardzo wdzięczny. mam nadzieje że w sposób wystarczająco klarowny przedstawiłem o co mi chodzi.
pozdrawiam
może dodawać obojętnie ile liczb (z puli dwudziestu sześciu liczb)
2626, 1456, 2652, 520, 936, 260, 2574, 364, 260, 2834, 1638, 1781, 2899, 2847, 2509, 273, 767, 923, 299, 169, 2873, 1235, 1027, 2405, 2275, 845
jak widać np. liczba 260 występuje 2 razy wiec tyle razy może być użyta
jest baza 26liczb, program wybiera liczby w roznych kombinacjach i szuka wyniku tysięcznego (1000, 2000, 3000... do 10000)
- Rejestracja:prawie 15 lat
- Ostatnio:prawie 11 lat
- Postów:184
simplex napisał(a)
Niestety, będzie skomplikowane i czasochłonne.
No i niestety będę musiał odwołać, to co napisałem wcześniej. Powinienem bardziej wierzyć w możliwości obliczeniowe dzisiejszych komputerów. Mój komputer (wcale nie dzisiejszy, bo ma już ok. 8 lat) obliczył to w pół minuty.
Dla tych 26 przykładowych liczb z drugiego posta autora wątku wyszło 57 655 sum podzielnych przez 1000. Jako ciekawostkę dodam, że są to tylko dwie różne liczby - 13 000 oraz 26 000.
Poniżej algorytm, z którego korzystałem. Może nie jest optymalny, ale mam nadzieję, że jest poprawny
procedure TForm1.Button1Click(Sender: TObject);
const
Tab: array[1..26] of Integer = (2626, 1456, 2652, 520, 936, 260,
2574, 364, 260, 2834, 1638, 1781,
2899, 2847, 2509, 273, 767, 923,
299, 169, 2873, 1235, 1027, 2405,
2275, 845);
var
Suma, Ile: Integer;
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z: Boolean;
begin
Ile:= 0;
for a:= false to true do
for b:= false to true do
for c:= false to true do
for d:= false to true do
for e:= false to true do
for f:= false to true do
for g:= false to true do
for h:= false to true do
for i:= false to true do
for j:= false to true do
for k:= false to true do
for l:= false to true do
for m:= false to true do
for n:= false to true do
for o:= false to true do
for p:= false to true do
for q:= false to true do
for r:= false to true do
for s:= false to true do
for t:= false to true do
for u:= false to true do
for v:= false to true do
for w:= false to true do
for x:= false to true do
for y:= false to true do
for z:= false to true do begin
Suma:= 0;
if a then Inc(Suma, Tab[1]);
if b then Inc(Suma, Tab[2]);
if c then Inc(Suma, Tab[3]);
if d then Inc(Suma, Tab[4]);
if e then Inc(Suma, Tab[5]);
if f then Inc(Suma, Tab[6]);
if g then Inc(Suma, Tab[7]);
if h then Inc(Suma, Tab[8]);
if i then Inc(Suma, Tab[9]);
if j then Inc(Suma, Tab[10]);
if k then Inc(Suma, Tab[11]);
if l then Inc(Suma, Tab[12]);
if m then Inc(Suma, Tab[13]);
if n then Inc(Suma, Tab[14]);
if o then Inc(Suma, Tab[15]);
if p then Inc(Suma, Tab[16]);
if q then Inc(Suma, Tab[17]);
if r then Inc(Suma, Tab[18]);
if s then Inc(Suma, Tab[19]);
if t then Inc(Suma, Tab[20]);
if u then Inc(Suma, Tab[21]);
if v then Inc(Suma, Tab[22]);
if w then Inc(Suma, Tab[23]);
if x then Inc(Suma, Tab[24]);
if y then Inc(Suma, Tab[25]);
if z then Inc(Suma, Tab[26]);
if (Suma mod 1000 = 0) and (Suma <> 0) then begin
Inc(Ile);
Memo1.Lines.Add(IntToStr(Suma));
end;
end;
Memo1.Lines.Add('Razem ' + IntToStr(Ile));
end;


- Rejestracja:ponad 22 lata
- Ostatnio:ponad 9 lat
- Postów:1668
simplex napisał(a)
Jako ciekawostkę dodam, że są to tylko dwie różne liczby - 13 000 oraz 26 000.
tego zdania nie lapie...
btw, mozna by chyba skrocic ten kod o kilka linijek dajac jeszcze jedna petle i tablice zamiast zmiennych abcd...
- Rejestracja:prawie 15 lat
- Ostatnio:prawie 11 lat
- Postów:184
Cimak
- Wśród tych 57655 liczb (podzielnych przez 1000), które znalazł program, przewijają się tylko liczby 13000 i 26000. Innych nie ma. Ot taka ciekawa właściwość.
- Też pomyślałem na zastosowaniem tablicy zamiast 26 zmiennych, ale odpuściłem. Jakoś nic mi nie przychodziło do głowy
- Rejestracja:prawie 15 lat
- Ostatnio:prawie 11 lat
- Postów:184
Oczywiście, że jest możliwość i nie jest to wcale trudne
- Deklarujesz dodatkową zmienną tekstową (np Tekst)
- W odpowiednim miejscu przypisujesz jej łańcuch pusty (domyśl się w którym)
- Modyfikujesz warunki if ... then (oczywiście każdy), aby zawierały dwie instrukcje. W tej drugiej instrukcji dodajesz do zmiennej Tekst to, o co powiększasz zmienną Suma (oczywiście zamienione na tekst). Dwie instrukcje, więc koniecznie begin ... end
- Modyfikujesz instrukcję, która wyświetla sumę, aby wyświetlała Sumę i Tekst
Wiem, że lepszy byłby gotowiec, ale ostatecznie to Twój program.

- Rejestracja:ponad 22 lata
- Ostatnio:ponad 9 lat
- Postów:1668
simplex napisał(a)
Oczywiście, że jest możliwość i nie jest to wcale trudne
- Deklarujesz dodatkową zmienną tekstową (np Tekst)
- W odpowiednim miejscu przypisujesz jej łańcuch pusty (domyśl się w którym)
- Modyfikujesz warunki if ... then (oczywiście każdy), aby zawierały dwie instrukcje. W tej drugiej instrukcji dodajesz do zmiennej Tekst to, o co powiększasz zmienną Suma (oczywiście zamienione na tekst). Dwie instrukcje, więc koniecznie begin ... end
- Modyfikujesz instrukcję, która wyświetla sumę, aby wyświetlała Sumę i Tekst
Wiem, że lepszy byłby gotowiec, ale ostatecznie to Twój program.
a gdzie optymalizacja?
nawet jak suma nie bedzie podzielna przez 1000 to program bedzie wykonywal dodatkowe linijki kodu - przy tkaiej ilosci danych czas sie moze znacznie wydłużyć.
lepiej jest sprawdzic jakie liczby zsumowano dopiero wtedy gdy ich suma bedzie podzielna przez 1000.
- Rejestracja:ponad 14 lat
- Ostatnio:ponad 14 lat
- Postów:3
od ostatniego posta mecze sie z tym delphi i nic ciagle jakies bledy, w koncu wyrzucilem ten delphi compilatior
prosiłbym o gotowca(jesli ktos mialby checi i czas) bo juz mi leb od tego wysiada, a program jest bardzo potrzebny
dzieki simplex za udostepneinie tego kodu
pozdrawiam