Advertisement
pseudocreator

maxsum

Mar 17th, 2014
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //maksimalna suma <proizvoljnog> broja susednih elemenata u nizu celih brojeva
  2.  
  3. MODULE zadatakkonacnoresenje;
  4. FROM FIO IMPORT WrInt, WrLn, Create, File, Close;
  5. FROM InOut IMPORT ReadInt, WriteInt, WriteLn, WriteString, WriteCard, ReadCard;
  6.  
  7. CONST
  8.      N = 5;
  9. TYPE
  10.     interval = [1..N];
  11. VAR
  12.    max, suma : INTEGER;
  13.    d, g, od, do : interval;
  14.    i, unos : CARDINAL;
  15.    x : ARRAY[1..N] OF INTEGER;
  16.    f : File;
  17.  
  18. PROCEDURE maxsum1(niz: ARRAY OF INTEGER; VAR odd, doo : interval):INTEGER;
  19. VAR
  20.    d, g : interval;
  21.    i : CARDINAL;
  22. BEGIN
  23.      max := 0;
  24.      FOR d := 1 TO N DO
  25.         FOR g := 1 TO N DO
  26.            suma := 0;
  27.            FOR i := d TO g DO
  28.               suma := suma + niz[i-1]
  29.            END;
  30.            IF suma > max THEN
  31.              max := suma;
  32.              odd := d;
  33.              doo := g
  34.            END
  35.         END
  36.      END;
  37.      RETURN max;
  38. END maxsum1;
  39.  
  40.  
  41. PROCEDURE maxsum2(niz: ARRAY OF INTEGER; VAR odd, doo : interval):INTEGER;
  42. VAR
  43.    d, g : interval;
  44.    i : CARDINAL;
  45. BEGIN
  46.      max := 0;
  47.      FOR d := 1 TO N DO
  48.         suma := 0;
  49.         FOR g := d TO N DO
  50.             suma := suma + niz[g-1];
  51.             IF suma > max THEN
  52.             max := suma;
  53.             odd := d;
  54.             doo := g
  55.             END
  56.          END
  57.       END;
  58.       RETURN max;
  59. END maxsum2;
  60.  
  61.  
  62. PROCEDURE maxsum3(niz: ARRAY OF INTEGER; VAR odd, doo : interval):INTEGER;
  63. VAR
  64.    d, g : CARDINAL;
  65.    i : CARDINAL;
  66.    pom : ARRAY [0..N] OF INTEGER;
  67. BEGIN
  68.      pom[0] := 0;
  69.      FOR i := 1 TO N DO
  70.         pom[i] := pom[i-1] + niz[i-1]
  71.      END;
  72.      max := 0;
  73.      FOR d := 1 TO N DO
  74.         FOR g := 1 TO N DO
  75.            suma := pom[g] - pom[d-1];
  76.            IF suma > max THEN
  77.               max := suma;
  78.               odd := d;
  79.               doo := g
  80.            END
  81.         END
  82.      END;
  83.      RETURN max;
  84. END maxsum3;
  85.  
  86.  
  87. BEGIN
  88.      {//prvi put kriejtujes i upisujes i brojevi N, posle kad jednom napravis
  89.      //malo sredi ovih par redova da izvlacis informacije iz vec gotovog i dodajes ih
  90.      //nizu;
  91.             }
  92.  
  93.      WriteString('Unesite niz x: ');
  94.      WriteLn;
  95.      f := Create('BrojeviN');
  96.      FOR i := 1 TO N DO
  97.      ReadInt(x[i]);
  98.      WrInt(f, x[i], 0);
  99.      WrLn(f);
  100.      WriteLn;
  101.      END;
  102.      Close(f);
  103.      REPEAT
  104.            WriteLn;
  105.            WriteString('Odaberi brzu, sporiju ili naprednu proceduru');
  106.            WriteLn;
  107.            WriteString('uneti 1, 2 ili 3 :');
  108.            ReadCard(unos);
  109.      UNTIL (unos = 1) OR (unos = 2) OR (unos = 3);
  110.      CASE unos OF
  111.         1: max := maxsum1(x, od, do) |
  112.  
  113.         2: max := maxsum2(x, od, do) |
  114.  
  115.         3: max := maxsum3(x, od, do)
  116.      ELSE
  117.          WriteString('Greska prvog reda!')
  118.      END;
  119.      WriteLn;
  120.      WriteString('Maksimum je');
  121.      WriteInt(max,3);
  122.      WriteString(' u intervalu od ');
  123.      WriteCard(od,3);
  124.      WriteString(' do ');
  125.      WriteCard(do,3)
  126.  
  127. END zadatakkonacnoresenje.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement