dizi - cobanoglu

Transkript

dizi - cobanoglu
Diziler
Yrd.Doç.Dr.Bülent ÇOBANOĞLU
Dizi (Array) Nedir?
 Bellekte sürekli yer kaplayan artarda sıralanmış
aynı türden verilerin oluşturduğu kümeye dizi
(array) denir. Dizi, çok fazla miktardaki tek tip
verinin, tek bir isimle saklandığı / depolandığı
bellek alanıdır. Diziler bir nevi bileşik değişkenlerdir.
Tanımdan da anlaşılacağı üzere dizi elemanlarının
“aynı tip elemanlardan oluşmuş olması”
gerekir.
Dizi Nasıl Tanımlanır?
 Dizi tanımlama şekilleri, kullanılan programlama
dillerine göre farklılık gösterse de temel mantık
aynıdır. Yani dizinin adı, eleman sayısı (boyutu) ve
tipi belirtilir. Dizi tanımlarken; o dizinin adını ve
indisini (dizi içerisindeki elemanlara erişmek
amacıyla onun kaçıncı eleman olduğunu belirten
numarasını) yazmak gerekir. Değişken
tanımlamada olduğu gibi dizi tanımlamada da dizi
elemanlarının veri tipini mutlaka belirtmemiz
gerekir.
Dizi Nasıl Tanımlanır?
C \ C++
Tip diziadı [Eleman Sayısı];
Tamsayı dizi örnekleri (İçerisinde tamsayıları sakladığımız
6 elemanlı bir A dizisi)
-
int
int
int
int
A [6];
boyut=6;
A[boyut];
A[] = {8, 9, 12, 4, 1, 0};
Karakter dizi örnekleri
char A[] = “sau”;
char A[] = {‘s’, ‘a’, ‘u’, ‘\0’};
String dizi örnekleri
char *gun;
char gun[][5]= {"Paz","Sali","Çarş","Per"};
string gun [7]; // C++ için
Not: C\C++ dillerinde karakter boyutları tanımlanırken dikkatli
olmak gerekir. Çünkü karakter (char) dizilerin en son elemanı
NULL(‘\0’) olacaktır
İndis (Index) Nedir?
 Dizilerde değişken ismini takiben parantez içerisinde
belirtilen numaraya indis adı verilir.
 C\C++ ve Java dillerinde dizilerin ilk elemanı, 0.
indisli elemanıdır. Son elemanı da dizi tanımında
belirtilen eleman sayısının 1 eksiğidir.
A[7]
1.eleman
2.eleman
3.eleman
4.eleman
5.eleman 6.eleman 7.eleman
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
A[6]
5
7
9
23
45
12
04
Dizi ve indislere isim verirken dikkat
edilmesi gereken hususlar:
 Dizileri tanımlamada değişken tanımlama kuralları
geçerlidir.
 İndis değeri negatif olamaz.
 İndisler tamsayı veya tamsayı üreten bir değer olmalıdır.
 İndis değeri en az 1 olmalıdır.
 Dizi tanımlama esnasında indis değeri verilmez (yani
boyutu belirtilmez) ise dizinin boyutu tanımlanan eleman
sayısı kadardır. Örneğin;
 int A[ ]={0, 1, 2, 3, 4, 5}; şeklindeki tanımlamada
dizinin boyutu 6 dır.
 Dizinin ilk indis değeri 0 (sıfır) dır. Dolayısıyla n elemanlı
bir dizinin n. elemanının indis değeri ‘n-1’ dir.
Diziler Olmasaydı, Programcı Ne
Yapardı?
Dizi Elemanlarına Nasıl Değer
Aktarırım?
 Her bir elemana ayrı ayrı değer girilebilir:
int dizi[100];
dizi[0] = 2;
dizi[1] = 3;
..
 Tüm elemanlara bir kerede, dizi tanımlaması sırasında değer
girilebilir:
Tip dizi[ ] = { değer1, değer2, değer3, ... , değer100 };
 Bir döngü içerisinde indis numarası belirtilerek değer aktarılabilir.
for(int i = 0; i<100 ; i++)
{
dizi [i] = 5; //dizi[i]=i;
}
Dizi Elemanlarına Nasıl Değer
Aktarırım?
 Örnek 1. “0, 1, 2, 3, 4, 5” sayılarını A dizisine aktarıp
ekranda gösteren programı yazınız.
Dizi elemanlarının dışarıdan(klavyeden) girilmesi
 Dizi elemanları ya da dizi boyutunu dışarıdan (klavyeden) da girebiliriz.
Bunun için for döngü yapısını kullanabiliriz
#include <stdio.h>
#include <conio.h>
main() {
int Say[5];
int i, rakam;
for (i= 0; i< 5; i++)
{
printf ("Gir dizi
elemanlarini\n");
scanf("%d", &rakam);
Say[i] = rakam;
}
printf ("Yaz diziyi ekrana \n");
for (i= 0; i< 5; i++)
{
printf("%d ", Say[i]);
}
getch();
}
Soru: Dizi boyutunun dışarıdan girildiği ( N elemanlı ) bir dizinin tüm
elemanlarını toplayan programı yazınız. { Eleman değerleri 1 ile 100
arasında rastgele girilsin }
Fonksiyonlara parametre olarak dizi
aktarımı
 Fonksiyona bir dizinin aktarımı aşağıdaki şekilde tanımlanır;
Tip fonksiyonAdi (tip diziadi[], ….)
// void notlariAl(int progNot[]) gibi
Soru: ‘Programlama’ dersinden kalanların
ve geçenlerin sayısını veren programı
yazınız { Programlama dersine ait başarı
notları bilgisayar tarafından rastgele
üretilecektir}.
Çözüm
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int A[24];//genel bir dizi
void notlariAl(int []);
int kalanlariBul (int [], int);
int main() {
srand(time(0));
int kalan, gnot=50;
notlariAl(A);
kalan=kalanlariBul(A, gnot);
cout << " kalanlar..: " <<
kalan;
cout << " geçenler..: " <<
24-kalan;
return 0;
}
void notlariAl(int A[])
{
int i;
for (i=0; i<24; i++)
{
A[i]=1+rand()%100;
cout << A[i] << " ";
}
}
int kalanlariBul (int A[], int gnot)
{
int i,k=0;
for (i=0;i<24;i++)
{
if (A[i]<gnot)
k++;
}
return k;
}
Dizi Elemanlarının Sıralanması (BubbleSort Alg. göre
Algoritması
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i,j,enk;
int say[]= {50, 20, 45, 82, 25,
63, 34, 12, 23, 8};
printf ("Dizinin Sırasız hali.:
");
for (i=0; i<10;i++)
{
printf ("%d ", say[i]);
}
// Dizi elemanları sıralanıyor
for (i = 0; i < 10; i++) {
for (j = i+1; j <= 10; j++)
{
if (say[i] > say[j])
{
enk=say[i];
say[i]=say[j];
say[j]=enk;
}
}
}
//Kod devamı
printf ("\nDizinin
Sıralı hali.: ");
for (i=0; i<10;i++)
{
printf ("%d ",
say[i]);
}
printf("\nEn
küçüğü.:%d",say[0]);
printf("\nEn
büyüğü.:%d",say[12]);
system("PAUSE");
return 0;
}
İKİ BOYUTLU DİZİLER
(MATRİSLER)
 Bellekte art arda sıralanmış satır ve sütunlardan oluşan yapıya iki
boyutlu dizi ya da matris adı verilir. İki boyutlu dizileri aşağıdaki
şekilde gösteririz.
Matris Tanımlama:
Tip Dizi_adı [satir_boyutu][sütun_boyutu];
int A [4] [7];
Örnek: Aşağıdaki matrisi oluşturup,
ekranda gösteren programı yazınız.
Soru: 10 kişilik bir sınıftaki öğrencilerin her birinin bir dersten aldığı
4 notu (Vize, KısaSınav1, KısaSınav2, Ödev, Final) bir A matrisine
atayan ve ortalamaları ile birlikte aşağıdaki gibi ekranda gösteren
programı yazınız.
ÇÖZÜM
#include <stdio.h>//printf,scanf
#include <conio.h>//getch
#include <iostream>//cout, cin
#include <stdlib.h>//rand()
#include <time.h>//time
using namespace std;
int main()
{
srand(time(0));
int A[10][7];// 10 satır, 7 sütunlu elemanlı
int i,j;
printf
("No\tKs1\tKs2\tOdev\tVize\tFinal\tOrtalama\n");
for (i=0; i<10; i++) // satırı verir
{
A[i][0]=i; //numaralar
for (j=1; j<6; j++) // sütunu verir
{
A[i][j]=1+rand()%100;//notlar
}
A[i][6]=(A[i][1]*0.1+ A[i][2]*0.1+A[i][3]*0.2+
A[i][4]*0.6)*0.5+A[i][5]*0.5;
}
//Devam
for (i=0;i<10;i++)
{
for (j=0;j<7;j++)
{
printf ("%d\t",A[i][j]);
}
printf ("\n"); //satır atla
}
getch();
return 0;
}
Örnek. 3*4 elemanlı bir A matrisinin içindeki tek sayıları tek boyutlu B
dizisine, çift sayıları ise tek boyutlu C dizisine aktaran C/C++
programını yazınız. { 3*4 lük A matrisinin elemanları 1 ile 9 arasında
rastgele üretilecektir}
#include <stdio.h>
#include <conio.h>
int main()
{
printf ("A Matrisi\n");
int A [3][4];
int B[12];
int C[12];
int s1=0, s2=0;
int i,j;
//A matrisinin elemanları giriliyor
for (i=0; i<3; i++){
for (j=0; j<4; j++)
{
A[i][j]=1+ rand()%9;
printf("%d", A[i][j]);
}
printf("\n");
}
// A matrisinden B ve C dizileri oluşturuluyor
for (i=0; i<3; i++){
for (j=0; j<4; j++){
if (A[i][j]%2!=0)
{B[s1]=A[i][j];
s1=s1+1;}
else
{
C[s2]=A[i][j];
s2=s2+1;}
}}
printf("B dizisinin elemanları..:");
for ( i=0; i<s1; i++) {
printf ("%d ", B[i]); }
printf("\nC dizisinin elemanları..:");
for ( i=0; i<s2; i++) {
printf("%d ", C[i]); }
getch();
}
Karakter Dizileri (Stringler)
char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades" };
char suit [] [10] = { "Hearts", "Diamonds", "Clubs", "Spades" };
String dizi elemanlarını ekranda alt alta
gösteren program
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ad [] [10] = { "Hearts", "Diamonds", "Clubs", "Spades" };
for (int i=0; i<4; i++)
{
cout << ad[i] << endl;
}
getch();
}

Benzer belgeler