[Prog] Examen Opdracht

Forum van 1ste Bachelor Informatica.

Moderator: Praesidium

User avatar
Nickman
Posts: 391
Contact:

Examen Opdracht

Post#1 » Mon Jan 23, 2006 2:43 pm

Hier is mijn opdracht voor degene die geïntereseerd zijn :)

Festival.Mod

Code: Select all

MODULE Festival;
(*
	Doel: Bijhouden wat en hoeveel een aantal vrienden op een festival hebben gedronken of nog van drank bijhebben.
	Auteur: Nick De Frangh
	Datum: 23-01-06
*)

	IMPORT
		OutExt, In, Files;
	
	TYPE
		Naam = ARRAY 25 OF CHAR;
	
		Personen = POINTER TO PersonenDescr;
		PersonenDescr =
			RECORD
				naam : Naam;
				aantal : INTEGER;
				drank : Flessen;
				gedronken : Flessen;
				next : Personen;
			END;
		
		Flessen = POINTER TO FlessenDescr;
		FlessenDescr =
			RECORD
				soort : Naam;
				aantal : INTEGER;
				next : Flessen;
			END;
			
	VAR
		aanwezigen : Personen;
	
	PROCEDURE Error(msg : ARRAY OF CHAR);
	(* 
      Omschrijving : Alle errors uitprinten
      Parameters : 
         msg : De error boodschap die wordt mee gegeven
      Returntype : - 
      Algoritme : - 
   *)
	BEGIN
		OutExt.Color(1);
		OutExt.String(msg);
		OutExt.Ln;
		OutExt.Color(15);
	END Error;
	
	
	PROCEDURE Initialize*;
	(* 
      Omschrijving : Het programma initializeren, alles op 0 zetten
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
	BEGIN
		IF (aanwezigen = NIL) THEN
			NEW(aanwezigen);
		END;
		
		aanwezigen^.next := NIL;
		aanwezigen^.naam := "";
		aanwezigen^.aantal := 0;
		aanwezigen^.drank := NIL;
		aanwezigen^.gedronken := NIL;
	END Initialize;
	
	
	PROCEDURE Arrive*;
	(* 
      Omschrijving : Iemand op het festival laten toekomen
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			currentpersoon, temp : Personen;
			tempnaam, tempdranknaam : Naam;
			tempaantal : INTEGER;
			tempdrank, currentdrank : Flessen;	
	BEGIN
		currentpersoon := aanwezigen;
		In.Open();
		In.String(tempnaam);
		IF In.Done THEN
			WHILE (currentpersoon^.next # NIL) & (currentpersoon^.naam # tempnaam) DO
				currentpersoon := currentpersoon^.next;
			END;
			
			IF (currentpersoon^.naam # tempnaam) THEN			
				IF (currentpersoon^.naam # "") THEN
					NEW(temp);
					currentpersoon^.next := temp;
					currentpersoon := currentpersoon^.next;
				END;
				
				currentpersoon^.naam := tempnaam;
				currentpersoon^.aantal := 0;
				currentpersoon^.gedronken := NIL;
			
				In.String(tempdranknaam);
				In.Int(tempaantal);
				WHILE In.Done DO
					NEW(tempdrank);
					tempdrank^.soort := tempdranknaam;
					tempdrank^.aantal := tempaantal;
					tempdrank^.next := NIL;
					
					IF (currentdrank = NIL) THEN
						currentdrank := tempdrank;
						currentpersoon^.drank := currentdrank;
					ELSE
						currentdrank^.next := tempdrank;
						currentdrank := currentdrank^.next;
					END;
					
					In.String(tempdranknaam);
					In.Int(tempaantal);
				END;
				
				OutExt.String(currentpersoon^.naam);
				OutExt.String(" is aangekomen op het festival");
				OutExt.Ln;
			ELSE
				Error("ERROR (Arrive): Deze persoon is al op het festival");
			END;
		ELSE
			Error("ERROR (Arrive): Je hebt geen naam ingegeven");
		END;
	END Arrive;

	
	PROCEDURE Drink*;
	(* 
      Omschrijving : Iedereen een slok laten nemen van de drank die ze het minst lang in hun bezit hebben
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			currentpersoon : Personen;
			currentdrank, currentgedronken, tempgedronken : Flessen;
	BEGIN
		IF (aanwezigen^.naam = "") THEN
			Error("ERROR (Drink): Er is nog niemand op het festival.");
		ELSE
			currentpersoon := aanwezigen;
			REPEAT
				currentdrank := currentpersoon^.drank;
				
				IF (currentdrank # NIL) THEN
					DEC(currentdrank^.aantal);
					
					IF (currentpersoon^.gedronken = NIL) THEN
						NEW(tempgedronken);
						tempgedronken^.soort := currentdrank^.soort;
						tempgedronken^.aantal := 1;
						tempgedronken^.next := NIL;
						currentpersoon^.gedronken := tempgedronken;
					ELSE
						currentgedronken := currentpersoon^.gedronken;
						WHILE (currentgedronken^.next # NIL) & (currentgedronken^.soort # currentdrank^.soort) DO
							currentgedronken := currentgedronken^.next;
						END;
					
						IF (currentgedronken^.soort = currentdrank^.soort) THEN
							INC(currentgedronken^.aantal);
						ELSE
							NEW(tempgedronken);
							tempgedronken^.soort := currentdrank^.soort;
							tempgedronken^.aantal := 1;
							tempgedronken^.next := NIL;
							currentgedronken^.next := tempgedronken;
						END;
					END;
					
					IF (currentdrank^.aantal = 0) THEN
						OutExt.String(currentpersoon^.naam);
						OutExt.String(" zijn fles ");
						OutExt.String(currentdrank^.soort);
						OutExt.String(" is leeg.");
						OutExt.Ln;
						
						IF (currentdrank^.next # NIL) THEN
							currentpersoon^.drank := currentdrank^.next;
						ELSE
							currentpersoon^.drank := NIL;
						END;
					END;
					
					INC(currentpersoon^.aantal);
					
				END;
				
				currentpersoon := currentpersoon^.next
			UNTIL (currentpersoon = NIL);	
		END;
	END Drink;
	
	
	PROCEDURE Pass*;
	(* 
      Omschrijving : Een fles laten doorgeven van de eerste naar de tweede mee gegeven persoon
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			donor, ontvanger : Personen;
			donornaam, ontvangernaam : Naam;
			donordrank, ontvangerdrank : Flessen;	
	BEGIN
		In.Open();
		In.String(donornaam);
		In.String(ontvangernaam);
		IF In.Done THEN
			donor := aanwezigen;
			WHILE (donor^.naam # donornaam) & (donor^.next # NIL) DO
				donor := donor^.next;
			END;
			
			ontvanger := aanwezigen;
			WHILE (ontvanger^.naam # ontvangernaam) & (ontvanger # NIL) DO
				ontvanger := ontvanger^.next;
			END;
			
			IF (donor = NIL) THEN
				Error("ERROR (Pass): De donor is niet gevonden.");
			ELSIF (ontvanger = NIL) THEN
				Error("ERROR (Pass): De ontvanger is niet gevonden.");
			ELSE
				donordrank := donor^.drank;
				IF (donordrank # NIL) THEN
					IF (donordrank^.next = NIL) THEN
						IF (ontvanger^.drank = NIL) THEN
							ontvanger^.drank := donor^.drank;
							donor^.drank := NIL;
						ELSE
							ontvangerdrank := ontvanger^.drank;
							WHILE (ontvangerdrank^.next # NIL) DO
								ontvangerdrank := ontvangerdrank^.next;
							END;
							ontvangerdrank^.next := donor^.drank;
							donor^.drank := NIL;
						END;
					ELSE
						WHILE (donordrank^.next^.next # NIL) DO
							donordrank := donordrank^.next;
						END;
					
						ontvangerdrank := ontvanger^.drank;
						IF (ontvangerdrank = NIL) THEN
							ontvanger^.drank := donordrank^.next;
							donordrank^.next := NIL;
						ELSE
							WHILE (ontvangerdrank^.next # NIL) DO
								ontvangerdrank := ontvangerdrank^.next;
							END;
							ontvangerdrank^.next := donordrank^.next;
							donordrank^.next := NIL;
						END;
					END;					
				END;
			END;
		ELSE
			Error("ERROR (Pass): Er is mis met de input.");
		END;
	END Pass;
	
	
	PROCEDURE Part*;
	(* 
      Omschrijving : Iemand verlaat het festival en neemt al zijn flessen mee
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			tempnaam : Naam;
			temppersoon : Personen;
	BEGIN
		In.Open();
		In.String(tempnaam);
		IF In.Done THEN
			temppersoon := aanwezigen;
			
			IF (temppersoon^.naam = tempnaam) THEN
				OutExt.String(temppersoon^.naam);
				OutExt.String(" heeft het festival verlaten");
				OutExt.Ln;
				
				IF (temppersoon^.next = NIL) THEN
					Initialize;
				ELSE
					aanwezigen := temppersoon^.next;
				END;
			ELSE
				WHILE (temppersoon^.next^.naam # tempnaam) & (temppersoon # NIL) DO
					temppersoon := temppersoon^.next;
				END;
			
				IF (temppersoon # NIL) THEN
					OutExt.String(temppersoon^.next^.naam);
					OutExt.String(" heeft het festival verlaten");
					OutExt.Ln;
					temppersoon^.next := temppersoon^.next^.next;
				ELSE
					Error("ERROR (Part): Deze persoon was niet aanwezig op het festival");
				END;
			END;
		ELSE
			Error("ERROR (Part): Je hebt geen naam ingegeven");
		END;
	END Part;
	
	
	PROCEDURE Print*;
	(* 
      Omschrijving : De huidige status uitprinten van wie wat gedronken heeft en nog over heeft
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			currentpersoon, temppersoon : Personen;
			currentdrank, currentgedronken, tempdrank : Flessen;
			check : BOOLEAN;
	BEGIN
		currentpersoon := aanwezigen;
		IF (currentpersoon^.naam = "") THEN
			OutExt.String("Er is niemand aanwezig op het festival");
			OutExt.Ln;
		ELSE
			OutExt.String("De huidige aanwezigen zijn:");
			OutExt.Ln;
			
			WHILE (currentpersoon # NIL) & (currentpersoon^.naam # "") DO
				OutExt.String("    ");
				OutExt.String(currentpersoon^.naam);
				OutExt.String(":");
				OutExt.Ln;
				
				OutExt.String("        Huidige consumptie : ");
				OutExt.Int(currentpersoon^.aantal, 0);
				IF (currentpersoon^.aantal = 1) THEN
					OutExt.String(" slok van volgende fles:");
				ELSE
					OutExt.String(" slokken van volgende fles(en):");
				END;
				OutExt.Ln;
				
				currentgedronken := currentpersoon^.gedronken;
				WHILE (currentgedronken # NIL) DO
					OutExt.String("            ");
					OutExt.Int(currentgedronken^.aantal, 0);
					IF (currentgedronken^.aantal = 1) THEN
						OutExt.String(" slok ");
					ELSE
						OutExt.String(" slokken ");
					END;
					OutExt.String(currentgedronken^.soort);
				
					check := FALSE;
					temppersoon := aanwezigen;
					WHILE (temppersoon # NIL) & (~check) DO
						tempdrank := temppersoon^.drank;
						WHILE (tempdrank # NIL) & (tempdrank^.soort # currentgedronken^.soort) DO
							tempdrank := tempdrank^.next;
						END;
					
						IF (tempdrank # NIL) & (tempdrank^.soort = currentgedronken^.soort) THEN
							check := TRUE;
							OutExt.String(" (");
							OutExt.String(temppersoon^.naam);
							OutExt.String(" heeft nu de fles met nog ");
							OutExt.Int(tempdrank^.aantal, 0);
							IF (tempdrank^.aantal = 1) THEN
								OutExt.String(" slok er in)");
							ELSE
								OutExt.String(" slokken er in)");
							END;
						END;
						
						IF (temppersoon^.next = NIL) THEN
							temppersoon := NIL;
						ELSE
							temppersoon := temppersoon^.next;
						END;
					END;
					IF (~check) THEN
						OutExt.String(" (Deze fles is nu leeg)");
					END;
					
					OutExt.Ln;
					currentgedronken := currentgedronken^.next;
				END;
				
				OutExt.String("        Huidig bezit:");
				OutExt.Ln;
				IF (currentpersoon^.drank = NIL) THEN
					OutExt.String("            Geen flessen in zijn bezit");
					OutExt.Ln;
				ELSE					
					currentdrank := currentpersoon^.drank;
					WHILE (currentdrank # NIL) DO
						OutExt.String("            ");
						OutExt.String(currentdrank^.soort);
						OutExt.String(" -> ");
						OutExt.Int(currentdrank^.aantal, 0);
						IF (currentdrank^.aantal = 1) THEN
							OutExt.String(" Slok");
						ELSE
							OutExt.String(" Slokken");
						END;
						OutExt.Ln;
						currentdrank := currentdrank^.next;
					END;
				END;
				
				IF (currentpersoon^.next = NIL) THEN
					currentpersoon := NIL;
				ELSE
					currentpersoon := currentpersoon^.next;
				END;
			END;
		END;
	END Print;
	
	PROCEDURE Save*;
	(* 
      Omschrijving : De huidige gegevens worden opgeslagen
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			bestand: Files.File;
			bestandLoper: Files.Rider;
			currentpersoon: Personen;
			tempdrank : Flessen;
			bestandsnaam : Naam;
	BEGIN
		In.Open();
		In.String(bestandsnaam);
		IF In.Done THEN
			currentpersoon := aanwezigen;
			bestand := Files.New(bestandsnaam);
			Files.Set(bestandLoper, bestand, 0);
				
			WHILE (currentpersoon # NIL) DO
				Files.WriteString (bestandLoper, currentpersoon^.naam);
				Files.WriteInt (bestandLoper, currentpersoon^.aantal);
				tempdrank := currentpersoon^.drank;
				WHILE (tempdrank # NIL) DO
					Files.WriteString (bestandLoper, tempdrank^.soort);
					Files.WriteInt (bestandLoper, tempdrank^.aantal);
					tempdrank := tempdrank^.next;
				END;
				Files.WriteString (bestandLoper, "!!");
				tempdrank := currentpersoon^.gedronken;
				WHILE (tempdrank # NIL) DO
					Files.WriteString (bestandLoper, tempdrank^.soort);
					Files.WriteInt (bestandLoper, tempdrank^.aantal);
					tempdrank := tempdrank^.next;
				END;
				Files.WriteString (bestandLoper, "!!");
				currentpersoon := currentpersoon^.next;
			END;
		
			Files.Register(bestand);
		
			OutExt.String("De huidige gegevens zijn opgeslagen onder volgende naam: ");
			OutExt.String(bestandsnaam);
			OutExt.Ln();
		ELSE
			Error("ERROR (Save): Je hebt geen bestandsnaam ingegeven");
		END;
	END Save;
	
	PROCEDURE Load*;
	(* 
      Omschrijving : Laad gegevens uit een bestand
      Parameters : -
      Returntype : - 
      Algoritme : - 
   *)
		VAR
			bestand: Files.File;
			bestandLoper: Files.Rider;
			currentpersoon: Personen;
			bestandsnaam : Naam;
			tempsoort : Naam;
			temppersoon : Personen;
			tempdrank, currentdrank : Flessen;
	BEGIN
		In.Open();
		In.String(bestandsnaam);
		IF In.Done THEN
			bestand := Files.Old(bestandsnaam);
			Files.Set(bestandLoper, bestand, 0);
			
			aanwezigen := NIL;
			
			IF (bestand # NIL) THEN
				WHILE (~bestandLoper.eof) DO
					IF (aanwezigen = NIL) THEN
						NEW(aanwezigen);
						Files.ReadString (bestandLoper, aanwezigen^.naam);
						Files.ReadInt (bestandLoper, aanwezigen^.aantal);
						aanwezigen^.next := NIL;
						aanwezigen^.drank := NIL;
						aanwezigen^.gedronken := NIL;
						currentpersoon := aanwezigen;
					ELSE
						NEW(temppersoon);
						Files.ReadString (bestandLoper, temppersoon^.naam);
						Files.ReadInt (bestandLoper, temppersoon^.aantal);
						currentpersoon^.next := temppersoon;
						currentpersoon := currentpersoon^.next;
					END;
						
					Files.ReadString (bestandLoper, tempsoort);			
					WHILE (tempsoort # "!!") & (~bestandLoper.eof) DO
						NEW(tempdrank);
						tempdrank^.soort := tempsoort;
						Files.ReadInt (bestandLoper, tempdrank^.aantal);
						
						IF (currentpersoon^.drank = NIL) THEN
							currentpersoon^.drank := tempdrank;
							currentdrank := currentpersoon^.drank;
						ELSE
							currentdrank^.next := tempdrank;
							currentdrank := currentdrank^.next;
						END;
						Files.ReadString (bestandLoper, tempsoort);
					END;
					
					Files.ReadString (bestandLoper, tempsoort);			
					WHILE (tempsoort # "!!") & (~bestandLoper.eof) DO
						NEW(tempdrank);
						tempdrank^.soort := tempsoort;
						Files.ReadInt (bestandLoper, tempdrank^.aantal);
						
						IF (currentpersoon^.gedronken = NIL) THEN
							currentpersoon^.gedronken := tempdrank;
							currentdrank := currentpersoon^.gedronken;
						ELSE
							currentdrank^.next := tempdrank;
							currentdrank := currentdrank^.next;
						END;
						Files.ReadString (bestandLoper, tempsoort);
					END;
				END;
				Files.Close(bestand);
				OutExt.String("Het bestand is geladen.");
				OutExt.Ln;
				
			ELSE
				Error("ERROR (Load): Bestand niet gevonden");
			END;
		END;
	END Load;

BEGIN
	Initialize();
	OutExt.Open();
END Festival.
Festival.Tool

Code: Select all

Festival.Tool
(*
	Auteur: Nick De Frangh
	Date: 23-01-06
*)

Builder.Compile \ws
	OutExt.Mod
	Festival.Mod
	~
	
Builder.Compile \f*

System.Free
	Festival.Mod
	OutExt.Mod
	~
Festival.Initialize~

Festival.Arrive "Wouter" "Appelsap" 10 "Bessensap" 2 "Citroensap" 1~
Festival.Arrive "Peter" "Passievruchtensap" 3 "Water" 1 "Wijn" 1~
Festival.Arrive "Kurt"~

Festival.Drink~
Festival.Print~
Festival.Drink~
Festival.Pass "Wouter" "Kurt"
Festival.Drink~
Festival.Print~
Festival.Part "Wouter"~
Festival.Part "Kurt"~
Festival.Arrive "Gunther" "Druivensap" 2~
Festival.Drink~
Festival.Print~

Festival.Save "Festival.Sav"~
Festival.Load "Festival.Sav"~
Ik heb twee uitbreidingen gemaakt.
De laatste en degene voor op te slaan en te laden.
Webmaster of http://www.bwf.be
Make it idiot proof and someone will make a better idiot!

[quote="zarry"][url=http://www.winak.be/forum/viewtopic.php?p=12475#12475]wickaaaah! thcikci tschiki paaaauuuuw wicked-original![/url][/quote]

User avatar
Nick
Prosenior
Posts: 1850
Contact:

Post#2 » Mon Jan 23, 2006 2:47 pm

Mja
Bevestigt alleen maar mijn 2de zit denkek :S

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#3 » Mon Jan 23, 2006 3:03 pm


User avatar
EagleEye812
Posts: 406

Post#4 » Mon Jan 23, 2006 3:17 pm

De donor is niet gevonden.
lol, hebt gij een ziekenhuisprogramma gemaakt ofzo? :roll: :P

sammyke007

Post#5 » Mon Jan 23, 2006 3:30 pm

In OO, why the F zoude da doen als da nie gevraagd werd, wie weet rekent em da nog fout ook :d, stelt u voor 0/20 voor praktijk :d

User avatar
N-J
Posts: 13

Post#6 » Mon Jan 23, 2006 3:37 pm

Sammy hoopt gewoon voor een metgezel op zen “0 op 20â€ÂÂ

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#7 » Mon Jan 23, 2006 3:41 pm

sammyke007 wrote:In OO, why the F zoude da doen als da nie gevraagd werd, wie weet rekent em da nog fout ook :d, stelt u voor 0/20 voor praktijk :d
heb da gevraagd en die zei da da goe was...
trouwens OO >> Procedureel :P

User avatar
EagleEye812
Posts: 406

Post#8 » Mon Jan 23, 2006 3:57 pm

Structured = Procedureel?

ahja in de cursus stond zoiets zeker, "het wordt verkeerdelijk structured programmeren genoemd" :roll:

User avatar
EagleEye812
Posts: 406

Post#9 » Mon Jan 23, 2006 4:24 pm

Festival.Mod

Code: Select all

MODULE Festival;
(*
	Auteur: Dirk Delahaye
	Beschrijving: Module Festival - Programmeren Practicum januari 2006 Examen
	Datum: 22/01/2006
*)
	IMPORT
		In, OutExt;
	
	TYPE
		Naam = ARRAY 40 OF CHAR;
		
		Drank = POINTER TO DrankRec;
		DrankRec = 
			RECORD
				next: Drank;
				naam: Naam;
				inhoud: INTEGER;
			END;
	
		Persoon* = POINTER TO PersoonRec;
		PersoonRec = 
			RECORD
				previous: Persoon;
				naam: Naam;
				drank: Drank;
				consumptie: INTEGER;
				gedronken: Drank;
				next: Persoon;
			END;
	
	VAR
			lijst: Persoon;
			vuilbak: Drank;

	PROCEDURE Initialize*;
	(*
		Beschrijving: Deze procedure allocceert geheugen voor een nieuwe lijst om opnieuw te beginnen
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		BEGIN
		NEW(lijst);
		lijst^.previous := NIL;
		lijst^.next := NIL;
	END Initialize;

	PROCEDURE SortLijst*;
		(*
		Beschrijving: Deze procedure sorteert de lijst van personen
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR
			temp: Persoon;
			sort: BOOLEAN;
			counter, i: INTEGER;
	BEGIN
		IF (lijst = NIL) OR (lijst^.previous = NIL) THEN (* We moeten enkel sorteren als er meer dan 1 element in de lijst zit *)
		ELSE
			WHILE lijst^.previous # NIL DO (* Er wordt "teruggegaan" naar het tweede element (het eerste is al gesorteerd!) *)
				lijst := lijst^.previous;
			END;
			lijst := lijst^.next;
			
			(* Dit is het eigenlijke sorteerprocede *)
			REPEAT
				IF (lijst^.previous # NIL) & (lijst^.next # NIL) THEN
					lijst := lijst^.next;
				END;
				counter := 0;
				temp := lijst;
				sort := FALSE;
				
				WHILE (lijst^.previous # NIL) & (ORD(temp^.naam[0]) < ORD(lijst^.previous^.naam[0])) DO
					lijst := lijst^.previous;
					INC(counter);
					sort := TRUE;
				END;
				
				IF sort THEN
					IF temp^.next = NIL THEN (* als het laatste element gesorteerd moet worden *)
						temp^.previous^.next := NIL;
						DEC(counter);
					ELSE
						temp^.previous^.next := temp^.next;	(* de elementen waar Temp tussen stond worden aan elkaar gelinked *)
						temp^.next^.previous := temp^.previous;
					END;
					temp^.next := lijst;
					temp^.previous := lijst^.previous;
					IF lijst^.previous # NIL THEN (* als het element wordt ingevoegd in de eerste positie *)
						lijst^.previous^.next := temp;
					END;				
					lijst^.previous := temp;
					FOR i := 1 TO (counter - 1) DO (* we gaan terug naar de juiste plaats in de lijst om opnieuw te kunnen beginnen *)
						lijst := lijst^.next;
					END;
				END;
			UNTIL lijst^.next = NIL;
		END;
	END SortLijst;



	PROCEDURE Arrive*;
		(*
		Beschrijving: Deze procedure voegt nieuwe mensen en hun drinken toe aan de lijst
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR
			new: Persoon;
			newdrank: Drank;
			naamsap: Naam;
			inhoud: INTEGER;
	BEGIN
		NEW(new);
		In.Open();
		
		In.String(new^.naam);
		
		IF (lijst^.naam # "") THEN
		lijst^.next := new;
		new^.previous := lijst;
		END;
		
		lijst := new;	
		
		In.String(naamsap);
		In.Int(inhoud);
		IF ~In.Done THEN
			lijst^.drank := NIL;
		END;
		WHILE In.Done DO
			NEW(newdrank);
			newdrank^.naam := naamsap;
			newdrank^.inhoud := inhoud;
			IF (lijst^.drank = NIL) THEN
				lijst^.drank := newdrank; 
				lijst^.drank^.next := NIL;
			ELSE
				newdrank^.next := lijst^.drank;
				lijst^.drank := newdrank;
			END;
			In.String(naamsap);
			In.Int(inhoud);
		END;
		
		OutExt.String(lijst^.naam);
		OutExt.String(" added...");
		OutExt.Ln();
	END Arrive;


	PROCEDURE Drink*;
	(*
		Beschrijving: Idereen drinkt een slok van de fles die hij het minst lang heeft.
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR
			temp: Persoon;
			vuil, tempged: Drank;
	BEGIN
		temp := lijst;
		
		WHILE lijst^.previous # NIL DO
			lijst := lijst^.previous;
		END;
	
		WHILE lijst # NIL DO			
			IF lijst^.drank = NIL THEN
			ELSE
				INC(lijst^.consumptie); 
				DEC(lijst^.drank^.inhoud);
				NEW(tempged_);
				tempged_^.naam := lijst^.drank^.naam;
				INC(tempged_^.inhoud);
				tempged_^.next := lijst^.gedronken;
				lijst^.gedronken := tempged_;
				
				
				IF lijst^.drank^.inhoud = 0 THEN
					OutExt.String("     ");
					OutExt.String(lijst^.naam);
					OutExt.String("s fles ");
					OutExt.String(lijst^.drank^.naam);
					OutExt.String(" is leeg.");
					OutExt.Ln();
					NEW(vuil);
					vuil^.naam := lijst^.drank^.naam;
					vuil^.next := vuilbak;
					vuilbak := vuil;
					
					lijst^.drank := lijst^.drank^.next;
				END;
			END;
			lijst := lijst^.next;
		END;
		NEW(lijst);
		lijst := temp;
	END Drink;
	
	PROCEDURE Pass*;
	(*
		Beschrijving: Persoon met naam1 geeft de fles die hij het langst heeft aan persoon met naam2.
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR
			temp: Persoon;
			naam1, naam2: Naam;
			tempdrank, top: Drank;
	BEGIN
		In.Open();
		In.String(naam1);
		In.String(naam2);
		temp := lijst;
		NEW(tempdrank);
		WHILE lijst^.naam # naam1 DO
			lijst := lijst^.previous;
		END;
		
		IF lijst^.naam # naam1 THEN
			OutExt.String(naam1);
			OutExt.String(" is niet gevonden op het festival!");
			OutExt.Ln();
		ELSE
			top := lijst^.drank;
			WHILE (lijst^.drank^.next^.next # NIL) & (lijst^.drank^.next # NIL) & (lijst^.drank # NIL) DO
			lijst^.drank := lijst^.drank^.next;
			END;
			tempdrank^.naam := lijst^.drank^.next^.naam;
			tempdrank^.inhoud := lijst^.drank^.next^.inhoud;
			lijst^.drank^.next := NIL;
			lijst^.drank := top;
			
			lijst := temp;
			WHILE lijst^.naam # naam2 DO
				lijst := lijst^.previous;
			END;
			tempdrank^.next := lijst^.drank;
			lijst^.drank := tempdrank;		
		END;
	END Pass;
	
	PROCEDURE Part*;
	(*
		Beschrijving: Deze procedure haalt een persoon terug uit de lijst.
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR
			naam: Naam;
	BEGIN
		In.Open();
		In.String(naam);
		WHILE lijst^.next # NIL DO
			lijst := lijst^.next;
		END;
		WHILE (lijst^.naam # naam) & (lijst^.previous # NIL) DO
			lijst := lijst^.previous;
		END;
		IF lijst^.naam # naam THEN
			OutExt.String(naam);
			OutExt.String(" is niet gevonden op het festival!");
			OutExt.Ln();
		ELSE
			IF lijst^.previous # NIL THEN
				lijst^.previous^.next := lijst^.next;
			END;
			IF lijst^.next # NIL THEN
				lijst^.next^.previous := lijst^.previous;
			END;
			IF lijst^.next # NIL THEN
				lijst := lijst^.next;
			ELSIF lijst^.previous # NIL THEN
				lijst := lijst^.previous;
			END;
		END;
	END Part;
	
	PROCEDURE Print*;
	(*
		Beschrijving: Deze procedure print de inhoud van de lijst, het drinken van de personen, en de inhoud
		van de vuilbak af.
		Parameters: - 
		Returntype: - 
		Algoritme: - 
	*)
		VAR 
		temp: Persoon;
		tempdrank, tempvuil, tempged: Drank;
	BEGIN
		SortLijst;
		
		temp := lijst;
		WHILE temp^.previous # NIL DO
			temp := temp^.previous;
		END;
		
		OutExt.Ln();
		OutExt.Ln();
		OutExt.String("De huidige aanwezigen zijn:");
		OutExt.Ln();
		WHILE temp # NIL DO
			OutExt.String("    ");
			OutExt.String(temp^.naam);
			OutExt.String(" -- Huidige consumptie: ");
			OutExt.Color(1);
			OutExt.Ln();
			OutExt.String("    ");
			tempged := temp^.gedronken;
			IF tempged = NIL THEN
				OutExt.String("                 niets!");
				OutExt.Ln();
			END;
			WHILE tempged # NIL DO
				OutExt.String("                 ");
				OutExt.String(tempged^.naam);
				OutExt.String(": ");
				OutExt.Int(tempged^.inhoud, 0);
				IF ~(tempged^.next = NIL) THEN
					OutExt.String(",  ");
				END;
				OutExt.Ln();
				tempged := tempged^.next;
			END;
			OutExt.Color(15);
			OutExt.String(" Dat zijn ");
			OutExt.Int(temp^.consumptie, 0);
			OutExt.String(" slokken. -- ");
			IF temp^.drank = NIL THEN
			OutExt.String(" Geen flessen in bezit.");
		ELSE
			OutExt.String("bezit: ");
			tempdrank := temp^.drank;
			WHILE tempdrank # NIL DO
				OutExt.Ln();
				OutExt.String("       ");
				OutExt.String(tempdrank^.naam);
				OutExt.String(" -> ");
				OutExt.Int(tempdrank^.inhoud, 0);
				OutExt.String(" slokken");
				tempdrank := tempdrank^.next;
			END;
		END;
		OutExt.Ln();
		temp := temp^.next;		
		END;
		OutExt.String("De inhoud van de vuilbak is:");
		OutExt.Ln();
		OutExt.String("    ");
		tempvuil := vuilbak;
		IF tempvuil = NIL THEN
			OutExt.String("niets! De vuilbak is leeg.");
			OutExt.Ln();
		END;
		WHILE tempvuil # NIL DO
			OutExt.String(tempvuil^.naam);
			IF ~(tempvuil^.next = NIL) THEN
				OutExt.String(",  ");
			END;
			OutExt.Ln();
			tempvuil := tempvuil^.next;
		END;
	END Print;

	
BEGIN
	OutExt.Open();
	OutExt.Clear();
	Initialize;
	
END Festival.
Festival.Tool

Code: Select all

(*
	Author: 		Dirk Delahaye
	Date:			23/01/2006
*)

Builder.MarkErrors ^
Builder.ClearErrors

Builder.Compile \ws2
	OutExt.Mod
	Festival.Mod
	~
Builder.Compile \f*

System.Free
	Festival.Mod
	OutExt.Mod
	~

Festival.Initialize
Festival.Arrive Wouter Citroensap 1 Bessensap 2 Appelsap 10~
Festival.Arrive Peter Wijn 1 Water 1 Passievruchtensap 3~ 
Festival.Arrive Kurt~
Festival.Drink~
(* Bij het voorbeeld zal Peter eerst de Wijn drinken ipv het
 Passievruchtensap, omdat deze toch even lang in zijn bezit 
 zijn maakt dit weinig uit. ( de wijn werd als laatste par
 meegegeven dus is "het minst lang in bezit" *)
 
Festival.Pass Wouter Kurt~ 
Festival.Print
(* De print Procedure sorteert tevens de namen van de mensen
alfabetisch. *)
Festival.Part Wouter~
Festival.Arrive Gunther Druivensap 2~
Laatste uitbreiding is dus zwaar mislukt :P Als ge 2x appelsap drinkt doet em
Appelsap 1
Appelsap 1

:D

Maar voor de rest werkt het ongeveer ;)
[quote="zarry"][url=http://www.winak.be/forum/viewtopic.php?p=12475#12475]wickaaaah! thcikci tschiki paaaauuuuw wicked-original![/url][/quote]

User avatar
Shinta
WOZ
Posts: 1122

Post#10 » Mon Jan 23, 2006 4:25 pm

kakexaam .. stomme qwerty toetsenborden, voorstellling ik in lokaal : *tilde tilde tilde tilde ... daar !!! ampersand .. ampersand .... , hmmm, waar staat da*

User avatar
EagleEye812
Posts: 406

Post#11 » Mon Jan 23, 2006 4:35 pm

Gelukkig kan ik vloeiend Qwerty spreken

domi

Post#12 » Mon Jan 23, 2006 4:43 pm

F.U.C.K.!

User avatar
Norfolk
WOZ
Posts: 780
Contact:

Post#13 » Mon Jan 23, 2006 5:41 pm

EagleEye812 wrote:Gelukkig kan ik vloeiend Qwerty spreken
Lol :D

@Shinta: Daarom heb ik begin dit jaar thuis mijn toetsenbord op QWERTY gezet, ook al is da een AZERTY toetsenbord (op de knopkes zelf :P)
Kheb dan een QWERTY afbeelding gezocht op internet en als ik iets ni vind, dan zoek ik da daar ff op.
En dan gaat da kei veel beter op unief.
NADEEL: als ge ergens anders dan thuis of op unief op ne pc gaat, zitte met zelfde probleem, maar andersom :D

User avatar
Shinta
WOZ
Posts: 1122

Post#14 » Mon Jan 23, 2006 5:42 pm

Norfolk wrote:
EagleEye812 wrote:Gelukkig kan ik vloeiend Qwerty spreken
Lol :D

@Shinta: Daarom heb ik begin dit jaar thuis mijn toetsenbord op QWERTY gezet, ook al is da een AZERTY toetsenbord (op de knopkes zelf :P)
Kheb dan een QWERTY afbeelding gezocht op internet en als ik iets ni vind, dan zoek ik da daar ff op.
En dan gaat da kei veel beter op unief.
NADEEL: als ge ergens anders dan thuis of op unief op ne pc gaat, zitte met zelfde probleem, maar andersom :D
keb gewoon gezegd tege ons ma van : "tis ouw fout dakik gebuisd zen trut !!! dus koopt maar een qwerty toetsenbord" (iets vriendelijk weliswaar ;)).

User avatar
Nickman
Posts: 391
Contact:

Post#15 » Mon Jan 23, 2006 5:44 pm

Hehe, qwerty sucks indeed...
Veel tijd me verscheten...

Return to “1ste Bachelor”

Who is online

Users browsing this forum: No registered users and 2 guests

cron