Osilatör Nedir ?

Osilasyon(Salınım): Herhangi bir nesnenin belli bir deÄŸere göre iki durum arasında zamana göre tekrarlanan deÄŸiÅŸimidir. Elektronik sistemlerde ise zaman içerisinde yönü ve ÅŸiddeti belli bir düzen içerisinde deÄŸiÅŸen sinyallere osilasyon denir. 


Osilasyon elektronik devrelerde istenmeyen bir olaydır. Devre çıkışında oluşan fazla osilasyon zararlı olabilir. Bu nedenle osilasyonu azalatmak için elektronik devreler kullanılır. Fakat bu osilasyonların gerekli olduğu sistemlerde vardır. Bu nedenle osilasyon sinyalleri üreten devrelere ihtiyaç vardır. Bu devrelere osilatör devresi denir.



Osilatörler: Belli frekanslarda kare, sinüs, üçgen  veya testere diÅŸi biçiminde sinyal üreten, geri beslemeli amplifikatör(yükseltici) devrelerdir. Ayarlandığı frekansta ya da sabit bir frekansta sürekli çıkış veren devrelerdir.

Osilatörler, dc enerjiyi eÅŸdeÄŸer ac enerjisine dönüştüren enerji dönüştürücüdür. Osilatör çıkışındaki ac sinyalinin frekans aralıkları birkaç Hz ile birkaç GHz arasında deÄŸiÅŸir. 

Osilatörün Blok Şeması

Osilatör, pozitif geri besleme devresi ile amplifikatörden oluşur.



Burada geri besleme ağı, frekans seçici devredir. Blok diyagramında amplifikatör devresinden önce kullanılan salınımlı devrenin LC tank devresi, RC ağı veya  kuvars kristali olabileceÄŸine dikkat edilmelidir. 

Amplifikatör, temel olarak kaynak tarafından saÄŸlanan dc voltajı ac gücüne dönüştürür. Bu ac sinyali daha sonra bir geri besleme yolu ile tank devresine gönderilir. Ayrıca, tank devresinin salınımları ile amplifikatör beslenir.  Amplifikatör, uygulanan giriÅŸ terminalinde güçlendirildiÄŸi'den, amplifikatör'ün çıkışında, uygulanan dc voltajı nedeniyle yükseltilmiÅŸ salınımlar elde edilir. 

Osilatörün Çalışması

Aşağıdaki devre osilatörün geri besleme devresidir:



Vi, A kazancına sahip amplifikatör'ün terminaline uygulanan giriÅŸtir. Ayrıca, bir geri besleme ağı kullanılır. Bu geri bildirim ağında geri bildirim fonksiyonu vardır: Î².  Amplifikatör'ün çıkışı Vo ve geri besleme ağının çıkışı Vf'dir. 

Burada Î² temel olarak girdiye geri bildirim olarak saÄŸlanan çıktı fonksiyonunu tanımlar. 

Başlangıçta Vi amplifikatör'ün terminaline kazanç A ile uygulanır. Yani amplifikatör'ün çıkışında:


 Bu voltaj daha sonra bir frekansta en yüksek geri bildirime sahip olmak için temelde bir rezonans devresi olan geri besleme ağına verilir.

Bu nedenle, geri besleme amplifikatörünün çıkışında elde edilen sinyal ÅŸu ​​ÅŸekilde verilir:

Çünkü: f = βV o ve o = AV i

Amplifikatör ve geri besleme devresi 0° faz kayması getirirse, daha sonra hem geri besleme sinyali hem de giriÅŸ sinyali birbiriyle aynı fazda olacaktır. 

Åžimdi, geri besleme devresinin çıkışı, giriÅŸiyle birlikte amplifikatöre uygulandığında, ardından amplifikatörün çıkışındaki sinyal ÅŸu ÅŸekilde olur: 


Yani, osilatörün kapalı döngü kazancını geri bildirim ile yazabiliriz:



Diyelim ki, amplifikatör'ün girişinde sadece geri besleme devresinin çıkışını sağlıyoruz ve orijinal olarak uygulanan giriş sinyalini kaldırıyoruz.

Vi'nin çıkarılmasından sonra, sürekli salınımlardan osilatörün döngü kazancı sorumludur.
  • Açık döngü kazancı 1'den az ise, yani Aβ <1. Daha sonra bir süre sonra çıktı söner. Çünkü burada AβVi amplifikatöre girdi olarak hizmet eder, bu nedenle bu Vi'den küçük olacak ve Aβ birlikten küçük olacaktır.
Bu nedenle, döngüden her geçtikten sonra sinyalin genliği azalacaktır. Sonuç olarak, salınımlar ortadan kalkacaktır.
  • Döngü kazancı 1'den ise, yani Aβ > 1. Bu çıktının birikmesine neden olur. Böylece, döngüden her geçildiÄŸinde, salınımların genliÄŸinde artış fark edilir.
  • Åžimdi, döngü kazancı 1'e eÅŸitse, yani Aβ = 1 ise, Vf'nin Vi'ye eÅŸit olmasına neden olur. Böylece çıkışta sinyal sürekli bir sinüzoidal dalga formu olacaktır. Bu ÅŸekilde, giriÅŸin kendisi devre tarafından saÄŸlanır ve dolayısıyla sinüzoidal bir çıktı elde edilir.
Burada, salınımları oluşturmak için başlangıçta döngü kazancının her zaman 1'den fazla olduğu belirtilmelidir. Ancak, sinyal tarafından belirli bir voltaja ulaşıldığında, döngü kazancı1 olur.

Bu, geri besleme amplifikatör devresinin doğrusal olmayan davranışından kaynaklanmaktadır.


Barkhausen Kriterleri


Barkhausen kriterleri, sürekli salınımlar elde etmek için iki koşulu belirtir. Bunlar aşağıda verilmiştir:

  1. Açık döngü kazancı 1'e biraz daha fazla veya eÅŸit olmalıdır. Bu, Aβ ≥ 1 anlamına gelir. 
  2. Devrenin genel faz kayması 0 olmalıdır. Böylece, giriş ve çıkış sinyali birbiriyle aynı fazda olacaktır.

Bu iki koşul, amplifikatör'ün çıkışında sürekli salınımlar sağlayacaktır. Bu, Barkhausen Kriterleri olarak adlandırılır.


Osilatör Çeşitleri

LC osilatörler

Osilatörün kuvvetlendirici katı için BJT, FET, İşlemsel Kuvvetlendirici gibi aktif devre elemanları kullanılır. Bu elemanların seçiminde osilatörün çalışma frekansı da rol oynar.

LC osilatörler, 100 kHz ve üzeri frekanslar için uygundur. LC osilatörler genellikle yüksek frekanslar üretmek için kullanıldığından genellikle BJT ve FET gibi elemanlar kuvvetlendirici katında tercih edilir.

RC osilatörler

RC osilatörleri RC zaman sabitinin osilasyon frekansını belirlemesine dayanır. LC osilatörlerinin aksine yüksek frekanslar için uygun değildir. RC osilatörler birkaç megahertz frekansına kadar kullanılırlar. Bu nedenle kuvvetlendirici katında işlemsel kuvvetlendiriciler (Op-Amp) da kullanılabilir.

Kristal Kontrollü Osilatörler

Tam ve kararlı osilasyonun sağlanabilmesi için osilatörlerin geribesleme yolu üzerinde piezoelektrik kristal adı verilen doğal yapılar kullanılır. Piezo elektrik kristal aslında bir quartz kristalidir. Bu kristallerden piezoelektrik etkiye sahip bulunanlar bu amaç doğrultusunda kullanılırlar. Bu etki, kristalin üzerine bir AC gerilim uygulandığında mekanik uygulanan frekansta titreşim oluşturur. Bunun tersi de doğrudur. Yani kristal titreşime uğrarsa üzerinde bir gerilim oluşur. Bu kristalin üzerinde en büyük titreşim kendi doğal frekansında oluşur. Bu frekans kristalin fiziksel boyutları ve kesiti ile belirlenir.


Non-sinüsoidal Osilatörler

  • Üçgen Dalga Osilatör
  • Gerilim kontrollü testere diÅŸli osilatö<rler
  • Dolup-BoÅŸalmalı Osilatörler

IC Osilatörler

Günümüz sistemlerinde, ister sinüzoidal ister non – sinüzoidal, osilatör ihtiyacı tümleÅŸik devreler (IC) ile giderilmektedir. Hemen hemen her frekans ve dalga ÅŸekline cevap verecek osilatörler tümleÅŸik devre halinde piyasada bulunabilir.

Kaynakça:

https://www.elektrikrehberiniz.com/osilator/osilator-nedir-10019/

https://teknolojiprojeleri.com/elektronik/osilator-nedir-ne-ise-yarar-cesitleri-nelerdir

https://electronicsdesk.com/oscillator.html


 Merhaba arkadaÅŸlar,  bu çalışmada nodemcu kullanarak bir araba yapacağız. Aynı zamanda arabanın hızını da kontrol edeceÄŸiz. 

Öncelikle nodemcu'nın ne olduğuna değinelim;

NodeMCU; ESP8266 tabanlı, düşük maliyetli ve açık kaynak kodlu elektronik geliştirme kartıdır. Kartın üzerinde bulunan ESP8266 Wifi modülü sayesinde internete kolayca bağlanabilir, bu sayede uzaktan kontrol ve IoT projelerinde kullanılmaktadır.

Åžimdi gelelim yapmak istediÄŸimiz arabaya.  Önce kullanacağımız arayüzü tasarlayacağız. Biraz html ve css bilgisi yeterli olacaktır. İleri, geri, dur, saÄŸ, sol, hızlı, orta, yavaÅŸ ÅŸeklinde butonları yerleÅŸtireceÄŸiz.


Bu çalışmanın html ve css kodu aşağıdadır:

 <!DOCTYPE html> 

 <head>

 <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">

 </head> 

 <style>

 html { font-family: Helvetica; 

 display: inline-block; 

 margin: 0px auto; 

 text-align: center;}

 .button 

 { 

 background-color: #6df996; 

 border: none; 

 color: white; 

 padding: 25px 25px;

 text-decoration: none; 

 font-size: 30px; 

 margin: 2px; 

 cursor: pointer;

 }

 .button2 {

 background-color: #9effba;

 }

 </style>

 <body> 

 <h1>RC Car - IOT</h1> 

 <button class=\"button\"><a href=\"ileri\">İLERİ</a></button>

 <br> <button class=\"button\" ><a href=\"sol\">SOL</a></button> 

 <button class=\"button button2\" ><a href=\"dur\">DUR</a></button> 

 <button class=\"button\"><a href=\"sag\">SAÄž</a></button> 

 <br> <button class=\"button\"><a href=\"geri\">GERİ</a></button> 

 <h2> Hız Miktarı </h2> 

 <button class=\"button\"><a href=\"yavas\">Yavas</a></button>

 <button class=\"button\"><a href=\"orta\">Orta</a></button>

 <button class=\"button\"><a href=\"Hızlı\">Hızlı</a></button>

 </body>

 </html>


Bu şekilde ara yüzümüz:




Daha sonra Arduino ide'sinde, butonların görevlerini, nodemcu'yu internete baÄŸlamak gibi iÅŸlemleri gerçekleÅŸtireceÄŸiz. Burada hızlı, orta, yavaÅŸ butonlarına basıldığında kod'ta belirlediÄŸimiz deÄŸere göre aracın hızı deÄŸiÅŸecektir. 

Nodemcu kodumuz:


#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>

ESP8266WebServer server(80); // 80 numaralı port


const int ena = 14;

const int enb = 12;

const int in1 = 5;

const int in2 = 4;

const int in3 = 0;

const int in4 = 2;


int speedCar=450;  

// wifi kurulumu

char ssid[] = "";

char pass[] = "";

char HTML[] = " <!DOCTYPE html>  <head> <meta name=\'viewport\' content=\'width=device-width, initial-scale=1\'></head>  <style> html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}.button { background-color: #6df996; border: none;  color: white;  padding: 25px 25px; text-decoration: none;  font-size: 30px;  margin: 2px;  cursor: pointer; } .button2 {background-color: #9effba; } </style> <body>  <h1>RC Car - IOT</h1>  <button class=\'button\'><a href=\'ileri\'>ILERI</a></button> <br> <button class=\'button\' ><a href=\'sol\'>SOL</a></button>  <button class=\'button button2\' ><a href=\'dur\'>DUR</a></button>  <button class=\'button\'><a href=\'sag\'>SAG</a></button>  <br> <button class=\'button\'><a href=\'geri\'>GERI</a></button>  <h2> Hiz Miktari </h2>  <button class=\'button\'><a href=\'yavas\'>Yavas</a></button> <button class=\'button\'><a href=\'orta\'>Orta</a></button> <button class=\'button\'><a href=\'hizli\'>Hizli</a></button> </body></html>";


void handleRoot() {

  server.send(200,"text / html", HTML);

}

void setup() {

  pinMode(ena, OUTPUT);

  pinMode(enb, OUTPUT);

  pinMode(in1, OUTPUT);

  pinMode(in2, OUTPUT);

  pinMode(in3, OUTPUT);

  pinMode(in4, OUTPUT);

  

  Serial.begin(115200);

  WiFi.begin(ssid, pass); // wifi baÄŸlantısı için

  Serial.println("");

  Serial.print("BaÄŸlanıyor . ");

  while ( WiFi.status() != WL_CONNECTED){

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  server.on("/", handleRoot);// iÅŸleyici iÅŸlevini yolla ve iliÅŸkilendirme

  server.on("/other",[] (){

  server.send(200, "text/html"," Other URL");

  });

  server.begin(); //Server baÅŸladı

  Serial.print("Server bekliyor, acik ");

  Serial.print(WiFi.localIP());

  Serial.println(" tarayıcıda");

  server.on("/", handleRoot);

server.on("/ileri",ileri);

server.on("/sol",sol);

server.on("/sag",sag);

server.on("/geri",geri);

server.on("/dur",dur);


server.on("/yavas",yavas);

server.on("/orta",orta);

server.on("/hizli",hizli);

server.begin();

}

void loop(){

  server.handleClient(); // gelen taleplerin ele alınması  

}

void yavas(){

  speedCar = 300;

  server.send(200,"text/html",HTML);

}

void orta(){

 speedCar = 600;

 server.send(200,"text/html",HTML);

}

void hizli(){

   speedCar = 1000;

   server.send(200,"text/html",HTML);

}

void ileri(){

  Serial.println("\nMotor ileri");

  server.send(200,"text/html",HTML);


   digitalWrite(in1, LOW);

   digitalWrite(in2, HIGH);

   analogWrite(ena, speedCar);


   digitalWrite(in3, HIGH);

   digitalWrite(in4, LOW);

   analogWrite(enb, speedCar);

  Serial.print("Motor hizi: ");

  Serial.print(speedCar);

}

void geri(){

  Serial.println("\nMotor geri");

  server.send(200,"text/html",HTML);


  digitalWrite(in1, HIGH);

  digitalWrite(in2, LOW);

  analogWrite(ena, speedCar);


  digitalWrite(in3, LOW);

  digitalWrite(in4, HIGH);

  analogWrite(enb, speedCar);

  Serial.print("Motor hizi: ");

  Serial.print(speedCar);

}

void sag(){

  Serial.println("\nMotor sag");

  server.send(200,"text/html",HTML);


   digitalWrite(in1, HIGH);

   digitalWrite(in2, LOW);

   analogWrite(ena, speedCar);


   digitalWrite(in3, HIGH);

   digitalWrite(in4, LOW);

   analogWrite(enb, speedCar);

  Serial.print("Motor hizi: ");

  Serial.print(speedCar);

}

void sol(){

  Serial.println("\nMotor sol");

  server.send(200,"text/html",HTML)

  digitalWrite(in1, LOW);

  digitalWrite(in2, HIGH);

  analogWrite(ena, speedCar);


  digitalWrite(in3, LOW);

  digitalWrite(in4, HIGH);

  analogWrite(enb, speedCar);

  Serial.print("Motor hizi: ");

  Serial.print(speedCar);

  }

void dur(){

  Serial.println("\nMotor dur");

  server.send(200,"text/html",HTML);


  digitalWrite(in1, LOW);

  digitalWrite(in2, LOW);

  analogWrite(ena, speedCar);


  digitalWrite(in3, LOW);

  digitalWrite(in4, LOW);

  analogWrite(enb, speedCar);

  Serial.print("\nMotor hizi: ");

  Serial.print(speedCar);

}

Projenin devre şeması ise:




Github :

https://github.com/one-engineer/nodemcu-rc-car-web-server

 Algoritma

Bir sorunu çözmek veya belirlenmiş bir amaca ulaşmak için tasarlanan yola, takip edilen işlem basamaklarına algoritma denir.

Algoritmalar açıkça belirtilmiÅŸ bir baÅŸlangıcı ve sonu olan iÅŸlemler kümesidir. Amaca ulaÅŸmak için iÅŸlenecek çözüm yolları ve sıralamaları belirlenir ve algoritma bu sırayı  takip ederek en mantıklı çözüme ulaşır.

Yataktan kalkıp işe gitmek için genç bir idareci tarafından takip edilen "kalk ve ışılda algoritması"nı düşünün:


1)Yataktan kalk,
2)Pijamalarını çıkar,
3)DuÅŸ al,
4)Giyin,
5)Kahvaltı yap,
6)İşe git.

Bu akış, genç idareciyi kritik kararlar vermeye iyi bir şekilde hazırlar. Aynı adımları biraz farklı sırada yapıldığını düşünün:


1)Yataktan kalk,
2)Pijamalarını çıkart,
3)Giyin,
4)DuÅŸ al,
5)Kahvaltı yap,
6)İşe git.

Bu durumda, genç idarecimiz işe sırılsıklam gidecek. Bir bilgisayar programında ifadelerin hangi sırada yürütüleceğini belirlemeye program kontrolü denir.

Sözde Kod

Sözde kod algoritma geliÅŸtirmenize yardımcı olan yapay ve gayri resmi bir dildir. Günlük dile benzer; gerçek bir bilgisayar programlama dili olmamasına raÄŸmen uygun ve kullanıcı dostudur. 

Bu kodları bilgisayarda çalıştıramayız. Aksine, bir programını C gibi bir bilgisayar programlama dilinde yazmaya teÅŸebbüs etmeden önce sadece programı "planlama"nıza yardımcı olur. Yukarıda örnek olarak bahsettiÄŸimiz "kalk ve ışılda algoritması" sözde koda örnek olarak verilebilir. 

Başka bir örnek daha vermek istersek:

1)Birinci sayıyı oku;
2)İkinci sayıyı oku;
3)Üçüncü sayıyı oku;
4)İlk iki sayıdan büyük olanı bul;
5)Büyük sayıyı sonuç isimli değişkene ata;
6)Eğer sonuç değişkeni üçüncü sayıdan büyük ise sonuç değerini yazdır;
7)DeÄŸilse
8)Üçüncü sayıyı yazdır;

if Seçim İfadesi

Seçim ifadeleri, alternatif eylemler arasında seçim yapmak için kullanılır. Örneğin, bir sınavdaki geçme notunun 60 olduğunu düşünün:

Eğer öğrencinin notu 60'tan büyükse veya 60' a eşit ise
    "Geçti" Yaz

sözde kod ifadesi "öğrencinin notunun 60'tan büyük veya eşit" koşulunun doğru olup olmadığını karşılaştırır. Koşul doğru ise "Geçti" yazılır ve sıradaki sözde kod ifadesi "icra edilir". Koşul yanlış ise, yazma işlemi göz ardı edilir ve sonraki sözde kod icra edilir.

Yukarıdaki if ifadesi sözde kodu C'de:

if ( not >= 60 )
printf ( "Geçtiniz\n" );

gibi yazılabilir.


if...else Seçim İfadesi

if seçim ifadesi, yalnızca koşul doğru olduğu zaman işaret edilen eylemi yapar; diğer türlü eylem atlanarak geçilir. if...else seçim ifadesi koşul doğru olduğu zaman ve yanlış olduğu zaman yapılacak farklı eylemleri belirlemenize izin verir. Örneğin,


Eğer öğrencinin notu 60'tan büyük veya eşit ise
    "Geçti" Yaz
DeÄŸilse
    "Kaldı" Yaz

sözde kod ifadesi, öğrencinin notu 60'tan büyük veya eÅŸit ise "Geçti" veya öğrencinin notu 60'tan küçükse "Kaldı" yazar. İki durumda da, yazma iÅŸlemi olduktan sonra, sıradaki sözde kod "icra edilir." DeÄŸilse 'nin gövdesinde de boÅŸluk bırakılmamıştır. 

Yukarıdaki if..else ifadesinin sözde kodu C'de:

if ( not >= 60 )
    printf ( "Geçti" );
else
    printf ( "Kaldı" );



Kümelenmiş if...else İfadeleri

if...else ifadeleri içinde if...else ifadeleri yerleÅŸtirerek çoklu durumlar için karşılaÅŸtırma yapar. ÖrneÄŸin aÅŸağıdaki sözde kod ifadesi, 90'dan büyük veya eÅŸit olan sınav notları için A, 80'den büyük veya eÅŸit ( fakat 90'dan küçük) notlar için B, 70'ten büyük veya eÅŸit ( fakat 80'den küçük ) notlar için C, 60'tan büyük veya eÅŸit (fakat 70'ten küçük )  notlar için D ve diÄŸer tüm notlar için F yazılacaktır.


Eğer öğrencinin notu 90'dan büyük veya eşit ise
    "A" Yaz
DeÄŸilse
    EÄŸer öğrencinin notu 80'den büyük veya eÅŸit ise
        "B" Yaz
    DeÄŸilse
        EÄŸer öğrencinin notu 70'den büyük veya eÅŸit ise
            "C" Yaz
        DeÄŸilse
            EÄŸer öğrencinin notu 60'dan büyük veya eÅŸit ise
                "D" Yaz
            DeÄŸilse
                "F" Yaz


Bu sözde kod C'de:


if ( not >= 90 ){
    printf("A\n");
    } // if sonu
else{
    if ( not >= 80 ){
        printf("B\n");
        } // if sonu
    else {
        if (not >= 70){
            printf ("C\n");
            } // if sonu
        else {
            if ( not >= 60 ){
                printf ( "D\n" );
                } // if sonu
            else {
                printf ("F\n" );
                } // else sonu
           } // else sonu
        } // else sonu
    } // else sonu        

         

gibi yazılabilir. not deÄŸiÅŸkeni 90'dan büyük veya eÅŸitse, dört koÅŸulda olacaktır, ancak sadece ilk karşılaÅŸmadan sonra printf ifadesi yürütülecektir. Bu printf ifadesi yürütüldükten sonra, "en dış"taki if...else ifadesinin else kısmı atlanarak geçilir. 

Yukarıdaki if ifadesini;

if ( not >= 90 ) {
    printf("A\n"); 
    }
else if ( not >= 80 ){
    printf("B\n");
    }
else if (not >= 70){
    printf ("C\n");
    }
else if ( not >= 60 ){
    printf ( "D\n" );
    }
else{
    printf ("F\n" );
    }

ÅŸeklinde yazmayı tercih edebilirsiniz. 




while Tekrarlama İfadesi


Bir tekrarlama ifadesi, koşullar doğru olduğu sürece tekrar edilecek bir eylem belirtmemize izin verir.

Alışveriş listemde daha alınacak olduğu sürece
    Sonraki malzemeyi al ve listede üzerini çiz.

sözde kod ifadesi alışveriÅŸ boyunca meydana gelen tekrarı tanımlar. "AlışveriÅŸ listemde daha alınacak var" koÅŸulu doÄŸru veya yanlış olabilir. DoÄŸru ise "Sonraki malzemeyi al ve listede üzerini çiz" eylemi gerçekleÅŸir. Bu eylem, koÅŸul doÄŸru kaldığı sürece tekrarlı olarak gerçekleÅŸtirilir.  while  tekrarlama ifadesinin içerdiÄŸi ifade(ler) while 'ın gövdesini oluÅŸturur.  

En sonunda , koÅŸul yanlış olacaktır. Bu noktada, tekrarlama sonlanır ve tekrarlama yapısından sonraki ilk sözde kod yürütülür. 

C programlamada while döngüsünün syntax yapısı:

while(ÅŸart) {
   iÅŸlemler(s);
}


while ifadesine örnek olarak, 100'den büyük ve 3'ün kuvveti olan ilk sayıyı bulmak için tasarlanmış bir program parçası düşünün. sonuc tam sayı deÄŸiÅŸkeninin baÅŸlangıçta 3 olduÄŸunu farz edin. AÅŸağıdaki while tekrarlama ifadesinin çalışması bittiÄŸi zaman sonuc istenen cevabı içerecektir.  


sonuc = 3;
while( sonuc <= 100 ) {
    sonuc = 3 * sonuc ;
    } // while sonu




Örnekler

1) Negatif bir sayıyı ekrana yazan program:


#include <stdio.h>
int main() {
    int sayi;

    printf("Sayi giriniz: ");
    scanf("%d", &sayi);

    if (sayi < 0) {
        printf("Girdigin sayi: %d.\n", sayi);
    }
}

Ekran çıktısı:


Sayi giriniz: -2
Girdigin sayi: -2.


2) Bir tam sayının tek mi çift mi olduÄŸunu kontrol  eden program:


#include <stdio.h>
int main() {
    int sayi;
    printf("Bir tam sayi giriniz: ");
    scanf("%d", &sayi);

    if  (sayi%2 == 0) {
        printf("%d sayisi çift sayidir.",sayi);
    }
    else {
        printf("%d sayisi tek sayidir.",sayi);
    }

}


Ekran çıktısı:

Bir tam sayi giriniz: 7
7 sayisi tek sayidir.


3) Girilen iki tam sayı büyüklük olarak karşılaştıran program:


#include <stdio.h>
int main() {
    int sayi1, sayi2;
    printf("Iki tam sayi giriniz: ");
    scanf("%d %d", &sayi1, &sayi2);

    if(sayi1 ==sayi2) {
        printf("Sonuc: %d = %d",sayi1,sayi2);
    }

    else if (sayi1 > sayi2) {
        printf("Sonuc: %d > %d", sayi1,sayi2);
    }

    else {
        printf("Sonuc: %d < %d",sayi1, sayi2);
    }

}


Ekran çıktısı:

Iki sayi giriniz: 12
23
Sonuc: 12 < 23


4) 1'den 5'e kadar olan sayıları ekrana yazan program:


#include <stdio.h>
int main()
{
    int sayi = 1;
    
    while (sayi <= 5)
    {
        printf("%d\n", sai);
        ++i;
    }

}


Ekran çıktısı:

1
2
3
4
5


Kısa Yollar:

Aşağıdaki linkler ile C programlama ile ilgili olan diğer bölümlere ulaşabilirsiniz:



Kaynakça:

https://maker.robotistan.com/algoritma/

https://www.elektrikport.com/teknik-kutuphane/yalanci-kod-nedir/14925#ad-image-0

https://www.programiz.com/c-programming/c-if-else-statement

https://www.tutorialspoint.com/cprogramming/c_while_loop.htm

https://www.programiz.com/c-programming/c-do-while-loops

Deitel Deitel c ve c++ 


 1) Ekrana "Hello World!" yazan kod:


import tkinter

class MyGUI:
def __init__(self):
self.main_window=tkinter.Tk()

self.label = tkinter.Label(self.main_window, text='Hello World! ')
self.label.pack()
tkinter.mainloop()
my_gui = MyGUI()

Ekran Çıktısı:




2) Frame kullanımı:


import tkinter

class MyGUI:
def __init__(self):
self.main_window=tkinter.Tk()

self.top_frame = tkinter.Frame(self.main_window)
self.bottom_frame= tkinter.Frame(self.main_window)

self.label1=tkinter.Label(self.top_frame,text="Yaz")
self.label2=tkinter.Label(self.top_frame,text="Sonbahar")
self.label3 = tkinter.Label(self.top_frame, text="Kış")

self.label1.pack(side="top")
self.label2.pack(side="top")
self.label3.pack(side="top")

self.label4 = tkinter.Label(self.bottom_frame, text="Yaz")
self.label5 = tkinter.Label(self.bottom_frame, text="Sonbahar")
self.label6 = tkinter.Label(self.bottom_frame, text="Kış")

self.label4.pack(side="left")
self.label5.pack(side="left")
self.label6.pack(side="left")

self.top_frame.pack()
self.bottom_frame.pack()

tkinter.mainloop()
my_gui=MyGUI()

Ekran Çıktısı:



3) Buton kullanımı:


import tkinter
import tkinter.messagebox

class MyGUI:
def __init__(self):
self.main_window=tkinter.Tk()

self.my_button = tkinter.Button(self.main_window, text='Click me!', command=self.do_something)

self.my_button.pack()

tkinter.mainloop()

def do_something(self):
tkinter.messagebox.showinfo('Response', 'Thanks for clicking the button.')

my_gui=MyGUI()



Ekran Çıktısı:


4) Çıkış butonu kullanımı:


import tkinter
import tkinter.messagebox

class MyGUI:
def __init__(self):
self.main_window=tkinter.Tk()

self.my_button= tkinter.Button(self.main_window, text='Click Me!',command= self.do_something)
self.quit_button = tkinter.Button(self.main_window, text='Quit', command=self.main_window.destroy)
self.my_button.pack()
self.quit_button.pack()

tkinter.mainloop()
def do_something(self):
tkinter.messagebox.showinfo('Response','Thanks for clicking the button.')
my_gui = MyGUI()

Ekran Çıktısı:




5) Kilometreyi mil'e çeviren örnek kod:


import tkinter
import tkinter.messagebox

class sum:
def __init__(self):
self.arayuz=tkinter.Tk()
self.ust_cerceve=tkinter.Frame(self.arayuz)
self.alt_cerceve=tkinter.Frame(self.arayuz)

self.label=tkinter.Label(self.ust_cerceve,text='Enter a distance in kilometres:')
self.kilo_entry=tkinter.Entry(self.ust_cerceve,width=10)

self.label.pack(side='left')
self.kilo_entry.pack(side='left')

self.calc_button = tkinter.Button(self.alt_cerceve,text='Convert',command=self.convert)
self.quit_button = tkinter.Button(self.alt_cerceve,text='Quit', command=self.arayuz.destroy)

self.calc_button.pack(side='left')
self.quit_button.pack(side='left')
self.alt_cerceve.pack()
self.ust_cerceve.pack()

tkinter.mainloop()

def convert(self):
kilo = float(self.kilo_entry.get())

miles = kilo*0.6214
tkinter.messagebox.showinfo('results',str(kilo)+'kilometres is equal to '+str(miles)+' miles.')

kilometre_convert=sum()


Ekran  Çıktısı:




6) Üç sayının ortalamasını alan kod:


import tkinter

class TestAvg:
def __init__(self):

self.arayuz=tkinter.Tk()

self.test1_frame=tkinter.Frame(self.arayuz)
self.test2_frame=tkinter.Frame(self.arayuz)
self.test3_frame=tkinter.Frame(self.arayuz)
self.avg_frame=tkinter.Frame(self.arayuz)
self.button_frame=tkinter.Frame(self.arayuz)

self.test1_label=tkinter.Label(self.test1_frame, text='Enter the scote test 1 = ')
self.test1_entry=tkinter.Entry(self.test1_frame,width=10)
self.test1_label.pack(side='left')
self.test1_entry.pack(side='left')

self.test2_label = tkinter.Label(self.test2_frame, text='Enter the scote test 2 = ')
self.test2_entry = tkinter.Entry(self.test2_frame, width=10)
self.test2_label.pack(side='left')
self.test2_entry.pack(side='left')

self.test3_label = tkinter.Label(self.test3_frame, text='Enter the scote test 3 = ')
self.test3_entry = tkinter.Entry(self.test3_frame, width=10)
self.test3_label.pack(side='left')
self.test3_entry.pack(side='left')

self.result_label=tkinter.Label(self.avg_frame, text='Average= ')
self.avg=tkinter.StringVar()
self.avg_label=tkinter.Label(self.avg_frame,textvariable=self.avg)
self.result_label.pack(side='left')
self.avg_label.pack(side='left')

self.calc_button=tkinter.Button(self.button_frame,text='Average', command=self.calc_avg)
self.quit_buttob=tkinter.Button(self.button_frame,text='Quit', command=self.arayuz.destroy)

self.calc_button.pack(side='left')
self.quit_buttob.pack(side='left')

self.test1_frame.pack()
self.test2_frame.pack()
self.test3_frame.pack()
self.avg_frame.pack()
self.button_frame.pack()

tkinter.mainloop()

def calc_avg(self):
self.test1 = float(self.test1_entry.get())
self.test2 = float(self.test2_entry.get())
self.test3 = float(self.test3_entry.get())

self.average=(self.test1 + self.test2+self.test3) /3.0

self.avg.set(self.average)
test_avg=TestAvg()


Ekran Çıktısı:


7) Radio buton kullanımı:


import tkinter
import tkinter.messagebox

class MyGUI:
def __init__(self):
self.arayuz=tkinter.Tk()

self.top_flame=tkinter.Frame(self.arayuz)
self.bottom_flame=tkinter.Frame(self.arayuz)

self.radio_var=tkinter.IntVar()

self.radio_var.set(1)

self.rb1 = tkinter.Radiobutton(self.top_flame, text='Option 1', variable=self.radio_var, value= 1)
self.rb2 = tkinter.Radiobutton(self.top_flame, text='Option 2', variable=self.radio_var, value= 2)
self.rb3 = tkinter.Radiobutton(self.top_flame, text='Option 3', variable=self.radio_var, value= 3)

self.rb1.pack()
self.rb2.pack()
self.rb3.pack()

self.ok_button=tkinter.Button(self.bottom_flame, text='OK', command=self.show_choice)
self.quit_button=tkinter.Button(self.bottom_flame,text='Quit', command=self.arayuz.destroy)

self.ok_button.pack(side='left')
self.quit_button.pack(side='left')

self.top_flame.pack()
self.bottom_flame.pack()

tkinter.mainloop()

def show_choice(self):
tkinter.messagebox.showinfo('Selection', 'You selected option '+ str(self.radio_var.get()))

my_gui=MyGUI()


Ekran Çıktısı:


8) Checkbutton kullanımı:


import tkinter
import tkinter.messagebox

class MyGUI:
def __init__(self):
self.arayuz=tkinter.Tk()

self.top_frame =tkinter.Frame(self.arayuz)
self.bottom_flame=tkinter.Frame(self.arayuz)

self.cb_var1=tkinter.IntVar()
self.cb_var2=tkinter.IntVar()
self.cb_var3=tkinter.IntVar()

self.cb_var1.set(0)
self.cb_var2.set(0)
self.cb_var3.set(0)

self.cb1=tkinter.Checkbutton(self.top_frame,text='Option 1 ', variable=self.cb_var1)
self.cb2=tkinter.Checkbutton(self.top_frame,text='Option 2 ', variable=self.cb_var2)
self.cb3=tkinter.Checkbutton(self.top_frame,text='Option 3 ', variable=self.cb_var3)

self.cb1.pack()
self.cb2.pack()
self.cb3.pack()

self.ok_button=tkinter.Button(self.bottom_flame,text='OK',command=self.show_choice)
self.quit_button=tkinter.Button(self.bottom_flame,text='Quit',command=self.arayuz.destroy)

self.ok_button.pack(side='left')
self.quit_button.pack(side='left')

self.top_frame.pack()
self.bottom_flame.pack()

tkinter.mainloop()

def show_choice(self):
self.message='You selected:\n'

if self.cb_var1.get()==1:
self.message=self.message+'1\n'
if self.cb_var2.get()==1:
self.message=self.message+'2\n'
if self.cb_var3.get()==1:
self.message=self.message+'3\n'
tkinter.messagebox.showinfo('Selection', self.message)

my_gui=MyGUI()

Ekran Çıktısı: