Ana Menü

  • Ana sayfa
  • Teknoloji Haberleri
  • Haberler
  • Makaleler
  • Download
  • Forum Knite Online Koxp
  • İletişim


  • Donanım
  • Mühendislik
  • Network
  • Oyunlar
  • Programlama
  • Tasarım
  • Yazılım
  •  
    Haberler

  • ASUS, A6000N serisi yeni diz üstü bilgisayarlarını duyurdu
  • Türk Telekom'dan öğrencilere ADSL kampanyası
  • ASUS WL-HDD 2.5: Kablosuz Ağlar İçin Disk Paylaştırıcı
  • Virüs En İyi 10: Sober'in Hoş Olmayan Geri Dönüşü
  • Microsoft WINS Yamasını Hazırlıyor
  • Devlet Yazışmaları İnternete Taşınıyor
  • ISS'ler de ADSL Hizmeti Vermeye Başlıyor
  • Taşınabilir Video oynatıcılarda devrim DivX-POD 7010
  • Kablo Internet'te indirim oldu mu, olmadı mı ?
  • Mobil kablosuz foto yazıcısı: HP Photosmart 375
  • En küçük Pocket Pc Phone Qtek s100
  • Google, interneti yeniden tanımlıyor
  • Kitap yorumu: Dijital Kale
  • Fedora Core 3
  • Zarif ve işlevsel
  • RoboDemo 5
  • Ateşli internet tilkisi
  • Türkçe GPL Wiki Yazılımı : Wiksis
  • VII. Bilisim Haftasi Etkinlikleri
  • Teknohaber.NET TRT INT'de
  • MyDoom: Yeni sanal kurt eskilerini temizliyor
  • Google artık 1/3 daha fazla web sayfası arıyor
  • MSN Messenger’da virüs!
  • 2003’ün ‘most wanted’ sitesi; Kazaa
  • Mars Express, gezegene yaklaşıyor
  •  
    Linkler

  • Bilgisayar
  • Diğer
  • Geyik
  • Internet
  • Üniversiteler
  •  
    WinBaglama Özel
  • Hakkında
  • Nota Dosyaları
  • Download
  •  
    Teknohaber.Net

    Site hakkında
    Editörler

     
    Arama

     
    Sponsor
     
     
    İstatistik
    eXTReMe Tracker
     

    Visual C#.NET ile Labirent Uygulaması

    Tarih: 23.04.2005 > Kaç kez okundu? 6330

    Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve iç değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, üçüncü satırda labirentten çıkış noktasını, dördüncü satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak...





    Visual C#.NET ile Labirent Uygulaması

    PROBLEM

    Bir labirent uygulaması yazacaksınız. Labirent bir grid (matris) şeklinde tasarlanacak; labirentin ebatlarını ve iç değerlerini bir input dosyasından okuyacaksınız. Input dosyasının ilk satırı boyutları verecek, ikinci satır labirente giriş noktasını, üçüncü satırda labirentten çıkış noktasını, dördüncü satırdan itibaren de labirentin değerlerini okuyacaksınız. Input dosyasının ismi odvinp.txt olacak. Odvinp.txt ye örnek verecek olursak: 5-5 lik bir labirentte, giriş noktasının 2. satır, 1. sütun ve çıkış noktasının 5.satır 4. sütun olduğunu varsayarsak. (Bu gösterimde 1leri duvar yada dolu, 0larıda boş ve gezinebilir varsayıyoruz.)

    5,5
    2,1
    5,4
    1 0 0 0 1
    0 0 1 0 1
    0 0 1 0 0
    1 0 1 0 1
    1 1 0 0 1

    Labirentte hareket yönleri yukarı-sağ-sol-aşağı yönleridir, çapraz hareket edilemeyecektir. Giriş noktasından başlayarak çıkış noktası yakalanmaya çalışılacak ve böyle bir güzergah bulunabilirse güzergah noktalarını bir text dosyaya yazacaksınız, bu dosyanın ismi okul numaranızın son 4 hanesi.txt şeklinde olacak. Eğer bir güzergah bulunamaz ise bu dosyaya ‘uygun yol bulunamadı' yazılacak. Uygun yolda her nokta sadece 1 kere ziyaret edilmiş olunmalı. Yukarıdaki örneğin çıkış dosyası yan yana veya alt alta yazılı şekilde giriş ve çıkış noktalarıyla birlikte 2,1 2,2 1,2 1,3 1,4 2,4 3,4 4,4 5,4 şeklinde olacak.

    Zip'li dosyayı indirmek için tıklayın.

    KAYNAK KODLAR

    
    /// 
    /// Sonuca giden asil yolu tutan sinif
    /// mys isimli sinifimda tanimladigim alar arraylist inde tutuluyor.
    /// 
    public class actualRoad
    {
    	public Point p;	
    	public actualRoad(Point P)
    	{
    		p = P;
    	}
    }
    
    
    /// 
    /// Labirentin 1 ve 0 larini tutan yapim
    /// 
    public struct myarr
    {
    	public Int16 val;
    	public bool visited;
    	public myarr(Int16 Val, bool V)
    	{
            val = Val;
    		visited = V;
    	}
    
    }
    /// 
    /// Bir çok islemi ve fonksiyonlari yaptigim sinifim
    /// 
    public class mys
    {
    	private Point current; // üstünde bulunulan nokta
    	private Point endP;    // labirentin çikis noktasi
    	private int row,col;   // labirent kaç satir ve sutündan olusuyor.
    	private int[] bestway = new int[4];	// ilerleme için en iyi nasildir.
    	public ArrayList alAR = new ArrayList();// çikisa giden asil yol. actualroad isimli sinif
    	public myarr[,] myArr; // labirentin 1 ve sifirlarini tutan degisken
    	public Stack stack; // birden fazlama ilerleme yönü oldugunda o noktayi tutan yigin
    	
    	/// 
    	/// Row getter i
    	/// 
    	public int Row
    	{
    		get
    		{
    			return row;
    		}
    	}
    	/// 
    	/// Col getter i
    	/// 
    	public int Col
    	{
    		get
    		{
    			return col;
    		}
    	}
    	/// 
    	/// mevcut nokta getter ve setter i
    	/// 
    	public Point Current
    	{
    		get
    		{
    			return current;
    		}
    		set
    		{
    			current = value;				
    		}
    	} // end of point current
    
    	/// 
    	/// son nokta getter ve setter i
    	/// 
    	public Point EndP
    	{
    		get
    		{
    			return endP;
    		}            
    		set
    		{
    			endP = value;
    		}
    	} // end of EndP
    
    	/// 
    	/// boyutlarin atandigi method.
    	/// 		
    	public void setLength(int Row,int Col)
    	{
    		stack = new Stack();
    		row = Row-1;
    		col = Col-1;
    		myArr = new myarr[Row,Col];
    	}
    
    	/// 
    	/// Tarama isleminde en iyi yönü belirleyen method.
    	/// 
    	public void findBestWay()
    	{
    		if ((current.X <= endP.X)&&(current.Y <= endP.Y))
    		{
    			bestway[0] = 1;
    			bestway[1] = 2;
    			bestway[2] = 3;
    			bestway[3] = 4;
    		} 
    		else if ((current.X >= endP.X)&&(current.Y <= endP.Y))
    		{
    			bestway[0] = 1;
    			bestway[1] = 4;
    			bestway[2] = 3;
    			bestway[3] = 2;
    		}
    		else if ((current.X <= endP.X)&&(current.Y >= endP.Y))
    		{
    			bestway[0] = 3;
    			bestway[1] = 2;
    			bestway[2] = 1;
    			bestway[3] = 4;
    		}
    		else if ((current.X >= endP.X)&&(current.Y >= endP.Y))
    		{
    			bestway[0] = 3;
    			bestway[1] = 4;
    			bestway[2] = 1;
    			bestway[3] = 2;
    		}
    	}
    
    	/// 
    	/// actual road a ekleme islemini yapan method
    	/// 
    	/// eklenecek nokta
    	public void addAR(Point p)
    	{			
    		alAR.Add(new actualRoad(p));
    	}
    
    	/// 
    	/// actual road tan silme islemini yapan method
    	/// 		
    	public void removeAR()
    	{
    		alAR.RemoveAt(alAR.Count-1);
    	}
    
    	/// 
    	/// üstünde bulunulan noktayi gidildi yapiyor. Birdaha gitmemek için
    	/// 
    	public void makeVisited()
    	{
    		myArr[current.X,current.Y].visited = true;
    	}
    
    	/// 
    	/// Noktanin duvarmi degilmi oldugunu belirliyor.
    	/// 
    	/// kontrol edilecek nokta
    	/// boolean sonuc
    	public bool isitWall(Point p)
    	{
    		if (myArr[p.X,p.Y].val==1)
    			return true;
    		else
    			return false;
    	}
    
        /// 
        /// stackten deger okuyor. Tikanma durumlarinda çalisiyor.
        /// 
        /// 1=nokta var.0=stackte deger yok.Çikisada gidilemedi.
    	public byte readStack()
    	{
    		if (stack.Count>0)
    		{
    			current = ((Point)stack.Pop());
    			return 1;
    		}
    		else
    			return 0;
    	}
    
    	/// 
    	/// Üstünde bulunulan nokta son nokta mi
    	/// 
    	/// sayac
    	/// x yönü
    	/// y yönü
    	/// 2=evet çikis.1=hayir devam et aramaya
    	public byte isitFinal(sbyte cnt,sbyte wayX,sbyte wayY)
    	{
    		if (cnt>1)
    			stack.Push(current);			
    		current = new Point(current.X+wayX , current.Y+wayY);
    		addAR(current);
    		makeVisited();
    		if (current == endP)
    			return 2;
    		else
    			return 1;
    	}
    	
    
    	/// 
    	/// üstünde bulunulan noktanin etrafina bakiyor.
    	/// 
    	/// gidilecek yönü belirliyor.
    	/// x yönü
    	/// y yönü
    	/// sayici
    	public void lookAtSides(out sbyte way,out sbyte wayX,out sbyte wayY,out sbyte cnt) 
    	{
    		findBestWay();
    		byte i;
    		wayX = wayY = cnt = way = 0;	
    		for (i=0;i<4;i++)
    			switch (bestway[i])
    			{
    				case 1:
    					if ((myArr[current.X,current.Y+1].val==0)&&(!myArr[current.X,current.Y+1].visited))
    					{
    						if ((wayY==0)&&(wayX==0))
    						{
    							wayY = 1;
    							way = 1;
    						}
    						cnt++;
    					}
    					break;
    				case 2:
    					if ((myArr[current.X+1,current.Y].val==0)&&(!myArr[current.X+1,current.Y].visited))
    					{
    						if ((wayY==0)&&(wayX==0))
    						{
    							wayX = 1;
    							way = 2;
    						}
    						cnt++;
    					}
    					break;
    				case 3:
    					if ((myArr[current.X,current.Y-1].val==0)&&(!myArr[current.X,current.Y-1].visited))
    					{
    						if ((wayY==0)&&(wayX==0))
    						{
    							wayY = -1;
    							way = 3;
    						}
    						cnt++;
    					}
    					break;
    				case 4:
    					if ((myArr[current.X-1,current.Y].val==0)&&(!myArr[current.X-1,current.Y].visited))
    					{
    						if ((wayY==0)&&(wayX==0))
    						{
    							wayX = -1;
    							way = 4;
    						}
    						cnt++;
    					}			
    					break;
    			}			
    	}
    }
    
    
    	
    
    //// yukarıdaki kodlar kullandıımız sınıfın kodları idi
    /// şimdi de form kısmında yazdıımız kodlara bakalım.
    
    	/// 
    	/// Summary description for Form1.
    	/// 
    	public class frmLabirent : System.Windows.Forms.Form
    	{
    		public int x,y;
    		private TextureBrush tbWall;
    		private TextureBrush tbRoad;	
    		private TextureBrush tbR,tbL,tbU,tbD,tbS,tbF;
    		private mys myS;
    		[STAThread]
    		static void Main() 
    		{
    			Application.Run(new frmLabirent());
    		}
    
    
    /// 
    /// Okunan matrisin etrafini birlerle çevirmek için kullaniliyor.
    /// 
    public void surroundbyWall()
    {
    	int i;
    	for (i=0;i<=myS.Col;i++)	
    	{
    		myS.myArr[0,i].val=myS.myArr[myS.Row,i].val=1;
    	}
    	for (i=0;i<=myS.Row;i++)			
    		myS.myArr[i,0].val=myS.myArr[i,myS.Col].val=1;
    }
    
    /// 
    /// Ilk üç satirda bilgileri okumak için yazilan method
    /// 
    /// gelen string
    /// hangi satir
    public void assignParam(string str,int type)
    {
        int x , y;
    	int i = str.IndexOf(",");
    	x = Int32.Parse(str.Substring(0,i));
    	y = Int32.Parse(str.Substring(i+1,str.Length-i-1));
    	Point p = new Point(x,y);
    	if (type==0) // set length
    	{
    		bmp = new Bitmap(y*20,x*20);
    		lblSize.Text = x.ToString()+","+y.ToString();
    		myS.setLength(x+2,y+2); 				
    	}
    	else if (type==1) // start point
    	{
    		myS.Current = p;
    		lblSP.Text = p.X.ToString()+","+p.Y.ToString();				
    	}
    	else if (type==2) // end point
    	{
    		myS.EndP = p;				
    		lblEP.Text = p.X.ToString()+","+p.Y.ToString();				
    	}
    }
    
    /// 
    /// Kontrol isleminin yapilmasi. Baslangiç ve bitis noktasi
    /// duvar olmasin vs.
    /// 
    public void controlP()
    {			
    	if (myS.isitWall(myS.Current))
    	{
    		lblMsg.Text = "A wall cannot be a starting point !!! Rearrange the file";
    		btnFind.Enabled = false;
    	}
    	else if (myS.isitWall(myS.EndP))
    	{
    		lblMsg.Text = "A wall cannot be a ending point !!! Rearrange the file";
    		btnFind.Enabled = false;
    	}
    	else
    	{
    		lblMsg.Text = "You can now click the \"FIND A R..\" button.";				
    		btnFind.Enabled = true;
    	}
    }
    
    /// 
    /// Text dosyasiyi okuyarak myArr isimli diziye atiyan ve
    /// birlere ve sifirlara göre resmi olusturan method
    /// 		
    private void btnLoad_Click(object sender, System.EventArgs e)
    {
    	int row,col,i;
    	row = col =  i =  0;		
    	StreamReader rdr = new StreamReader(Directory.GetCurrentDirectory()+"/Odvinp.txt");		
    	
    	myS = new mys();				
    	
    	assignParam(rdr.ReadLine(),0);
    	pBox.Width = bmp.Width;
    	pBox.Height = bmp.Height;
    	Graphics myGO = Graphics.FromImage(bmp);
    	
    	assignParam(rdr.ReadLine(),1);
    	assignParam(rdr.ReadLine(),2);			
    	
    	surroundbyWall();
    	bool enter = false;
    	string line;
    	while ((line = rdr.ReadLine())!=null)
    	{
    		i = col =0;					
    		while (i<line.Length)
    		{
    			enter = false;
    			if (line[i].ToString()!=" ")
    			{
    				Region myReg = new Region(new Rectangle(col*20,row*20,(col+1)*20,(row+1)*20));
    				if (line[i].ToString()=="1")
    				{		
    					myGO.FillRegion(tbWall,myReg);
    					myS.myArr[row+1,col+1].val = 1;
    					enter = true;
    				}
    				else if (line[i].ToString()=="0")
    				{
    					myGO.FillRegion(tbRoad,myReg);
    					myS.myArr[row+1,col+1].val = 0;
    					enter = true;
    				}
    				if (enter)
    				{
    					col++;
    					if (col>myS.Col-2)
    						break;
    				}
    			}	
    			i++;
    		}										
    		row++;	
    		if (row>myS.Row-2)
    			break;
    	}// end of while	
    	rdr.Close();
    	controlP();
    	myGO.DrawImage(bmp,0,0);
    	pBox.Image = bmp;						
    }
    
    /// 
    /// Tarama isleminde ilerledikçe resmide es zamanli olarak 
    /// boyamak için kullanilan method.
    /// 
    /// hangi texture ile boyanacak.
    /// hangi nokta boyanacak
    private void copyPortion(sbyte way,Point p)
    {
    	Graphics myGO = Graphics.FromImage(bmp);
    	Rectangle rect = new Rectangle((p.Y-1)*20,(p.X-1)*20,20,20);
    	Region myReg = new Region(rect);
    	switch (way)
    	{
    		case 1:
    			myGO.FillRegion(tbR,myReg);
    			break;
    		case 2:
    			myGO.FillRegion(tbD,myReg);
    			break;
    		case 3:
    			myGO.FillRegion(tbL,myReg);
    			break;
    		case 4:
    			myGO.FillRegion(tbU,myReg);
    			break;
    		case 5:
    			myGO.FillRegion(tbS,myReg);
    			break;
    		case 6:
    			myGO.FillRegion(tbF,myReg);
    			break;
    	}
    	myGO.DrawImage(bmp,0,0);			
    	pBox.Image = bmp;
    }
    
    
    private void pBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    	x = e.X / 20;
    	y = e.Y / 20;		
    }
    
    private void startP_Click(object sender, System.EventArgs e)
    {
    	lblSP.Text = x.ToString()+" , "+y.ToString();			
    }
    
    private void endP_Click(object sender, System.EventArgs e)
    {
        lblEP.Text = x.ToString()+" , "+y.ToString();
    }		
    
    /// 
    /// Formun yüklenmesinde resmi boyamak için gereken
    /// alt küçük resimleri yüklüyorum.
    /// 		
    private void Form1_Load(object sender, System.EventArgs e)
    {
    	tbWall	= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/1.bmp"));
    	tbRoad	= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/0.bmp"));					
    	tbR		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/rigth.bmp"));	
    	tbL		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/left.bmp"));	
    	tbU		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/up.bmp"));	
    	tbD		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/down.bmp"));	
    	tbS		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/stop.bmp"));
    	tbF		= new TextureBrush(new Bitmap(Directory.GetCurrentDirectory()+"/finish.bmp"));	
    }
    
    /// 
    /// label ve picture box i güncellemek için
    /// 
    public void update2()
    {
    	lblXY.Update();
    	pBox.Update();
    }
    /// 
    /// Taram isleminin baslangiç noktasi
    /// 
    
    private void btnFind_Click(object sender, System.EventArgs e)
    {
    	btnFind.Enabled = false;
    	sbyte wayX,wayY,way,cnt;			
    	byte goOn = 1;
    	// goOn=1-> go on searching, 
    	// goOn=0-> there is no way to the end
    	// goOn=2-> ok, found it.
    	myS.makeVisited();
    	myS.addAR(myS.Current);
    	while (goOn==1)
    	{
            myS.lookAtSides(out way,out wayX, out wayY,out cnt);    
    		if (cnt == 0)
    		{
    			goOn = myS.readStack();
    			if (goOn==1)
    				while (myS.Current != ((actualRoad)myS.alAR[myS.alAR.Count-1]).p)
    				{
                        copyPortion(5,((actualRoad)myS.alAR[myS.alAR.Count-1]).p);
    					myS.removeAR();	
    					System.Threading.Thread.Sleep(250);
    					update2();
    					lblXY.Text = myS.Current.X.ToString()+","+myS.Current.Y.ToString();
    				}					
    		}
    		else
    		{
    			copyPortion(way,myS.Current);
    			goOn = myS.isitFinal(cnt,wayX,wayY);					
    		}
    		lblXY.Text = myS.Current.X.ToString()+","+myS.Current.Y.ToString();
    		System.Threading.Thread.Sleep(250);
    		update2();
    	}
    	StreamWriter sr = File.CreateText(Directory.GetCurrentDirectory()+"/5051.txt");
    	if (goOn==2)
    	{
    		copyPortion(6,myS.Current);					
    		for (int i = 0;i<myS.alAR.Count;i++)
    			sr.WriteLine(((actualRoad)myS.alAR[i]).p.ToString());				
    		lblMsg.Text = "A road is found.The direction is in the 5051.txt file.";
    	}
    	else if (goOn==0)
    	{
    		lblMsg.Text = "THERE IS NO A ROAD TO THE END POINT !!!";
    		sr.WriteLine(lblMsg.Text);				
    	}
    	sr.WriteLine("--");
    	sr.WriteLine("5051 Mesut GÜRBÜZ");
    	sr.Close();
    
    }
    

    Bilg. Müh. Mesut Gürbüz






    Yorumlar

    Gönderen: Abdurrahman ÖZBEYAZ Tarih: 03:17 25.07.2005
    Eline sağlık güzel olmuşs........

    Gönderen: Rifat Kurban Tarih: 02:55 25.07.2005
    Sayfa Mozilla Firefox'da saçmalıyor, Internet Explorer'de sorun yok... Eline sağlık mesut, güzel bi çalışma olmuşs.

    Gönderen: Onur Başkırt Tarih: 07:37 26.07.2005
    Mesut Bey, çok güzel ve öğretici bir makale (program) olmuş. Sizi canı gönülden tebrik ederim. Başarılarınızın devamını dilerim...

    Gönderen: RecepDolumay Tarih: 03:47 27.10.2005
    allah razı olsun

    Gönderen: Gerek Yok Tarih: 12:54 18.11.2005
    Guzel bir calisma.Ancak kodlama stiliniz Java.

    Gönderen: volkan Tarih: 07:56 18.11.2005
    bi hayli etkileyici ama daha iyi olabilirdi

    Gönderen: mert cer Tarih: 05:15 02.05.2006
    yol ğösterdiyin için çok saol

    Gönderen: Tarih: 06:11 28.11.2005
    eline salık süper olmuş dogrı-usı

    Gönderen: rahim can Tarih: 11:48 29.11.2005
    ben anlamıyorum ama güzeldir herhalde 1 günde bu yazdıklarının ne anlama gekdiğinide yazarsan sevinirim

    Gönderen: halime deniz Tarih: 05:40 19.12.2005
    hiçbirşey anlamadım

    Gönderen: ayça Tarih: 06:35 25.01.2006
    koddan başka bişey göremedim , bence bir makale böle yazılmamalı . amaç programı göstermek mi yoksa mantıksal olarak anlatmak mı ?!

    Gönderen: arif veli Tarih: 05:03 19.04.2006
    abi , biraz daha iyi olabilirdi.Daha çok çalışman lazım.Kolay gelsin.

    Gönderen: Ovunc Mete Tarih: 05:45 16.10.2006
    Yazan arkadasi tebrik ediyorum. Yazilan elestirileri okudum ve uzuldum, bildiklerini sizinle paylasan birisine ancak tesekkur edilir kanaatindeyim.

    Gönderen: abdul Tarih: 08:38 17.02.2007
    bunun algoritmasını da eklemeniz mümkün mü acaba(mümkünse 10x10 luk matris) :S

    Gönderen: Gaffur Tarih: 04:21 02.04.2007
    Manyak olmuş.Tam süper olmuş.

    Gönderen: Alpaslan Tarih: 05:12 25.03.2007
    Şuna bak.Türkçe yazıp konuşmasını bilen genç kalmamış.Tuhaf yazımlar türedi.\"Bir\" yerine \"bi\", \"bir şey\" yerine \"bişey\" yazmalar.Ne olacaksa bu Türkçe\'nin sonu? Güzel çalışma.Başarılar.

    Gönderen: Mehmet Tarih: 06:48 22.04.2007
    açıkçası bu kodların başka bir yerden alıntı olup olmadığı konusunda şüpheliyim..

    viagra for women
    cialis 30 mg
    cialis headaches
    cialis 20 mg
    cialis low price
    usa cialis
    buy cialis canada
    real viagra without prescription
    professional cialis
    cialis sales uk
    best price for propecia online
    cialis mastercard
    cialis for women
    discount drug propecia
    viagra cialis online sales
    real viagra online
    lowest propecia prices
    buy online propecia
    should i chew cialis
    viagra fast delivery
    purchase cialis
    effects of cialis
    viagra mexico
    generic viagra online
    viagra for cheap
    cialis strenght mg
    canadian generic viagra online
    lowest price for propecia
    buy viagra line
    next day viagra
    how does viagra work
    mail order propecia
    best price on propecia
    viagra tablet weight
    canada online pharmacy propecia
    cialis levitra
    get viagra fast
    ordering viagra overnight delivery
    buying cialis online
    cialis philippines
    viagra blister 4
    viagra label
    purchase cialis cheap
    best price generic propecia
    viagra in spain
    cost of cialis
    buy cialis once daily
    generic propecia viagra
    buy levitra online viagra
    cialis express delivery
    liquid propecia
    cialis endurance
    buy cialis us
    buy discount viagra
    buy cialis fedex shipping
    cialis order
    buy cheap uk viagra
    viagra samples
    cialis no rx
    online pharmacy propecia
    viagra discount sale
    online prescription propecia
    order propecia pill
    pfizer soft viagra
    baldness male propecia
    what is cialis
    cialis soft tablets
    online propecia prescription
    how to get viagra
    cialis price 100 mg
    usa cialis sales
    indian cialis
    cialis no prescription
    cialis price in canada
    brand viagra professional
    generic cialis sale
    price check 50mg viagra
    canadian propecia rx
    online propecia sales
    combine cialis and levitra
    purchase propecia
    uk propecia sales
    canadian pharmacy viagra legal
    cialis next day
    info viagra
    real cialis
    canada viagra
    cialis levitra sale viagra
    viagra online
    viagra canada
    levitra vs cialis
    cialis buy on line
    viagra in india
    cialis daily
    canadian drugs propecia
    canada viagra generic
    cialis arterial fibrillation
    buy viagra cialis levitra
    us cialis
    buy viagra
    viagra pills
    viagra canadian pharmacy dosage
    low cost propecia
    woman and cialis
    cialis and ketoconazole
    propecia for hair loss
    viagra non prescription
    viagra perscription
    order propecia
    buy propecia online cheap pharmacy
    get propecia online pharmacy
    china viagra
    levitra viagra online
    viagra lawyers
    cialis fast delivery
    best price for propecia
    cialis professional no prescription
    cheap viagra online
    canada viagra pharmacies scam
    cialis soft
    get cialis
    viagra and cialis for sale
    cialis herbal
    order cheapest propecia online
    viagra dose
    generic cialis canadian
    generic propecia sale
    viagra gel
    low price cialis
    viagra free
    mexico viagra
    purchase cialis us
    order viagra
    buy mg propecia
    viagra prescription
    buy propecia uk
    best price propecia
    buy cheap online propecia
    brand name cialis overnight
    ordering propecia
    viagra prescriptions
    real viagra pharmacy prescription
    how much is viagra
    viagra costs
    cialis canada
    viagra next day delivery
    viagra 100mg england
    discount propecia propecia
    cialis usa
    viagra buy

    Teknohaber.Net sitesi üzerinde özgür bir yazılım olan tekno.Portal isimli portal yönetim sistemi çalışmaktadır. Sitede bulunan yazılar kaynak gösterilerek yayınlanabilir. Yazıların sorumlulukları yazarlarına aittir. Her hakkı saklıdır, © 2001. google articles article