Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc; Pascal zadatak;

[es] :: Pascal / Delphi / Kylix :: Pomoc; Pascal zadatak;

[ Pregleda: 2901 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Byk
Podgorica

Član broj: 55128
Poruke: 20
*.proxy.cg.yu.



Profil

icon Pomoc; Pascal zadatak;19.04.2005. u 11:52 - pre 231 meseci
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.

 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

Član broj: 44507
Poruke: 126
*.172.EUnet.yu.



Profil

icon Re: Pomoc; Pascal zadatak;21.04.2005. u 16:58 - pre 231 meseci
Koliko sam razumeo iz komentara u programu program treba da stampa sve kombinacije sabiraka koje daju odredjeni zbir. Ako je tako onda ovo
Citat:

1+1+1+1+1
2+1+1+1
2+2+1
3+2
4+1
5

nisu sva resenja, jer fali 3+1+1!

Nisam se mnogo udubljivao u tvoj kod, ali sam napisao rekurzivno resenje, koje je dosta elegantnije. Pogledaj, pa ako ti resenje odgovara i ako bude trebalo mogu da ti objasnim i kako radi.

PS. Izlaz se stampa u fajl rastavljanje.txt!
Sendvic uvek pada na namazanu stranu!
Prikačeni fajlovi
 
Odgovor na temu

--SOULMaTe--
Nemanja Skoric
Novi Sad

Član broj: 1464
Poruke: 173
*.nat-pool.nsad.sbb.co.yu.



Profil

icon Re: Pomoc; Pascal zadatak;21.04.2005. u 21:50 - pre 231 meseci
Potrazi malo po forumu, samo par topica ispod sam napisao algoritam.

http://www.elitesecurity.org/poruka/710067
Don’t do drugs, sleep deprivation is better.
 
Odgovor na temu

Byk
Podgorica

Član broj: 55128
Poruke: 20
*.proxy.cg.yu.



Profil

icon Re: Pomoc; Pascal zadatak;22.04.2005. u 15:27 - pre 231 meseci
Citat:
PeraKojotSuperGenije: Koliko sam razumeo iz komentara u programu program treba da stampa sve kombinacije sabiraka koje daju odredjeni zbir. Ako je tako onda ovo

nisu sva resenja, jer fali 3+1+1!

Nisam se mnogo udubljivao u tvoj kod, ali sam napisao rekurzivno resenje, koje je dosta elegantnije. Pogledaj, pa ako ti resenje odgovara i ako bude trebalo mogu da ti objasnim i kako radi.

PS. Izlaz se stampa u fajl rastavljanje.txt!

Ok, hvala. Definitivno je lakse resenje preko word deklarisanja i upisivanja u file. Nedostaje ti jedino ponovno otvaranje fajla rastavljanje.txt i ispisivanje njegovog sadrzaja (resenja) na ekranu, ali to je najmanji problem...
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pomoc; Pascal zadatak;

[ Pregleda: 2901 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.