Dzielenie liczby na...

0

Mam małe pytanko odnośnie dzielenia liczby a minowicie jak podzielic liczbe na nierówne części w taki sposób by po zsumowaniu tych liczb wyszła nam ta którą zesmy dzielili.
Np:
liczba do podzielenia ma wartosc 127
my ja chcemy podzielic na 11 liczb (moga sie powtarac) ktore po zsumowaniu dadza nam 127.

0

liczba:=127;
czesc:=liczba div 11;
for i:=1 to 11 do czesci[i] = czesc;
czesc[11] = czesc + liczba mod 11;

0

Metoda ta działa
Teraz dzieląc liczbe 127 na 11 liczb to do tablicy jest wpisywane 10 liczb owartości 11 a 11 liczba to 17. I w ten sposób otrzymuje sie 127.
pisząc ze liczby moga sie powtarzac chodziło mi troszke o coś innego,
ze te 127 zostanie podzielone na 11 różnych liczb z tym że niektóre mogą sie powtórzyc.

<font color="red">127=8+11+24+6+8+2+11+10+23+8+16.</span>

JEST TO w ogóle DO ZROBIENIA???

0

To może tak:

for i := 0 to 9 do
begin
  T[i] := L div 2;
  L := L mod 2;
end;
T[10] := L;
0

JEST TO w ogóle DO ZROBIENIA???

Hmm.. Spróbujmy :>

uses Math
...

type
TArr = array of Integer;
...

procedure PodzielNaLiczby(Liczba, IleSkladnikow: Integer; Variation: Real; var Tablica: TArr);
var
a,b,c,g,i: Integer;
begin
Randomize;
SetLength(Tablica,IleSkladnikow);
b:=0; g:=0;
for i:=1 to IleSkladnikow do begin
    a:=(Liczba*i) div IleSkladnikow-b;
    Inc(b,a);
    repeat
    c:=Random(Round(2*Variation*a))+Round((1-Variation)*a)
    until c>=0;
    Inc(g,c);
    Tablica[i-1]:=c;
    end;
g:=Liczba-g;
while g<>0 do for i:=0 to High(Tablica) do begin
      a:=Tablica[i]+Sign(g);
      if a>=0 then begin
         Tablica[i]:=a;
         Dec(g,Sign(g));
         end;
      end;
end;

Objaśnienia:
Liczba - liczba którą dzielimy
IleSkladnikow - bez komentarza
Variation - liczba z zakresu 0..1 oznaczająca maksymalne odchylenie od wartości średniej; jeżeli ustawimy 0 wszystkie liczby będą prawie równe; jeżeli 1 bardzo zróżnicowane.
Tablica - "procedural result"

0

To może tak:

for i := 0 to 9 do
begin
T[i] := L div 2;
L := L mod 2;
end;
T[10] := L;

Kodzik ten też nie robi tego czego oczekuje. Gdyż dzieli mi liczbe 127 na 2 do tablicy wpisuje wynik a nastepnie same zera T[10] ma wartosc 1.
A ptorzebne jest jak wyżej pisałem cos takiego przykład:
127 zostanie podzielone na coś przykładowo takiego : 8+11+24+6+8+2+11+10+23+8+16.

0

Skoro zera się nie podobają to proszę:

type TTablica = array [0..10] of Integer;

procedure Dziel(L: Integer; var T: TTablica);
const
  k = 10;
var
  Pom, i: Integer;
begin
  L := L - 11;
  for i := 0 to 10 do
  begin
    Pom := L div (Random(k)+1);
    T[i] := Pom+1;
    L := L - Pom;
  end;
end;

Oczywiście Randomize gdzieś na początku trzeba dać.

Przykładowy wynik:
15
13
10
10
8
11
8
13
7
4
3

Ew. dobrać należy k.

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