C++ LIFO Mantigi (kisa) (1 İzleyici)

Nishimura

Üye
Katıldı
Mesajlar
29
Yaşadığın yer
Moskova
Kredi
0

Merhaba arkadaslar bugun kisaca LIFO (last in - first out) Mantigini ve aciklamali olarak kodu ekliyecem kisa olarak.. ufakta bir anlatim ekliyecem icerisine.. gitikce konulari karisik ve ve agirlik olarak ve en cok ogrenirken zorlu olan mantigini ogrenirken zorlanilan kodlari ekliyecem.. buda onlardan bir tanesinidir..

LIFO NEDIR ?
KISACA BIR MESELA BOZULMAYAN URUNLER ICIN. FABRIKALARDA MESELA. CEKIC ICIN .. MESELA MANTIGI ANLATIYIM.. ORNEKTIR

10 TANE RENKLI CEKIC VARDIR VE SIRA SIRA KUTUYA DIZERSIN.. TABI HEPSI NUMARALI SIRA SIRA.. KUTUDAN GERI CIKARDIGINDA.. MANTIK SUDUR (LAST IN - FIRST OUT) TURKCESI (SON GIREN ILK CIKAR) ORNEGIMDENDE ANLATIGIM GIBI.. BASIT OLMASADA ANLAYINCA.. KOLAY OLACAKTIR.. STACK EKLEME CIKARMA .. VE ALGORITMA UZERINDE..BURADA TEK DEGISKEN UZERINDEN ANLATMAYA CALISTIK...


DAHA ONCEDE ACIKLADIM HEADER NEDIR NASIL OLUSTURLUR.. OYUZDEN BURADA 2 CPP 1 ADET HEADER OLUSTURUCAZ 3 AYRI CODE SAYFASI MANTIGINDA EKLIYECEM (BUYUK PROGRAM MANTIGINDA YANE).

BU HEADER FILEMIZ
Kod:
#ifndef LIFO_H_
#define LIFO_H_
typedef unsigned long Item;
class Stack
{
private:
	enum{MAX = 10}; // BURADA ASLINDA ENUMUN KULLANIM AMACI DIZININ ELEMAN SIRINI KOYMAK ICIN... (IDEX) ICIN..
	Item items[MAX];
	int top; // BU DEGISKEN SAYESINDE STACTAKI.. YUKLEME CIKARMA OLAYINI GERCEKLESTIRECEZ...
public:
	Stack(); // CONSTRUCTURUMUZ...
	bool isempty() const; // GERI DONUS TIPLERIMIZ HEP TRUE VE FALSE OLACAGI ICIN... BOOL KULLANACAGIZ.. VE BOS KONTROLU ETME..
	bool isfull()const; // DOLU KONTROL ETME..
	bool push(const Item & item); // ELEMAN EKLEME...
	bool pop(Item & item); // STACK EN SONUNCU ELEMENINI SILMEK ICIN..
};
#endif

BU CPP METOTLARIMIZ..
Kod:
#include "stdafx.h"
#include <iostream>
#include "LIFO.H" // HEADER ISIMINI YUKARDAKI HEADERDAN DEGISTIREBILIRSINIZ KENDINIZE GORE.. BURADA METOTLARI KULLANMAK ICIN 2 CI CPPYE METOTLARIN ATAMALARINI VE FUCTION ISLEMLERINI YAPTIK...
using namespace std;

Stack::Stack() // CONSTRUCTURUMUZA YANE BASLANGICTA NESNEYE ATANACAK.. DEGER SADECE BIR DEGISKEN DEGERI VAR ONADA 0 ATANACAK...
{
	top = 0;
}
bool Stack::isempty()const // BURADA KONTROL YAPILIYOR.. STACK YANE (DEPOMUZ) BOSMU...BOS ISE TRUE RETURN EDIOR YANLIS ISE FALSE RETURN EDIYOR...
{
	return top == 0;
}
bool Stack::isfull()const // BURADA INDEX UZUNLUGU KADAR GIREBILICEGIMIZ ICIN STACKA FULL ISE TRUE DEGIL ISE FALSE RETURN EDIYOR..
{
	return top == MAX; 
}
bool Stack::push(const Item & item) // BURADA STACKA EKLEME YAPILIYOR.. INDEXSI KONTROL EDEREK.ONA GORE IF SARTI DOGRUYSA YANE EKLEME YAPILDIYSA TRUE RETURN EDIYOR DEGILSE  ELSE GECIS YAPIP FALSE RETURN EDILIYOR..
{
	if(top < MAX)
	{
		items[top++] = item;
		return true;
	}
	else
		return false;
}
bool Stack::pop(Item & item) // BURADA ISE CIKARMA ISLEMI YAPILIYOR.. DIZIDEKI EN SON.. DEGERI POSTA SAYESINDE BI NEVI (POINTER DAHA SONRA ANLATACAGIM..) TEK TEK DIZIDEN CIKARIP ATIYOR.. FAKAT MANTIK.. 1 DEGISKEN UZERINDE.. YANE DIZI YUKARI ASAGI CIKIYOR ASANSOR GIBI..INDEXTE KALIYOR DEGERLER.. FAKAT 1-10 KADAR INIP CIKIYOR.. LIFO MANTIGI BU.. BURADAD IF SARTI DOGRUYSA TRUE DEGILSE FALSE RETURN EDIYOR..
{
	if(top > 0)
	{
		item = items[--top];
		return true;
	}
	else
		return false;
}

BURADA CPP MAINMIZ
Kod:
#include "stdafx.h"
#include <iostream>
#include <cctype>
#include "LIFO.H"
using namespace std;

int main()
{
	Stack st;
	char ch;
	unsigned long po;

	cout << "Lutfen Indexse Giris Yapmak Icin A veya a Basip Eklemenizi Yapin, \n"
			<< "P Ile a LIFO, Cikmak Icin q Basiniz.\n";
	while (cin >> ch && toupper(ch) != 'Q') // BURADA TOUPPER ILE GIRILEN HARF CIKIS ICIN KENDISI BUYUTUP CCTYOE KUTUPHANESI FONKSIYONUDUR...WHILE LIFO MANTIGIMIZI DEVAM ETTIRMEK ICIN VAR...
	{
		while (cin.get() != '\n') // BURADA HER HANGI BIR SAYI YERINE HATALI BIR GIRIS YAPILDIGINDA.. AKINDAKI CUMLE SONUNA GELIP..IF YAPISIYLA BURAYI ATLAMAK ICIN.
			continue;
		if(!isalpha(ch)) // YUKARDAKIYLE BAGLANTILI...
		{
			cout << '\a';
			continue;
		}
		switch(ch) // BURADA A GIRERSEK.. LIFO MANTIGMIZ PO DEGISKENIMIZ ILE YANE CALISIYOR.. GIRISTE A GERKELI KONTROL YAPILIR METOTLARA BAGLANIP INDEXLERE EKLER.. STACK FAKAT CIKARMAK ISTEDEGIMIZDE P GIRMEMIZ YETERLI OLACAKTIR ODA STACKIMIZ BOSALTMAKTADIR..
		{
		case 'A':
		case 'a': cout << "Lutfen LIFO Degeriniz Giriniz: ";
			cin >> po;
			if(st.isfull()) // BURADA STACKIN FULL KONTROL YAPILIYOR.. METOTLARA BAGLANIP..
				cout << "Stack Fulldur\n";
			else // AKSI TAKTIRDE.. EKLEME YAPILIYOR..
				st.push(po);
			break;
		case 'P':
		case 'p': if(st.isempty()) // BURADA  STACKIN BOS KONTROLU YAPILIYOR.. 
					  cout << "Stack Bostur\n";
				  else // AKSI TAKTIRDE GEREKLI DEGISKENIMIZLE METOT ARASINDAKI BAGLANTI ILE STACK BOSALTILIYOR..
				  {
					  st.pop(po);
					  cout << "PO #" << po << " Lifo (PO)\n";
				  }
				  break;
		}
		cout << "Lutfen Indexse Giris Yapmak Icin A veya a Basip Eklemenizi Yapin, \n"
			<< "P Ile a LIFO, Cikmak Icin q Basiniz.\n";
	}
	cout << "Gule Gule\n\n";
	system("pause");
}

UMARIM ANLATA BILMISIMDIR..


"TARAFIMCA EKLENEN SCRIPTLER BANA AIT OLUP KOPYALANMASI ANINDA (ALINTI) IBARESI EKLENMESI RICA OLUNUR"

 

Bu konuyı kimler okuyor

Benzer konular

Top