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ı:


Basit bir C Programı: Bir Satır Yazı Yazma 

C, daha önce bilgisayar programlaması yapmamış insanlara garip gelebilecek bazı gösterimler kullanır.  Basit bir C programı düşünerek baÅŸlayalım. İlk örneÄŸimiz Console ekranına yazı yazar.


1 // C'de ilk program.
2 #include <stdio.h>
3
4 //main fonksiyonu çalışmaya başlar
5 int main( void )
6 {
7    printf("Welcome to C!\n");
8 } //main fonksiyonunun sonu


Ekran Çıktısı

Welcome to C!


Bu kodu satır satır inceleyelim:  İlk satır // ile baÅŸlar ve // satırların açıklama olduÄŸunu iÅŸaret eder. Program dosyasına açıklama ekleyerek, programın okunabilirliÄŸini iyileÅŸtirmiÅŸ olursunuz. Açıklamalar program çalışırken dikkate alınmaz ve bilgisayarın herhangi bir iÅŸlem yapmasına neden olmaz. Açıklamalar C derleyicisi tarafından göz ardı edilir ve herhangi makine-dili nesne kodu üretmesine neden olmaz. Aynı zamanda /* ile baÅŸlayıp */ arasında olan satırlar da açıklamadır.




#include Önişlemci Değimi

2. satır:

#include <stdio.h>

C ön iÅŸlemcisine bir talimattır. # ile baÅŸlayan satırlar, program derlemeden önce ön  iÅŸlemci tarafından iÅŸlenir. 2. satır ön iÅŸlemciye standart giriÅŸ/çıkış baÅŸlık (<stdio.h>) içeriÄŸini programa eklemesini söyler. Derleme, printf (7. satır) gibi standart giriÅŸ/çıkış kütüphane fonksiyonlarını çağırdığı zaman, derleyici tarafından kullanılan bilgiler bu baÅŸlık ihtiva eder.



Boş Satırlar ve Boşluklar

3. satır sadece boÅŸ bir satırdır. Programı daha kolay okumak için boÅŸ satırlar, boÅŸluk karakterleri ve sekme karakterleri kullanırsınız. Bu karakterlerin hepsi beyaz boÅŸluk olarak bilinir. Beyaz boÅŸluk karakterleri normalde derleyici tarafından göz ardı edilir. 




main() Fonksiyonu

int main( void )


main fonksiyonu, her C programının bir parçasıdır. main'den sonraki parantez main'in fonksiyon olarak adlandırılan bir program yapı taşı olduğunu işaret eder. C programları, bir veya daha fazla fonksiyon içerir. Bu fonksiyonların içerisinden bir tanesi mutlaka main olmak zorundadır. Her C programı yürütülmeye main fonksiyonlarından başlar. Fonksiyonlar bilgi gönderebilir. main'in solundaki int anahtar kelimesi main'in bir tam sayı değer gönderdiğini işaret ederi. Buradaki parantez içerisindeki void main'in herhangi bir bilgi almadığı anlamına gelir.

Sol küme parantezi, { bir fonksiyonun gövdesini başlatır(6. satır). Karşılık gelen sağ küme parantezi bir fonksiyonu sonlandırır(8. satır). Bu parantezler çifti ve parantezler arasındaki program bir blok olarak isimlendirilir.




Bir Çıkış İfadesi

7. satır:

printf("Welcome to C!\n");

Bilgisayara ünlem iÅŸareti ile sonlanan  bir karakter dizinini ekrana bastırmak için, yani bir eylem yapması için bilgisayara talimat verir. Bazen bir karakter dizini bazen bir karakter katarı , bazen mesaj veya bir söz olarak adlandırılır.  printf fonksiyonu ("f" "biçimlendirilmesine"e karşılık gelir), parantez içerisindeki argümanı ve noktalı virgül(;) dahil tüm satıra ifade denir. Her ifade noktalı virgül (;) ile ( aı zamanda iade sonlandırıcı olarak bilinir) sonlanmak zorundadır. printf ifadesi yürütüldüğü zaman, ekrana Welcome to C! mesajı yazılır. Karakterler normalde printf ifadesindeki çift tırnaklar arasında tam olarak göründükleri gibi basılır. 




 Kaçış Dizileri

\n karakterinin ekrana basılmadığını fark etmiÅŸsinizdir. Ters bölü(\) kaçış karakterleri olarak adlandırılırlar. printf'in sıra dışı bazı ÅŸeyler yapacağını belirtir. Bir karakter dizisinde ters bölü ile karşılaşıldığında , derleyici devam ederek sonraki karaktere bakar ve ters bölü ile birleÅŸtirerek bir kaçış dizisi haline gelir. \n kaçış dizisi yeni satır anlamındadır. printf karakter katarın da yeni satır varsa, yeni satır imlecin ekranda sonraki satır başına konumlanmasına neden olur. 


Kaçış dizisi            Tanım

\n                            Yeni satır. İmleci sonraki satır başına konumlandırır. 

\t                             Yatay sekme. İmleci sonraki sekme noktasına kaydırır.

\a                            Uyarı. İmlecin o andaki konumunu deÄŸiÅŸtirmeden bir ses veya görüntülenebilir bir                                   uyarı üretir.

\\                            Ters bölü. Dizi içerisinde ters bölü karakterini yerleÅŸtirir.

\"                            Çift tırnak. Dizi içine çift tırnak karakteri yerleÅŸtirir. 



Çoklu printf 'ler Kullanma


2 #include <stdio.h>
3
4 //main fonksiyonu çalışmaya başlar
5 int main( void )
6 {
7    printf("Welcome ");
   printf("to C!\n");
9 } //main fonksiyonunun sonu

Ekran Çıktısı

Welcome to C!

---------------

2 #include <stdio.h>
3
4 //main fonksiyonu çalışmaya başlar
5 int main( void )
6 {
7    printf("Welcome\nto\nC!\n");
8    
9 } //main fonksiyonunun sonu

Ekran Çıktısı

Welcome
to
C!


Bir Başka Basit C Programı: İki Tam Sayıyı Toplama



2 //Toplama programı
3 #include <stdio.h>
4
5 int main( void ) //main fonksiyonu çalışmaya baÅŸlar
6 {
7 int tamsayi1; // kullanıcı tarafından girilecek ilk sayı
8 int tamsayi2; // kullanıcı tarafından girilecek ikici sayı
9 int toplam; //toplamın saklanacağı değişken
10
11 printf ( "Ilk tam sayiyi giriniz\n" ); // istem
12 scanf ( "%d",&tasayi1);  //bir tam sayı oku
13 printf ( "Ikinci tam sayiyi giriniz\n" ); // istem
14 scanf ( "%d",&tamsayi2);  // bir tam  sayı oku
15 toplam = tamsayi1+tamsayi2; // sayıların toplamını toplama aktar
16 printf ( "Toplam = %d\n",toplam );// toplamı yaz
17
18 } //main fonksiyonunun sonu

Ekran Çıktısı

Ilk tamsayiyi giriniz
45
Ikinci tamsayiyi giriniz
72
Toplam = 117



2. satırdaki açıklamalar programın amacını ifade eder. Daha önce de dediğimiz gibi her program main ile çalışmaya başlar. Sol küme parantezi { (6. satır) main'in gövdesinin başladığını gösterir ve karşılığı olan sağ küme parantezi } (18. satır) main'in sonunu gösterir.



Değişken ve Değişken Tanımlamaları

 7-9 satırlar tanımlamadır.

int tamsayi1; 
int tamsayi2; 
int toplam;

tamsayi1, tamsayi2 ve toplam deÄŸiÅŸkenlerin isimleridir - bir programın kullanımı için deÄŸerlerin saklandığı hafızadaki yerlerdir. Bu tanımlamalar, tamsayi1, tamsayi2 ve toplam deÄŸiÅŸkenlerinin, tam sayı deÄŸer alacağı anlamına gelen int türü olduklarını belirtir. 

Bir programda kullanılmadan önce tüm deÄŸiÅŸkenler bir isim ve bir veri türü ile tanımlanmak zorundadır. 



İstem Mesajları

11. satır:

printf ( "Ilk tam sayiyi giriniz\n" ); // istem

"Ilk tam sayiyi giriniz " karakter dizinini gösterir ve imleci sonraki satır başına konumlandırır. Kullanıcıya belirli bir eylem yapmasını söylediği için bu mesaja istem denir.




scanf Fonksiyonu ve Biçimlendirilmiş Girişler

12. satır:

scanf ( "%d",&tamsayi1);  //bir tam sayı oku

Kullanıcıdan veri almak için scanf kullanılır ("f" "biçimlendirilmiÅŸ" e karşılık gelir). Fonksiyon genede standart giriÅŸ birimi olan klavyeden okur. Burada scanf'in "%d" ve &tamsayi1 ÅŸeklinde iki argümanı vardır. Birincisi biçim kontrol katarı, kullanıcı tarafından girilecek veri türünü belirler. %d çevrim belirteci verinin tam sayı olması gerektiÄŸini belirtir ( d harfi "onluk tabanda tam sayı" ya karşılık gelir).  Buradaki %'ye scanf tarafından bir çevrim belirteci baÅŸlatan özel bir karakter olarak iÅŸlem görür. scanf'in ikinci argümanı deÄŸiÅŸken isminin önündeki "ve iÅŸareti"(&) ile baÅŸlar - adres iÅŸlemi denir. DeÄŸiÅŸken ismi ile birlikte &, tamsayi2 deÄŸiÅŸkeninin saklandığı hafızadaki yerini(veya adresini) scanf 'e bildirir. Sonra bilgisayar kullanıcısı tamsayi1 için girdiÄŸi deÄŸeri burada saklar. 

Bilgisayar yukarıdaki scanf 'i çalıştırdığı zaman, kullanıcıdan tamsayi1 deÄŸiÅŸkenine bir deÄŸer girmesi için bekler. Kullanıcı bir tam sayı yazar, sonra da sayıyı bilgisayara göndermek için Enter tuÅŸuna basarak karşılık verir. Bilgisayar daha sonra bu sayıyı veya deÄŸeri, tamsayi1 deÄŸiÅŸkenine aktarır. Bu programda bundan sonra tamsayi1 deÄŸiÅŸkeninin geçtiÄŸi her yerde aynı deÄŸer kullanılacaktır. printf ve scanf fonksiyonları kullanıcı ve bilgisayar arasındaki etkileÅŸimi kolaylaÅŸtırır. Bu etkileÅŸim karşılıklı konuÅŸmayı andırdığı için buna etkili hesaplama denir.  

13. satır:

printf ( "Ikinci tam sayiyi giriniz\n" ); // istem

Ekranda Ikinci tam sayiyi giriniz mesajını gönderir, sonra imleci sonraki satır başına konumlandırır. Bu printf aynı zamanda kullanıcının eylem yapmasına sebep olur. 

14. satır: 

scanf ( "%d",&tamsayi2);  // bir tamsayı oku

Kullanıcıdan tamsayi2 deÄŸiÅŸkeni için bir deÄŸer alır. 




Atama İfadeleri

15. satırdaki atama ifadesi: 


toplam = tamsayi1+tamsayi2; // sayıların toplamını toplama aktar


tamsayi1 ve tamsayi2 deÄŸiÅŸkenlerinin toplamını hesaplar ve atama iÅŸlemi = kullanarak sonucu toplam deÄŸiÅŸkenine aktarır. İfade "toplam alır tamsayi1 + tamsayi2 ' nin deÄŸeri" ÅŸeklinde okunur. ÇoÄŸu hesaplama atama iÅŸlemlerinde icra edilir. 



Biçim Kontrol Karakter Katarı ile Yazma

16. satır: 

printf ( "Toplam = %d\n",toplam );// toplamı yaz

Toplam = karakter dizinini takip eden toplam deÄŸiÅŸkeninin sayısal deÄŸerini ekrana yazmak için printf fonksiyonunu çağırır.  Bu printf 'in "Toplam = %d\n" ve toplam olmak üzere iki argümanı vardır. İlk argüman biçim kontrol karakteri katarıdır. Gösterilecek bazı sözel karakterleri ve bir tam sayı yazılacağını belirten %d çevrim belirteci içerir. 



C 'de Aritmetik İşlemleri


C iÅŸlemi            Aritmetik İşlem         Cebir İfade                C İfadesi

Toplama            +                                    f + 7                          f + 7

Çıkarma            -                                     p - c                            p - c

Çarpma             *                                    bm                              b * m

Bölme               /                                     x / y                            x / y

Kalan               %                                    r mod s                       r % s







C 'de Eşitlik ve İlişkisel İşlemler


Cebirsel eÅŸitlik             C eÅŸitlik veya            C koÅŸul örneÄŸi        C koÅŸul anlamı
veya iliÅŸkisel iÅŸlem       iliÅŸkisel iÅŸlem

=                                        ==                           x == y                       x, y 'ye eÅŸittir

!=                                       !=                            x != y                       x, y 'ye eÅŸit deÄŸildir. 

>                                         >                             x > y                         x, y 'den büyüktür.

<                                         <                             x < y                         x, y 'den küçüktür.

>=                                      >=                            >= y                      x, y 'den büyük veya eÅŸittir.

<=                                      <=                            x  <= y                    x, y 'den küçük veya eÅŸittir. 







Kısa Yollar:

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



Kaynakça 

https://www.programiz.com/c-programming

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

https://www.cprogramming.com/

https://www.learn-c.org/

https://www.javatpoint.com/c-programming-language-tutorial

https://www.geeksforgeeks.org/c-language-set-1-introduction/

Deitel Deitel c ve c++