From f9a0f76982edf6a6f6991ec92728a50b539963dc Mon Sep 17 00:00:00 2001 From: Doni Pracner Date: Tue, 26 Nov 2013 13:30:26 +0100 Subject: [PATCH] 07 - bojenje, XDS verzija (LONGCARD) --- 07. Bojenje mape/XDS/BOJENJE.MOD | 128 +++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 07. Bojenje mape/XDS/BOJENJE.MOD diff --git a/07. Bojenje mape/XDS/BOJENJE.MOD b/07. Bojenje mape/XDS/BOJENJE.MOD new file mode 100644 index 0000000..479c3f7 --- /dev/null +++ b/07. Bojenje mape/XDS/BOJENJE.MOD @@ -0,0 +1,128 @@ +MODULE Bojenje; + + FROM IO IMPORT + WrStr, WrLn, WrCard; + + CONST + MaxBrojZemalja = 30; + DuzinaImena = 18; + + TYPE + RangImena = [1 .. DuzinaImena]; + Zemlja = [1 .. MaxBrojZemalja]; + SkupZ = SET OF Zemlja; + Boja = (Crvena, Plava, Zelena, Zuta); + GraniceTip = ARRAY Zemlja OF SkupZ; + BojeZemalja = ARRAY Boja OF SkupZ; + ImenaZemalja = ARRAY Zemlja, RangImena OF CHAR; + + VAR + Granice: GraniceTip; + Obojeno: BojeZemalja; + Ime: ImenaZemalja; + BrZ: Zemlja; + RBr: CARDINAL; + + PROCEDURE Inicijalizacija; + VAR + i: Boja; + BEGIN + FOR i:= MIN(Boja) TO MAX(Boja) DO + Obojeno[i]:= SkupZ {}; + END; + Ime[ 1]:= 'Maroko'; + Ime[ 2]:= 'Zapadna Sahara'; + Ime[ 3]:= 'Alzir'; + Ime[ 4]:= 'Tunis'; + Ime[ 5]:= 'Mauritanija'; + Ime[ 6]:= 'Mali'; + Ime[ 7]:= 'Niger'; + Ime[ 8]:= 'Libija'; + Ime[ 9]:= 'Senegal'; + Ime[10]:= 'Gvineja'; + Ime[11]:= 'Obala Slonovace'; + Ime[12]:= 'Burkina Faso'; + Ime[13]:= 'Benin'; + Ime[14]:= 'Nigerija'; + Ime[15]:= 'Cad'; + Ime[16]:= 'Sudan'; + Ime[17]:= 'Egipat'; + Ime[18]:= 'Gambija'; + Ime[19]:= 'Gvineja Bisao'; + Ime[20]:= 'Siera Leone'; + Granice[ 1]:= SkupZ {3, 2}; + Granice[ 2]:= SkupZ {1, 3, 5}; + Granice[ 3]:= SkupZ {1, 2, 5, 6, 7, 8, 4}; + Granice[ 4]:= SkupZ {3, 8}; + Granice[ 5]:= SkupZ {2, 3, 6, 9}; + Granice[ 6]:= SkupZ {3, 5, 9, 10, 11, 12, 7}; + Granice[ 7]:= SkupZ {3, 6, 12, 13, 14, 15, 8}; + Granice[ 8]:= SkupZ {4, 3, 7, 15, 16, 17}; + Granice[ 9]:= SkupZ {18, 19, 10, 6, 5}; + Granice[10]:= SkupZ {19, 9, 6, 20, 11}; + Granice[11]:= SkupZ {10, 6, 12}; + Granice[12]:= SkupZ {6, 11, 13, 7}; + Granice[13]:= SkupZ {12, 7, 14}; + Granice[14]:= SkupZ {13, 7, 15}; + Granice[15]:= SkupZ {14, 7, 8, 16}; + Granice[16]:= SkupZ {17, 8, 15}; + Granice[17]:= SkupZ {8, 15, 16}; + Granice[18]:= SkupZ {9}; + Granice[19]:= SkupZ {9, 10}; + Granice[20]:= SkupZ {10}; + RBr:= 0; + BrZ:= 20 + END Inicijalizacija; + + PROCEDURE StampajSkup(VAR S: SkupZ); + VAR + z: Zemlja; + Prvi: BOOLEAN; + BEGIN + Prvi:= TRUE; + FOR z:= 1 TO MaxBrojZemalja DO + IF z IN S THEN + IF Prvi THEN + WrStr(Ime[z]); + Prvi:= FALSE; + ELSE + WrStr(', '); + WrStr(Ime[z]); + END; + END; + END; + END StampajSkup; + + + PROCEDURE Stampa(RBr: CARDINAL; VAR Obojeno: BojeZemalja); + BEGIN + WrLn; WrLn; WrCard(RBr, 1); + WrLn; WrStr('Crvena: '); StampajSkup(Obojeno[Crvena]); + WrLn; WrStr('Plava: '); StampajSkup(Obojeno[Plava]); + WrLn; WrStr('Zelena: '); StampajSkup(Obojeno[Zelena]); + WrLn; WrStr('Zuta: '); StampajSkup(Obojeno[Zuta]); + END Stampa; + + PROCEDURE Oboji(z: Zemlja); + VAR + i: Boja; + BEGIN + FOR i:= MIN(Boja) TO MAX(Boja) DO + IF Granice[z] * Obojeno[i] = SkupZ {} THEN + Obojeno[i]:= Obojeno[i] + SkupZ {z}; + IF z = BrZ THEN + INC(RBr); + Stampa(RBr, Obojeno); + ELSE + Oboji(z + 1); + END; + Obojeno[i]:= Obojeno[i] - SkupZ {z}; + END; + END; + END Oboji; + +BEGIN + Inicijalizacija; + Oboji(1); + (* Broj mogucih bojenja je 1 527 552 *) +END Bojenje. -- 2.17.1