220 likes | 365 Views
Dizi Kullanan Örnekler. Karakter Dizisi ‘merhaba’ gibi bir string aslında, C’de bağımsız karakterlerden oluşmuş static bir dizidir. Bir string kullanılarak ilk değerler atanabilir. Örneğin; char string1[] = "first"; n ull karakteri olan ‘’ string’i sonlandırır.
E N D
Dizi Kullanan Örnekler • Karakter Dizisi • ‘merhaba’ gibi bir string aslında, C’de bağımsız karakterlerden oluşmuş static bir dizidir. • Bir string kullanılarak ilk değerler atanabilir. Örneğin; char string1[] = "first"; • null karakteri olan ‘\0’ string’i sonlandırır. • String1 aslında 6 elemanlıdır. Ve aşağıdakine denktir. char string1[] = { 'f', 'i', 'r', 's', 't', '\0' }; • Her bir karaktere erişlebilir. string1[3]’ ‘s’ karakteridir. • Bir dizinin ismi bu dizinin başlangıç adresi olup böylece scanf için & kullanılmaya ihtiyaç duyulmaz. scanf( "%s", string2 ); • İlk boşluk karakteri gelen dek klavyeden okumaya devam eder. • Dizinin büyüklüğüne dikkat etmez bu sebepten dizinin sonunda öteye de yazabilir.
#include <stdio.h> #include <conio.h> int main() { char string1[20],string2[]="string literal"; inti; printf("Bir string giriniz:"); scanf("%s",string1); printf("string1: %s\nstring2: %s\n" "karakterlerarasindaboslukla string1:\n", string1,string2); for(inti=0;string1[i]!='\0';i++) printf("%c ",string1[i]); printf("\n"); getch(); return 0; }
#include <conio.h> #include <stdio.h> void staticArrayInit( void ); void automaticArrayInit( void ); int main() { printf( "Her fonksiyon ilk cagri:\n" ); staticArrayInit(); automaticArrayInit(); printf( "\n\nHerfonksiyonikincicagri:\n" ); staticArrayInit(); automaticArrayInit(); getch(); return 0; } void staticArrayInit( void ) {static int a[ 3 ]; inti; printf( "\nstaticArrayInit'egirerlendegerler:\n" ); for ( i = 0; i <= 2; i++ ) printf( "a[%d] = %d ", i, a[ i ] ); printf( "\nstaticArrayInit'dencikarkendegerler:\n" ); for ( i = 0; i <= 2; i++ ) printf( "a[%d] = %d ", i, a[ i ] += 5 ); }
void automaticArrayInit( void ) { int a[ 3 ] = { 1, 2, 3 }, i; printf( "\n\nautomaticArrayInit'egirerlendegerler :\n" ); for ( i = 0; i <= 2; i++ ) printf("a[ %d ] = %d ", i, a[ i ] ); printf( "\nautomaticArrayInit'dencikarkendegerler:\n" ); for ( i = 0; i <= 2; i++ ) printf( "a[ %d ] = %d ", i, a[ i ] += 5 ); }
Dizileri Fonksiyonlara Geçirmek • Dizileri geçirmek • İsmini parantez kullanmadan belirtmeliyiz. intmyArray[ 24 ]; myFunction( myArray, 24 ); • Dizi boyutu da genellikle geçirilir. • Referansa göre çağırma yöntemiyle geçirilir. • İsmi, dizinin ilk elemanının adresidir. • Fonksiyon dizinin nerede tutulduğunu kesin olarak bilir. • Elemanları orijinal hafıza konumunda değiştirir. • Dizi elemanlarını geçirmek • Değere göre çağırır. • İndislenmiş adı ile fonksiyona geçirilir.(myArray[ 3 ])
Dizileri Fonksiyonlara Geçirmek • Fonksiyon prototipinde void modifyArray( int b[], intarraySize); • b parametresi tamsayılardan oluşan bir dizi • arraySize ise dizi elemanlarının sayısı
#include <stdio.h> #include <conio.h> int main() { char dizi[5]; printf("dizi=%x\n&dizi[0]=%x\n" "&dizi=%x\n", dizi,&dizi[0],&dizi); getch(); return 0; }
#include <stdio.h> #include <conio.h> #define BOYUT 5 void diziyiAyarla(int [], int); void elemaniAyarla(int); int main() { int a[BOYUT]={0,1,2,3,4},i; printf("Butundizininreferansa gore cagrilarakgecmesininin" " etkileri: \nOrjinaldizinindegerleri: \n"); for(i=0;i<BOYUT;i++) printf("%3d",a[i]); printf("\n"); diziyiAyarla(a,BOYUT); printf("AyarlananDizi: \n"); for(i=0;i<BOYUT;i++) printf("%3d",a[i]); printf("\nDizielemaninindegere gore cagrilarakgecmesininin" " etkileri: \n\na[3] degeri:%d\n",a[3]); elemaniAyarla(a[3]); printf("a[3] degeri:%d\n",a[3]); getch(); return 0; }
void diziyiAyarla(int a[],intboyut) { inti; for(i=0;i<boyut;i++) a[i]*=2; } void elemaniAyarla(int a) { printf("elemaniayarladakideger: %d\n",a*=2); }
#include <stdio.h> #include <conio.h> #define BOYUT 3 void diziyiAyarla(constint [], int); int main() { int a[BOYUT]={10,20,30},i; diziyiAyarla(a,BOYUT); for(i=0;i<BOYUT;i++) printf("%d ",a[i]); getch(); return 0; } void diziyiAyarla(constint a[],intboyut) { inti; for(i=0;i<boyut;i++) a[i]*=2; }
Dizileri Sıralamak • Veri sıralamak • Önemli bilgisayar uygulamalarından biridir. • Hemen hemen tüm organizasyonlar bazı verileri sıralamak zorundadır. • Seçmeli sıralama • Listedeki en küçük değerli öğeyi bul. • İlk konumdaki öğeyle bulunan en küçük değerli öğenin yerini değiştir. • Yukarıdaki adımları listenin ilk elemanından sonrası için (ikinci elemandan başlayarak) yinele.
void secmeliSiralama(intdizi[],intboyut) { intenkucuk, yedek; for (inti = 0; i < boyut-1; i++) { enkucuk = i; for (int j = i + 1; j < boyut; j++) if (dizi[j] < dizi[enkucuk]) enkucuk = j; yedek = dizi[i]; dizi[i] = dizi[enkucuk]; dizi[enkucuk] = yedek; } } #include <stdio.h> #include <conio.h> #define BOYUT 10 void secmeliSiralama(int [], int); int main() { int a[BOYUT]={2,6,4,8,10,12,89,68,45,37},i; secmeliSiralama(a,BOYUT); for(i=0;i<BOYUT;i++) printf("%d ",a[i]); getch(); return 0; }
Dizilerde Arama Yapmak • Bir dizide belirli bir arama değerine eşit bir değer olup olmadığının kararı • Lineer arama • Basit • Dizinin her elemanını arama değeriyle karşılaştırır. • Küçük ya da sıralanmamış dizilerde iyi çalışır.
#include <stdio.h> #include <conio.h> #define BOYUT 100 intlineerArama(constint[],int,int); int main() { int a[BOYUT],i,aramaD,eleman; for(i=0;i<BOYUT;i++) a[i]=2*i; printf("Tamsayiaramadeger:"); scanf("%d",&aramaD); eleman=lineerArama(a,aramaD,BOYUT); if(eleman!=-1) printf("Bu deger, eleman %d' de bulundu\n",eleman); else printf("Bu degerbulunamadi\n"); getch(); return 0; } intlineerArama(constintdizi[],intkey,intboyut) { inti; for(i=0;i<BOYUT;i++) if(dizi[i]==key) return i; return -1; }
Çok Boyutlu Diziler • Çok boyutlu diziler • Satırlar ve sütunlar biçiminde düzenlenmiş tablolar. • Matrisler gibi: Satır tanımla ardından sütun. • Bildirim • int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; • Değerler parantez içinde satırlara göre gruplandırılmıştır. • Eğer bir satır değeri içinde yeterince atama değeri yoksa, satırda diğer elemanlara 0 atanır. intb[ 2 ][ 2 ] = { { 1,}, { 3, 4 } };
#include <stdio.h> #include <conio.h> void printArray( constint [][ 3 ] ); int main() { int array1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }, array2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 }, array3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } }; printf( "Satirsatir array1' in elemanlari:\n" ); printArray( array1 ); printf( "Satirsatir array2' in elemanlari:\n" ); printArray( array2 ); printf( "Satirsatir array3' in elemanlari:\n" ); printArray( array3 ); getch(); return 0; } void printArray( constint a[][ 3 ] ) { inti, j; for ( i = 0; i <= 1; i++ ) { for ( j = 0; j <= 2; j++ ) printf( "%d ", a[ i ][ j ] ); printf( "\n" ); } }
#include <stdio.h> #include <conio.h> #define STUDENTS 3 #define EXAMS 4 int minimum( constint [][ EXAMS ], int, int ); int maximum( constint [][ EXAMS ], int, int ); double average( constint [], int ); void printArray( constint [][ EXAMS ], int, int ); int main() { int student; constintstudentGrades[ STUDENTS ][ EXAMS ] = { { 77, 68, 86, 73 }, { 96, 87, 89, 78 }, { 70, 90, 86, 81 } }; printf( "Dizi:\n" ); printArray( studentGrades, STUDENTS, EXAMS ); printf( "\n\nEndusuk not: %d\nEnyuksek not: %d\n", minimum( studentGrades, STUDENTS, EXAMS ), maximum( studentGrades, STUDENTS, EXAMS ) );
for ( student = 0; student <= STUDENTS - 1; student++ ) printf( "Ogrenci %d icinortalama: %.2f\n", student, average( studentGrades[ student ], EXAMS ) ); getch(); return 0; } int minimum( constint grades[][ EXAMS ], int pupils, int tests ) { inti, j, lowGrade = 100; for ( i = 0; i <= pupils - 1; i++ ) for ( j = 0; j <= tests - 1; j++ ) if ( grades[ i ][ j ] < lowGrade ) lowGrade = grades[ i ][ j ]; return lowGrade; }
int maximum( constint grades[][ EXAMS ], int pupils, int tests ) { inti, j, highGrade = 0; for ( i = 0; i <= pupils - 1; i++ ) for ( j = 0; j <= tests - 1; j++ ) if ( grades[ i ][ j ] > highGrade ) highGrade = grades[ i ][ j ]; return highGrade; } double average( constintsetOfGrades[], int tests ) { inti, total = 0; for ( i = 0; i <= tests - 1; i++ ) total += setOfGrades[ i ]; return ( double ) total / tests; }
void printArray( constint grades[][ EXAMS ], int pupils, int tests ) { inti, j; printf( " [0] [1] [2] [3]" ); for ( i = 0; i <= pupils - 1; i++ ) { printf( "\nogrenciNotlari[%d] ", i ); for ( j = 0; j <= tests - 1; j++ ) printf( "%-5d", grades[ i ][ j ] ); } }