diff --git "a/Dokument\303\241ci\303\263.odt" "b/Dokument\303\241ci\303\263.odt"
index f9fd3ca3fc50c610f191a3c2be130150bffb5a5d..ae55bac7d3e123cf0adfb06378c6ba97bb305546 100644
Binary files "a/Dokument\303\241ci\303\263.odt" and "b/Dokument\303\241ci\303\263.odt" differ
diff --git a/NHF/include/heap.h b/NHF/include/heap.h
index 819c5c7f1dc18520766825fcba29a5bf17c5497b..c32f238c60b00964e7a1a347b82c85756bef4409 100644
--- a/NHF/include/heap.h
+++ b/NHF/include/heap.h
@@ -1,5 +1,8 @@
 #ifndef HEAP_H
 #define HEAP_H
+
+#include<ostream>
+
 #include "mem_block.h"
 
 /** \brief Egy memóriamodul tuladjonságai.
@@ -14,7 +17,13 @@ class heap
          *
          */
 		heap(const memnum size);
-		~heap();
+		~heap(){delete [] blocks;}
+
+        /** \brief Visszaadja a memória méretét
+         *
+         * \return const memnum A méret
+         *
+         */
 		const memnum get_size() const { return size; }
 
         /** \brief Ha lehetséges, lefoglal egy megadott méretű memóriaterületet
@@ -23,7 +32,7 @@ class heap
          * \return memnum A pid, amivel később a process azonosítani tudja magát
          *
          */
-		memnum allocate(memnum block_size);
+		memnum allocate(const memnum block_size);
 
         /** \brief Megszűnteti a kapott pid-val kezdődő memóriafoglalást
          *
@@ -31,11 +40,20 @@ class heap
          * \return void
          *
          */
-		void free(memnum pid);
+		void free(const memnum pid);
+		friend std::ostream& operator<<(std::ostream& os,heap& mem);
 	protected:
 	private:
 		const memnum size;/**< A memóriamodul mérete */
 		mem_block* blocks;/**< Pointer a foglalt tömbre */
+
+        /** \brief A worst fit stratégiának megfelelően megkeresi a választott blokk kezdetét.
+         * A stratégia szerint a legnagyobb egybefüggő memóriaterületet választja ki.
+         *
+         * \param block_size memnum Az igényelt blokkméret
+         * \return memnum A process leendő pid-ja
+         *
+         */
 		memnum findfit(memnum block_size);
 };
 
diff --git a/NHF/include/mem_block.h b/NHF/include/mem_block.h
index 31d7209e2669c1a47f6077a03bf01d824499325c..a6b9647e120e49493cac8d9f44436ac001bb0eb3 100644
--- a/NHF/include/mem_block.h
+++ b/NHF/include/mem_block.h
@@ -7,15 +7,20 @@ typedef unsigned int memnum;
  * Minden byte-hoz hozzárendeljük az alább látható három tagot,
  * hogy ne kelljen bonyolult nyilvántartást fenntartani.
  */
-class mem_block
+struct mem_block
 {
-	public:
 		memnum block_size;/**< Annak a blokknak a mérete, aminek az elején ez a byte áll */
 		bool filled;/**< Jelzi, hogy az adott byte épp foglalt-e */
         /** \brief Beállítja a byte adatait töltetlenre, és 0 blokkméretre
          * \param false
          */
 		mem_block():block_size(0),filled(false){}
+		void set(bool fill=false, memnum block_size=0)
+		{
+			filled=fill;
+			this->block_size=block_size;
+		}
+		void reset(){set();}//Csak kényelemből, nem biztos, hogy érdemes bennehagyni.
 };
 
 #endif // MEM_BLOCK_H
diff --git a/NHF/include/process.h b/NHF/include/process.h
index 27762c863acf1415465b255e000e7f813c120b17..4b855f0264321ef55cf0801f09251b59be3c9930 100644
--- a/NHF/include/process.h
+++ b/NHF/include/process.h
@@ -8,8 +8,8 @@
 class process
 {
 	public:
-		process(memnum block_size, heap& mem);
-		~process();
+		process(memnum block_size, heap& mem):mem(mem){pid=mem.allocate(block_size);}
+		~process(){mem.free(pid);}
 	protected:
 		memnum pid;/**< A process pid-ja */
 		heap& mem;/**< A memóriamodul, amelyben a process a memóriát megkapta */
diff --git a/NHF/main.cpp b/NHF/main.cpp
index 0448747f2355d6f64de0e3ae7b75b4a74d19b769..5cfadafb11994c8abc3bcf0bb107417707ab86c8 100644
--- a/NHF/main.cpp
+++ b/NHF/main.cpp
@@ -1,13 +1,19 @@
 #include <iostream>
 
 #include"proc_test.h"
+#include"test_container.h"
 
 using namespace std;
 
 int main()
 {
-	heap mem(2000);
-	proc_test x("kutya",process(1500,mem));
-	cout << x.get_name() << endl;
+	heap mem(20);
+	cout<<mem;
+	cout<<mem.allocate(5)<<endl;
+	cout<<mem.allocate(5)<<endl;
+	cout<<mem.allocate(5)<<endl;
+	cout<<mem;
+	mem.free(5);
+	cout<<mem;
 	return 0;
 }
diff --git a/NHF/src/heap.cpp b/NHF/src/heap.cpp
index 03d600473ae0d5d7dabb9b5a4119569009a4bc0f..a6c6fe8d585b5a7df1761272d4df14b54a354389 100644
--- a/NHF/src/heap.cpp
+++ b/NHF/src/heap.cpp
@@ -1,32 +1,85 @@
 #include "heap.h"
 
-heap::heap(memnum size):size(size)
+heap::heap(const memnum size):size(size)
 {
 	blocks=new mem_block[size];
 	blocks[0].block_size=size;//az egész memória egy nagy töltetlen blokk
 }
 
-heap::~heap()
+memnum heap::findfit(memnum block_size)
 {
-	delete [] blocks;
+	memnum max=0;
+	if(block_size>size)
+		throw ("Kivétel");//hibakezelés részletesebben kell
+	for(memnum i=0;i<size;i+=blocks[i].block_size)//0-tól kell indítani, különben a léptető művelet 0-val növel
+	{
+		if(blocks[i].block_size>blocks[max].block_size)
+			max=i;
+	}
+	if(max==0 && blocks[max].filled)
+		throw ("Kivétel");//hibakezelés jobban
+	return max;
 }
 
-memnum heap::findfit(memnum block_size)
+memnum heap::allocate(const memnum block_size)
 {
-	//egy maximum kiválasztási tétel
+	if(block_size<0)
+		throw "Kivétel";//hibakezelés jobban
+	memnum start;
+	try
+	{
+		start=findfit(block_size);
+	}
+	catch(const char*)
+	{
+
+	}
+	memnum original_block_size=blocks[start].block_size;
+	blocks[start].set(true,block_size);
+	for(memnum i=start+1; i<start+block_size; i++)
+		blocks[i].set(true);
+	//Az eredeti blokk maradék részének felparaméterezése
+	memnum new_start=start+block_size;
+	if(new_start<size && !blocks[new_start].filled)
+		blocks[new_start].block_size=original_block_size-blocks[start].block_size;//fölösleges set() függvényt használni, mert eleve csak a töltetlen területre állítja be
+	return start;
 }
 
-memnum heap::allocate(memnum block_size)
+void heap::free(const memnum pid)
 {
-	memnum idx=findfit(block_size);
+	if(pid<0 || pid>size)
+		throw "Kivétel";//hibakezelés jobban
+	memnum next_block_idx=pid+blocks[pid].block_size;
+	for(memnum i=pid+1; i<next_block_idx; i++)
+		blocks[i].reset();
 	/*
-	 * meg kell írni a blokk paramétereinek beállítását
-	 * és adott esetben a blokk összes tagjának módosítását.
+	 * Az új üres blokk méreténél figyelembe kell venni,
+	 * hogy az utána következő blokk telített, illetve,
+	 * hogy az előtte lévő blokk telített-e.
 	*/
-	return idx;
+	memnum before=0,after=next_block_idx;
+	for(memnum i=0; i<size; i+=blocks[i].block_size)
+	{
+		if(i+blocks[i].block_size==pid)
+		{
+			before=i;
+			break;
+		}
+	}
+	if(!blocks[before].filled)//ha előtte is van üres memóroaterület
+	{
+
+	}
+	blocks[pid].set(false,blocks[pid].block_size+blocks[next_block_idx].block_size);
+	blocks[next_block_idx].reset();
 }
 
-void heap::free(memnum pid)
+std::ostream& operator<<(std::ostream& os,heap& mem)
 {
-	//az allocate inverze
+	for(memnum i=0; i<mem.size;i++)
+	{
+		os<<mem.blocks[i].filled<<"\t"<<mem.blocks[i].block_size<<std::endl;
+	}
+	os<<"-------------------------------------------\n";
+	return os;
 }
diff --git a/NHF/src/process.cpp b/NHF/src/process.cpp
deleted file mode 100644
index 5184f5e88f07286d6a445dbb8b9bdb840e7fcaea..0000000000000000000000000000000000000000
--- a/NHF/src/process.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "process.h"
-
-process::process(memnum block_size, heap& mem):mem(mem)
-{
-	pid=mem.allocate(block_size);
-}
-
-process::~process()
-{
-	mem.free(pid);
-}
diff --git a/diagram.uxf b/diagram.uxf
index a4c0f5d03419101c53363fd3ba2b0f38e605eef5..99e4c7fd5a99f65fd3b58aa9e967c818ba2ba4f8 100644
--- a/diagram.uxf
+++ b/diagram.uxf
@@ -13,7 +13,8 @@
 /+ mem_block()/
 + block_size: unsigned int
 //+ byte: char
-+ filled: bool</panel_attributes>
++ filled: bool
+fg=blue</panel_attributes>
     <additional_attributes/>
   </element>
   <element>
@@ -24,7 +25,8 @@
       <w>150</w>
       <h>50</h>
     </coordinates>
-    <panel_attributes>lt=&lt;&lt;&lt;&lt;-</panel_attributes>
+    <panel_attributes>lt=&lt;&lt;&lt;&lt;-
+fg=blue</panel_attributes>
     <additional_attributes>30;30;130;30</additional_attributes>
   </element>
   <element>
@@ -49,8 +51,8 @@
                            {pid:} unsigned int
 //valamai, amit ha átadok a freenek, akkor tudja mi hol van.
 + free(pid: unsigned int): void
-
-//operator&lt;&lt;</panel_attributes>
+//operator&lt;&lt;
+fg=blue</panel_attributes>
     <additional_attributes/>
   </element>
   <element>
@@ -69,7 +71,8 @@ mem: heap&amp;
 /+ process(block_size: unsigned int,/
 /                                        mem: heap&amp;)/
 /+ ~process()/
-//destruktorban ki kell adni egy free-t a heap-nek</panel_attributes>
+//destruktorban ki kell adni egy free-t a heap-nek
+fg=blue</panel_attributes>
     <additional_attributes/>
   </element>
   <element>
@@ -81,7 +84,8 @@ mem: heap&amp;
       <h>90</h>
     </coordinates>
     <panel_attributes>lt=&lt;&lt;&lt;-
-//ezt a jelölést azért át kell gondolni</panel_attributes>
+//ezt a jelölést azért át kell gondolni
+fg=blue</panel_attributes>
     <additional_attributes>30;30;30;70</additional_attributes>
   </element>
   <element>