[ Byk @ 19.04.2005. 11:52 ] @
Vec sam trzio pomoc za isti zadatak ali kako sam ga u medjuvremenu uradio naisao sam na novi problem: Code: PROGRAM SABIRCI2; USES CRT; TYPE NIZ=ARRAY [1..10] OF INTEGER; VAR X,Y:NIZ; I,J,K,N,M,SLED:INTEGER; PROCEDURE JEDINICE (VAR X:NIZ; N:INTEGER); {-Ucitava niz koji ima onoliko jedinica koliko ih ima i uneseni broj N} VAR I:INTEGER; BEGIN FOR I:=1 TO N DO X[I]:=1; WRITE (' ',X[1]); FOR I:=2 TO N DO WRITE ('+',X[I]); END; PROCEDURE POCETAK (VAR X:NIZ; N:INTEGER); VAR I:INTEGER; BEGIN X[1]:=2; X[N]:=0; WRITE (' ',X[1]); FOR I:=2 TO N-1 DO WRITE ('+',X[I]); END; PROCEDURE GRANICE (VAR X:NIZ; N:INTEGER); {-Nalazi prvi (od pocetka) najmanji i prvi (od kraja) najveci broj} VAR T,I,K,TC,P,MAX,MIN,SLED:INTEGER; BEGIN MIN:=X[1]; MAX:=X[N]; I:=0; REPEAT I:=I+1; P:=X[N-I]; IF (MAX<X[N-I]) THEN BEGIN X[N-I]:=X[N-I]-1; TC:=X[N-I]; END; UNTIL (P>X[N-I]); I:=1; REPEAT I:=I+1; P:=X[I]; IF (MIN>X[I]) THEN BEGIN IF ((X[I]=0) OR (X[I]=TC)) THEN BEGIN P:=X[1]; X[1]:=X[1]+1; END ELSE X[I]:=X[I]+1; END; UNTIL ((P<X[I]) OR (P<X[1])); WRITE (' ',X[1]); FOR I:=2 TO N DO BEGIN IF (X[I]<>0) THEN WRITE ('+',X[I]); IF (X[I]>1) THEN SLED:=X[I]; END; WRITELN; END; {PROCEDURE NAJVECI (VAR X:NIZ; N:INTEGER); VAR M,I,VECI:INTEGER; BEGIN VECI:=X[N]; I:=0; REPEAT I:=I+1; IF (X[N-I]>VECI) THEN VECI:=X[N-I]; UNTIL (VECI=X[N-I]); M:=VECI; WRITELN ('*****',M,'*****'); END;} {PROCEDURE ZADNJI (VAR Y:NIZ; M:INTEGER); VAR P1,TC1,T,J,MAX2,MIN1,MAX1:INTEGER; BEGIN M:=SLED; FOR J:=1 TO M DO Y[J]:=1; MAX2:=Y[M]; J:=0; REPEAT J:=J+1; IF (Y[M-J]>MAX2) THEN MAX2:=Y[M-1]; UNTIL (MAX2=Y[M-1]); IF (Y[M]>1) THEN BEGIN M:=Y[M]; REPEAT MIN1:=Y[1]; MAX1:=Y[M]; J:=0; REPEAT J:=J+1; P1:=Y[M-J]; IF (MAX1<Y[M-J]) THEN BEGIN Y[M-J]:=Y[M-J]-1; TC1:=Y[M-J]; END; UNTIL (P1>Y[M-J]); J:=1; REPEAT J:=J+1; P1:=Y[J]; IF (MIN1>Y[J]) THEN BEGIN IF ((Y[J]=0) OR (Y[J]=TC1)) THEN BEGIN P1:=Y[1]; Y[1]:=Y[1]+1; END ELSE Y[J]:=X[J]+1; END; UNTIL ((P1<Y[J]) OR (P1<Y[1])); WRITE (Y[1]); FOR J:=2 TO M DO IF (Y[J]<>0) THEN WRITE ('+',Y[J]); WRITELN; UNTIL (Y[1]=M); END; END;} BEGIN WRITELN; {ovaj dio mozete zanemariti jer je dio grafike programa} TEXTCOLOR (RED); TEXTBACKGROUND (BLACK); WRITE (#457); FOR I:=1 TO 7 DO WRITE (#461#461#461#461#461#461#461#461#461#461#461); WRITELN (#443); WRITE (#442#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITE (#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITELN (#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#442); WRITE (#442#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITE (#176#176#176#176#176#176#176#176#176); TEXTCOLOR (LIGHTBLUE); TEXTBACKGROUND (BLACK); WRITE ('Pocetak programa'); TEXTCOLOR (RED); WRITE(#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITELN (#176#176#176#176#176#176#176#176#176#442); WRITE (#442#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITE (#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176); WRITELN (#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#176#442); WRITE (#456); FOR I:=1 TO 7 DO WRITE (#461#461#461#461#461#461#461#461#461#461#461); WRITE (#444); WRITELN; WRITELN; TEXTCOLOR (LIGHTBLUE); {kraj grafickog dijela :)} WRITE (' Unesite broj: '); READLN (N); WRITELN (' Kombinacije cjelobrojnih sabiraka ovog broja su: '); IF (N>1) THEN BEGIN JEDINICE (X,N); WRITELN; POCETAK (X,N); WRITELN; WHILE (X[1]<>N) DO BEGIN GRANICE (X,N); END; END ELSE WRITE (' ',N); READLN; CLRSCR; END. {Program stampa kombinacije sabiraka unijetog broja N} Sto je problem? Pa program ovakav kakav jeste stampa skoro sva resenja. Npr broj 5: 1+1+1+1+1 2+1+1+1 2+2+1 3+2 4+1 5 I to su sva resenja. Ali za vece brojeve npr. broj 7: 1+1+1+1+1+1+1 2+1+1+1+1+1 2+2+1+1+1 2+2+2+1 3+2+2 -evo prve greske, znaci treba jos da stampa 3+2+1+1 3+3+1 4+3 -i ovdje treba da bude jos: 4+2+1 i 4+1+1+1 5+2 -slicno... 6+1 7 Problem je u sledecem: ako je zadnji broj veci od jedan nece ga rastavljati. Ja sam pokusao da provjeravam da li zadnji broj veci od 1 i ako jeste pozivam posebnu proceduru da ga rastavi i stampa pozivajuci proceduru u proceduri ali ne ide. |