Karakter dizi fonksiyonları

Slides:



Advertisements
Benzer bir sunumlar
Dizi Kullanan Örnekler
Advertisements

STRİNG FONKSİYONLARI.
Diziler.
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Göstericiler (Pointers)
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
C Programlama Diline Giriş
Tanım Birbirleriyle ilişkili ve bitişik iki ya da daha fazla bellek hücresinden oluşan yapı Örnek dizi tanımı: int tamsayiDizi[10]; tamsayiDizi[0] /*ilk.
Değişken Bildirimleri
Diziler.
Elektrik-Elektronik Mühendisliği Bölümü DİZİLER C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
String Kütüphanesindeki Arama Fonksiyonları
Diziler(Arrays).
Bölüm 10 Yapılar ve Birleşimler
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
Fonksiyonlar.
Bilgisayar Programlama
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
C ile Programlamaya Giriş
Temel Veri Türleri ve Operatörler
FONKSİYONLAR.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
Diziler (Arrays).
JAVA’DA DİZİLER Dr.Galip AYDIN.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
KALITIM Yılmaz Kılıçaslan.
Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler.
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri Dizgi Çıktı İşlemleri Dizgi Fonksiyonları Karakter Fonksiyonları Gösterge Dizgileri.
1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
C Programlamada, benzer tipte tanımlaman değişkenleri kontrol etmede bize en çok yardım eden dostlarımız dizilerdir. Örneğin: 100 Öğrencinin bilgilerini.
BİLGİSAYAR programlama II
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Fonksiyonlar ve Diziler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
C’de Fonsiyonlar Aslı Ergün.
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
C Programlama Diline Giriş
Bölüm 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Bölüm 10: Kayıtlar – Records (structs)
YAPISAL PROGRAMLAMA Hafta-7
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Karakter dizi fonksiyonları Diziler devam.. Karakter dizi fonksiyonları 24.02.2019

String (karakter dizi) fonksiyonları string.h başlık dosyasını kullanılarak karakter dizileri işlemek için belirli fonksiyonlar kullanabilirsiniz E.g. #include <string.h> strcpy yararlı bir fonksiyondur 24.02.2019

strcpy char sDestinationString[ 10 ] ; Sonlandırıcı boşluk karakterini dahil ederek bir karakter diziyi bir başkasına kopyalamanıza izin verir. Ör: char sDestinationString[ 10 ] ; strcpy( sDestinationString, “Class 1”); “Class1”i, boşluk dahil, İLK parametreye yani sDestinationString’e kopyalar. Hiçbir sınır kontrolü gerçekleştirilmez Hedef karakter dizinin yeterince büyük olduğundan emin olmak sizin sorumluluğunuzdadır.( Boşluk karakteri dahil!) 24.02.2019

Diziler ve Fonksiyonlar Sıradan bir değişkenle olduğu gibi, bir diziyi bir fonksiyona geçirebilirsiniz. 24.02.2019

Dizileri fonksiyonlara göndermek Bir diziyi bir fonksiyona göndermek için, fonksiyona dizinin adını parantezler olmadan geçirin. Parametreleri listelediğiniz yer olan fonksiyon tanımlamasında, dizinin tipini, dizi adını (isteğe bağlı) ve parantezleri belirlersiniz; bununla birlikte, dizinin boyutlarını BELİRLEMEYEBİLİRSİNİZ (eğer belirlerseniz, derleyici emin olmak için bunun > 0 olup olmadığını kontrol eder ve eğer değilse bir hata bildirir) Fonksiyon prototipinde, bir dizinin beklendiğini belirtmelisiniz 24.02.2019

Dizileri fonksiyonlara göndermek örnek Aşağıdaki gibi bir dizi verilmiştir: int iStudentGrades[10]; Fonksiyon tanımlaması şöyledir: void ArrayPrint(int iArrayToPrint[ ],int iElementsCount ) { int i ; for (i = 0; i <= iElementsCount - 1; i++ ) printf( “%d”, iArrayToPrint[ i ]; } /* ArrayPrint fonksiyonunun sonu */ 24.02.2019

Dizileri gönderme örneği, devam Fonksiyon prototipi şunun gibidir: void ArrayPrint( int [ ], int ); NOT: prototipteki parantezler içinde bir dizi belirtmelisiniz! Aksi taktirde bir derleme-zamanı hatası alırsınız. Dizideki elemanların sayısını geçirdiğimize de dikkat edin. Aksi taktirde fonksiyon dizi içindeki elemanların sayısını bilmeyecektir. Dizinin dışına yazmayı engellemeyi garanti edemez! Şimdilik, elemanların sayısını kontrol etmek için daha kolay bir yol yok. 24.02.2019

Dizileri gönderme örneği, devam Fonksiyonu çağırdığınız zaman, yalnızca dizinin adını geçirirsiniz. Örneğin, aşağıdaki gibi bir kod verilir: int main() { #define STUDENTS_COUNT 10 int iStudentGrades[STUDENTS_COUNT ]; /* call the function */ /* fonksiyonu çağır */ ArrayPrint( iStudentGrades, STUDENTS_COUNT ); return 0; } 24.02.2019

Bir fonksiyondaki dizileri değiştirmek Varsayılan olarak, C’de bir fonksiyona geçirilen bir dizinin içeriğini değiştirirsen bu değişiklikler fonksiyonu çağıran blog’a yansıtılacaktır. Fonksiyona geçirilen bir dizinin elemanlarına yaptığınız herhangi bir değişiklik yukarıya doğru yayılacaktır. Örneğin eğer öğrenci notları dizisini fonksiyon içinde değiştirirsek, dizi ana blok içinde de değişecektir! Yalnızca diziler üzerindeki çalışmalar geçirilir (bağımsız elemanlar geçirilmez) 24.02.2019

UYARI Planlanmadığı sürece bir dizi içindeki elemanları değiştirmemeye özen gösterin Giriş parametrelerini değiştirmemekle ilgili genel prensibi hatırlayın Eğer bir dizinin elemanlarını yalnızca bir fonksiyon içinde ustalıkla yönetmek istiyorsanız, bunu yapmadan önce dizinin bir kopyasını alın (boyutlar sabitse) ve kopyayı kullanın. Şimdilik, bir diziyi kopyalamak için fonksiyon içinde benzer bir dizi bildirmek ve dizinin elemanlarını giriş parametreleri ile doldurmak için bir for döngüsü kullanmak zorundasınız Bunu yalnızca dizinin uzunluğunu biliyorsanız yapın 24.02.2019

Dizi kopyalamaya örnek : #define SIZE 10 void ArrayChange( int iInputArray[ ] ) { int i, iNewArray[ SIZE ] ; for (i = 0; i <= SIZE - 1; i++ ) iNewArray[ i ] = iInputArray[ i ]; }/* i for’unun sonu */ /* şimdi iNewArray’in elemanlarını değiştir */ }/* ArrayChange fonksiyonunun sonu */ 24.02.2019

Bir Önceki Örneği Değiştirilebilir Özelliklerle Kullanmak Madem ki diziler bir fonksiyon içinde değiştirilebiliyor ve değişiklikler dışarıya yansıtılıyor, bir diziyi bir başkasına kopyalayan bir fonksiyon oluşturabiliriz Bu bir fonksiyona iki dizinin geçirilmesi ve dışarda kullanmak için birinin ötekine kopyalanmasıdır. Bu temel olarak strcpy()’nin yaptığı şeydir. 24.02.2019

Bir diziyi kopyalamak örnek 2: void MakeCopy( int iDestinationArray[], int iSourceArray[], int iElementsCount ) { int i ; for (i = 0; i <= iElementsCount - 1; i++ ) iDestinationArray[ i ] = iSourceArray[ i ]; }/* i for’unun sonu */ } /* MakeCopy fonksiyonunun sonu */ Ana blok (main ) içinde çağrılırsa, ikinci diziyi fonksiyona geçirilen ilk diziye kopyalamış olursunuz! 24.02.2019

Koruma C bir diziyi değiştirilemez yapabileceğiniz bir mekanizma sağlar. Bildirimden önce fonksiyonunuzun tanımlaması ve prototipinde “const” (sabit) anahtar kelimesini kullanın. Örneğin: Prototip: void ArrayPrint( const int [ ], int ); Tanımlama void ArrayPrint( const int iArrayToPrint[ ], int iElementsCount ) { … } 24.02.2019

CONST’un pek çok şekli #define! Değişikliklerinizin yukarıya doğru yayılmasını önlemek için const (sabit) kullanımına ek olarak, #define yerine bunu kullanabilirsiniz! Örneğin, şunun yerine #define SIZE 10 Bunu kullanabilirsiniz const int SIZE = 10 ; 24.02.2019

#define’a karşı const’un faydaları #define’lar gibi const (sabit) değişkenleri de değiştirilemez Bununla birlikte, const (sabit) değişkenler derleyiciler tarafından bilinir Bunları nöbetçiler içine koyabilriz, imlecinizi değerler için üzerlerinde tutabilirsiniz, vb. Hata bulmak için çok iyi 24.02.2019

#define’a karşı const’un faydaları devam #define’lar derleme zamanına kadar derleyiciler tarafından bilinmezler çünkü: önişlemci kodunuz boyunca derleyicinin ona bakma şansı bile olmadan #define’lar için basit bir yer değiştirme yapar Bu önişlemci isimler üzerinde bir “bul ve değiştir” yapıyor ve onu bulduğu yerde değer ile değiştiriyor demektir. Hataları ayıklarken farkı görmek için const (sabit) ve #define’lara bakmaya çalışın. 24.02.2019

İsimlendirme ipucu #define yerine const kullanırken, #define kullanırken yaptığınız gibi isimdeki bütün harfleri hala büyük yazmanız gerekiyor. (fonksiyon parametreleri içindeki hariç) 24.02.2019

Structs (YapIlar)

Structures (Yapılar) Yapılar birbiriyle ilişkili değişkenlerin aynı isim altında toplanmasıdır. Dizilerden farklı olarak, yapılar pek çok farklı tipte değişkeni içerebilir. 24.02.2019

structure definitions (yapı tanımlamaları) Struct anahtar kelimesi: derleyiciye bir yapı tanımladığınızı söyler struct student { char firstName[10]; char lastName[10]; int exam1; int exam2; int final; }; Yapı etiketi: yapı tanımlamasını isimlendirmek için kullanılır Yapının üyeleri Noktalı virgülü unutma 24.02.2019

yapı tanımı (devam) Yapı tanımı yeni bir tip yapar. Değişkenleri depolamak için hafızada boşluk ayırmaz. Yapılar karmaşık (yada türetilmiş) veri tipine bir başka örnektir. 24.02.2019

Bir dizinin iki üyesi aynı ismi paylaşamaz. Üyeler Bir yapı’nın üyeleri basit veri tipleri (tamsayı, karakter, vb.) veya karmaşık veri tipleri (diziler, diğer yapılar) olabilir. Kendisinin bir başka örneğini içeremez (bunun için işaretçi kullanmanız gerekir) Bir dizinin iki üyesi aynı ismi paylaşamaz. 24.02.2019

Yapı değişkenlerini bildirmek Yapı bir kez bildirildiğinde, kendi yeni tipimizde değişkenler tanımlayabiliriz. struct student {currentStudent, class[50];} Bir öğrenci kaydını tutan değişken Struct anahtar kelimesi Struct etiketi 50 öğrencinin kaydını tutacak dizi 24.02.2019

Alternatif tanımlama / bildirim struct student { char firstName[10]; char lastName[10]; int exam1; int exam2; int final; } currentStudent, class[50]; struct student { char firstName[10]; char lastName[10]; int exam1; int exam2; int final; }; struct student currentStudent, class[50]; Bunlar aynı şeyi yapar 24.02.2019

Yapıları = = veya != kullanarak karşılaştıramazsınız. Yapı karşılaştırması Yapıları = = veya != kullanarak karşılaştıramazsınız. Böyle yapmaya çalışmak yazım hatasına neden olur Bunun yerine yapıları karşılaştıracak kod yazmalısınız. 24.02.2019

Yapıları başlangıç değerine getirmek Yapıları başlangıç durumuna getiren yazım dizilerin yazımıyla benzerdir. struct student currentStudent = {“Bart”, “Simpson”,55, 64}; currentStudent değişkenini bildirir ve firstName, lastName, exam1, exam2’ yu verilen değerlerle başlangıç durumuna getirir. final ise hiçbir değer belirtilmediği için 0 olarak başlangıç durumuna getirilmiştir. 24.02.2019

Bir yapının üyelerine erişmek Bir yapının üyelerine erişmek için yapı üye operatörü (nokta operatörü) kullanırız (işaretçileri kullanan başka bir yöntem vardır) currentStudent.exam1, currentStudent değişkeni içinde, üye exam1’de depolanan değeri işaret eder Bir yapının değerlerine erişmek için değişkenleri kullanabileceğiniz herhangi bir yerde bu gösterimi kullanabilirsiniz. 24.02.2019

Yapıları fonksiyonlara göndermek Tüm yapıları bir fonksiyona gönderebilirsiniz. Dizilerden farklı olarak, bir yapı bir fonksiyona değer ile çağrım kullanılarak gönderilir (başka bir deyişle, eğer yapının değerini bir fonksiyon içinde değiştirirseniz, bu değişiklik çağıran fonksiyona yansıtılmaz) 24.02.2019

typedef typedef anahtar kelimesi daha önce tanımlanmış veri tipleri için eşanlamlı kelimeler (veya takma isim) oluşturan bir mekanizma sağlar. Deyim: typedef struct student Student; struct student tipi için eşanlamlısı olarak yeni bir tip “Student” tanımlar. typedef eşanlamlısı bir kez tanımlandı mı, değişkenlerinizi şu şekilde bildirebilirsiniz: Student class[50]; 24.02.2019

typedef (devam) typedef eşanlamlısının ilk harfini büyütmek iyi bir pratiktir. 24.02.2019

typedef (devam) typedef struct { char firstName[10]; typedef deyimini struct tanımlaması ile birleştirebilirsiniz. Örneğin: typedef struct { char firstName[10]; char lastName[10]; int exam1; int exam2; int final; } Student; Not: ayrı bir yapı etiketine ihtiyaç duymayı engelliyoruz struct tanımlanıp, yeni tanımlanan tipin diğer adı Student yapılabilir. 24.02.2019

24.02.2019 #include <stdio.h> struct student { char firstName[10]; char lastName[10]; int exam1; int exam2; int final; }; int main () { struct student currentStudent; float average; printf("Enter your first name: "); scanf ("%s", currentStudent.firstName); printf("Enter your last name: "); scanf ("%s", currentStudent.lastName); printf("First exam score: "); scanf ("%d", &currentStudent.exam1); printf("Second exam score: "); scanf ("%d", &currentStudent.exam2); printf("Final exam score: "); scanf ("%d", &currentStudent.final); /*final has double the weight of either exam*/ average = (float)(currentStudent.exam1 + currentStudent.exam2 + currentStudent.final * 2) / 4.0; printf ("Thanks %s %s, you have received a %.2f in this class.\n", currentStudent.firstName, currentStudent.lastName, average); return 0; } 24.02.2019