Sayfa1 Telefon Rehberi Uygulaması Uygulama, temel düzeyde, telefon rehberi üzerinedir. Kullanıcı, telefon rehberine eklediği her bir kayıt içi ad, soyad, ev telefonu ve üç adet cep telefonu bilgisi girebilmektedir. Uygulamada, veri yapısından (data structure) ve string veri tipini işleyebilen fonksiyonlardan yararlanılmıştır. Program Yapısı BİLGİ GİRİŞİ İşlem Türü, Kayıt Bilgileri İŞLEM Kayıt Ekleme veya Arama BİLGİ ÇIKIŞI Kayıt veya Arama Sonucu Veri Yapıları (Data Structures) Veri yapıları, bir biri ile ilişkili değişkenlerin tek bir isim altında toplanarak daha kolay işlenmesini sağlayan veri tipleridir. Veri yapıları diğer temel veri tipleri kullanılarak oluşturulabilen bir veri tipidir. Örneğin bir basit değişken tam sayı tipinde tek bir değer taşıyabilirken, bir dizin değişkenin elemanlarının hepsi tam sayı tipinde değer taşıyabilmektedir. Veri yapıları ise aynı anda hem tam sayı hem noktalı sayı hem de char tipinde değer taşıyabildiği gibi bu üyeler basit ve dizin değişken şeklinde de olabilmektedir. Temel bildirim şekli aşağıdaki gibidir: struct yapı_ismi veri_tipi üye_adı_1; veri_tipi üye_adı_2; veri_tipi üye_adı_3[eleman_sayısı]; değişken_listesi; Veya struct yapı_ismi değişken_listesi; Bu yapı bildiriminden sonra, yapıyı kullanacak olan değişken, klasik değişken bildirimi ile kullanımı sağlanır. Uygulama örneğimizde, telefon rehberine kaydedilecek olan ad, soyadı, ev telefonu ve üç adet cep telefon numarası bilgileri trehber ismi altında oluşturulan veri yapısı ile saklanacaktır. struct trehber char ad[20]; char soyad[20]; int tel; int cep[3]; ; main() struct trehber x[10];
Kullanılan Fonksiyonlar Uygulama örneğinde, telefon kayıtlarının saklanması yanında, önceki kayıtlarda arama yapılarak bilgilere ulaşılması da sağlanmaktadır. Burada, arama kriterinin kayıt bilgileri ile karşılaştırılmasında, string işeyebilen hazır fonksiyonlarından faydalanılmıştır. Karşılaştırma işlemi, bildirimi string başlık dosyasında yapılmış olan strcmp fonksiyonundan yararlanılmıştır. Bu hazır fonksiyon dışında, benzer işlemi karşılaştırılacak değerlerin belli sayıdaki karakterini dikkate alarak yapan strncmp fonksiyonu da vardır. Strcmp fonksiyonu iki adet parametreye ihtiyaç duymaktadır. Bu parametreler karşılaştırılacak olan string tipi değerlerdir. Fonksiyon her iki değerin tüm karakterlerini bire bir karşılaştırır ve eşitlik durumunda 0 değerini döndürür. Aksi iki durum daha mevcuttur, bunlar, ilk değerin ikinci değerden küçük olması ve ilk değerin ikinci değerden büyük olmasıdır. Bu durumların ortaya çıkması halinde sırasıyla -1 ve 1 değerlerini döndürecektir. Tablo 1. Telefon Rehberi Uygulamasında kullanılan ve kullanılabilecek hazır fonksiyonlar Hazır Fonksiyon Parametreler Açıklama strcmp str1 Karşılaştırılacak birinci ifade str2 Karşılaştırılacak ikinci ifade char x[4+= Ali, y*4+= Ali ; char x[5+= Ayşe, y*5+= Bora ; Komut t=strcmp(x,y); t=strcmp(x,y); Örnek strncmp Örnek Sonuç Değişken t 0 değerini alacaktır (iki ifadenin tüm harfleri aynıdır. İfadeler eşittir.) Değişken t -1 değerini alacaktır (iki ifadenin ilk harfleri farklıdır ve a harfi b den küçüktür. İfadeler eşit değildir.) Bilgi Bilge 1 (İlk dört harf aynıdır ancak beşinci harfler farklıdır ve i harfi e den büyüktür. Bu nedenle ifadeler eşit değildir.) Belge Bilge -1 (İlk harf aynıdır ancak ikinci harfler farklıdır ve e harfi i den küçüktür. Dolayısı ile sonraki harflerin aynı olmasını önemi kaybetmektedir. Bu nedenle ifadeler eşit değildir.) str1 Karşılaştırılacak birinci ifade str2 Karşılaştırılacak ikinci ifade Harf Sayısı Karşılaştırmada kullanılacak harf sayısı Komut Sonuç char x*4+= Ali, y*4+= Ali ; t=strncmp(x,y,3); Değişken t 0 değerini alacaktır (iki ifadenin karşılaştırılan ilk üç harfi aynıdır. İfadeler eşittir.) char x*5+= Ayşe, y*5+= Bora ; t=strncmp(x,y,3); Değişken t -1 değerini alacaktır (iki ifadenin karşılaştırılan ilk üç harfinden birincileri farklıdır ve a harfi b den küçüktür, karşılaştırılan diğer iki harf önemi yitirir. Ayşe Bora şeklinde sıralanabilirler.) Bilgi Bilge 0 (Karşılaştırılan İlk üç harf aynıdır. Örneğin, diğer harflere bakılarak sıralanabilirler.) Belge Bilge -1 (Karşılaştırılan ilk üç harften ikinciler farklıdır ve e harfi i den küçüktür. Dolayısı ile karşılaştırılacak sonraki iki harfin aynı olması önemi kaybetmektedir. Bu nedenle, örneğin, Belge Bilge şeklinde sıralanabilirler.) Uygulama örneğimizde, kayıt arama kriteri (ad) kayıtlı adlar ile karşılaştırılarak, eşleşen kaydın(ların) bilgi çıkışı sağlanacaktır. Sayfa 2
Akış Şeması Başla KOŞUL: strcmp(kriter,x[k].ad)==0 2 1 kriter k=0, <i+1 KOŞUL E H E i++ İturu==1 H BİTİR Sayfa 3
Kaynak Program Kodu /* Telefon Rehberi Uygulaması */ #include<stdio.h> #include<conio.h> #include<string.h> #include<locale.h> struct trehber char ad[20]; char soyad[20]; int tel; int cep[3]; ; main() setlocale(lc_all,"turkish"); struct trehber x[10]; int i=0,j,k; char kriter[20]; int ; basla: printf("işlem Türü? (Kayıt için 1 - Arama için 2) "); scanf("%d",&); switch() case 1: printf("ad? "); scanf("%s",); printf("soyad? "); scanf("%s",); printf("ev Telefonu? "); scanf("%d",&); printf("%d. Cep Telefonu? ",j+1); scanf("%d",&); printf("yeni Kayıt Adı: %s\n",); printf("yeni Kayıt Soyadı: %s\n",); printf("yeni Kayıt Telefon No: %d\n",); printf("yeni Kayıt %d. Cep Telefon No:%d\n",j+1,); i++; break; case 2: printf("arama Kriteri (Ad)? "); scanf("%s",&kriter); for(k=0;k<i+1;k++) if(strcmp(kriter,x[k].ad)==0) printf("kayıt Adı: %s\n",x[k].ad); printf("kayıt Soyadı: %s\n",x[k].soyad); printf("kayıt Ev Telefonu: %d\n",x[k].tel); printf("kayıt %d. Cep Telefonu: %d\n",j+1,x[k].cep[j]); break; printf("baska Işlem Var mi? (Evet için 1 - Hayır için 2) "); scanf("%d",&); if(==1) goto basla; else getch(); return 0; Sayfa 4
ÇALIŞMA ÖNERİLERİ 1. Ders içinde yapılan uygulama içeriği ile bu ders uygulama notu içeriği arasındaki farkları araştırınız. Farklılıkları ve neden farklı olabilecekleri hakkında açıklamalar yapmaya çalışınız. 2. Bu ders içeriğini oluşturan veri yapıları konusunu farklı uygulamalarda kullanmaya çalışınız. 3. Karakter dizilerini karşılaştırmak amacıyla kullanılan strcmp ve strncmp fonksiyonlarını kullanarak, karakter dizilerini kendi aralarında sıralama yapmak amacıyla bir kaynak program kodlaması yapmaya çalışınız. 4. Bu uygulamada, telefon rehberine eklenen kayıtlar sadece geçici hafızada (RAM) tutulmaktadır. Uygulamayı, dosya işlemlerini kullanarak, kayıtları kalıcı hafızada (Sabit Disk, vb.) saklayacak şekilde geliştirmeye çalışınız. Sayfa 5