Yrd.Doç.Dr.Bülent Çobanoğlu
PROGRAMLAMA TEMEL KAVRAMLARI Hangi programlama dilini kullanırsak kullanalım bazı temel kavramlar değişmez. Bunlar; 1. Komutlar 2. Değişkenler 3. Sabitler 4. Mesajlar 5. Operatörler Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Bilgisayarın o an ne yapacağını belirten emirlerdir. Komutlar kısaltılmış ya da tam İngilizce kelimelerden oluşur. Örneğin; Yaz SAU şeklindeki komut farklı dillerde; Basic/Visul Basic dilinde; Print SAU C/C++ dilinde; Printf SAU ; Pascal dilinde; Write SAU Java dilinde; System.out.println( SAU"); şeklinde ifade edilmektedir. KOMUTLAR Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Değişkenler Bilgileri saklamak üzere kullandığımız ismini ve tipini bizim belirlediğimiz bellek alanlarına verilen isimdir. Kısaca bellekte herhangi bir adresi gösteren sembolik bir addır. Kullandığımız programlama dili ne olursa olsun kendisine verdiğimiz değerleri belleğinde hangi ad ile saklayacağını biz söylüyoruz. Belleğinde nerede saklayacağını (adres bilgisini) ise bilgisayar kendisi belirler. Bilgilerin geçici olarak tutulduğu yere bellek denir. Değişkenlerde belleklerde tutulur. Değişkenleri genel olarak ikiye ayırırız; Sayısal tipteki değişkenler ki içerisinde sayıları sakladığımız değişkenlere sayısal veya nümerik değişken adını veriyoruz. int a; // şeklindeki tanımlamada a değişkeni sadece tamsayı alabilir. Alfa sayısal (Sözel) tipteki değişkenler ki içerisinde sayı haricindeki bilgileri (isim, soy isim, adres, vb.) sakladığımız değişkenlere de alfa sayısal, alfa nümerik, sözel, metinsel veya string değişken adını veriyoruz. char a; // a değişkeni sadece alfa sayısal (karakter) türünde veri alabilir. Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Değişkenlere İsim Verme Kuralları Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu Değişkenlerin isim ve tiplerinin programcı tarafından belirlendiğini söylemiştik. İşte değişkenleri tanımlarken dikkat edeceğimiz hususlar; 1. Bir değişkenin ilk karakteri mutlaka harf olmalıdır. 2. Değişken isimlerinin içerisinde _ karakteri hariç, boşluk veya özel karakterler bulunmamalıdır. [.,@? * : ;!, ( / - + = % & $ # Karakterleri gibi] 3. Değişken isimlerinde Türkçe karakter kullanmamaya özen gösterilmelidir. 4. Değişken isimleri kullanılan programlama diline ait komutları içeremez. O programlama diline ait komutlara ayrılmış sözcükler (reserved words) veya anahtar sözcükler (keywords) de denilmektedir. 5. Değişken isimleri, anlamlı ifadelerden oluşmalıdır. 6. C ve Java dilleri büyük-küçük harf ayrımı yapan (case sensitive) bir dildir. ( Yani Ad değişkeni ile ad değişkeni farklı değişkenler olarak kabul edilir). NOT: Değişkenlere ( aynı zamanda nesne ve sınıf isimleri gibi diğer tanımlayıcılara da) isim verirken, genellikle değişken ve içindeki her anlamlı sözcük büyük harfle başlamalıdır (Örneğin; AdSoyad, EnKucukSayi gibi)
Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu C/C++ diline ait komutlar ve ayrılmış kelimeler C/C++ için örnek Değişken Tanımlamaları Ali7 Geçerli Bir değişkenin ilk karakteri mutlaka harf olmalıdır. 7Ali Geçersiz Ali_Veli Geçerli Değişken isminde _ alt tire özel karakteri kullanılabilir. Ali Veli Geçersiz Değişken isminde boşluk karakteri kullanılmaz. Çömlek Geçersiz Java dilinde değişken tanımlamalarında Türkçe karakter kullanılabilirken C dilinde kullanılmaz. do Geçersiz Değişken isimleri kullanılan programlama diline ait komutları içeremez.
Değişkenlere Değer Aktarma( = ) Bir aritmetik ya da string ifadeyi değişkene aktarmak için = parametresi kullanılır. { a = 5, b = A gibi } NOT: = parametresi ile eşitliğin sağ tarafındaki ifadenin sonucu sol taraftaki değişkene aktarılırken = = parametresi ile eşit mi sorgusu yapılır. { Örneğin, A sayısı 5 e eşit mi? Sorgusu A= =5 işlemi ile sağlanır}. Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Değişkenlerin Tanımlanması Bir değişken kullanılmadan önce tanımlanır. Her değişken belirli bir veri tipine/türüne sahip olmalıdır (int, long, char gibi). Bu veri tipi, değişkenin bellekte kaplayacağı alanı ve sakladığı bilginin büyüklüğünü belirtir. Veritipi degisken_adi [= başlangıç değeri]; Burada değişkenlere tanımlama aşamasında başlangıç değeri atanması isteğe bağlı bir durumdur, zorunlu değildir. Örnek değişken tanımlamaları; int x,y ; char a; int toplam=0; // Tamsayı türünde x ve y isimli iki değişken tanımlandı. // Karakter(metin) türünde a isimli bir değişken tanımlandı. /* Tamsayı türünde toplam isimli değişkene başlangıç değeri olarak 0 atandı. */ Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
C/C++ Dilinde Kullanılan Temel Veri Tipleri Not-1: unsigned ibaresi ile veri tipi değer aralığı 0 dan başlatılırken, short ifadesi ile veri tipinin değer aralığı daraltılmış olur. Not-2: C++ dili için geçerli olan bool veri tipi C dilinde geçersizdir. C dilinde bool veri tipini kullanmak için #include <stdbool.h> kütüphanesini program başına eklemek gereklidir. Not-3: void Veri Türü: Fonksiyonlarda fonksiyon geriye değer döndürmeyecekse veya kullanılacak bir değişken veri türüne sahip olmayacak ise veri türü olarak void belirlenmelidir. Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
SABİTLER Program içerisinde değeri değişmeyen ifadelere sabit denir.( sayısı, 2.5, gibi). Sabit değerler sayısal ve string olmak üzere ikiye ayrılırlar. İki tırnak ( ) işareti arasında yazılan her türlü bilgi string sabittir. Sabitler özellikle bilinen değerlerin kullanımını sağlar. Kodlamayı ve kodun okunabilirliğini kolaylaştırırlar. Java dilinde değişkenleri sabit olarak tanımlamak için değişken tanımının önüne final sözcüğü getirilirken C dilinde #define komutu veya const komutu kullanılır. { const float pi=3.14; gibi} Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Mesajlar Kullanıcı ile iletişim kurmak için kullanılır. Mesajlar kullanıcıyı yönlendirmek amacıyla kullanılırlar. ( Bir sayı giriniz ) gibi kullanıcıyı program çalışırken yönlendiren ifadelere mesajlar denir. C/C++ dilinde printf() fonksiyonu mesajların ve program sonuçlarının ekranda gösterilmesini sağlayan bir komuttur. printf( format dizgisi,çıktı listesi); Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Çıkış Karakterleri (Escape Characters) Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu Mesajların ekranda gösteriminde printf komutu ile birlikte bazı çıkış karakterleri kullanılır. Bunlar; Basılacak Karakter Çıkış Karakteri Örnek kod Ekran Çıktısı ' (Tek Tırnak) \' "Bade\'nin Evi" Bade nin Evi " (Çift Tırnak) \" "Bade dedi \"Selam\" " Bade dedi "Selam" \ (Backslash) \\ "C:\\" C:\ Bir alt satıra geç \n printf ("a\nb"); a b Bir tab boşluk \t "1\t2" 1 Ø 2 Backspace tuşu \b "12\b3" 13 Enter tuşuna basıldı (Satır başı) \r "Bade\rZehra" Bade Zehra Bip sesi \a PC içerisindeki hoparlorden bip (alert)sesi gelir Örnek;
printf format dizgisi Basılacak Karakter Çıkış Karakteri Açıklama Tamsayı (işaretli) %d char veya int türlerini onlu tamsayı formatında gösterir. Tamsayı (işaretsiz) %u unsigned int türünü işaretsiz onlu tamsayı formatında gösterir. Ondalıklı sayı %f float ve double türlerini onlu sistemde ondalıklı olarak gösterir. Ondalıklı sayı %g İşaretli veya üstel formatta ondalıklı sayı olarak gösterir. Ondalıklı sayı %e float ve double türlerini üstel biçimde gösterir. Karakter (Tek) %c Tek bir karakteri ekrana basar String (Karakter dizisi) %s Stringleri karakter dizisi şeklinde ekranda gösterir. Hexadecimal (Onaltılı) %x Octal ( Sekizli) %O int türünü hexadecimal- Onaltılık tamsayı (0,1,2, A,B,..F) formatında gösterir int türünün Octal-Sekizlik tamsayı (0,1,2,3,4,5,6,7) formatında gösterir. int x = 13; printf( %d, x); Çıktı: 13 Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
printf komutunun kullanım örnekleri Komut Satırı printf("%s\b%s ","sau","tf?"); Ekran Çıktısı printf("%s\'\t%s ","sau","tf"); int a=9, b=12; printf("%d\t%x",a,b); float a=9; int b=12; printf("%.2f\\%o",a,b); printf ("\"Bade\"\nGeldi." ); Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
scanf deyimi Klavyeden (dışardan girilen verileri) veri okumak için kullanılır. scanf ( "%d,%d,%c", &a, &b, &c); scanf ( "%c %c %f", &c1, &c2, &sayi); scanf ( "%d-%c- %f", &s1, &c1, &s2); //Klavyeden veri girişi yaparken 3, 4, a aralarında virgül kullan //Klavyeden veri girişi yaparken a h 5.4 aralarında boşluk kullan //Klavyeden veri girişi yaparken 4-q-5.4 aralarında tire kullan Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
int r, alan; cout << "Gir Yari çapı: "; //printf cin >> r; // scanf cout << "Alanı: " << alan << endl; Not1: cout komutu iostream başlık dosyasında bulundugundan örnek programın başında #include <iostream> komutu kullanılır. Not2: Program başında using namespace std; deyimi kullanılmalıdır. Bu bildirim cin, cout ve endl degerlerine kolay erişimi sağlar. Aksi takdirde std::cin >> r; şeklinde yazmamız gerekirdi. C++ dilinde printf - scanf eşdeğeri C standardında başlık dosyalarına.h uzantsı verilir. C++ standardında ise bazı başlık dosyalarının uzantısı bulunmayabilir. Örnekteki iostream başlık dosyası C++ ile tanımlanmış yeni baslık dosyalarına bir örnektir. Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
Bir karenin alanını hesaplayan programın C ve C++ dillerine (printfcint, scanf-cout) göre kodlanması: C Dili ile yazıldım C++ Dili ile yazıldım Dr.Bülent Çobanoğlu, SAÜ-TEF, Programlama Ders Notu
OPERATÖRLER İşlem yapmamızı sağlayan işaretlere operatör (işleç) adı verilir. Genellikle; Aritmetiksel { +, -, *, /, gibi }, Mantıksal { ve, veya, değil, gibi} Karşılaştırma { <, >, =, gibi } Artırma ve azaltma { ++, --, gibi} Aritmetiksel atama { +=, *=, -=, gibi} Bitsel { <<, >>, ^, gibi} operatörleri isimleri altında sınıflandırılırlar ve her programlama dilinde farklı şekillerde gösterilebilirler. Dr. Bülent ÇOBANOĞLU
OPERATÖRLER Operatör Tipi Sembolik Gösterimi Aritmetiksel operatörler +, -, *, / ve % Artırma ve azaltma operatörleri Aritmetiksel atama operatörleri Mantıksal operatörler ++ ve -- =, +=, -=, *=, /=, %=,>>=, <<=, >>>=, &=, ^= ve = &&,,! ve ^ Karşılaştırma operatörleri >, <, = =, >=, <= ve!= Bit işlem operatörleri &,, ^, >>, <<, >>> ve ~ İkili karşılaştırma operatörü?: Ayırma operatörü, (Virgül) Dr. Bülent ÇOBANOĞLU
Aritmetiksel Operatörler İŞLEMLER Aritmetik Operatör Matematiksel gösterimi JAVA dili C/C++ dili gösterimi gösterimi Toplama + X+Y X + Y X + Y Çıkartma - X-Y X Y X Y Çarpma * (XY),(X.Y), (X*Y) X * Y X * Y Bölme / X/Y ve X / Y X / Y Üs alma Yoktur 3 2 3*3 3*3 Math.pow(3,2); pow(3,2); Karekök alma Yoktur 3 Math.sqrt(3); sqrt(3); Mod Alma (Kalanı Alma) % X Mod Y X % Y X % Y String Birleştirme + BadeSare Bade + Sare Bade + Sare Eksi (Negatif) - Y Y Y X Y Dr. Bülent ÇOBANOĞLU
2 3 1 Aritmetiksel Operatörler Matematiksel ifade Java dili kodlaması C/C++ dili kodlaması ( a*a +b*c ) / ( 2*a*b) ( a*a +b*c ) / ( 2*a*b) Matematiksel ifade Java dili kodlaması C/C++ dili kodlaması y=pr q +w/x-z y = p * Math.pow(r, q) + w /x-z; y = p * pow(r, q) + w /x-z; Matematiksel ifade Java dili kodlaması C/C++ dili kodlaması c=math.sqrt(a)+b*b; c= sqrt(a) + b*b; İşlem önceliği Matematiksel ifade Java dili kodlaması C/C++ dili kodlaması z= - (5*Math.pow(a,(2/3)) / (Math.sqrt(x*x-y*y))); z= - (5* pow(a,(2/3)) / (sqrt(x*x-y*y))); Dr. Bülent ÇOBANOĞLU
SoruA: matematiksel işlemini C dilinde kodlayınız. {z= - (5*pow(a,(3/2)) / 4); } SoruB: 9 için C Dilinde kodlayınız; #include <stdio.h> //printf için lazım #include <conio.h> //getche() için lazım #include <math.h> //pow için lazım int main () { double z; int a = 9; z = -(5 * pow(a, (3 / 2)) / 4); printf("z = %g", z); getche(); } //return 0 da kullanılabilir Dr. Bülent ÇOBANOĞLU
Artırma ve Azaltma Operatörleri İşlem Operatör Kullanılışı (Örnek) Açıklama Ön Artırma ++ ++Degisken (A=++B) Son Artırma ++ Degisken++ (A=B++) Ön Çıkarma -- --Degisken (A=--B) Son Çıkarma -- Degisken-- (A=B--) Önce değişken değerini 1 artır, sonra kullan. (B=B+1; A=B ;) Önce değişken değerini al, kullan sonra 1 artır. (A=B;B=B+1) Önce değişken değerini 1 azalt, sonra kullan. (B=B-1;A=B;) Önce değişken değerini al, kullan sonra 1 azalt. (A=B; B=B-1) x=30; y=10; z=x*y++; Burada çarpma işleminden sonra y değeri artırılmış dolayısı ile z=300 değerini alır. x=30; y=10; z=x*++y; Burada ise önce y değeri artırılmış sonra ise çarpma işlemi gerçekleşmiştir. Dolayısı ile z=330 değerini alır. Dr. Bülent ÇOBANOĞLU
Karşılaştırma Operatörleri Verilerin birbiriyle karşılaştırılmasında kullanılır. Sonuç doğru ise 1 ya da true, yanlış ise 0 ya da false değerini üretir İşlem Operatör C/C++/Java Eşdeğeri Büyük > > A < B Küçük < < A > B Örnek gösterim Büyük Eşit >= A <= B Küçük Eşit <= A >= B Eşit mi? = == A == B Eşit değil!= A!= B (Koşul)? (işlem1) : (işlem2) İkili karşılaştırma?: {Koşul doğru ise <işlem1> değilse <işlem2> gerçekleşir.} Dr. Bülent ÇOBANOĞLU
Aşağıda verilen F fonksiyonunu hesaplayan matematiksel ifadenin algoritmasını oluşturup, akış şemasını çiziniz ve bilgisayar ortamında kodlamasını yapınız. F= x 0, x 2 +1 x 1, x 0<x<1, x Algoritması Akış şeması C/C++ Dili Kodlaması Java Dili Kodlaması 1.Başla 2. Gir X değerini; 3. Eğer X 0 ise F=X 2 +1; 4. Eğer X 1 ise F=X; 5. Eğer 0<X<1 ise F= X; 6. Yaz X değerini 7. Dur #include <stdio.h> #include <conio.h> #include <math.h> int main() { float X,f; printf("gir bir sayı :"); scanf("%g", &X); } if (X<=0) {f=pow(x,2)+1;} if (X>=1) {f=x;} if (X>0 && X<1) {f=sqrt(x);} printf ("f= %g", f); getche(); public static void main(string[] args) { System.out.println("Bir sayı giriniz"); Scanner gir = new Scanner (System.in); int X=gir.nextInt(); double f = 0; if (X<=0) {f=math.pow(x,2)+1;} if (X>=1) {f=x;} if (X>0 && X<1){f=Math.sqrt(X);} System.out.printf ("f= %g", f); } Dr. Bülent ÇOBANOĞLU
Soru 8. Bir sayının negatif mi pozitif mi olduğunu bulan programın akış şemasını çiziniz ve bilgisayar ortamında kodlamasını yapınız. Akış Şeması C/C++ Dilinde Kodlaması #include <stdio.h> #include <conio.h> int main() { int A; printf("gir bir sayı :"); scanf("%d", &A); printf((a>=0)? "poz." : "neg."); getche(); } Dr. Bülent ÇOBANOĞLU
Mantıksal Operatörler İŞLEM OPERATÖR KARŞILAŞTIRMA NOTASYONU C/C++/JAVA NOTASYONU Mantıksal VE (AND) && A VE B A && B Mantıksal VEYA (OR) A VEYA B A B Değil (NOT)! A DEĞİL B A! B Özel VEYA (XOR) ^ A ÖZELVEYA B A ^ B X Y! X! Y X && Y X Y (Değil X) (Değil Y) (X VE Y) (X VEYA Y) true true 0 0 1 1 0 true false 0 1 0 1 1 false true 1 0 0 1 1 false false 1 1 0 0 0 X ^ Y (X ÖZELVEYA Y) Dr. Bülent ÇOBANOĞLU
BİT İŞLEM OPERATÖRLERİ İşlem Operatör Karşılaştırma C/C++/Java Notasyonu Notasyonu Örnek Sonuç Bit düzeyinde VE & A VE B A & B 3 & 5; 1 Bit düzeyinde VEYA A VEYA B A B 3 5 7 Bit düzeyinde Özel VEYA ^ A Özel VEYA B A ^ B 3 ^ 5 6 Değil veya 1 e tümleyen ~ Değil A ~ A ~3-4 Sola kaydır << A << basamak A << değer 3 << 2 12 Sağa kaydır >> A >> basamak A >> değer 9 >> 2 2 A B A B A&B A^B ~A 0 0 0 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 1 1 1 0 0 Dr. Bülent ÇOBANOĞLU
Aritmetiksel Atama Operatörleri Toplam +=5; Toplam=Toplam + 5; Toplam += i++; Toplam=Toplam + i; i=i+1; İşlem Operatör C/C++/Java Gösterimi Eşdeğeri /Açılımı Aktar = A = B A = B Topla ve aktar += A += B A = A + B Çıkar ve aktar -= A -= B A = A - B Çarp ve aktar *= A *= B A = A * B Böl ve aktar /= A /= B A = A / B Kalanı al ve aktar %= A %= B A = A % B Sola kaydır ve aktar* <<= A<<=B A=A<<B Sağa kaydır ve aktar* >>= A>>=B A=A>>B VE le ve aktar* &= A&=B A=A&B VEYA la ve aktar* = A =B A=A B Özel VEYA la ve aktar* ^= A^=B A=A^B Değilini Al ve aktar* ~= A~=B A=A~B * Bu konutlar bit düzeyinde (sayının ikili/binary karşılığını alarak) işlem yapar Dr. Bülent ÇOBANOĞLU
Operatörlerin Öncelik Sıraları Öncelik İşlem önceliği İşlemler İşlem Simgesi Sırası 1 Parantez içi ( ) Soldan sağa Son artırma/azaltma < > ++, < > -- Matematiksel fonksiyonlar Dizi işlemleri pow,sqrt,sin, 2 Ön Artırma/Azaltma ++< >, --< > Sağdan sola Pozitif, negatif yapma + - Değil (NOT) ~< >,!< > 3 Çarpma, Bölme veya Kalan *, /, % Soldan sağa 4 Toplama veya Çıkarma + veya - 5 Kaydırma << veya >>, >>> 6 Karşılaştırma <,<=,>,>= 7 Karşılaştırma = =,!= 8 Bit düzeyinde VE (AND) & 9 Bit düzeyinde Özel VEYA (XOR) ^ 10 Bit düzeyinde VEYA (OR) &, ^, 11 Mantıksal VE (AND) && 12 Mantıksal VEYA (OR) 13 İkili koşullu karşılaştırma?: Sağdan sola 14 Atama =,+=,-=,*=,/=, %= 15 Bitsel Atama >>=, <<=, &=, ^=, = Dr. Bülent ÇOBANOĞLU [ ]
Soru 10: Aşağıdaki program parçasının çalışmasından sonra k değeri ne olur? int a=3,m=10,k; k=!( (a<5)!= (m>3) ); k=!( (a<5)!= (m>3) ); k=!( true!= true) k=! false k=true Not: Sonuç değeri k değişkeninde Java dilinde true olarak saklanırken C/C++ dilinde 1 olarak saklanır. Soru 11. m= - 5 8 % 4 + 7 * (2 * 2 + 2) ifadesinin sonucunda m değişkeninin içeriği ne olur? Dr. Bülent ÇOBANOĞLU
Soru 12. Aşağıdaki örnek programın çalıştırılmasından sonra d,e,f,g ve h değişkenlerinin değeri ne olur? int b=1, c=2; int d=b&c; int e=b c; int f=b^c; int g=c>>1; int h=c<<2; // C Programı #include <stdio.h> #include <conio.h> #include <math.h> int main() { int b=1,c=2; printf ("d= %d\n", b&c); printf ("e= %d\n", b c); printf ("f= %d\n", b^c); printf ("g= %d\n", c>>1); printf ("h= %d\n", c<<2); getche(); } Dr. Bülent ÇOBANOĞLU
Sayı Sistemleri Dönüşümü On lu sayıların İkili sayılara dönüştürülmesi { sayi 10 =k n k n-1 k n-2. k 0 } Sayı Bölüm Kalan Sonuç (3):2 1 =k 1 1=k 0 11 (6):2 3:2 (9):2 4:2 2:2 3 1 =k 2 4 2 1 =k 3 0 =k 0 1 =k 1 1 =k 0 0 =k 1 0 =k 2 İkili sayıların Onlu sayılara dönüştürülmesi { İkiliSayı*2 BasamakDeğeri + } (1101) 2 = 1*2 0 +0*2 1 +1*2 2 +1*2 3 =1+0+4+8=13 (0011) 2 =1*2 0 +1*2 1 +0*2 2 +0*2 3 = 1+2+0+0=3 110 1001 Ödev. Verilen 10 tabanındaki herhangi bir sayıyı ikilik tabana (ikilik sayı sistemine) çeviren programın algoritmasını (akış şemasını) oluşturup, programlama dilleri ile kodlamasını yazınız. Dr. Bülent ÇOBANOĞLU