C’de kayıt listeleme yapmak

C’de kayıt listeleyen program:

Bir önceki dersimiz olan  C programlamada dosyaya yeni kayıt eklemek  konusunu incelemiştik. Bu dersimizdeyse yeni kayıt ekledikten sonrabu kayıtların nasıl listeleneceğini öğreneceğiz. Kayıt listelemek için kayıtların olması gerektiğinden bir önceki dersimize ait kodların üzerine bu konuyu işleyeceğiz. Bu nedenle C’de dosyaya yeni kayıt ekleme konusunu incelemeniz yararlı olacaktır.

C’de kayıt listeleyen programın Algoritması:

ANA PROGRAM

  1. BAŞLA
  2. “Yeni kayit ekleyecek misiniz? ” yaz
  3. secim “e” ‘ veya “E”‘ harfine eşit mi? e:4 h:5
  4. kayit altprogramını çalıştır
  5. Dosya değişkeni oluştur ( FILE*dosya)
  6. Dosyayı aç ve tam yetki ver ((fopen(“veri.dat”,”a+”))
  7. Dosyanın başına git (fseek(dosya,0,SEEK_SET))
  8. Dosyada ogrenciyapinin byte değeri kadar kadar 1 kez oku (fread(&ogrenci,sizeof(ogrenci),1,dosya))
  9. Dosyanın sonuna gelindi mi? e:12 h:10
  10. ogrenci.numara, ogrenci.adi, ogrenci.notu yaz
  11. 8’e git
  12. Dosyayı kapat
  13. DUR

ALT PROGRAM

  1. BAŞLA
  2. Dosya değişkeni oluştur ( FILE*dosya;)
  3. Dosyayı aç ve tam yetki ver ((fopen(“veri.dat”,”a+”))
  4. Ferror değişkeni sıfıra mı eşit? e:5 h:7
  5. “Hata var” yaz
  6. 18’e git
  7. Dosyanın sonuna git (fseek(dosya,0,SEEK_END))
  8. “Numaraya gir” yaz
  9. ogrenci.numara gir
  10. “Ad” yaz
  11. ogrenci.adi gir
  12. “Notu gir” yaz
  13. ogrenci.notu yaz
  14. ogrenci yapısını dosyaya ogrenci byte’ı kadar yaz (fwrite(&ogrenci,sizeof(ogrenci),1,dosya);)
  15. “Başka kayıt ekleyecek misiniz?” yaz
  16. klavyeden girilen değer “e” veya “E” mi? e:7 h:17
  17. dosyayı kapat
  18. DUR

Algoritma Açıklaması:

Yeni kayıt ekleyecek misiniz dedik ve kullanıcıdan “e” veya “E” bakması takdirde kayıt alt programını çalıştırdık.  Dosya bir alt programı içerisinde çalıştı, global olarak tanımlanmadığı için ana program içerisinde çalışmayacaktır. Dosyanın tüm elemanlarını okuyacağımız için dosyanın başlangıç noktasına gitmemiz gerekiyor. Okuduğumuz değer yapının ağırlığı kadar olacak böylece biz tüm kayıtları listeleyeceğiz. Sayfanın sonuna gelindiğinde feof(dosya)=0 olmalı. Değilse kayıtları listelemek için döngü devam edecek. Son olarak dosyayı kapatacağız ve programımızı sonlandıracağız.

C’de kayıt listeleyen programın Akış Diyagramı:

ANA PROGRAM

c-de-kayit-listeleyen-akis-diyagrami

KAYIT ALT PROGRAMI AKIŞ DİYAGRAMI

c-de-dosyaya-veri-yazma

Akış Diyagramının Açıklaması:

Akış diyagramı ve açıklamalarını ulaşmak için tıklayın.

C Programlamanın Açıklaması:

C kodları nasıl çalıştırılır (derlenir) öğrenmek için tıklayın.

C Programının Temel Yapısı(Değişken Tipleri) Programlama hakkındaki açıklamalar için tıklayın.

C Programlamada kullanıcının bilgi girişi – çıkışı yapması için gerekli  açıklamalar için tıklayın.

C’de kayıt listeleyen program – C programı:


#include
#include
struct ogryapi
{
char numara[10];
char adi[20];
int notu;
} ogrenci;

void kayit()
{
char yenikayit;
FILE*dosya;
dosya=fopen("veri.dat","a+");
if(ferror(dosya)!=0) printf("Hata var\n");
else
{
fseek(dosya,0,SEEK_END);
do
{
printf("Numaraya gir: "); scanf("%s",&ogrenci.numara);
printf("Ad:"); scanf("%s",&ogrenci.adi);
printf("Notu gir:"); scanf("%d",&ogrenci.notu);
fwrite(&ogrenci,sizeof(ogrenci),1,dosya);
printf("Başka kayit ekleyecek misiniz?:");
yenikayit=getche(); printf("\n");
}
while((yenikayit=='E') || (yenikayit=='e'));
// fclose(dosya);
}
}
main()
{ printf("Yeni kayit ekleyecek misiniz? "); char secim; secim=getche();
printf("\n");
if(secim=='e' || secim=='E') kayit();
FILE*dosya;
dosya=fopen("veri.dat","a+");
// Listeleme işlemleri
fseek(dosya,0,SEEK_SET);
do
{
fread(&ogrenci,sizeof(ogrenci),1,dosya);
if(feof(dosya)!=0) break;
printf("%9s%20s%8d\n",ogrenci.numara,ogrenci.adi,ogrenci.notu);
}
while(0==0);
fclose(dosya);
getch();

C programının açıklaması:

KAYIT ALT PROGRAM AÇIKLAMASI

Standart (Temel) C kütüphanemiz stdio.h’ı programızın kodlarını çalıştırmak için programımıza include kodu ile dahil ettik. Programımızın açılır açılmaz kapanmaması için getch() fonksiyonunu kullanırız. Getch fonksiyonunu kullanmamız içinde conio.h kütüphanesine ihtiyac duyarız. Bu nedenle conio.h kütüphaneside programımız içerisine dahil ediyoruz.

Ardından ogrenci değişkeniyle tanımladığımız, ogryapi adında bir struct – yapı(Struct nedir?) tanımladık. Yapının mantığı benzeri işlevi gören farklı türdeki değişkenleri bir araya toplamak olduğundan ogrenci bilgileri ile alakalı girilebilecek örnek değişkenleri yapı içerisine oluşturmalıyız. Char tipi İngilizce karşılığı Character yani bizim bildiğimiz karakter anlamına gelir. Hem rakamları hem de harfleri desteklemekte. İnt tipinin İngilizce karşılığı İntegerdır. Türkçe anlamı tamsayı olup yalnızca tamsayı tipinde oluşturulmuş sayıları destekler.

Ana programımızı oluşturduktan hemen sonra ilerde kullanıcıdan yeni bir kayıt ekleyecek misiniz sorusuna cevaplamak amacıyla kullanacağımız “yenikayit”  değişkenini yaratıyoruz. FILE komutuyla dosyamızı oluşturduk. Fopen fonksiyonuyla dosyamızı açıyoruz. Fseek komutuyla ise programa her kayıt eklendiğinde dosyanın sonuna eklenmesi için dosyanın sonuna git fonksiyonunu uyguladık. Yeni kayıt ekletebilmek amacıyla bir döngüye ihtiyacımız var. Bu işlem için en uygun döngü tipi do {} while() döngü tipi olduğundan do while döngüsü oluşturuyoruz. Printf fonksiyonu yardımıyla belirlediğimiz karakterleri monitörümüze yazdırdık. scanf fonksiyonu yardımıyla da klavyeden girilen değeri ogryapi değişkenlerimize aktardık, eşitledik. Getche fonksiyonuyla klavyeden girilen tek karakteri yenikayit adlı değişkene eşitliyoruz. Eğer girilen değer “e” veya “E” ise döngüyü tekrar çalıştırdık.

Son olarak dosyamızı kapattık ve getch(); fonksiyonunu kullanarak programı sona erdiriyoruz.

ANA PROGRAM AÇIKLAMASI

Printf fonksiyonu ile “Yeni kayit ekleyecek misiniz” cümlesini standart görüntü aracımız yani monitörümüze yazdırdık. Rakam ve harfleri destekleyen Char tipinde bir değişken oluşturuyoruz. Kullanıcı tarafından girilen değerin oluşturduğumuz değişkeni eşitliyoruz. Bu eşitlemenin hemen ardından bir koşul belirtip değişken değerinin “e” veya “E” olup / olmadığını soruyoruz. Bu şart doğruysa kayit fonksiyonunu çalıştırıyoruz. “\n” ile alt satıra geçiyoruz.

Dosya değişkeni oluşturuyoruz. Dosyamızı açarak tam yetki veriyoruz. fseek fonksiyonu ile kayıt işaretçesini sayfanın başına taşıyoruz. Fread fonksiyonu ile Dosya’dan 1 kez Öğrenci yapısının byte değeri kadar okuyotuyoruz. Döngü sınırsız döngü olduğu için ancak dosya sonuna gelindiğinde döngü sonlanacaktır. Sayfanın sonuna geldiğimizi feof fonksiyonu 0 değerini bize döndürdüğünde anlarız. Bunun için koşul şart ifadesi kullanarak feof fonksiyon sıfır değerini döndürdüğünde döngüden çık diyoruz.  Okuttuğumuz bu değerleri yine printf() fonksiyonu ile yazdırıyoruz. Yapacağımız son işlemlerse dosyamıza kapatmak için fclose() fonksiyonunu kullanmak ve progmımızın açılır açılmaz kapanmaması için getch() fonksiyonunu kullanmak olmakta.

Önizleme:

 c-de-kayit-listeleyen-akis-diyagram

C uygulamasının proje hali ve yazılımı:

Proje halindeki dosyayı indir.

Uygulama halindaki dosyayı indir.

C’de 50 den büyük sayıların Fibonacci değerini hesaplama (Videolu)

C’de 50 den büyük sayıların Fibonacci değerini hesaplama

Daha önce C Programlamada fibonacci sayılarını hesaplayan bir program hazırlamıştık. Yalnız bu program yüksek değerlikli veri türlerinde desteklenmeyen olay nedenli 50 ve daha büyük sayılarda hatalı sonuç çıkarıyordu. C programlamada 50 den büyük sayıların Fibonacci değerini hesaplarken hiperbolik ters fonksiyondan tanjanta, tanjantdan Calculus(Kalkülüs) oranına, Calculus oranından ise konumuzun en önemli kısmını oluşturan Altın oranı kullanacağız. Altın orandan nasıl Fibonacci değerlerini hesaplayabileceğimizi ve bu dönüşümü sağlayan formülü anlatacağız. Başlayalım…

Bu dersi daha iyi anlabilmeniz için incelemenizi / okumanızı önerdiğim konular;

Altın oran – Altın oran nedir?

Calculus (Kalkülüs)- Calculus nedir?

Ters hiperbolik sinüslü kavis (asinh) nedir?

Fibonacci dizisi nedir? Fibonacci dizisinin Altın oran ile ilişkisi nasıldır?

C’de Fibonacci değerini hesaplama -1

Fonksiyon nedir?  (ÖNEMLİ)

Bu konuları derine inmeden yalnızca bilmemiz gereken tarafı ve konuda niçin kullandığımızı kısaca özetleyeyim. Öncelikle Altın orandan bahsedelim.

Altın oran nedir?

Altın oran bir nesneyi en mükemmel uyumu hangi geometrik boyutlarda sağlarım sorusunun cevabı için gerekli olan geometrik ve sayısal bir bağıntıdır.

Okumaya devam et “C’de 50 den büyük sayıların Fibonacci değerini hesaplama (Videolu)”