IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 25 Şubat 2012, 19:50   #1
Çevrimdışı
aSi
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Yığınlarla parantez kapama





Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.


Kod:   Kodu kopyalamak için üzerine çift tıklayın!
#include <iostream> #include <conio.h> #include <stdio.h> #include <cstdlib> using namespace std; class node; class node { private : int satir; char parantez; public : class node *sonraki; bool sorun; char getParantez() { return parantez; } int getSatir()//satir getirir { return satir; } int charCompare(char ch)// o sinifin elemani ile ch karsilastirilir uyusuyorsa 1 gonderir { if(parantez == ch)return 1; return 0; } node(char ch,int atananSatir) //yapicimiz ilk degerleri veriyor. { parantez = ch; satir = atananSatir; sorun = false; sonraki = NULL; } } *bas,*son; void pushStack(char ch,int satir)// push stack adi ustunde yigina atma gorevini ustlenen fonksiyon { class node *yeni; if(bas == NULL) // ilk elemanda ise yeni eleman yaratilir { bas = new node(ch,satir); son = bas; } else { //ilk eleman degil o yuzden basa eklenir yeni = new node(ch,satir); yeni->sonraki = bas; bas = yeni; } } class node * pullStack(char ch,int satir) //pullstack yigindan veri ceker. { char chCopy; switch(ch)//hangi elemanin cekilecegine karar verilir { case ']' : chCopy = '['; break; case '}' : chCopy = '{'; break; case ')' : chCopy = '('; default : chCopy = ch; break; } class node *silinecek; if(bas == NULL) { cout<<"\n\t\t Uyari!\n"<<" Acilan parantez kapatilmamis!"; } else if(! bas->charCompare(chCopy))//uyusmuyorsa girecek { cout<<"\n\t\t Uyari!\n "<<bas->getSatir()<<".Satirda "<<bas->getParantez() <<" ile acilan parantez "<<ch<<" ile "<<satir<<" satirda kapanmis!"<<endl; cin.get(); exit(1); } else if(bas->charCompare(chCopy))//uyusuyorsa silme islemi yapiliyor { silinecek = bas; bas = bas->sonraki; delete silinecek; } } int main() { int satir=1; bool ciftTirnakKontrol = false,tekTirnakKontrol = false;// cift ve tek tirnak icin kontrol yapilari char temp; FILE *dosya; dosya=fopen("kaynak.c","r"); //kaynak dosyamizi okuma modunda aciyoruz if(!dosya)// dosyamiz acilmazsa cikis { printf("\n\t\t\t\t Uyari!!!\n\n\t\t\t Dosya Okunamadi!"); getch(); exit(1); } while(!feof(dosya))// dosya sonuna kadar okuma islemi yaparak ekleme ve cikarma islemi yapacaz { temp = getc(dosya); // dosyadan bir deger okuyup tempe attik if(temp == '\n') // satir sonuysa bir satir artiriyoruz { satir++; } ///ACILAN PARANTEZLERLE YIGINA EKLEME YAPILIR else if(temp == '{' || temp == '[' || temp == '(' || temp == 39 || temp == '"') // 39 ascii tablosunda ' esit { /* *\ Tirnak kontrollerini acilis ve kapanisi ayni karakter oldugundan farkli degerlendirmek zorunda kaldim.Burdaki tirnak kontrol algoritmasi ilk tirnak okundugunda kontrol false dan true ya ceviriliyor boylece bir daha tirnak okundugunda bunun kapama tirnagi oldugu biliniyor tabi programin simdiki eksigi tirnagi bir isaret olarak yazdirmak icin sizde biliyorsunuz ki sola yatik sekilde yazabiliriz ornegin \" seklinde yazdigimda da tirnak kontrolunde olmamasi gerektigi halde degisim olacak gelistirmek isteyen olursa onu fixler :) \* */ if(temp == 39) { if(tekTirnakKontrol) { pullStack(temp,satir); tekTirnakKontrol = false; } else { tekTirnakKontrol = true; pushStack(temp,satir); } } if(temp == '"') { if(ciftTirnakKontrol) { pullStack(temp,satir); ciftTirnakKontrol = false; } else { ciftTirnakKontrol = true; pushStack(temp,satir); } } if(temp != 39 && temp != '"' ) { if(tekTirnakKontrol || ciftTirnakKontrol) { cout<<"\n\t\t Uyari!\n "<<bas->getSatir()<<" da "<<bas->getParantez()<< " kapanmamis."<<endl; cin.get(); exit(1); } pushStack(temp,satir); } } ///KAPANAN PARANTEZLERLE YIGINDAN ATMA YAPILIR else if(temp == '}' || temp == ']' || temp == ')')// burada kapama parantezi okunursa yigindan alma islemi yapiyoruz. { pullStack(temp,satir); } } return 0; }


__________________
Doğruları biliyorsan, yalanları dinlemek eğlencelidir.
 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları sohbet odaları Benimmekan Mobil Sohbet
Cevapla

Etiketler
kapama, parantez, yığınlarla


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Hayata Parantez Açmak Süslü Şiir, Hikaye ve Güzel Sözler 0 21 Şubat 2009 14:24
Snotice Parantez içindeki IP Okutma artemiSo mIRC Scripting Sorunları 6 12 Nisan 2007 01:44