C programlamada Yol Hız x Zaman problemi – Ankara’dan İstanbul’a –

Matematikden bildiğimiz Yol = Hız.Zaman problemini hocalar karmaşık bir şekilde sorunca öğrenciler (Özellikle Meslek lisesi öğrencileri) konuyu tam olarak anlayamıyorlar. Öncelikle soruyu inceleyerek işe başlayalım. Daha sonra algoritma, kodu paylaşma ve son olarak konuyu daha iyi anlamanız için gerekli olan diğer konuları paylaşacağım.

Bir arabanın ankara’dan istanbul’a varış zamanını saat cinsinden girdi olarak alan ve
arabanın ortalama hızını hesaplayan bir c porgramı yazınız.

ankara-istanbul arasındaki uzaklığı(453 km) isim sabiti (define ön işlemcisi kullanarak) olarak tamamlayınız.

Bir yolun ne kadar uzunlukta olduğunu ve kaç saate mekana gidildiği bize verildiği zaman anlamamız gereken temel özellik x=vt formülünden yani Yol = Hız x Uzunluk formülünden yolu uzunluga bölmektir.

  1. BAŞLA
  2. TEMEL KÜTÜPHANELERİ EKLE
  3. ANK-IST MAKROSUNU EKLE (453 KM.)
  4. KULLANICIDAN ‘KAC SAAT’ SOR VE DEGERİ AL
  5. YOLU, SAATE BÖL VE PROGRAMDA GÖSTER

Kod:

yol_hiz_carpi_zaman_ankara_istanbul_sorusu

KODU DAHA AYRINTILI GÖRMEK İÇİN RESMİN ÜZERİNE TIKLAYIN.

Konuda geçen C programlama özellikleri (Konuyu daha iyi anlamanız için incelemenizi tavsiye ederiz)

Kullanıcıdan 4 reel sayı alıp, aritmetik ortalamasını hesaplamak

C programlama ile ilgileniyorsanız reel sayı denildiği anda nasıl yani diyebilirsiniz fakat yapmanız gereken şey aslında float tipinde bir sayı tanımlamakdır.

Öncelikle algoritmayı yazalım, sonra kodu paylaşıp kod üzerinde açıklamada bulunacağım.

  1. BAŞLA
  2. 4 DEFA DÖNGÜYE GİR
  3. DÖNGÜ İÇERİSİNDE SAYILARI  AL VE SAYILARI TOPLA
  4. TOPLANAN SAYIYI 4’E BOL
  5. BİTTİ

Kod:

kullanicidan_dort_reel_sayi_girdi_olarak_alan_ve_aritmetik_ortalama

KODU DETAYLI GÖRMEK İÇİN ÜZERİNE TIKLAYIN.

Kod açıklaması:

Yaptığımız şey çok basit. Öncelikle sayıları bir diziye aktarılacak şekilde alıyoruz. Sayıları elimizde tuttuktan sonra bu sayıları toplayıp sayı adetine yani 4’e bölücez. Bu şekilde aritmetik ortalamasını hesaplayabileceğiz.

Sayilar adinda ondalıklı sayi tipinde bir dizi oluşturduk. For döngüsüyle 4 defa döngüye girdik ve her seferinde scanf() fonksiyonuyla %f yani ondalıklı sayı tipinde dizimize giriş yaptırdık. Aynı zamanda aritmetik ortalama hesaplayabilmemiz için sayıların toplamı gerektiğinden sayıları da topladık. Sayıları toplamamız için başlangıç değerini en başta 0 olarak belirtmiştik. Son olarak printf() kullanarak sayının ortalamasını ekrana yazdırdık.

Bu konuda kullanılan C Programlama özellikleri (Daha iyi anlamanız için incelemeniz gereken konular):

 

C programlama vs PHP

C programlama üniversite ve bazı ortaöğretim kurumlarında Algoritmaya giriş dersiyle verilmektedir. Bunun nedenine detaylı olarak baktığımızda C programlama dilinin diğer programlama dillerinin (AMPL, AWK, csh, C++, C– , C#, Objective-C, BitC, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Pike, Processing, Python) temellerini oluşturduğunu  ve diğer programlama dillerine göre daha basit bir yapıya ve geliştirmeye açık olduğunu görürüz.

C programlama dili 1972 yılında geliştirilmiş olmasına rağmen çeşitli güncellemeler ve kendini güçlendirmesi 1973 yılına, popülerleşmesi ise 1978 yılında Ritchie ve Brian Kernighan The C Programming Language (C Programlama Dili) kitabının çıkışıyla gerçekleşti. Bu kitap aynı zamanda C programlama diline bir standart getirdi. Bu standart C programlama dilinin en standart halidir.

php-logoC programlama

C programlama vs PHP

Yazının başlangıcında belirtildiği gibi diğer programlama dillerinin temel yapı taşını oluşturur. Bu nedenle salt (kütüphaneleri standart bir şekilde bırakıldığında) diğer programlama dilleri gibi gelişmiş bir yapıya sahip olmaz. Örneğin C’de bir metin içerisinde boşluk olup olmadığını her karakteri teker teker tarayan ve karakterin boşluk olup / olmadığını yazan bir fonksiyon yazmak zorunda kalabilirsiniz. Fakat PHP’de bunun fonksiyonu hazır olarak zaten yazılmıştır. Daha ayrıntılı bilgi için C programlama örnekleri sayfasını inceleyebilirsiniz.

PHP’ye geçmeden önce C yazan biri PHP’de hazır bir şekilde kullanılan fonksiyonları yazacağından mantıken fonksiyonların nasıl işlediğine bir kanaat getirebilir. C’den PHP’ye geçiş oldukça kolaydır. C yazan bir kişi kendini ortalama 2 veya 3 hafta içerisinde PHP yazabilir. Yalnız PHP’nin kendine göre bir takım standartları vardır. Bunlardan bir kaç tanesi nesne yönelim, framework ve kendine has özel değişkenleridir.

Nesne yönelim (Nesne yönelimli programlama (OOP) nedir?)

C programlama dili nesneye yönelim bir yapıda değildir. Hatta bu eksiklik nedeniyle C++ çıkartılmıştır. Nesne yönelimli programlama karmaşık programlarda kullanılan ve kodların daha rahat anlaşılabilmesi için bir programlama standartıdır. Yani kendini iyi yerlere yetiştirmek isteyen kişilerin bu yazım standartını bilmesi gerekir.

Framework

Her sitenin belli başlı standart ihtiyaçları vardır. Formlar, mail sistemi, upload sistemi vb.. Bunların sürekli farklı kişiler tarafından farklı kodlar yerine bu işi iyi bilen kişiler tarafından tek bir seferde (eksikleri güncellemer ile yazan kişiler tarafından güncellenir) yazıldığını düşünün. Yine kendine ait bir standart getiriyor. Bu şekilde programlama hem daha basit, hem nesneye yönelim, hem de daha hızlı olduğundan bir çok kurum tarafından kullanılıyor.

Kendine has özel değişkenlerdir

C Masaüstü programlama dilidir, PHP ise bir WEB programlama dilidir. Siz hangisinde ilerlemek istiyorsunuz? C’de gelişmiş kişiler daha çok fiziksel aygıtlar ile çalışacaklardır.

Örneğin:

http://www.youtube.com/watch?v=3Kw9ocy55e8

PHP’de ilerlemiş kişilerse işi yalnızca WEB ile olacaktır. Web programlama içerisinde Front End ve Back End denilen kısımlar içerisinde yer alabilirler. Bana kalırsa günümüzün dünyası Web ile ilerliyor. Hayat artık Facebook kurucusu Zuckerberg’in dediği gibi internette yaşanıyor…

C’de öğrenci otomasyonu yapımı

C’de Öğrenci Otomasyonu programı:

C’de öğrenci otomasyon programının mantığı C’de dosyaya yeni kayıt eklemek, listelemek ve bu kayıtlar içerisinde öğrenci numarısına göre arama yapmaya sağlayan program geliştirmek demektir. Daha önce anlattığımız;

konularını bir nevi ve bir takım değişikliklerde bulunarak bu konuyu yazıcağım.

C’de Öğrenci Bilgi Otomasyonunun Algoritması:

ANA PROGRAM

  1. BAŞLA
  2. “ozluk.dat” dosyasını yarat ve aç. Hata varsa “Dosya açılamadı” yazıp çık.
  3. DÖNGÜYE GİR
  4. “1 – Bilgi Girişi”,”2-Bilgi Arama”,”3-Bilgi Listeleme”,”4-Programdan Çıkış” ve “Seciminiz(1-2-3-4):” yaz
  5. secim==1 ise giris(), secim==2 ise arama(), secim==3 ise listele  değilse programdan çık.
  6. Secim 4’e eşit değilse DÖNGÜYÜ DEVAM ETTİR
  7. DUR

ALT PROGRAM – ARAMA

  1. BAŞLA
  2. Ekranda yazılı olan herşeyi temizle (system(“CLS”)) ve Aranacak Ögrenci Numarasını Giriniz yaz.
  3. Klavyeden girilen değeri noara değişkenine eşitle kayıt miktarını bul (Dosya boyutu / Struct yapı boyutu)
  4. Kayıt sayısı kadar DÖNGÜYE GİR
  5. Dosya işaretçisini dosyanın başına taşı, “ozluk.dat” dan ogr yapı değişkenini ogr boyutu kadar, 1 kez oku.
  6. ogrno ve noara değişkenlerini karşılaştır ikisi birbirine eşitse yapı değişkenleri ekranda göster değilse “Aranan kayıt Bulunamadı” yaz
  7. DUR

ALT PROGRAM – KAYIT

  1. BAŞLA
  2. “ozluk.dat” dosyasını yarat ve aç
  3. Ekrandeki yazılı olan herşeyi temizle (System(“CLS”))
  4. Ogr yapısının içerisinde tanımlanmış tüm bilgileri kullanıcıdan al ve dosya işaretçisini dosyanın sonuna taşı.
  5. “ozluk.dat” a ogr yapı değişkenini ogr boyutu kadar 1 kez yaz.
  6. Tampon bellek (Daha önceden girilmiş önbellekteki bilgiler) temizle ve “devam etmek için bir tuşa basınız” yaz
  7. DUR

ALT PROGRAM – LİSTELEME

  1. BAŞLA
  2. Ekranda yazılı olan herşeyi temizle (system(“CLS”)) ve Aranacak Ögrenci Numarasını Giriniz yaz.
  3. Klavyeden girilen değeri noara değişkenine eşitle kayıt miktarını bul (Dosya boyutu / Struct yapı boyutu)
  4. Kayıt sayısı kadar DÖNGÜYE GİR
  5. Dosya işaretçisini dosyanın başına taşı, “ozluk.dat” dan ogr yapı değişkenini ogr boyutu kadar, 1 kez oku.
  6. Tüm yapı bilgilerini yazdır. “Devam etmek için bir tuşa basınız” yaz ve getch() fonksiyonunu kullan.
  7. DUR

Algoritma Açıklaması:

ANA PROGRAM

Dosyaya veri yazma ve okuma işlemlerimiz için öncelikle bir dosyaya ihtiyac duyduğumuzdan ilk aşamada dosyayı oluşturup, ikincisinde dosyayı açıyoruz. Bu işlemler sırasında eğer bir hata varsa “Dosya açılamadı” yazıp çıkıyoruz, eğer hata yoksa işleme devam ediyoruz

Kayıtları almak için bir döngüye giriyoruz. Döngü içerisinde Projeye uygun bir şekilde menu oluşturuyoruz. Bu menüde projeye uygun olaran Öğrencilerin Bilgi Girişi, Arama ve Listeleme ve Programdan Çıkış konulmuş. Döngü secim’e eşitse çıkıyoruz değilse tekrar seçim yapmayı zorluyoruz.

ALT PROGRAM – ARAMA

Kayıtları en baştan taramamız için kayıt işaretçsini dosyanın başına getirmemiz gerekir fakat bundan önce metinleri temizlemeyerek her bir yapının aynı boyuttu olduğunu varsayarak Dosya Boyutu / Yapı formülüyle kayıt miktarını buluyoruz. Bu kayıt miktarı kadar döngüye girip kulanıcıdan alınan bilgiyle döngü içerisinde dönen bilgiler arasında bir karşılaştırma yapıyoruz. Eğer birbirlerine uyuşuyorlarsa yani denklerse bilgileri ekranda gösteriyoruz değiles “Aranan Kayıt Bulunamadı” diyerek programdan çıkıyoruz.

ALT PROGRAM – KAYIT

Bilgi girişi yaptıracağımızdan “ozluk.dat” dosyasını birinci aşamada yaratıp, ikinci aşamada açıyoruz. Ekranımızı bir güzel temizliyoruz. Girilen bilgilerin bir kitap gibi (yeni eklenen bilgiler sonda) olması amacıyla kayıt işaretçisini sona getirerek işlemimizi gerçekleştiriyoruz. Tampon bellediğimizi temizliyoruz ki önceden girdiğimiz bilgiler ile yeni gireceğimiz bilgiler birbirine girip çorba olmasın. Son olarak Kullanıcı tarafından aldığımız bilgileri “ozluk.dat” adlı dosyanın içerisine ekliyip alt programımızı sonlandırıyoruz.

ALT PROGRAM – LİSTELEME

Arama Alt programının yalnızca karşılaştırılmamış halidir.

C’de Öğrenci Otomasyonu programının Akış Diyagramı:

ANA PROGRAM

c-de-ogrenci-otomasyonu-ana-program

ALT PROGRAM – KAYIT EKLEME

c-de-dosya-icerisinde-arama-yapan-program-alt-kayit

ALT PROGRAM – ARAMA YAPMA

c-de-dosya-icerisinde-arama-yapan-program-alt-arama

ALT PROGRAM – KAYIT LİSTELEME

c-de-ogrenci-otomasyonu-kayit-listeleme

 

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çıklamar için tıklayın.

C’de Öğrenci Otomasyonu – C programı:

#include
#include
#include
#include
#include

FILE*f;
struct ogrneci
{
char no[10],ad[15],soyad[20];
char bad[15],aad[15],telno[10];
char memleket[20],adres[50];
} ogr;

int i,sec,kaysay;
char noara[10];

void giris(void)
{
FILE*f;
f=fopen("ozluk.dat","w+b");
system("CLS");
printf("\nÖgrenci No :"); scanf("%s",ogr.no);
printf("\nÖgrenci Adı :"); scanf("%s",ogr.ad);
printf("\nÖgrenci Soyadı :"); scanf("%s",ogr.soyad);
printf("\nBaba Adı :"); scanf("%s",ogr.bad);
printf("\nAnne Adı :"); scanf("%s",ogr.aad);
printf("\nTelefon No :"); scanf("%s",ogr.telno);
printf("\nMemleketi :"); scanf("%s",ogr.memleket);
printf("\nAdres :"); scanf("%s",ogr.adres);

fseek(f,filelength(fileno(f)),SEEK_SET);
fwrite(&ogr,sizeof(ogr),1,f);
fflush(f);
printf("\ndevam etmek için bir tusa basiniz");
getch();
}

int arama(void){

system("CLS");
printf("Aranacak Ögrenci Numarasını Giriniz:");
scanf("%s",&noara);
kaysay=filelength(fileno(f))/sizeof(ogr);
for(i=0;i

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

 ANA PROGRAM

Fopen fonksiyonunu ve paremetrelerinikullanarak daha önce oluşturduğumuz dosyayı açtık. Koşul / Şart ifadesi if/else ile f’nin bir boş değeri eşit olup olmadığnı hesapladık. Eğer f dosya değişkeni boş yani NULL değerine sahipse printf() fonksiyonunu kullanarak kullanıcıya “Dosya açılamadı” cevabını vererek programı sonlandıracağız.

Eğer NULL değerine sahip değiles kullanıcıdan çeşitli bilgiler isteyeceğiz. System(“CLS”) ile ekranımımızda gördüğümüz bütün yazıları kaldırıyoruz/temizliyoruz. Daha sonra menu elemanlarımızı yine printf() fonksiyonunu kullanarak yazdırdık. Geldik kullanıcımızın secim yapmasına. Kullanıcı secim yaparken degeri scanf() fonksiyonuyla ile sec değişkenine aktardık ve switch case yapısını kullandık.

ALT PROGRAM – ARAMA YAPMA

Ana program içerisinde kullandığımız gibi system(“CLS”) kullanarak ekranımızda yazılı olan metinleri temizlemeyi başardık. “Aranacak Öğrenci Numarasını Giriniz” adlı metni ekranda gösterdik. Kullanıcı tarafından girilen degeri ise noara’ya aktardık. Dosya boyutunu yapı boyutuna bölerek kayıt sayısına ulaştık. Kayıt sayısı kadar değerlerimizi taramamıza yardımcı olması amacıyla for döngüsünü kullandık. Bu kayıtlar içerisinde fseek() komutu sayesinde işaretcimizi dosya içerisinde en başa taradık. Bunu dosyamızın en başa gelmesi için yaptık. fread ile dosyayı okuduk. string.h kütüphanesi (header) nin içerisinde bulunan strcmp karşılaştırma fonksiyonunu kullanarak ogr.no ile noara değişkenleri karşılaştırdık ve denk düşmeleri halinde printf() fonksiyonunu kullanarak ogr yapının içerisindeki  bilgileri yazdırdık. Eğer hiç bir kayıt bulunamazsa “Aranan Kayıt Bulunamadı” yazdır dedik.

Klavyeden girilen herhangi bir tuşa tıklanınca programımızın devam etmesini sağlayan getch(); fonksiyonunu kullandık.

ALT PROGRAM – KAYIT GİRME

FILE türünde yani dosya türünde “f” adında bir değişken oluşturduk. Oluşturduğumuz değişkeni fopen fonksiyonu kullanarak ozluk.datı w ve  b parametleriyle açtık. Ferror yani dosya açılma hatası verdiği takdirde Dosya açılamadı demesini eğer dosya açılmayı başardıysada oluşturduğumuz yapının içerisinde bulunan bilgileri printf() ve scanf() fonksiyonu yardımıyla almasını sağladık. fseek() fonksiyonuyla dosyamızın bir kitap şeklinde okunmas için sonuna gittik ve daha sonra fwrite() fonksiyonu sayesinde dosyamıza kayıtlarımızı geçirdik. Daha önceki kayıtlarımız ile karışmaması için artık/önbellek kayıtlarımızı fflush() fonksiyonu yardımıyla temizledik.

Önizleme:

c-de-ogrenci-otomayon-programı

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

Proje halindeki dosyayı indir.

Uygulama halindaki dosyayı indir.

C’de dosya içerisinde arama yapma

C’de Dosya İçerisinde Arama Yapma programı:

C’de dosya içerisinde arama yapmak için öncelikle kayıt eklemek gerekir. Bu nedenle konuyu daha ayrıntılı bir şekilde anlamak için “C’de Dosyaya Kayıt ekleme” ders anlatımını incelemenizi öneriririm.

C’de Dosya İçerisinde Arama Yapan programın Algoritması:

ANA PROGRAM

  1. BAŞLA
  2. “ozluk.dat” dosyasını yarat ve aç. Hata varsa “Dosya açılamadı” yazıp çık.
  3. DÖNGÜYE GİR
  4. “1 – Bilgi Girişi”,”2-Bilgi Arama”,”3-Programdan Çıkış” ve “Seciminiz(1-2-3):” yaz
  5. secim==1 ise giris(), secim==2 ise arama(), secim==3 ise programdan çık.
  6. Secim 3’e eşit değilse DÖNGÜYÜ DEVAM ETTİR
  7. DUR

ALT PROGRAM – ARAMA YAPMA

  1. BAŞLA
  2. Ekranda yazılı olan herşeyi temizle (system(“CLS”)) ve Aranacak Ögrenci Numarasını Giriniz yaz.
  3. Klavyeden girilen değeri noara değişkenine eşitle kayıt miktarını bul (Dosya boyutu / Struct yapı boyutu)
  4. Kayıt sayısı kadar DÖNGÜYE GİR
  5. Dosya işaretçisini dosyanın başına taşı, “ozluk.dat” dan ogr yapı değişkenini ogr boyutu kadar, 1 kez oku.
  6. ogrno ve noara değişkenlerini karşılaştır ikisi birbirine eşitse yapı değişkenleri ekranda göster değilse “Aranan kayıt Bulunamadı” yaz
  7. DUR

ALT PROGRAM – KAYIT EKLEME

  1. BAŞLA
  2. “ozluk.dat” dosyasını yarat ve aç
  3. Ekrandeki yazılı olan herşeyi temizle (System(“CLS”))
  4. Ogr yapısının içerisinde tanımlanmış tüm bilgileri kullanıcıdan al ve dosya işaretçisini dosyanın sonuna taşı.
  5. “ozluk.dat” a ogr yapı değişkenini ogr boyutu kadar 1 kez yaz.
  6. Tampon bellek (Daha önceden girilmiş önbellekteki bilgiler) temizle ve “devam etmek için bir tuşa basınız” yaz
  7. DUR

Algoritma Açıklaması:

ANA PROGRAM

Dosyaya veri yazma ve okuma işlemlerimiz için öncelikle bir dosyaya ihtiyac duyduğumuzdan ilk aşamada dosyayı oluşturup, ikincisinde dosyayı açıyoruz. Bu işlemler sırasında eğer bir hata varsa “Dosya açılamadı” yazıp çıkıyoruz, eğer hata yoksa işleme devam ediyoruz

Kayıtları almak için bir döngüye giriyoruz. Döngü içerisinde Projeye uygun bir şekilde menu oluşturuyoruz. Bu menüde projeye uygun olaran Öğrencilerin Bilgi Girişi, Arama ve Programdan Çıkış konulmuş. Döngü secim’e eşitse çıkıyoruz değilse tekrar seçim yapmayı zorluyoruz.

ALT PROGRAM – ARAMA YAPMA

Kayıtları en baştan taramamız için kayıt işaretçsini dosyanın başına getirmemiz gerekir fakat bundan önce metinleri temizlemeyerek her bir yapının aynı boyuttu olduğunu varsayarak Dosya Boyutu / Yapı formülüyle kayıt miktarını buluyoruz. Bu kayıt miktarı kadar döngüye girip kulanıcıdan alınan bilgiyle döngü içerisinde dönen bilgiler arasında bir karşılaştırma yapıyoruz. Eğer birbirlerine uyuşuyorlarsa yani denklerse bilgileri ekranda gösteriyoruz değiles “Aranan Kayıt Bulunamadı” diyerek programdan çıkıyoruz.

ALT PROGRAM – KAYIT EKLEME

Bilgi girişi yaptıracağımızdan “ozluk.dat” dosyasını birinci aşamada yaratıp, ikinci aşamada açıyoruz. Ekranımızı bir güzel temizliyoruz. Girilen bilgilerin bir kitap gibi (yeni eklenen bilgiler sonda) olması amacıyla kayıt işaretçisini sona getirerek işlemimizi gerçekleştiriyoruz. Tampon bellediğimizi temizliyoruz ki önceden girdiğimiz bilgiler ile yeni gireceğimiz bilgiler birbirine girip çorba olmasın. Son olarak Kullanıcı tarafından aldığımız bilgileri “ozluk.dat” adlı dosyanın içerisine ekliyip alt programımızı sonlandırıyoruz.

C’de Dosya İçerisinde Arama Yapan programın Akış Diyagramı:

 ANA PROGRAM

c-de-dosya-icerisinde-arama-yapan-program

ALT PROGRAM – ARAMA YAPMA

c-de-dosya-icerisinde-arama-yapan-program-alt-arama

ALT PROGRAM – KAYIT EKLEME

c-de-dosya-icerisinde-arama-yapan-program-alt-kayit

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çıklamar için tıklayın.

C’de Dosya İçerisinde Arama Yapan program – C programı:

#include
#include
#include
#include
#include

FILE*f;
struct ogrneci
{
char no[10],ad[15],soyad[20];
char bad[15],aad[15],telno[10];
char memleket[20],adres[50];
} ogr;

int i,sec,kaysay;
char noara[10];

void giris(void)
{
FILE*f;
f=fopen("ozluk.dat","w+b");
if(ferror(f)!=0) printf("Dosya açılamadı");
else
{
system("CLS");
printf("\nÖgrenci No :"); scanf("%s",ogr.no);
printf("\nÖgrenci Adı :"); scanf("%s",ogr.ad);
printf("\nÖgrenci Soyadı :"); scanf("%s",ogr.soyad);
printf("\nBaba Adı :"); scanf("%s",ogr.bad);
printf("\nAnne Adı :"); scanf("%s",ogr.aad);
printf("\nTelefon No :"); scanf("%s",ogr.telno);
printf("\nMemleketi :"); scanf("%s",ogr.memleket);
printf("\nAdres :"); scanf("%s",ogr.adres);

fseek(f,filelength(fileno(f)),SEEK_END);
fwrite(&ogr,sizeof(ogr),1,f);
fflush(f);
printf("\ndevam etmek için bir tusa basiniz");
getch();
}
}

int arama(void){

system("CLS");
printf("Aranacak Ögrenci Numarasını Giriniz:");
scanf("%s",&noara);
kaysay=filelength(fileno(f))/sizeof(ogr);
for(i=0;i

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

 ANA PROGRAM

Fopen fonksiyonunu ve paremetrelerinikullanarak daha önce oluşturduğumuz dosyayı açtık. Koşul / Şart ifadesi if/else ile f'nin bir boş değeri eşit olup olmadığnı hesapladık. Eğer f dosya değişkeni boş yani NULL değerine sahipse printf() fonksiyonunu kullanarak kullanıcıya "Dosya açılamadı" cevabını vererek programı sonlandıracağız.

Eğer NULL değerine sahip değiles kullanıcıdan çeşitli bilgiler isteyeceğiz. System("CLS") ile ekranımımızda gördüğümüz bütün yazıları kaldırıyoruz/temizliyoruz. Daha sonra menu elemanlarımızı yine printf() fonksiyonunu kullanarak yazdırdık. Geldik kullanıcımızın secim yapmasına. Kullanıcı secim yaparken degeri scanf() fonksiyonuyla ile sec değişkenine aktardık ve switch case yapısını kullandık.

ALT PROGRAM - ARAMA YAPMA

Ana program içerisinde kullandığımız gibi system("CLS") kullanarak ekranımızda yazılı olan metinleri temizlemeyi başardık. "Aranacak Öğrenci Numarasını Giriniz" adlı metni ekranda gösterdik. Kullanıcı tarafından girilen degeri ise noara'ya aktardık. Dosya boyutunu yapı boyutuna bölerek kayıt sayısına ulaştık. Kayıt sayısı kadar değerlerimizi taramamıza yardımcı olması amacıyla for döngüsünü kullandık. Bu kayıtlar içerisinde fseek() komutu sayesinde işaretcimizi dosya içerisinde en başa taradık. Bunu dosyamızın en başa gelmesi için yaptık. fread ile dosyayı okuduk. string.h kütüphanesi (header) nin içerisinde bulunan strcmp karşılaştırma fonksiyonunu kullanarak ogr.no ile noara değişkenleri karşılaştırdık ve denk düşmeleri halinde printf() fonksiyonunu kullanarak ogr yapının içerisindeki  bilgileri yazdırdık. Eğer hiç bir kayıt bulunamazsa "Aranan Kayıt Bulunamadı" yazdır dedik.

Klavyeden girilen herhangi bir tuşa tıklanınca programımızın devam etmesini sağlayan getch(); fonksiyonunu kullandık.

ALT PROGRAM - KAYIT GİRME

FILE türünde yani dosya türünde "f" adında bir değişken oluşturduk. Oluşturduğumuz değişkeni fopen fonksiyonu kullanarak ozluk.datı w ve  b parametleriyle açtık. Ferror yani dosya açılma hatası verdiği takdirde Dosya açılamadı demesini eğer dosya açılmayı başardıysada oluşturduğumuz yapının içerisinde bulunan bilgileri printf() ve scanf() fonksiyonu yardımıyla almasını sağladık. fseek() fonksiyonuyla dosyamızın bir kitap şeklinde okunmas için sonuna gittik ve daha sonra fwrite() fonksiyonu sayesinde dosyamıza kayıtlarımızı geçirdik. Daha önceki kayıtlarımız ile karışmaması için artık/önbellek kayıtlarımızı fflush() fonksiyonu yardımıyla temizledik.

Önizleme:

c-de-dosya-icerisinde-arama-yapan-program-onizleme

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

Proje halindeki dosyayı indir.

Uygulama halindaki dosyayı indir.

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 dosyaya yeni kayıt eklemek

C’de dosyaya yeni kayıt ekleyen program:

C programlamada dosyalama işlemlerinin ilk örneği olan “C’de dosyaya yeni kayıt ekleyen program” daki amaç yeni bir dosya yaratmak ve bu dosyanın içerisine veriyi yazdırmaktır. Programda kullanıcıdan veri girişi yapılmaya devam edilsin mi diye soracak ve istenilen komut girildiğinde veri girişi yapılmaya devam etmeyi amaçlıyoruz. Başlayalım…

C’de dosyaya yeni kayıt ekleyen programın Algoritması:

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

Dosyaya veri girişi yaptırmak adına öncelikle bir dosya yapısı oluşturmalıyız. Dosya adında bir FILE yani dosya oluşturduk. Ardından oluşturduğumuz bu dosyayı programımız ile aynı dizin içerisinde “veri” adında, “dat” uzantılı, yazılabilir ve okunabilir yetkilerini vererek açtık. Ferror 0 değerini verirse programda hata var anlamına gelmekteydi. Bu nedenle ferror 0 değilse programı devam ettir dedik. Döngümüze başlattık kullanıcıdan bilgileri istedik ve ardından kullanıcı tarafından girilen değer küçük e veya büyük E harfiyse döngüyü tekrar devam ettirerek dosyaya yeni kayıt eklemeye olağan sağladık.

C’de dosyaya yeni kayıt ekleyen programın Akış Diyagramı:

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çıklamar için tıklayın.

C’de dosyaya yeni kayıt ekleyen program – C programı:


#include
#include
struct ogryapi
{
char numara[10];
char adi[20];
int notu;
} ogrenci;
main()
{ 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);
}
getch();
}

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

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.

Önizleme:

c-de-veriyi-kayit-yazdirma-veri-dat

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

Proje halindeki dosyayı indir.

Uygulama halindaki dosyayı indir.

C’de Dosyalama İşlemleri

C Programlamada Dosyalama İşlemleri

C programlamada yazma – okuma işlemleri standarttır. Eğer veri olma veya gönerme işlemlerde aygıt belirtilmezse alma veya gönderme işlemi monitör aygıtı tarafından yapılır. Verileri saklamak içinse çeşitli yapılar ve bu yapıları barındaran alan – bellek gereklidir. Kimi zaman bu bellek işlemi bir hardiske kimi zamanda verileri depolamak ve daha düzenli bir şekilde işlemek, düzenlemek ve çalıştırmak amaçlı kurulmuş veritabanı sistemlerine aktarılır.  Bizde bu konumuzda C’de verilerin nasıl dosyalama sistemine aktarıldığını öğreneceğiz.

Verileri saklamak için yapılar kullanılır demiştik. Farklı tipte birden fazla veri içerebilen bir yapı tanımlanır. Birden fazla tipte birbirleriyle ilişkili olan veriler bu yapıyla tanımlanırlar ve ortaya bir dosyalama sistemi oluşturulur.

c-de-dosyalama-islemleri-manset

Struct nedir?

Dosyalama işlemlerinde yapı oluşturmak için kullanılır.  Farklı tipteki birden fazla veri takımını oluşturmaya yarar.  Nasıl ki bir tamsayı oluşturmak için int türünü kullanıyorsak burada da yeni bir yapı oluşturmak için struct kullanacağız. Burada “yapı” kelimesinden kasıt bizim belirleceğimiz veri türlerini bilgisayara tanımlayacağı anlamındadır. Bu tür verilerin tanımlandığında depolamaya hazır komutunu verir. Yani yapı değişken için alt yapıyı oluşturur.Struct bir nevi tablolama veri sistemidir. Aşağıdaki resme bakarak struct yapısını daha iyi bir şekilde anlayabilirsiniz.

Yapi_adi struct yapısı

Alan1 Alan2 Alan3 AlanN
Alan1.veri1 Alan2.veri1 Alan3.veri1 AlanN.veri1
Alan1.veri2 Alan2.veri2 Alan3.veri2 AlanN.veri2
Alan1.veri3 Alan2.veri3 Alan3.veri3 AlanN.veri3
Alan1.veriN Alan2.veriN Alan3.veriN AlanN.veri4

Struct  tanımlama – kullanımı & kuralları

Struct Yapi_adi
{
Alan 1;
Alan 2;
Alan 3;
...
...
Alan n;
} degisken_adi;

Struct Muhtar

{

char tcno[11];

char ad[15];

char soyad[15];

} vatandas;

  • Tanımlamada her alanın adı ve bilgisi belirtilir.
  • Aynı alan adı farklı yapılarda (bağımsız olarak) kullanılabilir.
  • Veri tipini göstermek için struct saklı sözcüğü kullanılır.
  • Tek başına yapı tanımlamak yetmez. Ayrıca değişken tanımlanır.
  • Yapı tanımlamak yer işgalinde bulunmaz. Değişken tanımlandığında yer ayrılır.

    Tanımlanan yapı (struct) alanına bilgi girişi yaptırma

    Üst tarafta görüldüğü gibi tanımladığımız yapıya bir değişken adı belirttik. Şimdi bu belirttiğimiz (vatandas) değişken adını kullanarak tek kişiye ait bilgiyi nasıl bilgi girişi yapılır bunu öğrenelim.

    #include

    #include

    struct Muhtar

    {

    char tcno[11];

    char ad[15];

    char soyad[15];

    char anneadi[15];

    char babaadi[15];

    int yasi[1];

    } vatandas[9999999];

    main()

    {

    printf("Soyad ekleyin: "); scanf("%s", &vatandas[1].soyad);

    printf("Yas ekleyin: "); scanf("%d", &vatandas[1].yasi[0]);

    printf("Soyad: %s\nYas: %d",vatandas[1].soyad,vatandas[1].yasi[0]);

    printf("\n*Not: Bu deger Muhtar yapisi (struct) icerisinden gosterilmistir.");

    getch();

    }

    Veri Dosyalama − Saklama işlemlerindeki komutlar

    Sizeof nedir?

     Veri tipinin karakter uzunluğunu byte cinsinden belirtmek için kullanılır.

    Sizeof Kullanımı

#include

int main(){

int agirliginibul_normal;

int agirliginibul_dizi[5];

double agirliginibul_hassas;

printf("%d byte\n",sizeof(agirliginibul_normal));

printf("%d byte\n",sizeof(agirliginibul_dizi));

printf("%d byte\n\n",sizeof(agirliginibul_hassas));

return 0;

}

Veri girişi yaptıran programın önizlemesi:

Veri Dosyalama −; Saklama işlemlerindeki komutlar

  • Sizeof nedir?

    Veri tipinin karakter uzunluğunu byte cinsinden belirtmek için kullanılır.

    Sizeof Kullanımı:

    #include

    int main() {
    agirliginibul_normal;

    agirliginibul_dizi[5];

    double agirliginibul_hassas;

    printf("%d byte\n",sizeof(agirliginibul_normal));
    printf("%d byte\n",sizeof(agirliginibul_dizi));
    printf("%d byte\n\n",sizeof(agirliginibul_hassas));
    return 0;

    }

    Önizleme:

     sizeof-kullanimi

    Typedef nedir?

    Çift tanımlama anlamına gelir. Belirttiğiniz kodu veya bir tipe yeni bir isimle kullanmanızı sağlar. Örneğin programlama dilinde tamsayı tipinde bir değişken tanımlarken int yazmak yerine tamsayı  ile aynı tanımlamaya yapabiliriz.

    Typedef kullanımı - örnek1:

    #include
    int main()
    {
    typedef int tamsayi;
    tamsayi a=5,b=4,c=3;
    printf("a: %d\nb: %d\nc:%d",a,b,c);
    return 0;
    }

    Önizleme − örnek1:

    typdef-kullanimi

    Typedef   örnek2:


    #include
    struct complexyapi
    {
    float re,im;
    // Karmaşık bir yapı olduğunu varsayalım...
    };
    int main(){
    typedef struct complexyapi complex;
    // complexyapi −> struct yapı adı
    // complex −> diğer bir ismi
    complex z1,z2;
    // Değişkeni complex yapıya göre oluşturuluyoruz..
    /*
    Aynı zamanda;
    -------------------------------------------------
    typede struct {float re,im} complex;
    -------------------------------------------------
    denebilirdi...
    */
    return 0;
    }

    Feof nedir?

    Dosyanın sonunda olup olunmadığı kontrol etmeye yarar. Eğer feof 0 (sıfır) değerini döndürüyorsa kontrol ettirilen dosyanın sonunda değildir anlamı taşır.

    Ferror nedir?

    Dosyada herhangi bir hata olup/olmadığını kontrol eder. Tek başına kullanılmaz. While veya For döngüsüyle kullanılır. Eğer ferror 0 (sıfır) değerini döndürüyorsa dosyada hata yok demektir.

    FILE nedir?

    Dosya oluşturmaya yarar. Dosya değişkeni tanımlanır, dosya atanır ve açılır. Bu işlemler 2 adımda gerçekleşir.

    Kullanımı:

    FILE*dosya;
    dosya=fopen(dosyaadi,fopen parametresi);

    Örnek kullanım -> .dat uzantısı işletim sistemi içindir


    FILE *dosya;
    main()
    {
    dosya=fopen("c:\bilgius.dat","a+")
    ...
    /*
    yada FILE*dosya=fopen("c:\bilgius.dat","a+")
    şeklinde kullanılabilir.
    */
    }

    Alternatif örnek kullanım


    FILE*fopen("c\bilgius.dat","a+")

    Fopen nedir?

    Dosya açmak için kullanılır. Dosyanın açılma modu ve adı belirtiler.

     Fopen Parametreleri:

    • r : Okumak için (Read)
    • w: Yazmak için (Write)
    • a:  Ekleme yapmak için (Add)
    • r+: Var olan bir kütüğü okumak ve yazmak için (Read plus)
    • w+: Okumak ve yazmak için yeni kütük oluşturulur. Dosya var ise içeriği silinir. (Write Plus)
    • a+ Kayıt eklemek için okuma yazma yapılabilir. Dosya yok ise oluşturulur.

    NOT: w ve w+ fopen parametreleri içeriği sildiği için tavsiye edilmez. En çok tercih edilen r+ ve a+ parametreleridir.

    Fclose nedir?

    Dosya kapatmak için kullanılır. Eğer dosyayı kapatmazsak ve tampon dolmadıysa son girilenv eriler girilmemiş olur. bu nedenle dosyayı kapatmak gerekri. Aksi takdirde dosya üzerinde işlem yapmaya kalktığımızda hata meydana gelir.

    Kullanımı:

    Yalnızca belirli bir dosyayı kapatmak istiyorsak fclose(dosya_adi) komutu kullanılırken;

    Açık olan tüm dosyaları kapatmak istiyorsak fclose() kullanılır.

    Fflush nedir?

    Dosyaya yazma işlemi tampon bellekten sonra gerçekleşir. Fflush komutuda tampon bellek dolmadan dosyaya yazmak için kullanılır. 

    Kullanımı:

    fflush(dosya) -> Belirtilen dosya yoluna tamponu yazar.

    fflushall()           ->  Ayrılmış tüm tamponlardaki bilgileri ilgili dosyalara yazar.

    Fputc nedir?

    Bir karakteri belirtilen yere işaretler (koyar). Karakteri kayıt işaretçisinin olduğu yere koyar. İşlemden sonra kayıt işaretçisi bir adım ilerler. Bir değişkene aktarma yaparak kullanılır.

    Kullanımı:

    fputc(karaktersaklanandegisken,dosya) = putc(karaktersaklanandegisken,dosya)

    Fputs nedir?

    String koy anlamına gelir. Kayıt işaretcisi neredeyse oraya koyar.  Kayıt işaretçisi yazma işleminden sonra string kadar ilerler.

    Kullanımı:

    Fputs(string, dosya)

    Fwrite nedir?

    Dosyaya yazdırmaya sağlar. Rastgele erişimlerde kullanılır. belirtilen sayıda sabit uzunluktaki veriyi kütüğe yazar.

    fwrite(&ogr,sizeof(ogr),1,dosya)
    fwrite(&ogr,sizeof(ogr),1,dosya)

    Fread nedir?

    fread-okuma-ozelligi
    fread(veri_ptr,uzunluk,kac_tane,dosya)

    Belirli sayıda sabit uzunluktaki veriyi kütükten okumaya sağlayan komuttur. Okuma işleminden sonra kayıt işaretçisi okunan bilgi kadar ilerler.

    Kullanım:

    fread(&ogr,sizeof(ogr),1,dosya)

    Fgetc nedir?

    Bir karakterlik bilgi okumak amacıyla kullanılır. Bir değişkene aktarma yaparak kullanılır.

    Kullanım:

    fgetc(dosya) = getc(dosya)

    Fgets nedir?

    String türündeki karakteri okur.

    Kullanım:

    fgets(string,uzunluk,dosya)

    Fscanf nedir?

    Değişkenden değer okur.

    Kullanım:

    fscanf(dosya,"format",degisken)

    Fteel nedir?

    Dosya içerisinde nerde olduğunuzu öğrenmeniz için kullanılır. Kayıt işaretçesini byte cinsinden değer üreterek bize söyler. Kayıt işaretçisinin başlangıç değeri 0'dır. Bir değişkene aktarılarak kullanılır.

    Kullanım:

    ftell(dosya);

    Fseek nedir?

    Kayıt işaretçesini taşır, yerini belirtir. Kullanımı fseek(dosya,say,nereye) dır. Fseek fonksiyonun içerisinde dosya yazan kısma dosya adı, say için "-" değer geriye "+" ileriye döndürür. "Nereye" kısmıys dosya işaretçisinin dosyanın hangi bölüme gitmesini, ilerleme yada geri yapılacağı belirtilir.

    FSEEK_SET -> sayfa başı

    FSEEK_END -> sayfa sonu

    FSEEK_CUR -> işaretçenin olduğu yerdir.

    Dosya içerisinde 0'dan küçük bir değer kullanılamaz. Bunun nedeni 0'ın başlangıç noktası olmasıdır.

    Kullanım örnekleri:

    Dosya başına gitmek için örnek kullanım -> fseek(dosya,0,SEEK_SET)

    İşaretçenin bulunduğu yere gitmek için örnek kullanım -> fseek(dosya,0,SEEK_CUR)Dosya sonuna gitmek için -> fseek(dosya,0,SEEK_END)

    Bir sonraki kaydın başına git -> fseek(dosya,sizeof(vatandas_deger),SEEK_CUR)

    Bir önceki kaydın başına git -> fseek(dosya,-sizeof(vatandas_deger),SEEK_CUR)

    FileLength(dosya) nedir?

    Dosya uzunluğunu byte cinsinden belirten komuttur. Bu komutu kullanmamız için kütüphane dosyasını yüklememiz gerekir.

    Kullanım:

    filelength(dosya)/sizeof(vatandas_deger) -> Tüm dosyanın boyutu / bir kayıdın boyutu

    Remove nedir?

    Remove kodu dosyayı silmeye veya silip yeni bir ad vermeye yarar. Dosyayı kapatmak için programın kapatılmış olması gerekir.

    Kullanım:

    remove("dosya_adi") -> dosyayı siler

    remove(eskiad,yeniadi) -> dosyayı siler ve yeni ad verir.

    Dosyalama İşlemleri - Kütükler

    TEXT KÜTÜKLER (Sıralı erişim, ASCII, Metin)

    • Karakterlerden oluşur.
    • Her satırın sonunda satır sonunu gösterir. Özel karakterler ("\n") vardır. * \n = Alt satır kodu.
    • Kütüğün sonunda kütük sonunu gösterir.  Özel karakter "eof" vardır. * Eof = Dosya sonu  anlamına gelen karakterdir.
    • Sırala erişimde(Text dosyalarda) veriler saklanırken veri yapısı söz konusu değildir. Karakter karakter depolanırlar.
    • Verileri birbirinden ayırmak için özel karakterler kullanılır.

    sirali-erisim-nedir

    RASTGELE ERİŞİMLİ KÜTÜKLER (Doğrudan erişim, Binary Dosyalar)

    • İkili dosya olarak adlandırılır. Bellekte nasıl yazılıyorsa öyle yazılır.
    • Veriler sabit uzunluktaki bloklar (kayıt) şeklinde saklanır.
    • Veriler karakter dizisi biçiminde saklanırlar.
    • Değişkenlerin içeriği bellekte sıralanış biçimiyle kütüğe yazıldığı için okuma / yazma işlemleri text kütükle göre daha hızlıdır.
    • Gerçel sayılarda hassasiyet kaybı yoktur.
    • İstenilen kayda doğrudan erişmek mümkündür.
    • Karakter karakter yazılmıyorsa veri kaybı daha az gerçekleşer.

    sirali-erisim-tablosu

    Rastgele erişimde belirli bir komuta gitmek için byte komutu kullanılabilir. Örneğin 80 byte'a gitmek için satır sayısının bir eksiği ile toplam byte sayısını çarpmak gerekir. Yani. (3-1)*40 = 80 byte programlama dili şeklinde gösterildiğinde (n-1)*sizeof(kayit) şeklinde  yansıtılabilir.

    DOSYALAMA İŞLEMLERİ ÖRNEKLERİ

    1. C'de dosyaya yeni kayıt eklemek
    2. C'de dosyadan kayıtları listelemek
    3. C'de dosyadan arama yapmak
    4. C'de öğrenci otomasyon programı yapımı

C’de Makro Kullanımı (#define) (Videolu)

Makro nedir?

Makro bir takım işlemlerin tek bir adımda gerçekleştirilmesidir. C programlamada makro kullanımı #define komutu ile gerçekleşir.

Makro kullanım amaçları nelerdir?

Makro

  1. Sabit tanımlamak
  2. Aritmetik işlem içeren (if, for, while vb. döngüler içermeyen) fonksiyonları geliştirmek
  3. Bir komutu basitleştirebilmek

kullanılırlar.

Makro Tanımlama

#define …..;

Define’nin Türkçe anlamı tanımlamak anlamına gelir. Define program içerisine biz kendi değerimizi tanımlayabiliriz.  C bizim için bilimsel değerleri tanımlamaz.  Örneğin biz Pi sayısını sabit bir değere atayıcaz bunun için pi kullanabiliriz. Daha sonra ise program içerisinde pi yazıp bunu kullanabiliriz.

Bunun için bir C örneği yapalım.

C kodları;

// Define özelliği -> Kısa olarak fonksiyon sağlama. Programlamada profesyonelleşmek için bol bol örnek yapılmalı.

// Son 2 hafta dosyalama işlemlerini işleyeceğiz.

#include

#include<conio.h>

#define pi 3.14

#define alan(r) pi*r*r

#define yaz(x) printf(“sonuc=%f\n”,x)

main()

{

 int R; float a;

 printf(“yaricapi gir: “); scanf(“%d”,&R);

 a=alan(R);

 yaz(a);

 getch();

}

Programının önizlemesi;

c programlama   define ozelligi  C Programlama Dilinin Genel Yapısı

Serbest Düşme komutunu (h = 1/2gt^2) Makro ile kullanım;


// Serbest düşme hareketini hesaplayan C programı
#include
#include
// Yer çekimi = 9.81
#define g 9.81
// Serbest Düşme Formülü = 1/2gt2
#define yol(x) (0.5*g*x*x)
#define yaz(x) printf("Sonuc = %3.3f\n",x)
main()
{
float h,t;
printf("Zamani gir: "); scanf("%f",&t);
h=yol(t);
yaz(h);
getch();
}

 c-programlamad-serbest-dusme-ornegi

Serbest düşme hareketini hesaplayan programı 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.

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