C Programlama Dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
C Programlama Dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

17 Eylül 2020 Perşembe

C Programlama Dosya Okuma Yazma

 

Dosyaya yazma ve okuma işlemlerinde kullanılan fputc(), fgetc(), fputs(), fgets(), fprintf(), fscanf(), fread() ve fwrite() fonksiyonlarının kullanımını gerekli hata kontrol işlemleri ile birlikte tek bir örnek üzerinde incelemektedir.Bu proje C programlama dilinde yazılmıştır.

15 Aralık 2019 Pazar

C Programlama DFS Algoritması (Depth-first Search)

Bu dersimizde ise Graph Teorisi’nin temel gezme algoritmalarından olan DFS Algoritmasından bahsedeceğiz.

Graph’ı gezmek ne demek?

Elimizde bir graph olduğunu düşünelim. Bunun gösterimi komşuluk matrisi veya komşuluk listesi şeklinde olabilir. Bizim amacımız graph‘ın sahip olduğu edge‘leri (yolları) kullanarak her bir node‘un yalnızca bağlı olduğu node’lara gitmesine olanak sağlamak. Somut bir örnek vermek gerekirse, graph’ı bir ülke node’ları da birer şehir olarak düşünelim. Malesef bu ülkede herhangi bir şehirden bütün şehirlere direkt yol bulunmamakta. Bu durumda yalnızca mevcut yolları kullanarak gideceğimiz şehire uygun bir path  belirlemeliyiz.

10 Aralık 2019 Salı

C Programlama Kodlama Standartları


1. KAYNAK PROGRAM KÜTÜKLERI 


1000 satirdan büyük kaynak programlarin hem derlemesi yavas, hem de bakimi zordur. Programlari 1000 satirlik kütüklere bölün.
79 karakterden büyük satirlar her terminalde ve editörde kolay görüntülenmez. Bu nedenle çok uzun satirlar kullanmayiniz. 

1. KÜTÜK ADI TANIMLAMA KURALLARI. 

Her kaynak program ana kütük adi ve ekten olusur. Ekler genelde derleyici ve kullanilan programa göre düzenlenir ( .c, .cc, .l, .y gibi). Ana kütük adi sekiz karakterden olusmalidir.
OKUBENI (README) directory altindaki kütükleri ve derleme adiminda kullanilan parametreleri içermelidir.
make derleme islemi için makefile yerine "Makefile" kullanin. 

2. PROGRAM KÜTÜKLERI. 

1. Her programin basinda kütük içinde ne oldugunu belirten ön bilgi (prologue) olmalidir. Dizi içindeki islevler, tanimlar burada kisaca anlatilir. Gerekirse yazar adi ve yazildigi tarih belirtilir.
2. Baslik (header) eklemeleri bu açiklamanin pesine yazilir (include files). Bazi sistemlerde sistemin kullanigi eklemeler, kullanicininkilerin önünde yer almalidir.
3. "define" ve "typedef" komutlari bundan sonra yazilir. Önce degismez "macro" tanimlari daha sonra islevsel tanimlar, en son "typedef" ve "enum" tanimlari yapilir.
4. Tanimlardan sonra tüm programda kullanilan "global/external" bilgi alanlari tanimlanir. Genel siramada önce "extern", static olamayan global tanimlar, ve sonra static tanimlar yer alir. Bir yapi tanimini ilgilendiren "define" varsa, bu yapi taniminin pesinde yer almalidir.
5. Program içinde kullanilan islevler bu tanimlamalarin sonunda yer alir. Belirli bir kural olarak, incelenmesi en kolay olan yönteme göre siralanmalidir. Ayni düzeyde çagirilan islevlerin beraber bulunmasi yararlidir.
Genel program yapisi :
/*
* ön açiklama (ön bilgi)
*/
#include <system_kütükleri.h>
#include <uygulama.h> 
#define DEGISMEZLER
#define FUNC(x)
typedef struct A {
...
} a_t;
enum { NO=0, YES};
extern int *p_external;
extern struct A_EXT a_ext;
int *p_global;
struct A_GLOBAL {
...
} a_glob;
#define A_GLOBSZ sizeof(struct A_GLOBAL);
static int *p_static;
main(int argc, char **argv)
{
...
}

3. HEADER KÜTÜKLERI 

Baslik (header) tanimlari her alt sistem için ayri kütüklerde olmalidir. Makina bagimli tanimlar olasi tasimalarda degistirilmek üzere ayri kütüklerde tanimlanmalidir. Tanimlarda ve eklemelerde (include) kullanilmali "kütükadi" gibi tanimlardan kaçinilmalidir. C derleyicileri -I parametresi ile kütügü nereden alacagini bulabilmektedir. Bu özellik baslik (header) kütüklerinin yerinin degismesi durumunda programlarda degisiklik yapilmasini gerektirmez.
Islevleri ve "external" tanimlari içeren baslik (header) kütükleri tanimin yapildigi kaynak programa eklenmelidir. Böylece derleyici tip denetimini kolaylikla yapabilir. baslik (header) kütükleri iç içe (nested) tanimlanmamalidir. Her baslik (header) kütügündeki ön bilgi alaninada bu baslik (header) kütügünden önce hangilerinin eklenmesi gerektigi anlatilmalidir. 

4. DIGER KÜTÜKLER. 

OKUBENI (README) adli bir kütügün hem genel görüntüyü tanimlamasi, hem de program derleme ve kullanim biçiminin açiklanmasi açisindan önemi çok büyüktür. Burada kosullu derleme adimlari ve makina bagimli kütükler veya programlar açiklanir. 

2. AÇIKLAMALAR HAKKINDA. 


Açiklamalar ne oldugunu, nasil yapildigini ve parametrelerin neler oldugunu bildirmelidir. Kisa açiklamalar ise islemin ne oldugunu anlatmalidir. Her islevin basinda 3-10 satirlik bir açiklama her satirda islemin yapilisini ayrintilayan açiklamadan daha iyidir. Blok açiklama
/*
*
...
*/
biçiminde yazilmalidir. Veri yapilari, algoritmalar blok açiklama içinde anlatilmalidir. 

3. TANIMLAR HAKKINDA. 


Global tanimlar hemen birinci kolondan baslamalidir. Tüm "external" tanimlarin önünde "extern" bulunmalidir. Eger bir "extern" dizi tanimi (array) varsa bu tanimin boyu her tanimda belirtilmelidir. Gösterge taniminda kullanilan '*' türün önünde degil, tanimin önünde yer almalidir :
char *s, *p;
gibi.
Iliskili olmayan tanimlar ayni türden olsalar da ayri satirlarda tanimlanmalidir.
Tanimlarda kullanilan degiskenler, degerler ve açiklamalar alt alta gelecek sekilde "tab" tusu ile ayrilmalidir.
Eger "define" komutundaki degerin program içinde bir anlami yoksa "enum" kullanmak daha iyidir. Örnegin :
#define KETCH (1)
#define YAWL (2)
#define SLOOP (3)
#define SQRIG (4)
#define MOTOR (5)
yerine :
enum bt { KETCH=1, YAWL, SLOOP, SQRIG, MOTOR };
Bir degiskenin ilk degeri önemli ise ilk degeri açikça yazilmali, C derleyicisinin degeri belirlemesi beklenmemelidir. "long" olarak tanimlanan degismezlerde "l" yerine "L" kullanilmalidir. Çünkü "2l" ile "21" kolaylikla karisir.
"static" tanimlar mutlaka belirtilmelidir. Hatta STATIC diye bir "define" kullanilmasi daha dogru olur.
Islevlerin geri döndürdügü degerin tipi belirtilmelidir. En çok yapilan hata matemetiksel islevlerin "double" döndürdügünün unutulmasidir. 

4. ISLEV TANIMLARI HAKKINDA 


Her islevinden önce açiklama alani (prologue) bulunmalidir. Burada islevin ne yaptigi anlatilmalidir.
Islevin döndürdügü deger mutlaka belirtilmelidir. Eger bir deger döndürmüyorsa "void" tanimlanmalidir.
Islevin her parametresi tanimlanmalidir. Islev içinde kullanilan döngü degiskeni için 'i', karakter göstergeleri (pointer) için 's' ve karakter tanimlamalar için 'c' kullanimi tüm islevlerde ayni amaç için kullanilmalidir. Ayni gruptan olan islevlerde de ayni tür degiskenleri ve parametreleri kullanmak, onlari çagiran programlarda kodlama kolayligi getirir.
Degisken sayida parametresi olan islevlerde C dilinde tanimlanmis "varargs" kullanmak anlasilmasi veya tasinmasi açisindan önemlidir.
Eger islev içinde kullanilan bir degisken kaynak programda tanimli "global" degiskenlerden degil de baska kaynak programda yer aliyorsa "extern" kullanilarak tanimlanmalidir.
Içerlek yazma ve bosluklar islevin blok yapisini gösterir. Her iç blok için en az üç bosluk birakarak yazmak programi daha okunakli yapar.
Uzun kosullarda her ve/veya isleminden sonra kalani baska bir satira yazmak, "for" döngülerinde her bir döngü islemini ayri satira yazmak ve "?" isleminde her bir kosulu ayri satira yazmak programi daha okunakli yapar. 

5. BASIT KOMUTLAR (SIMPLE STATEMENTS) HAKKINDA. 


Her satirda mümkünse bir islem, komut olsun. "while" döngülerinde döngü gövdesi bos ise ";" ayri bir satirda olsun. "if" deyiminde test sonucunda sifir olmama kosulu derleyicinin kabulüne birakilmasin. Örnegin :
if (f() != FAIL)
her zaman
if (f())
biçiminden daha iyidir. Eger FAIL degeri sifir ise ve sonra birisi bu degeri -1 yapmak isterse tüm kodlamada ilgili satirlarin bulunup düzeltilmesi gerekebilir. Bu sekilde kullanim degeri degismese bile diger "if" deyimlerinde de yer almalidir.
Sifir olamayan derleyici kabulü ancak asagidaki testler için kullanilmalidir.
- Sonuç yalniz sifir ve baska bir sey olmuyorsa,
- Sonuç daha önceden adlandirilmis (TRUE gibi) ve baska birsey olmuyorsa, örnegin "isvalid", "valid" veya "checkvalid" gibi islevlerde
kullanilabilir.
Kodlama kolayligi olsa bile birden çok atama ("=" islemi) kullanilmamalidir.
"goto" deyimi hiç kullanilmamalidir. Eger bir döngüden çikmak için gerekiyorsa, döngü içindeki bölüm islev haline getirilmeli, bu islevin döndürdügü deger TRUE/FALSE olarak tanimlanmali ve "goto" deyimi yerine dönen deger kullanilmalidir.
Ancak "goto" deyimi kullanmak gerekiyorsa, etiket (label) programin okunmasina kolaylik saglamasi açisindan, kodlamanin daha solundan yazilmalidir. 

6. BIRLESIK KOMUTLAR (COMPOUND STATEMENTS) HAKKINDA. 


Kivrimli prantez (brace) içindeki komutlarin tümüne birlesik komutlar denir. Birlesik komutlarda :
kontrol {
komut;
komut;
}
stili kullanilir. Buna "K & R stili" denir.
"switch" deyimde bir "case" seçeneginden sonra "break" komutu yoksa buraya açiklama içinde bilgi yazin. Eger son seçenek varsayilan (default) degilse mutlaka "break" kullanin ve her zaman son seçenek varsayilan (default) olsun.
"if-else" deyiminde her kosul için komutlar (bir tane de olsa) mutlaka "brace" içine alinsin. Özellikle iç içe tanimlanmis "if" deyimlerinde "else" olmamasi durumunda bu kodlama çikabilecek sorun veya hatayi azaltir.
"do-while" döngülerinde mutlaka "brace" kullanilmalidir. 

7. ISLEMLER HAKKINDA. 


Tüm ikili islemler ile degiskenler arasinda en az bir bosluk birakin ('.' ve '->' hariç). Eger bir deyimin okunmasi zor ise en az öncelikli islemden deyimi satirlara bölmek gerekir. Gerekli oldugunda parantez kullanarak islem önceliklerini gösterin. Ancak çok fazla parantez kullanmayin. Insan gözü parantezleri okumaya alisik degildir.
virgül (comma) islemi en çok "for" döngülerinde birden çok degiskene ilk deger vermek için yararlidir. Bunun disinda fazla kullanmamaya çalisin.
"?:" islemindeki '?' öncesindeki kosulu parantez içinde yazin.
C dili deyimlerinden "sizeof" disinda kalanlardan sonra ilk parantezden önce bir bosluk birakilmalidir. Islevlerin parameterlerindeki virgülden sonra da bir bosluk birakilmalidir. "macro" tanimlarinda ilk parantezden önce bosluk birakilmamalidir. Yoksa ön derleyici (preprocessor) parametreleri algilayamaz. 

8. DEGISKENLERI ADLANDIRMA. 


Degiskenin adinin basinda ve sonunda '_' kullanmayin. Bu tür degiskenler kullaniciya açik olmayan derleyici degiskenleri arasinda bulunabilir.
Tüm "define" ve "enum" komutlarinda degismezler için büyük harfli tanim kullanin.
Islev adlari, degisken adlari, "typedef", "struct", "union" ve "enum" tanimlari için küçük harf kullanin.
"macro" islevleri büyük harf olmalidir. Küçük harf "macro" tanimlari eger "macro" bir islev gibi çalisiyorsa kabul edilebilir.
Ayni programda yalniz büyük ve küçük harf farki olan degiskenler ve çok benzer degiskenler kullanmayin (foo ve Foo gibi veya foobar ve foo_bar gibi).
Baska anlama gelebilecek degisken adlari kullanmayin. Mümkünse 'l' harfini hiç kullanmayin. Her zaman '1' ile karisabilir.
"typedef" tanimlarinin sonunda çogu kez "_t" eki bulunur. 

9. DEGISMEZLER HAKKINDA 


Sayisal degismezler için "define" kullanmak ileride programin bakimini kolaylastirir. Yalniz "define" tanimini degistirmek yeterli olabilir.
Degismezler kullanim amaçlarina uyumlu tanimlanmalidir. Örnegin "long" degismez 'L' ile kayan noktali degismez '.0' ile.
ASCII gösterilemeyen degismezleri "define" altinda tanimlayin veya sekizli (octal) tanimini tirnak içinde kullanin.
NULL yerine '0' kullanmayin. 

10. "MACRO" HAKKINDA 


Karmasik deyimler "macro" olarak tanimlanir. Eger "macro" parametreleri etrafinda parantezler yoksa islem önceliklerinde sorunlar olabilir.
Bazen hem "macro" hem de islevler ayni adla tanimlanabilir. Bu durumda parametrelerin isleyisi önem kazanir. Islevlerde kullanilan parametrelerin degerleri isleve geçerken, "macro" larda parametrenin açilimi kullanilir. 

11. KOSULLU DERLEME 


Kosullu derleme islemi makina bagimli islemler, "debug" ve derleme sirasinda belirlenen seçeneklerin kullanimi için önemlidir.
Mümkün ise "ifdef" tanimini baslik (header) kütügüne koyun. Kaynak program içine koymamaga çalisin. 

12. DÜZELTME (DEBUG) 


"enum" kullanirken mümkünse ilk deger sifirdan farkli olmali. Eger sistemde hata kosulu sifir ise her zaman birinci deger hatayi gösterir.
Her zaman hatayi görmek için eklemesindeki bilgiyi kullanin. Yeri geldiginde "assert" olanagindan yararlanin.
Test amaçli kodlamalarda her zaman baslik (header) içinde "define" ile "macro" kullanin. Böylece kodlamada degisiklik yapmaniz gerekmez.
 

13. "make" KOMUTU HAKKINDA 


"make" komutu için kullanilan bazi genel kavramlar asagida verilmistir : 
all Her zaman tüm kütüphaneleri derler.
clean ara kütüklerin tümünü siler.
debug testler için kullanilan 'a.out' uretir.
depend install programlari ve kütüphaneleri gerçek yerine tasir.
deinstall "install" islemini geri alma adimidir.
mkcat yardim ekranlarini "man" komutu ile kullanilir hale getirir.
lint "lint" programini çalistirir.
print/list tüm kaynak programlarin listesini almaya yarar.
rdist kaynak programlari baska bilgisayarlara tasimaya yarar.
Bunlara ek olarak "Makefile" için komut satirindan "DEBUG" veya "CFLAGS" tipi degerler girilebilir. 

14. PROJEYE BAGIMLI STANDARDLAR 


Genelde bu bölümde proje bagimli kütük adlari, directory adlari, baslik bilgisi adlari gibi tanimlar yazilir. 

30 Kasım 2019 Cumartesi

Temel Şifreleme Algoritmalarının Temelleri(Sezar Algortiması ve RSA Algoritması)





C Programlama Sezar Algoritması ve RSA Algoritması




27 Kasım 2019 Çarşamba

C Programlama Prim Algoritması





Prim Algoritması, minimum spanning tree algoritmalarından biridir. Kenarların bir alt kümesini, tüm düğümleri kapsayacak ve kenarların toplam ağırlığını minimum yapacak şekilde bulur.
Bu algoritma 1930 yılında matematikçi Vojtech Jarnik tarafından bulunmuştur. Daha sonra bağımsız olarak 1957’de bilgisayar bilimcisi Robert C. Prim ve 1959’da Dijkstra tarafından tekrar bulunmuştur. Bu nedenle bu algoritmaya DJP veya Jarnik algoritması da denir.

25 Kasım 2019 Pazartesi

C Programlama BFS Algoritması (Breadth-First Search)

BFS (Breadth First Search) Nedir?

İsminin Türkçe’ye çevirmek istersek Genişlik Öncelikli Arama diyebiliriz. Bilmiyorum dikkatinizi çekti mi iki algoritmanın de son 2 kelimesi aynı “First Search” yani öncelikli arama anlamına geliyor. Algoritmanın amacı, bir graph’ı gezmek.Önceliği farklılıkları da graph gezme algoritmalarını oluşturuyor.

23 Kasım 2019 Cumartesi

C Programlama Ramde Yer Kaplama

Çoğu kullanıcı, bilgisayarının içerisinde "RAM" bulunduğundan haberdar olsa da, onun ne olduğunu ve işe yaradığını tam olarak söyleyemez.

22 Kasım 2019 Cuma

C Programlama Yığın ve Kuyruk Örnek

Bir önceki dersimizde yığın hakkında bilgi vermiştik yığın hakkında bilginiz yok ise buraya tıklayarak yığın dersimize gidebilirsiniz.

Bu dersimizde kuyruğu anlatarak kod örneğimizi vereceğiz.


Kuyruk veri yapısı Veri Yapıları arasında en öne çıkanlardan bir tanesidir. Mantalite olarak ilk giren elemanın ilk çıkması gözetilir. Yani First In First Out yapısı mevcuttur.
Kuyruk veri yapısını gerçek hayattaki kuyruk gibi düşünebilirsiniz, kuyruğun en önündeyseniz ilk sizin işiniz biter, kuyruğun ne kadar gerisindeyseniz işiniz o kadar gecikecektir. ATM kuyrukları, ekmek kuyrukları vs…

20 Kasım 2019 Çarşamba

C Programlama Yığın ile Parantez Kontrolü

Kullanıcının girdiği bir işemde parantezlerin '(' ')' doğru şekilde yazılıp yazılmadığı yığın kontrolü ile yapılacaktır...


Bilginin geliş sırasına göre, en son gelen elemana ilk erişilen liste yapısına yığın (stack) denir. Verilere yalnız bir uçtan erişim sağlanır.
Bu erişimde Last-In-First-Out (LIFO) prensibi vardır. Yani son giren eleman, ilk çıkar. Örneğin üst üste dizilen kitapları, yalnızca en üsttekine erişecek şekilde düşünebiliriz.

19 Kasım 2019 Salı

C Programlama Palindrom Kelime Bulma

Tersten okunduğunda da aynı olan kelimelere palindrom denir. Palindrom, tersten okunuşu da aynı olan cümle, sözcük ve sayılara denilmektedir.

18 Kasım 2019 Pazartesi

C Programlama Grafik Kütüphanesi Kullanımı

Bu yazıdaki tüm örnekler Devc++ derleyicisi üzerinden anlatılmıştır. Bu derleyicide  hazır olarak graphics.h kütüphanesi bulunmaz.Bunun için buradaki videodan hem derleyiciyi kurabilir hem de graphics.h kütüphanesini ekleyebilirsiniz. Eğer derleyicinizde aşağıdaki resimdeki gibi hata alıyorsanız videodaki işlemleri(derleyiciyi tekrar kurmanıza ve dosyayı tekrar indirmenize gerek yok.) tekrar edebilirsiniz.
initgraph() Fonksiyonu
Bu fonksiyon seçilen grafik sürücüsünden grafik sisteminin yüklenmesini ve istenen grafik modunda çalıştırılmasını  sağlar. fonksiyonun genel gösterimi şöyledir:
void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);
Bu fonksiyonu kullanabilmemiz için öncelikle grafik sürücüsünün macro değerini atayacağımız bir ile grafik modunu atayacağımız bir başka değişken tanımlamalıyız. 
C Programlama Daire Çizimi

17 Kasım 2019 Pazar

C Programlama Huffman Sıkıştırma Kodu

Bilgisayar bilimlerinde veri sıkıştırmak için kullanılan bir kodlama yöntemidir. Kayıpsız (lossless) olarak veriyir sıkıştırıp tekrar açmak için kullanılır. Huffman kodlamasının en büyük avantajlarından birisi kullanılan karakterlerin frekanslarına göre bir kodlama yapması ve bu sayede sık kullanılan karakterlerin daha az, nadir kullanılan karakterlerin ise daha fazla yer kaplamasını sağlamasıdır.

16 Kasım 2019 Cumartesi

C Programlama Çift Yönlü Bağlı Liste

Bağlı Listeler  konusunu bir önceki dersimizde işledik.Konu hakkında bilgi sahibi olmak için linke tıklayabilirsiniz.Peki çift yönlü bağlı liste nedir ?

Çift Yönlü Bağlı Liste

İki adet bağlantı bilgisi tutan bağlı listeler iki yönlü bağlantılı listeler olarak ifade edilir. Bağlantılardan bir tanesi önündeki düğümü işaret ederken, diğeri sonrasındaki düğümü işaret eder.

15 Kasım 2019 Cuma

C Programlama Bağlı Listeler

Bağlı liste herhangi bir tipten node’ların (düğümlerin) yine kendi tiplerinden düğümlere işaret etmesi (point) ile oluşan zincire verilen isimdir. Buna göre her düğümde kendi tipinden bir pointer olacak ve bu pointerlar ile düğümler birbirine aşağıdaki şekilde bağlanacaktır.





Linked List’in avantajı, hafızayı dinamik olarak kullanmasıdır. Buna göre hafızadan silinen bir bilgi için hafıza alanı boşaltılacak veya yeni eklenen bir bilgi için sadece o bilgiyi tutmaya yetecek kadar hafıza alanı ayrılacaktır.
Yukarıdaki figürde görülen bağlı listeye çok benzeyen ve yine çok kullanılan bir bağlı liste uygulaması da çift bağlı liste (doubly linked list) uygulamasıdır.

Buna göre her düğüm, hem kendinden öncekine hem de kendinden sonrakine bağlanır, bu sayede liste üzerinde ileri ve geri ilerlemek mümkündür.
Listelerin üzerinde işlem yapılırken, dolaşıcı (iterator) şeklinde bir gösterici tanımlanır. Bu dolaşıcı veri aranması, ekleme veya silme gibi işlemler sırasında listenin ilgili elemanına kadar gidilmesini sağlar. Listenin ilgili elemanına gidildikten sonra silme veya ekleme gibi işlemler yapılırken göstericilerde (pointers) yapılan değişikliklerin, listeyi etkilememesini sağlar.
Örneğin bir bağlı listeye yeni bir eleman eklenmesi sırasında aşağıdaki adımlar izlenir:
  1. Ekleme işlemini yapılacağı aralıktan önceki düğüme dolaşıcı tarafından gidilir.
  2. Yeni düğüm oluşturularak, sonrasına, dolaşıcının sonrası atanır.
  3. Dolaşıcının sonrasına ise yeni düğüm atanır.
Bağlı listeden eleman silinmesi sırasında, listede silinecek olan elemandan önceki düğüme kadar dolaşıcı ile gidilir. Dolaşıcının sonrasına, sonrasının sonrası atanır. Bu sayede ilk başta dolaşıcının sonrasında olan düğüm listeden kaldırılmış ve ulaşılamaz hale gelmiş olur. Ardından bu eleman istenirse hafızadan da kaldırılır.
Bağlı listelerin nesne yönelimli programlama dillerinde pointer tipi bulunmamasından dolayı kodlanması biraz farklıdır. Bilindiği gibi C++ gibi melez (hem C hem de nesne yönelimli programlamayı destekler) diller dışında JAVA, C# gibi dillerde gösterici (pointer) bulunmaz. Bunun yerine nesne göstericisi (object referrer) bulunur. Bu değişken tipleri esas olarak bir sınıf(Class)‘dan türetilmiş bir nesneyi(object) gösterebilen değişkenlerdir. Bu değişkenlerin aslında birer göstericiden farkı yoktur.

14 Kasım 2019 Perşembe

C Programlama Dairesel Bağlı Liste Oyunu

Kaç veriden oluştuğu kullanıcadan alınan ve elemanları otomatik numaralandırılan çembersel bağlı listeden her turda liste başından random belirlenen bir sayı kadar ilerlenir ve
hangi elemana denk geliyorsa o eleman listeden kaldırılır. Eğer bağlı listede kalan eleman sayısı 5'ten fazla ise her ikinci eleman listeden çıktığında liste sonuna yine değeri 
otomatik atanacak şekilde bir eleman gelir.

13 Kasım 2019 Çarşamba

C Programlama Ağaç Yapısı








12 Kasım 2019 Salı

C Programlama Vücut Kütle İndeksi Hesaplama

Yetişkin bir insanın ağırlığının, boyuna göre normal olup olmadığını gösteren bir parametredir. İngilizcede "Body Mass Index" veya kısa adıyla "BMI" şeklinde ifade edilmektedir. Aşağıda görülen Vücut Kitle Endeksi (VKE, VKİ veya BKİ) tablosunda kilogram cinsinden ağırlık ve metre cinsinden boyun kesiştiği noktanın içinde bulunan alan ile kilonun ideal olup olmadığı tespit edilebilmektedir. Eğer mevcut ağırlığınız idealin altında ya da üstünde ise ideal noktaya ulaşabilmek için izlenecek yol, kısa sürede fazla miktarda kilo kaybetmek ya da almak değil, adım adım sağlıklı kiloya ulaşmak ve bu düzeyi uzun dönemde korumaktır.

11 Kasım 2019 Pazartesi

C Programlama Sezar Şifreleme Algoritması

Adından da anlaşıldığı üzere bu algoritmayı Jul Sezar gönderdiği mesajların düşmanların tarafında ele geçirilirse o mesajı anlamaması için oluşturulmuştur. Bu algoritma en temel şifreleme olarak kabul edilmektedir. Günümüzde şifreleme için pek güvenli sayılmamaktadır. Çünkü çözme olasılığı 1/25 dır. Eğer şifreleme türü bilinmiyorsa bu daha zor olacaktır ama biliniyorsa en fazla 25 denemede şifre kırılacaktır. Günümüzde hiçbir şifreleme çeşidi kırılamaz değildir. Bazı şifreler 10 günde kırılırken bazı şifreler ise 100 yılda kırılabilir. Bir şifreyi kırma süreciniz, bilgisayarınızın gücüne göre değişecektir.




Sezar algoritması, ana mesajın her bir harfini belirtilen anahtar sayı kadar ileri kaydırarak şifreli mesajı oluşturmak üzeredir. Şifreyi çözmek için ise anahtar sayısı ile şifreli mesajdaki her karakterin anahtar sayısı kadar geriye giderek ana mesajı dönüştürmesi üzerinedir.



Örnek olarak ana mesajımız “yazılım tüneli” olsun. Anahtar sayımız da 3 olsun. Daha sonra ana mesajdaki her harfi 3 harf ileri kaydırıp şifreli mesajı “bdclolp wxqhol” olarak buluruz. Aynı şekilde bu şifreyi çözmek için ise o harften itibaren 3 harf geri giderek “yazılım tüneli” ana mesajımızı elde ederiz.

Yazılan kodların ana yapısı her bir harfin ASCII sayı tablosunda karşılığına gelecek şekilde düşünülmüştür. Ayrıca alfabe 26 karakterle sınırlı olup Türkçe karakterler geçerli değildir.



Aşağıda C kodu bulunmaktadır.

10 Kasım 2019 Pazar

C Programlama Selection Sort(Seçmeli Sıralama)

Öncelikle Seçmeli Sıralama’nın mantığını anlatmaya çalışacağım, sonrasında ise bir örnekle devam edeceğim. Seçmeli sıralamada, sırası ile tüm elemanlar ele alınıp, dizinin sonuna kadar o elemandan küçük eleman olup olmadığı kontrol edilir ve en küçük eleman bulunup eldeki sayı ile değiştirilir.
 Daha açık anlatmak gerekirse , listenin 1. elemanın değeri alınır ve dizinin sonuna kadar tüm elemanlar kontrol edilir en küçük eleman bulunur ve 1. sıradaki eleman ile yer değiştirilir. Artık en küçük eleman 1. sırada yer almaktadır. 1. sıradaki elemanı tekrardan kontrol etmek gerekmediği için 2.sıradaki elemana geçilir ve aynı işlem tekrarlanarak son elemana kadar gidilir.

9 Kasım 2019 Cumartesi

C Programlama Sayı Tahmin Oyunu

İSTATİSTİK NEDİR?

İstatistik sözcüğü değişik anlamlarda kullanılan ve bunun bir sonucu olarak da farklı tanımları olan bir kavramdır.
İstatistiğin birinci anlamı, belli konularda toplanan sayısal değerler ile ileri sürülen bir takım şekillerdir. Örneğin, bir ülkenin toplam nüfusu, ilköğretim, ortaöğretim veya yüksek öğretimdeki öğrenci ve öğretmen sayısı, üniversitelerde öğrenci başına düşen öğretim üyesi sayısı, okuma-yazma oranı, hizmet sektöründe çalışan nüfus oranı, dışalım (ithalat) ve dışsatım (ihracat) ile ilgili değerler, üretilen otomobil, televizyon veya traktör sayılarını vb. ifade eden değerler, şekil ve grafikler istatistik olarak adlandırılmaktadır.