Merhaba arkadaşlar.

Osmangazi Üniversitesi Object Oriented Programming dersi için yaptığım proje.

Proje için gerekli olanları aşağıdaki gibi hoca bize verdi.Kodlamaya proposals kısmının altından devam edeceğim.

Bu Kısım fazla önemli değil ingilizce zaten fazla bir şey anladığım da yok.

Specification:
This is a board game. A sample user interface is given in Fig. 1.
Fig. 1. Sample user interface of the Find the Same, Get the Fame…
The game has the following rules:
• The game board contains 5×5 columns of letters where each column consists of 10 letters. The
columns will be formed with the letters (A – Z), randomly. The player only sees the top of these
columns. The top items will be closed by default.
• The player plays by entering the coordinates of two columns. This means that the player requests
comparison of the letters at the top of these columns. These two letters will be shown to the player
for a short time and will be closed again, if they are not the same. Otherwise, these two letters will
be removed from the top of the columns and the player will gain 5 points.
• The game will continue until all the letters are removed or more importantly, if no two of the
remaining top letters are the same, i.e., there is no possible improvement. In the second case, all
columns will be filled with new random letters from scratch.
• The player can request to terminate the game by pressing ‘Q’.
• There will be a “Top Ten High Scores” file which holds the points and duration information of the
highest scores where the score is computed by dividing points to duration. When the game ends,
the score of the player will be checked with the scores in this file and inserted if deserved.
• The game can be played by one or two players. When the program starts, single/multiplayer game
choice should be presented to the user. In a multiplayer game, when one player enters her/his
guess for the same cards and s/he is successful, her/his turn will continue, otherwise the next
player will do the guessing. The durations and the points of the players should be counted
separately.
Requirements:
At least, the following classes will be used in the project:
• Stack
• Controller/Manager
• Player
The Stack class should have the default stack implementation without any extra variable or function
definitions. The Player class will be responsible for user input controls with error checks.
The Controller class should control the game rules, manage the screen output and scores.

Proje 5-6 gün ve her gün 4-5 saatlik bir çalışma sonucu ortaya çıktı.Kodlama yaparken neyin lazım olacağını hangi fonksiyonların kullanılacağını bir kağıda sırası ile yazdım. Öncelikle bir plan oluşturmak neyi nerde nasıl yapabileceğimizin fizibilite çalişması yaparak not etmek bize çok fayda sağlayacagı için bu şekilde başlamayı tercih ettim.Bir söz vardır:”Planlamaya ayrilan bir dakika, Uygulamada bir saat kazandirir.“.Mantık bu :) .

Neyse ilk olarak matrix in constructorunu tanımladım ve default olarak tanımlanan matrixin içini ‘-’ ler ile doldurdum default matrixde.Columns ve Rows ların get ve set fonsiyonlarını yazarak kodlamaya devam ettim.Daha sonra herhangibir matrixin içerisini ‘-’ ler ile dolduracağımız MatrixEmpty fonksiyonunu yazdık matrix classında.Yazdığım MatrixFill fonksiyonu ile de matrix in içine random upper harf atadık.MatrixShow ise matrix imimizi göstermek istediğimiz yerde matrixi gösteren fonksiyon.

Matrix fonksiyonunu yazarken karşılaştığım sorunlardan biri random harf üretme idi.Bu problemi ASCII kodu kullanarak ürettiğim sayıları aralık olarak uppercase harflerin ASCII kod sayılarını baz aldık ve daha sonra bunları char a çevirdik.

Game class’ı her nekadar kısa ve önemsiz gözükse de önemli bir işleve sahip.Game class’ı  kullanıcıdan kordinantları almaya yarıyor. Overload ettiğimiz >> ve << ile de kordinant isteme ve girme noktasında görsellik ve kolaylık sağlıyor bize.

Daha sonra ControllerManager class’ı ile devam ettim kodlamaya.ControllerManager’de  Start_Menu ile başladım kodlamaya. Start_Menu fonksiyonu ile başlangıç ekranında nelerin görüneceğini yazdım.Start_Menu de switch case yapısını kullanarak kullanıcının seçim yapmasını sağladım.

ControllerManager class’ı fonksiyonlarından biri ControlForCordinantes. Bu fonksiyonda girilen kordinantların 0 ile 4 arasında olmasını kontrol ediyoruz. ControlNotSameMember fonksiyonu ile de oyunun bitip bitmediğini kontrol ediyoruz.Burada ControlNotSameMember fonksiyonunu yazarken bayağı uğraş verdim.Ilk başta netin nasıl olacagına kara veremedim sonra vector kullanarak bunu çözebileceğimi anladım.Vector kullanırken burada daha sonraki classda göreceğimiz kullanıcının bildiği harflerin yerine ‘-’ ekleme ile bilinen harfleri matrixten çıkarıyoruz yerine ‘-’ ekliyoruz ve arta kalan harfleri vector tarzda arraya ekliyoruz.Burada vector kullanma sebebim ise bilinen harf sayısı sürekli değişeceği için esnek bir yapı olması.Vectore eklediğimiz harfleri çift for kullanarak baştan sona kontrol ediyor ve aynı harfin var olup olmadığını denetliyoruz.

Ek olarak classtaki Wait fonksiyonu ile de kullandığımız herhangibir yerde proğramı  fonksiyona göderdiğimiz int değer kadar saniye bekleme sağlıyor.

Son olarak Player class’ını yazdım.Kodlamada en çok uğraştıran kısım olan Player class’ı tek ve çok kullanıcı ile oyunun oynanmasını sağlayan, kullanıcının aldığı puan süreyi ismi ile txt dosyasına kaydeden fonksiyonların kodları içeriyor.

Oyunda ve kodlamada en önemli kısım SinglePlayer kısmı.Bu fonksiyonda goto ve if yapısını çok kullandım.Goto yapısı her ne kadar kodlamada elverişli olmasada aklıma gelen tek çözüm yöntemi idi.

İf yapısı ile şartları kontrol ediyor ve şartlar ugun değil ise goto ile ya başa gidiyor yada sona gidiyorduk.Kullanımı sakıncalı fakat kolaydı.

Başlangıcta kullanıcıdan ismini girmesini istiyoruz ve oyuna devam ediyoruz.Başta 3 matrix tanımladım bunun sebebi  1 matrixi random harflerle üretip hafızada tutuyoruz.Oyuncunun bildiği harferi 2. Ürettiğimiz boş matrix e atıyoruz. 3. Matrix ise aracı olarak kulanıyoruz eğer harfler benzer bulunmamış ise harflerin sadece ekranda görünüp sonra tekrar eski haline gelmesi için bilinenlerin hafızada tutulmasını sağlamak amacı ile kullanıyorum.Bunun daha basit yöntemi olacağını biliyorum fakat uzun uğraşlar ile ancak bukadarını yapabildim.Kodlamada en sıkıntılı yer burası idi.

İlk olarak girilen kordinantların doğrulugunu kontrol ediyoruz yani daha önce bilinen harlerin olduğu koordinantmı yoksa ucuk bir koordinantmı diye sonra ise if yapılarında ControllerManager class’ının fonksiyonlarını kullanarak tek tek kontrollerden geçiriyoruz girilen koordinantlarda bulunan harfleri. Şartlara göre kullanıcıya puan ve süre ekleniyor.

MultiPlayer kısmında ise SinglePlayerdeki kodların aynısını kullandım.Ek olarak sadece sıranın hangi kullanıcıda olduğunu beliremek için player1 ve player2 için MultiControl sayısı ekledim.Bu MultiControl sayısı ilk başta her iki oyuncu için 0 ile başlıyor ve 1. Oyuncu oyunu oynamaya başlıyor. Eğer 1. Oyuncu doğru veya yanlış tahminde bulunmuş ise MultiControl sayısı 1. Oyuncu için 1 arttırılıyor. Kontorlu ise 1. Oyuncunun  MultiControl sayısı 2. Oyuncunun MultiControl sayısına eşit ise 1. Oyuncunun sırası geldiğini anlıyoruz fakat ise 1. Oyuncunun  MultiControl sayısı 2. Oyuncunun MultiControl sayısından buyuk ise sıranın 2. Oyuncuda olduğunu anlıyoruz.

Son olarak bu classta TopTenPlayer ve MultiTopTenPlayer ile oyuncuların scorlarını sürelerini isimlerini txt dosyasına kaydetmesini sağladım ve consol oyunu içerisinde kullanıcının scorları görebilmesi için ShowTopTenPlayer ve ShowMultiTopTenPlayer i kodladım. Oyunun kurallarını gösteren Game_Rules ile de oyunun kurallarının ne olduğunu belirttim.

Oyunun kodlaması bunlardan ibaret. GamePlay.cpp de türetilen ControllerManager tarzda türetilen Cstrt nin fonksiyonu olan Start_Menu ile oynu başlatıyoruz ve artık oyun oynanmaya hazır oluyor.

Proje’nin Solution’u (Visual Studio 2010 ile yazılmıştır): Solution

Proje’nin Kaynak Kodları: Source Codes

Kodlara Bakmak için aşşagıdaki linkleride Kulanabilirsiniz:

ControllerManager.cpp : http://pastie.org/private/sr1xxq6cjd3vfl9kzq2pg

ControllerManager.h : http://pastie.org/private/r1xghfhwocxf1mjnmfdpig

Game.cpp : http://pastie.org/private/r2ncliuw1qr0jel4ffoq

Game.h : http://pastie.org/private/se1ct4imstgh6b65gfuwow

Matrix.cpp : http://pastie.org/private/lgxcou0ah6reemgdrumcxa

Matrix.h : http://pastie.org/private/bqax9bsmndyw06ivyvwdg

Player.cpp : http://pastie.org/private/t9x390ull4xqo2tk2f3gqq

Player.h : http://pastie.org/private/h1dbwptyxgwxqf8wnlwtmg

GaePlay.cpp : http://pastie.org/private/kqdlj0anycvea2oln7ktg

Saygılarımla…

Eren GENÇTÜRK

www.erengencturk.com.tr

Bu çalışmamızda PHP Curl ve JQuery kütüphanelerinden faydalanarak başka bir domaine form submit edip ve sonuç alacağız. İlk olarak ajax proxy sayfamızı oluşturmakla işe başlayalım.


[?php

header("Cache-Control: no-cache");

header("Content-type:text/html; charset=utf-8");

function geturl($url,$request){
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $request); 

  $results = curl_exec($ch);
  curl_close($ch);
  return $results;

}

$theurl = $_POST["url"];

$theurl = urldecode($theurl);

$theurl = str_replace( "& #038;", "&", $theurl );

$req=$_POST['vars'];//POST edilecek değişken(ler)

$v = geturl( $theurl,$req);

$v = mb_convert_encoding($v, "UTF-8", "ISO-8859-9");//Sonuç alınacak sayfanın kodlaması sizinkinden farklı ise

echo $v;

?]

Yukarıdaki kodun bulunduğu sayfayı ajax_proxy.php olarak kaydediyoruz. Şimdi POST işlemini yapıp sonuç yazdıracağımız sayfaya geçelim

[HTML]
[HEAD]

[script type="text/javascript" src="jquery-1.3.1.min.js"][/script]//jquery kütüphanesini sayfamıza dahil ediyoruz

[script type='text/javascript']
function post_to_ajaxproxy(){
document.getElementById("loader_div").innerHTML='[img src="loading.gif" width="24" height="24"]';//Beklerken gösterilecek olan yükleme animasyonu

var var1=document.getElementById("var1_box").value;
var var2=document.getElementById("var2_box").value;

        $.ajax({
           type: 'POST',
           url: 'ajax_proxy.php',
           data: "&url="+var1+"&vars="+var2,
           success: function(sonuc) {
                document.getElementById("loader_div").innerHTML='';
		document.getElementById('result_div').innerHTML = sonuc;
           }
         });
}
[/script]

[/HEAD]
[BODY]

[input name="var1_box" id="var1_box" type="text" value="http://www.domain_adi.com/sorgulanacak_sayfa.asp"/]
[input name="var2_box" id="var2_box" type="text" value="post_edilecek_degisken"/]
[input type="button" value="Gönder"  onclick="post_to_ajaxproxy()"/]
[div id="loader_div"][/div]//yükleme animasyonunun gösterileceği
[div id="result_div"][/div]//sonuçların gösterileceği

[/BODY]
[/HTML]

 

Bağımsız bir kuruluş olan W3C (World Wide Web Consortium) organizasyonu tarafından tasarlanan ve bağımsız bir yapıya sahip olan XML (extensible Markup Language),kişilerin kendi etiketlerini tanımlayarak bu etiketler ile hiyerarşik yapı kurabildikleri ,bunları istedikleri zaman değiştirebildikleri ; esnek, teknolojiden -platformdan bağımsız text tabanlı bir meta dilidir. Xml açılımının içerdiği “markup” onun tagler ile kullanıldığını,”exensible” de onun genişletilebildiği yani standart taglerin değil de kendimizin oluşturduğu farklı tagleri de kullanabileceğini ifade eder. Html de bir markup dilidir fakat Xmli Htmlden ayıran en önemli özellik standart taglerin değil de kişilerin tanımladıkları taglerin kullanabiliyor olmasıdır.

Şimdi teknolojiden-platformdan bağımsız derken ne kastettiğimi biraz daha açmak istiyorum:

Günümüz teknolojisi o kadar zenginleşti ve çeşitlendi ki…..Farklı farklı işletim sistemleri,programlar… Bunlar bir yana bir programın bile birden çok farklı versiyonu var. Bu kadar çeşitliliğin olması şüphesiz yanında uyum problemlerini getirecektir.Bir dosyayı aynı programın farklı versiyonlarında çalıştırmak istediğimizde bile zaman zaman problem yaşamaktayız,kaldı ki farklı program ve işletim sistemlerinde yaşanmasın.Bütün teknolojilerde ortak olarak açılan ve çalışan tek dosya türü text dosyalarıdır(notepad).Ama notepad ile en basitinden bir tablo oluşturup bunun üzerinde çalışmak istediğimizde bile bu tabloyu organize etmek baya bir zor olacaktır:kolonların sırası kayabilir,karışabilir….Bunun yerine tablolarımızı hiyerarşik yapı ile xmle atmak işimizi bayağı bir kolaylaştıracaktır.Xml verinin hızlı bir şekilde sogulanmasını,değiştirilmesini,transfer edilmesini,verinin içerik bilgisi ile saklanmasını(bu noktada htmlden ayrılır) sağlar.Xmlin güzel yanlarından birtanesi de uluslararası bir standarttır ve evrensel bir formattır ve firewallara takılmaz(text tabanlı olmasından kaynaklı).

Bir dosyanın xml dosyası olduğu dosyanın başında yazan <?xml version=”1.0″ encoding=”utf-16”?> ifadesinden anlaşılır.Htmldeki gibi açılan tag kapanmalıdır.Genel anlamda xml dosya akışı şu şekilde olur.

dosya akışı şu şekilde olur.

<?xml version=1.0 encoding=utf-8 ?>

<kategoriler>

  <kategori>

    <kategoriID>1</kategoriID>

    <kategoriAdi>meyveler</kategoriAdi>

  </kategori>

  <kategori>

    <kategoriID>2</kategoriID>

    <kategoriAdi>sebzeler</kategoriAdi>

  </kategori>

</kategoriler>

Veri tabanından veri çekerek xmle yazdırılabilir ve gerektikçe xmlden okunabilir.Bu şekil bir kullanım daha mantıklı olacaktır,çünkü veri tabanından bilgi almak istediğimizde program her defasında veri tabanına bağlanmak zorunda kalacaktır,oysa ki bir defa bağlanıp veri tabanındakileri xmle yazdırıp gerektikçe xmlden okumak performans,veri tabanını çok meşgul etme ve daha birçok açıdan daha olumlu sonuçlar yaratacaktır.Bu okuma ve yazdırmaları yapmak üzere tanımlanmış “ReadXml ve WriteXml” nesneleri vardır.

WriteXml şu şekilde kullanılır:

SqlConnection conn = new SqlConnection(“server=derya-pv\\sqlexpress;database=Northwind;integrated security=true”);

            SqlDataAdapter adp = new SqlDataAdapter(“select CategoryID,CategoryName from Categories”, conn);

            DataSet dt = new DataSet();

           adp.Fill(dt);

            dt.WriteXml(dosya);

Böylece veri tabanındaki bilgiler xmle yazılmış oldu.Her veri çekmek istediğimizde “ReadXml” ile verileri xmlden alıp işleyebiliriz.Yada satır satır okuma ve yazma yapmak için XmlTextReader ve XmlTextWriter da kullanılabilir.

Oluşturulan Xml üzerinde update,delete işlemleri için de “XmlDocument” ve “XmlNode” nesneleri oluşturulup kullanılır.

Kimi zaman belirli bir kısmı üzerinde değişiklik yapmak isteriz,bu durumda hepsini belleğe almak yerine sadece değiştirmek istediğimiz kısmı almalıyız.Bunun içinde şu nesneler kullanılmalı:

XPathDocument()-xml şemayı okuyacak nesne

XPathNavigator()-doküman üzerinde gezinecek nesne

XPathNodeNaveigator()-nodelar üzerinde tek tek gezinecek nesne

DERYA GÜNDÜZ

Diyelim ki c#da  bir sinema otomasyonu yapmanız gerekiyor.Formu dizayn ederken yapmanız gereken koltukları temsilen herhangi bir kontrol eklemektir.Bir sinema salonu 50 kişilik ve 4 tane de salon varsa toplamda formlarınız için 200 tane kontrol eklemeniz gerekmektedir.Oldukça uğraştırıcı ve zaman kaybettiren bir dizayn işlemi olacaktır sizin için.Programlama bilgisi çok iyi olmayan birinin yapacağı kontrolleri tek tek eklemek olacaktır,oysa ki object oriented programming(nesne yönelimli programlama)  dan ve nimetlerinden haberdar olan programlamacı ise kontrolleri tek tek eklemez onları kodu çalıştırırken yapabileceğini bilir.Benim bahsedeceğim de 2. seçenek,yani kontrolleri elle, tek tek değil de kod içerisinde oluşturup çalıştırmaktır, yani Run-Time(çalışma anında) nesne oluşturmak olacaktır.

Run-Time kontrol oluşturabilmek için o kontrolden bir nesne yaratmanız gerekecektir.

    Button btn = new Button();  diye tek bir nesne oluşturup döngüler yardımıyla istediğiniz kadar buton görüntüleyebilirsiniz.

Bu konuyla ilgili BilgeAdamda staj yaparken derste yazdığımız  şu  kodu beraber inceleyelim:

 

int x = 40; //başlangıç x koordinatı

 

int y = 40;//başlangıç y koordinatı

int b = 1; //yerleştirilen buton numarasının tutar

private void Form3_Load(object sender, EventArgs e) //işlemleri form yüklenirken yapsın

{

for (int i = 0; i < 10; i++)                          //matrix mantığı ile 100 tane buton oluşturacaz

{

        for (int j = 0; j < 10; j++)

{

Button btn = new Button();

                                  //butondan bir nesne oluşturmamız gerekecek

btn.Name = “btnNo” + b;

                           //her birinin adı oluşum sıralarının adını alacaktır

btn.Text = b.ToString();

btn.Size = new Size(40, 40);              //size her defasında 40-40 olacaktır

btn.Left = x;

x += 40;                                //x koordinatı tek bir satır için her defasında 40 yana kaymalı

btn.Top = y;                         //y koordinatı aynı satır aynı kalır alt satıra geçildiğinde 40 artar

b++;                             //butonun numarası her defasında bir artacaktır

btn.Click += new EventHandler(btn_Click);    //hatta isterrsek o butona event bile yazarız

                //butona basılma eventini tutar

                    //event olduğunu += gösterir

                               //bu formun kontrollerine oluşturduğun btn nesnesini eklemen gerek

this.Controls.Add(btn);                  //btn kontrolünün nereye ait olduğunu belirtmeiz gerekir,formun kontrolü

}

x = 40;                     //ilk 10 taneyi oluşturduktan sonra alt satıra geç ama lefti değişmeyecek

y += 40;                    //top üstten bir satır uzaklaştığı için +40 olmalı

}    }

void btn_Click(object sender, EventArgs e)

{

Button btn = sender as Button;

//sender içinde thisin verilerini tutar

MessageBox.Show(“Merhaba ” + btn.Text + ” im..”);

 

işte çıkan sonuç:

 

 

Butona tıkladığımızda da şöyle bir görüntü oluşur:

 

 

 

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Trigger nedir?

Trigger’ın kelime anlamı tetikleyicidir,

Sqldeki anlamı da  database tabloları üzerinde bir değişiklik olduğu zaman çalışan sql sorgularıdır.

Triggerlar ile insert,update,delete yapılabilir.

Trigger oluşturmak

create trigger TriggerAdi
 
on TabloAdi
 
tetikleyici seçeneği(hangi olay olduğunda çalışsın)
 
as
 
select ....
 
creat trigger tg_KategoriSilindi
 
on Categories
 
for delete             --category silinmesini takip ediyor
 
as
 
select 'biri bir tane kategori sildi' as silme                  ---verilecek mesaj
adsiz9

Yeni eklenecek olan çalışanın adını veoyadını ve aldığı ID değerini ekrana

yazdıralım:

create trigger tg_CalisanEklendi
 
on Employees
 
for insert
 
as
 
declare @ad varchar(10)
 
declare @soyad varchar(10)
 
declare @id int
 
select @ad=FirstName,
 
@soyad=LastName,
 
@id=EmployeeID from inserted
 
declare @veri varchar(36)
 
set @veri=cast(@id as varchar(3))+' '+@ad+' '+@soyad
 
select @veri as veriyo
 
insert into  Employees(FirstName,LastName)
 
values('fulya','ayluf')

–ekleme işlemini yapılacağı zaman trigger da çalışır ve ekleme işlemi

r

İnstead of Triggerlar

Triggerlar ile asıl yapılması gereken yerine başka bir iş yaptırmak istediğimizde instead of trigger kullanılır.

Bu örnekte silme işlemi yerine mesaj verdirtecez:

create trigger tg_KtegorileriKoruyalim

on Categories

instead of delete

as

select ‘Kategorileri silemezsin!!!’  as mesaj

delete from Categories where CategoryID=1

d

İnsead of triggerların önemli kullanım alanlarından bir tanesi de viewler ile birlikte kullanmaktır,birden fazla kaynak tablo ile oluşturulmuş viewlerde insert,update,delete  işlemleri yapılmak istendiğinde instead of trigger kullanmak zorunda kalınıyor,aksi halde hata verir.

DERYA GÜNDÜZ

deryagunduz.blogspot.com

View ler hangi durumlarda kullanılır,faydaları nelerdir?


Yapacağınız sql işleminde birden fazla tabloyu ve onların farklı farklı colonlarını kullanacaksınız,hepsini birleştirmek ,gerekli tablodan sorgu yapmak biraz zahmetli bir iş olabilir,bunun yerine view denen sanal tablolardan oluşturup,gerekli colonları farklı tablolardan alıp sorguları tek bir tablo üzerinden yapmak işinizi kolaylaştırailir.Karmaşık sorgular kolay bir hale gelmiş  olur.Ayrıca view kullanmanın çok önemli nedenlerinden bir tanesi sağladığı güvelikler.Tablolarınızın tamanının görünmesini istemediğiniz zamanlarda  sanal tablo kullanıp tablolarınızın tamamının görünmesini engelleyebilirsiniz.

View ler üzerinde yapılan değişikler kendilerini oluşturan kaynak tabloları da etkiler,aynı değişiklikler kaynak tablolara da yansır.

Oluşturulan Viewler  resimde görüldüğü gibi  Object Explorer kısmında ana başlık altında toplanır:

adsiz41

Viewler nasıl  oluşturulur?

create view vw_viewAdi

–tavsiye olunur ki oluşturulan view adları vw_ ile başlasın,böylece veri tabanınıza yeni bakan biri onun view olduğunu kolayca alsın

as

select kolonAdi from tabloAdi

where şart

with check option

view oluştururken with check point ifadesi yazılırsa,tanımlamadaki where şartı muhafaza edilmiş olur where şartı dışındaki insert,update,delete işlemleri yapılmaz hata verir

create view vw_DogruHazirlanmisView

as

select firstname,lastname

from Employees

where FirstName like ‘a%’

with check option

insert into vw_DogruHazirlanmisView values(‘derya’,'dd’)

–eklenme yapılmak istendiğinde hata verir

hata:The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.(with check pointten dolayı ‘a’ ile başlamayan bir ekleme yapılamaz)

with Schemabinding

Viewin oluşturulduğu kaynak tablo üzerinde değişiklik yapılmasına izin vermeyecek.

create  view vw_CokUgrastim

with schemabinding          –sütunla ilgili bir değişiklik yapılamıyor

as

select firstname,lastname,city

from dbo.employees  –dbo. olmalı

drop table Employees          –yazıldığında hata verir

hata:Could not drop object ‘Employees’ because it is referenced by a FOREIGN KEY constraint.

with encription(gizli view)

Kaynekların  gizliliğini sağlayan koddur,kullanıcı sadece oluşturulan view ile ilgili verilere erişebiliyor,kaynak tablolarla ilgili hiç bir bilgiye ulaşamıyor.

create view vw_Benim

with encryption   –kaynak görmeme,design aktif değil

as

select * from products

adsiz8

Resimde de görüldüğü gibi gizli view kullanıldıktan sonra viewin üstünde kilit işareti olur ve ‘modify’ seçeneği aktiif değildir.

DERYA GÜNDÜZ
deryagunduz.blogspot.com
deryagunduz47@gmail.com

Projemde 5×5 matrix içine her defasında random olarak atılan, her birinden ikişer tane olmak

üzere 12 çeşit harf ve birinin eşi olmayan harfler kullandım .Matrixi “manager” classında

tanımladım matrixden main de nesne oluşturdum,”harfler” adlı 25 elemanlı bir dizide 13 çeşit harf, her

birinden 2şer tane birinin eşi olmayacak şekilde ,eleman atadım.ayrıca “diz” adında 25 elemanlı bir dizi

daha oluşturdum ve bu dizinin elamlarını 1den 25e kadar random oluşturulmuş sayılar meydana

getirdi.Sonra “diz“ dizisinin 1. elamanının değerine göre “harfller” dizisinin elemanını aldım ve

matrixin sıradan gelen elamanı ile eşleştirdim.Böylece matrix her program çalıştığında random olarak

harf değerlerini almış oldu.

Manager classından iki tane nesene oluşturdum,”ilk” matrixi random harf değrleri atanmış

matrix,”geçici” matrixi ise en başta boş olan ve kullanıcının söylediği koordinatların eşitlik durumuna

göre değer alan matrixdir.koordinatlar aynı oldukça “geçici” matrixi “ilk” matrixinin o koordinat

değrlerine eşit oluyor,o değerleri alıyor ve ekranda o değerler kapalıken açılmış gibi

görünüyor,koordinatlar aynı olunca “manager” claasına yamış olduğum “puanarttır” fonksiyonu devreye

giriyor ve oyuncu 5 puan kazanıyor.Girilen koordinatlar aynı değilse “ilk” matrixinin o koordinatı ile

“gecici” matrixinin o koordinatı eşit olmuyor oyuncu bir süre o koordinatları görüyor ve sonra o

görünen koordinatların yerine gecici matrixinin elemanları görünüyor(kapalıymış gibi).

Koordinatların alınması işini de “player” classı yapıyor,kullanıcıdan koordinat isiyor,kontrolleri

yapıyor ona göre “gecici” matrixine eleman ataması yapıyor ya da koordinatlar matrix indexi dışındaysa

hata mesajları döndürüyor.

Her bir puan verilip ya da yanlış koordinat söylenmesi halinde kullanıcıya çıkış yapıp

yapmamak istediği soruluyor,oyuncya çıkmak istiyorsa “q” ya devam etmek istiyorsa herhangi bir tuşa

basılması gerektiği söyleniyor.

projenin tamamını indirmek  ,kodları görmek için    tıklayın

DERYA GÜNDÜZ

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

Pic 16f877a da ledin yanması demek  kullanılan  potrun ilgili  bitinin “1″ olması demektir.Yanan bir  ledin sağa sola hareket etmesini sağlayan özel komutlar  vardır:

rlf :   Açılımı “rotate left file”,içeriği sola kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rlf komutu bir kere uygulandığında b’10000000′   şeklinde olur.

rrf: Açılımı “rotate right  file”,içeriği sağa kaydırmaya yarar.Örneğin portun içinde b’01000000′  ise  rrf komutu bir kere uygulandığında b’00100000′   şeklinde olur.


portun içeriğini sağa  sonra sola kaydıran örnek kodu inceleyelim:

Bu kodda    PORTB nin içine en başta b’00000001′  sayısı  yerleştiriliyor,içerik 7. bit 1 olana kadar her defasında  bir bit sola kaydırılıyor, çünkü 7. bit  1 olduğunda sola kayacak yer klamıyor,bu kontrolden sonra  sağa kaymalar başlayacaktır.Bu aşamada da içerik0. bit 1 olana kadar  her defasında bir bit olmak üzere sağa kaydırılıyor ,0. bit  1 olduğunda yine sola kayma olacaktır.

SAYAC1 EQU h’0C’   ;gecikme sayacları için adresler belirtiliyor
 
                  SAYAC2 EQU h’0D’
 
                       CLRF PORTB      ;potrbnin içi en başta temizleniyor
 
            BSF STATUS,5             ;bank1 tris registerlarının ayarlanması için seçildi
 
                 CLRF TRISB             ;portb çıkış portu yapıldı
 
                  BCF STATUS,5                  ;port içeriği ile ilgili işlem yapılması için tekrar bank0 a geçildi
 
               MOVLW h’01’               
 
               MOVWF PORTB            ;portb nin içine b'00000001'  sayısı atıldı
 
SOL:
 
             CALL GECIKME;en başta bi bekleme anı oluyor
 
            RLF PORTB,F               ;içerik 1 birim sola kaydı
 
  BTFSS PORTB,7            ;portbnnin 7. biti kontrol ediliyor,
 
1 ise sağa kaydırma başlayacak 1 değilse tekrar  sola kayma olacaktır                                                                                                 
 
GOTO SOL
 
SAG:
 
CALL GECIKME                    ;bekleme yapılıyor
 
RRF PORTB,F                     ;içerik 1 birim sağa kaydırılıyor
 
BTFSS PORTB,0                  ;portbnin 0. biti kontrol ediliyor 1 ise sola kaymaya geçilecek,0 ise sağa ;kaymaya devam
 
GOTO SAG
 
GOTO SOL
 
GECIKME:
 
              MOVLW h’FF’
 
             MOVWF SAYAC1           ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU1:
 
          MOVLW h’FF’
 
               MOVWF SAYAC2                 ;gecikme için sayac1 in içine h'FF'  sayısı atılıyor
 
DONGU2:
 
          DECFSZ SAYAC2,F
 
    GOTO DONGU2           ;sayac2 nin içindeki sayı 0 olana  kadar her defasında 1 azalt,0 olunca saya1 i      ;                                       ;azaltmaya git
 
               DECFSZ SAYAC1,F        ;sayac1in içi 0 olana kadar her defasında 1 azalt,0 olduğunda return yap
 
              GOTO DONGU1
 
              RETURN            ;en son callın yapıldığı adrese  gider
 
        END        ;programo bitir

DERYA GÜNDÜZ

http://deryagunduz.blogspot.com

deryagunduz47@gmail.com

          Template in kelime anlamı taslaktır,c++ daki  kullanım şekli de kelime anlamına çok yakın bir kullanımdır. Fonksiyonu taslak olarak yazıyorsunuz ve  bu  fonksiyon farklı kullanım şekilleri  için esnek bir yapıya  sahip oluyor.

          C++ daki Function Template için  farklı tiplerde  kullanım esnekliği vardır.Bir  fonksiyonu farklı farklı tipler için ayrı ayrı yazmak yerine,tek bir  fonksiyon taslağı yazıp  bunu farklı tipler için kullanabilirsiniz.

          örneğin bir mutlak değer  fonksiyonun int veri tipi için şu şekilde yazarız:

 

 

        int mutlakdeger(int a){

      if(a>0)    return a;

       else return -a;

        }

    

      double veri  tipi için olanını şu şekilde yazarız:

                          

        double  mutlakdeger(double  a){

      if(a>0)    return a;

       else return -a;

        }

      

     long olan için ;

            long  mutlakdeger(long  a){

      if(a>0)    return a;

       else return -a;

        }

      

               yani bütün tipler için ayrı ayrı yazardık.Bunu  taslak şeklinde yazıp  bütün veri tipleri için kullanabilmek istediğimiz   zaman yapmamız gereken şey fonksiyonu template  şeklinde tanımlamak.

 

           Template kulllanımı şu şekilde: 


    template            //fonksiyonun başına yazılması gereken

     T mulakdeger (T a)                    //yukarda tanımladığımız template Tyi  veri tipi olarak  kullandık

  

             {

 

 if(a>0)    return a;

       else return -a;

 

         }

            int  main(){

              cout<<"int veri tipi için mutlak deger alma";

              cout<<"double veri tipi için mutlak deger alma";

             }

  bu şekilde kullanarak her veri tipi için ayrı yazma  gerekliliğinden kurtuluruz,kodlar kısalır fazla zaman  harcamak zorunda kalmayız.

          

    Template çeşitleri:

 

  •  template      //fonksiyonlar için kullanılır
  •  template                 //classı template şekilde kullanabilmek için,daha çok data                storage classlarda(container)  kullanılır
  •  template        //birden fazla  tip tanımlayabiliriz

       Class Template:

            templateler ayrıca classlar için de kullanılabilir,işlev olarak  functşon template gibidir

           

           template

class  deneme{

                    //  classın diğer  elemanlarının prototypeları  yazılır

……………

       public int  denemefonk(T  ){}

……….. 

            };

            implementasyonlar:

 

         template

          deneme::denemefonk(T  a){………..}

 

           int main(){

         denemenesne;

          ………..

       }

 

  şeklinde kullanılır…………

     

DERYA GÜNDÜZ

Eskişehir Osmangazi Üniversitesi  Bilgisayar Mühendisliği 2. sınıf

http://www.deryagunduz.blogspot.com

deryagunduz47@gmail.com

portlar nedir ne işe yarar?

port

şekilden de  anlaşılacağı gibi,portlar bir microcontrollerda microcontroller ile bileşenleri arasındaki iletişimi sağlar.

pic 16f877a da  5 tane  port vardır:

  • PORT A
  • PORT B
  • PORT C
  • PORT D
  • PORT E

portların giriş çıkış  portları olması

portlar  kullanılacakları konuma  göre bazen çıkış portu bazen de giriş portu olmalıdır.portun  giriş ya da  çıkış portu olmasını yada  bazı bitlerinin  giriş bazı  bitlerinin çıkış olmasını  TRIS adındaki  özel bir register sağlar.

hangi port için çalışacaksak trisx  deyip bitlerini  değiştiririz.

0——>çıkış

1——>giriş

clrf    TRISB            ;b  portunun bütün bitlerini çıkış yapar

movlw  h’ff’

movwf  TRISA         ;a  portunun  bütün bitlerini  giriş yapar

ya da  bazı bitleri girş  bazılarını çıkış da  yapabiliriz:

movllw  b’00001111′

movwf     TRISD        ;d  portunun ilk 4  bitini giriş,son 4 bitini çıkış yaptık

porta yazma porttan okuma:

clrf          TRISB           ;önce  b  portunun bütün bitlerini çıkış olarak ayarlıyoruz

movlw     0×55

movwf      PORTB         ;portb nin içine  55 hex  yazdık

movlw  h’ff”

movwf    TRISA       ;a  portunu okuma yapmak için giriş portu yaptık

movf  PORTA,w

movwf   myreg          ;porta nın içeriğini  myreg adında  bir registera attık

DERYA  GÜNDÜZ

© 2010 bilyaz.com , Programlama Makaleleri, Yazılım Makaleleri , Örnek Kodlar , Eğitim Videoları , C#,ASP.NET,SQL,PHP Suffusion WordPress theme by Sayontan Sinha