Advertisement
pseudocreator

SPA2 unosStudenata

Oct 18th, 2014
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Unos, ispis Studenata
  2. MODULE vf;
  3. FROM InOut IMPORT WriteString, WriteLn, ReadInt, WriteInt, ReadString, Write;
  4. FROM Str IMPORT Compare, Length;
  5. FROM FIO IMPORT Open, Create, RdStr, WrStr, WrLn, EOF, File, Close, WrInt, RdInt;
  6.  
  7. CONST
  8.      MaxString = 20;
  9.      Maxstud = 100;
  10.      fajl = "nekifajl7.txt";
  11.  
  12. TYPE
  13.     STRING = ARRAY[0..MaxString] OF CHAR;
  14.     STUDENT = RECORD
  15.                  ime : STRING;
  16.                  prezime : STRING;
  17.                  godiste : INTEGER
  18.               END;
  19.               STUDENTI = ARRAY[0..Maxstud] OF STUDENT;
  20.  
  21. VAR
  22.    studenti : STUDENTI;
  23.    f1, f2 : File;
  24.    brStudenata, brUnosa : INTEGER;
  25.    str1, str2 : STRING;
  26.    mesto1 : INTEGER;
  27.  
  28. PROCEDURE init(VAR student: STUDENTI);
  29. VAR
  30.    i : INTEGER;
  31. BEGIN
  32.      FOR i := 0 TO Maxstud DO
  33.          student[i].ime := "";
  34.          student[i].prezime := "";
  35.          student[i].godiste := 0
  36.      END
  37. END init;
  38.  
  39. PROCEDURE poredi(str1, str2 : STRING): INTEGER;
  40. VAR
  41.    duz1, duz2 : INTEGER;
  42. BEGIN
  43.      duz1 := Length(str1);
  44.      duz2 := Length(str2);
  45.      IF (duz1 = duz2) THEN
  46.        RETURN 0
  47.      ELSIF (duz1 > duz2) THEN
  48.           RETURN 1
  49.      ELSIF (duz1 < duz2) THEN
  50.           RETURN -1
  51.      END;
  52. END poredi;
  53.  
  54. PROCEDURE poredi1(str1, str2 : STRING): INTEGER;
  55. BEGIN
  56.     IF (Compare(str1,str2) = 0) THEN
  57.        RETURN 0
  58.     ELSIF (Compare(str1,str2) > 0) THEN
  59.           RETURN 1
  60.     ELSIF (Compare(str1,str2) < 0) THEN
  61.         RETURN -1
  62.     END;
  63. END poredi1;
  64.  
  65. PROCEDURE proveri(student: STUDENTI;str1, str2: STRING; god, t: INTEGER):BOOLEAN;
  66. VAR
  67.    i : INTEGER;
  68.    p1, p2 : INTEGER;
  69. BEGIN
  70.      FOR i := 0 TO t DO
  71.         p1 := poredi1(str1,student[i].ime);
  72.         p2 := poredi1(str2,student[i].prezime);
  73.         IF ((p1 = 0) AND (p2 = 0) AND (god = student[i].godiste)) THEN
  74.           RETURN FALSE;
  75.         ELSE
  76.             RETURN TRUE;
  77.         END;
  78.      END;
  79. END proveri;
  80.  
  81. PROCEDURE unosStdIme(VAR str1: STRING; t: INTEGER);
  82. VAR
  83.    str2: STRING;
  84.    broj : INTEGER;
  85.    opet : BOOLEAN;
  86. BEGIN
  87.       str2 := "";
  88.       opet := FALSE;
  89.       REPEAT
  90.             IF opet THEN
  91.                WriteString("Ponovite unos za ");
  92.                WriteInt(t,0);
  93.                WriteString(". ime u fajlu: ");
  94.                ReadString(str1); WriteLn;
  95.                broj := poredi(str1,str2)
  96.              ELSE
  97.                  WriteString("Unos ");
  98.                  WriteInt(t,0);
  99.                  WriteString(". imena u fajl: ");
  100.                  ReadString(str1); WriteLn;
  101.                  broj := poredi(str1,str2);
  102.                  opet := TRUE
  103.              END;
  104.       UNTIL(broj # 0);
  105. END unosStdIme;
  106.  
  107. PROCEDURE unosStdPrezime(VAR str1: STRING; t: INTEGER);
  108. VAR
  109.    str2: STRING;
  110.    broj : INTEGER;
  111.    opet : BOOLEAN;
  112. BEGIN
  113.       str2 := "";
  114.       opet := FALSE;
  115.       REPEAT
  116.             IF opet THEN
  117.                WriteString("Ponovite unos za ");
  118.                WriteInt(t,0);
  119.                WriteString(". prezime u fajlu: ");
  120.                ReadString(str1); WriteLn;
  121.                broj := poredi(str1,str2)
  122.              ELSE
  123.                  WriteString("Unos ");
  124.                  WriteInt(t,0);
  125.                  WriteString(". prezimena u fajl: ");
  126.                  ReadString(str1); WriteLn;
  127.                  broj := poredi(str1,str2);
  128.                  opet := TRUE
  129.              END;
  130.       UNTIL(broj # 0);
  131. END unosStdPrezime;
  132.  
  133. PROCEDURE unosStdGodiste(VAR godiste: INTEGER; t: INTEGER);
  134. VAR
  135.    ok, opet : BOOLEAN;
  136. BEGIN
  137.       opet := FALSE;
  138.       ok := FALSE;
  139.       REPEAT
  140.             IF opet THEN
  141.                WriteString("Ponovite unos za ");
  142.                WriteInt(t,0);
  143.                WriteString(". godiste u fajlu: ");
  144.                ReadInt(godiste); WriteLn;
  145.                IF ((godiste > 1000) AND (godiste < 2500)) THEN
  146.                  ok := TRUE
  147.                END;
  148.              ELSE
  149.                  WriteString("Unos ");
  150.                  WriteInt(t,0);
  151.                  WriteString(". godista u fajl: ");
  152.                  ReadInt(godiste); WriteLn;
  153.                  IF ((godiste > 1000) AND (godiste < 2500)) THEN
  154.                    ok := TRUE
  155.                 END;
  156.                 opet := TRUE;
  157.              END;
  158.       UNTIL(ok);
  159. END unosStdGodiste;
  160.  
  161. PROCEDURE unosImenaPrezimenaGodista(VAR f: File; VAR student: STUDENTI; VAR t: INTEGER);
  162. VAR
  163.    str1, str2 : STRING;
  164.    broj, i : INTEGER;
  165.    strZarez, strTacka : STRING;
  166.    ok : BOOLEAN;
  167. BEGIN
  168.      f := Create(fajl);
  169.      strZarez := ",";
  170.      strTacka := ".";
  171.      WriteString("Unesite zeljeni broj studenata za unos: ");
  172.      ReadInt(t); WriteLn;
  173.  
  174.  
  175.      FOR i := 0 TO t-1 DO
  176.          ok := FALSE;
  177.          WHILE (NOT ok) DO
  178.                 str1 := "";
  179.                 unosStdIme(str1,i+1);
  180.  
  181.  
  182.                 str2 := "";
  183.                 unosStdPrezime(str2,i+1);
  184.  
  185.  
  186.                 broj := 0;
  187.                 unosStdGodiste(broj,i+1);
  188.  
  189.                 ok := proveri(student,str1,str2,broj,t-1);
  190.  
  191.                 IF (ok) THEN
  192.                    student[i].ime := str1;
  193.                    WrStr(f,str1); WrStr(f,strZarez);
  194.                    student[i].prezime := str2;
  195.                    WrStr(f,str2); WrStr(f,strZarez);
  196.                    student[i].godiste := broj;
  197.                    WrInt(f,broj,0); WrStr(f,strTacka);
  198.                    WrLn(f);
  199.                 ELSE
  200.                     WriteString("Uneti student je vec postojeci, Molimo Vas da ponovite unos "); WriteLn;
  201.                 END;
  202.          END
  203.      END;
  204.      Close(f);
  205. END unosImenaPrezimenaGodista;
  206.  
  207. PROCEDURE ucitajIspisiIzStudenti(VAR student: STUDENTI;t: INTEGER);
  208. VAR
  209.    i : INTEGER;
  210.    str : STRING;
  211. BEGIN
  212.      WriteLn;
  213.      WriteString("Sledi ispis studenata iz strukture");
  214.      WriteLn;
  215.      FOR i := 0 TO t-1 DO
  216.         WriteString("Ispis ");
  217.         WriteInt(i+1,0);
  218.         WriteString(". imena iz strukture: ");
  219.         str := student[i].ime;
  220.         WriteString(str); WriteLn;
  221.         WriteString("Ispis ");
  222.         WriteInt(i+1,0);
  223.         WriteString(". prezimena iz strukture: ");
  224.         str := student[i].prezime;
  225.         WriteString(str); WriteLn;
  226.         WriteString("Ispis ");
  227.         WriteInt(i+1,0);
  228.         WriteString(". godista iz strukture: ");
  229.         WriteInt(student[i].godiste,0); WriteLn
  230.      END
  231. END ucitajIspisiIzStudenti;
  232.  
  233. PROCEDURE krajStringa(str: STRING;VAR kraj: INTEGER); FORWARD;
  234. PROCEDURE prviZarez(str: STRING; VAR mesto1: INTEGER);
  235. VAR
  236.    i, t : INTEGER;
  237.    ok : BOOLEAN;
  238. BEGIN
  239.      i := 0;
  240.      ok := FALSE;
  241.      krajStringa(str,t);
  242.      WHILE ((i # t) AND (NOT ok)) DO
  243.         IF (',' = str[i]) THEN
  244.            ok := TRUE;
  245.         ELSE
  246.             i := i + 1;
  247.         END
  248.     END;
  249.     mesto1 := i
  250. END prviZarez;
  251.  
  252. PROCEDURE drugiZarez(str: STRING; VAR mesto2: INTEGER);
  253. VAR
  254.    i, k, t : INTEGER;
  255.    ok : BOOLEAN;
  256. BEGIN
  257.      i := 0;
  258.      k := 0;
  259.      ok := FALSE;
  260.      krajStringa(str,t);
  261.      WHILE ((i # t) AND (NOT ok)) DO
  262.         IF (',' = str[i]) THEN
  263.            INC(k);
  264.            IF (k = 2) THEN
  265.               ok := TRUE
  266.            ELSE
  267.                mesto2 := i;
  268.                INC(i);
  269.            END;
  270.         ELSE
  271.             INC(i);
  272.         END;
  273.     END;
  274.     mesto2 := i;
  275. END drugiZarez;
  276.  
  277. PROCEDURE initString(VAR str: STRING);
  278. BEGIN
  279.      str := "";
  280. END initString;
  281.  
  282. PROCEDURE kopirajString(str1: STRING;VAR str2: STRING);
  283. VAR
  284.    i : INTEGER;
  285. BEGIN
  286.      initString(str2);
  287.      FOR i := 0 TO MaxString DO
  288.         str2[i] := str1[i]
  289.      END;
  290. END kopirajString;
  291.  
  292. PROCEDURE transferIme(VAR str1 : STRING;str2: STRING; prvi: INTEGER);
  293. VAR
  294.    i : INTEGER;
  295. BEGIN
  296.      initString(str1);
  297.      FOR i := 0 TO (prvi-1) DO
  298.          str1[i] := str2[i];
  299.      END
  300. END transferIme;
  301.  
  302. PROCEDURE transferZarezaPrezime(VAR str1 : STRING;str2: STRING; prvi,drugi: INTEGER);
  303. VAR
  304.    p, i : INTEGER;
  305. BEGIN
  306.      initString(str1);
  307.      p := 0;
  308.      FOR i := 0 TO MaxString DO
  309.         IF ((i < drugi) AND (i > prvi)) THEN
  310.            str1[p] := str2[i];
  311.            INC(p);
  312.         END;
  313.      END;
  314. END transferZarezaPrezime;
  315.  
  316. PROCEDURE transferGodiste(VAR str1: STRING;str2: STRING; drugi,poslednji: INTEGER);
  317. VAR
  318.    p, i : INTEGER;
  319. BEGIN
  320.      initString(str1);
  321.      p := 0;
  322.      FOR i := 0 TO MaxString DO
  323.         IF ((i <= poslednji) AND (i > drugi)) THEN
  324.            str1[p] := str2[i];
  325.            INC(p);
  326.         END;
  327.      END;
  328. END transferGodiste;
  329.  
  330. PROCEDURE krajStringa(str: STRING;VAR kraj: INTEGER);
  331. VAR
  332.    i : INTEGER;
  333. BEGIN
  334.      i := 0;
  335.      WHILE ((str[i] # '.') AND (i < MaxString)) DO
  336.           INC(kraj);
  337.           INC(i);
  338.      END
  339. END krajStringa;
  340.  
  341. PROCEDURE ucitajIspisiIzFajla(VAR f: File;t: INTEGER);
  342. VAR
  343.    i, broj, k : INTEGER;
  344.    str1, str2, string1, string2, string3 : STRING;
  345.    t1, t2, god, kraj : INTEGER;
  346.    znak : CHAR;
  347. BEGIN
  348.      f := Open(fajl);
  349.      WriteLn;
  350.      WriteString("Sledi ispis studenata iz fajla");
  351.      WriteLn;
  352.      i := 1;
  353.      str2 := "";
  354.      EOF := FALSE;
  355.      WHILE (NOT EOF) DO
  356.           RdStr(f,str1);
  357.           INC(i);
  358.           broj := poredi(str1, str2);
  359.           IF ((broj # 0) AND (i # (t-1))) THEN
  360.              prviZarez(str1,t1);
  361.              drugiZarez(str1,t2);
  362.              krajStringa(str1,kraj);
  363.  
  364.              initString(string1);
  365.              transferIme(string1,str1,t1);
  366.  
  367.              initString(string2);
  368.              transferZarezaPrezime(string2,str1,t1,t2);
  369.  
  370.              initString(string3);
  371.              transferZarezaPrezime(string3,str1,t2,kraj);
  372.  
  373.              WriteString("Ispis ");
  374.              WriteInt(i,0);
  375.              WriteString(". imena, prezimena i godista iz fajla. "); WriteLn;
  376.              WriteString("ime: ");WriteString(string1); WriteLn;
  377.              WriteString("prezime:  ");WriteString(string2); WriteLn;
  378.              WriteString("godiste: : ");WriteString(string3); WriteLn;
  379.           END
  380.       END;
  381.      Close(f);
  382. END ucitajIspisiIzFajla;
  383.  
  384. BEGIN
  385.      unosImenaPrezimenaGodista(f1,studenti,brStudenata);
  386.      ucitajIspisiIzFajla(f1,brStudenata);
  387. END vf.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement