Merhaba ve hoş geldiniz.
Bu konuşmada, şu konulardan bahsetmek istiyorum bir dizi kavramı hakkında.
Dizi, aşağıdakilere izin veren bir kavramdır Aslında birçok farklı değeri tek bir
değişkende saklayabilirsiniz.
Diziler çoğu yerde yaygındır programlama dilleri.
İşinizi basitleştirmeye ve kolaylaştırmaya yardımcı olurlar. program çok daha verimli.
Bu yüzden konuşacağız c'de diziler oluşturma ve kullanma
Yani bir dizi.
Bir programda aşağıdakileri depolamak çok yaygındır Belirli bir türde birçok veri değeri.
Örneğin bir spor programında, tüm oyunların skorlarını
saklamak isteyebilirsiniz veya her oyuncu için skorlar.
Bu noktaya kadar, kolayca Bunu uygulayabiliriz, ancak her skor için farklı bir değişken
yazmamız gerekir.
Yani bir ton oyun olduğunu düşünün.
Yani beyzbolda 162 maç var.
Eğer bir program yazacak olsaydık bazı istatistikleri veya başka
bir şeyi saklamak isteyen bir beyzbol programıydı, biz skoru tutmak için
her oyun için 162 değişken oluşturması gerekecektir.
İşte bu tam bir baş belası.
Çok sıkıcı olurdu.
ve bu gerçekten çok fazla.
İşte burada dizi devreye girdiğinde, bir dizi bu
sorunu çözecektir.
Bunu yapmak zorunda değilsin. 162 değişken oluşturun.
Tek bir değişken oluşturabilirsiniz ve ona belirli bir şekilde erişin.
Yani diziler değerleri gruplamanıza izin verir tek bir isim altında bir araya getirilmiştir.
Ayırmanıza gerek yok her bir veri öğesi için değişkenler.
Yani bu sizin çok daha verimli bir programcı.
Bir dizi sabit sayıda veriden oluşur Hepsi aynı türden olan eşyalar.
Bu nedenle, tek bir sorun dizisinin boyutunu değiştirememenizdir.
Diziyi oluşturduktan sonra her zaman o boyutta olacak.
Ve diğer kısıtlama birden fazla veri türünü depolayamayacağınızdır.
Eğer bir dizi bildirirseniz ve hala sayıları ve ints'leri saklayacaksa,
ints'leri saklamak zorundadır.
Yani birkaç kısıtlama.
Bir diziyi nasıl bildirirsiniz?
Unutmayın ki beyan ettiğinizde a değişkeni ne yapıyorsun?
Diyorsun ki bu değişkeni programda mevcuttur.
Ve sen ilan ederken bu ilkel veri türleri için bellek formu
tahsis ediyorsunuz.
Bir dizi bildirdiğinizde, dizi içindeki veri öğeleri eleman
olarak adlandırılır.
Yani bu da başka bir kavram bir dizi düşündüğünüzde.
Eğer element terimini söylüyorsam bu, dizideki bir öğeye atıfta
bulunduğum anlamına gelir.
Çünkü bir dizinin aynı ada sahip çok sayıda farklı
değere sahip olacaktır.
Ve daha önce de belirttiğimiz gibi dizinin aynı türde olması gerekir,
veri türlerini karıştıramaz ve eşleştiremezsiniz.
Bir diziye sahip olamazsınız 5 ints ve 5 longs.
Tek bir kişi diye bir şey yoktur. birden çok veri türünden oluşan dizi.
İçinde bir dizi kullanımı bildirme bir program normal bir
değişken bildirimine benzer.
Tek yapmanız gereken belirtmek adını girin ve ardından parantez kullanın.
Yani tek fark bu, Bu köşeli parantez fikrinin
ismi takip etmesi.
İşte buna bir örnek normal bir değişken bildirimi
gibi görünür, ancak gördüğünüz şey İşte bu parantezler var.
Bu tek şey normal değil ve içlerinde
bir numara var.
Parantez içindeki sayı boyutu belirtiyor.
Yani burada biz sadece diyoruz ki uzun türde sayılar
adında bir dizi oluşturacağız. 10 element içerecek.
Yani oldukça basit.
Bu bir sayı beyanıdır çünkü noktalı virgül sondadır, tıpkı bir
değişken bildirimi gibidir ancak bu parantezler
ve bir sayı var ve bu da diziyi veya dizi boyutunu belirtir.
Bir dizi bildirdikten sonra kullanmaya başlamak isteyeceksiniz.
Başlamak isteyeceksin içindeki
verilere erişmek veya verilere yazmak.
Bunu yapmak için yapmanız gerekenler dizinin bellekte
nasıl depolandığını ve nasıl aslında erişilecek.
Yani her bir elemanı olan bir dizi Dizideki veri öğelerinin her birine aynı ad
kullanılarak erişilir.
Yani hala erişiminiz olacak değişken adı ile birlikte.
Ancak, eğer belirli bir değerini bu ışın içinde kullanıyorsanız,
şimdi bir indeks veya alt simge, bu terimlerin her ikisi de birbirinin yerine kullanılır.
Bu indeks veya alt simge değeri bir sayı olacak ve parantezlerin
içinde de olacak dizideki bir elemana erişmek veya dizideki o noktaya
doğru yazmak için dizi adını izleyen bir değer.
Yani dizin değerleri sıralıdır 0'dan başlayan tamsayılar.
Yani bir dizi hakkında konuştuğumuzda ve elemanlarıdır
ve bir dizideki indeksler veya alt simgeler hakkında konuşuruz, tüm bu yedekler 0'dan başlayabilir.
Bu temelde şunu söylüyor ışınlarının 0 tabanlı olduğu.
Dolayısıyla, bir dizindeki elemanlar için indeks değerleri 10 boyutundaki dizi 0'dan 9'a kadar olacaktır.
0 bunu temsil edecek ilk dizi elemanına, 9 ise son dizi elemanına atıfta bulunacaktır.
boyutu 10 olan bir dizideki eleman.
Yani şunu anlamak zorundasınız 0 tabanlı diziler kavramı.
Sezgisel olarak şöyle düşünebilirsiniz. dizideki ilk noktaya
erişmek istiyorum, tamam indeks veriyorum Bir, hayır çünkü 0'dan başlıyorlar.
Bu yüzden çok, çok yaygın yanlışlıkla bir diziye erişmeye çalışır ve 1 eksik
olur çünkü Birden başladıklarını ve 0'dan başlamadıklarını
düşünüyorsunuz.
Buna şu şekilde atıfta bulunulur bir hata olarak kabul edildi.
Basit bir tamsayı kullanabilirsiniz erişmek istediğiniz
öğeye açıkça başvurmak için.
Örneğin, aşağıdakilere erişmek istiyorsanız Bir dizideki 4.
değer için dizinin adını söylersiniz ve ardından parantezlerin içinde 3 diyeceksiniz.
Yani dizi adı alt-3 gidiyor dizi adı 0 tabanlı
olduğu için 4. değere erişemez.
Bu yüzden sadece erişmek istediğiniz öğe
için bir numara.
Ve yine, bunun 0 baz olduğunu unutmayın.
Yani 4. öğeye erişmek için 3.
Erişmek istiyorsanız 8. eleman, 7. indeksi yaparsınız.
için bir dizin de belirtebilirsiniz. ifadesini kullanarak dizi elemanı.
Yani artık sadece bir sayı kullanmanız gerekiyor.
Kare içinde bir ifade kullanabilirsiniz parantezler de ismi takip eder.
Ancak ifade şu şekilde sonuçlanmalıdır olası dizin değerlerinden birine karşılık
gelen bir tamsayı değerinde.
Yani eğer boyutunda bir diziniz varsa 10 ve bir ifade kullandığınızda,
bu ifade şu şekilde değerlendirilmelidir ya 0, 0'dan 9'a kadar herhangi bir sayı.
Bu çok yaygın bir durumdur. elemanları bir dizide depolayarak onlara erişmek
için bir döngü kullanacağız ve buna da bir örnek vermek için.
Örneğin burada, bir for döngüsünü başlatıyoruz ve döngü kontrol değişkenimizi 0 I olarak
başlatıyoruz ve 10'dan az olduğunda çıkıyorum.
Ve burada yaptığımız şey sadece dizideki
sayıları gösteriyoruz.
Ve böylece printf diyoruz sayısı yüzde d'dir ve
sonra alt-I sayıları, I bir değişkendir.
Bir değişkeni bir değişken ifadesi, bu değişken aşağıdakilerden
bir sayıyı temsil ettiği sürece 0'dan 9'a kadar, ve bu durumda öyle.
Şunlar için kullanımı çok yaygındır elemanlarına erişmek için bir dizi
üzerinde yinelemek için döngüler veya bu öğelere veri yazabilirsiniz.
Özetlemek gerekirse, işte güzel bir küçük bir örnek buldum.
Bir dizi bu şekilde yapılandırılır.
Adında bir dizim varsa sayıları, dizinin
adını ve ardından dizideki tek tek öğeleri tanımlayan parantezlerle.
Böylece bir diziyi sadece türünü ve adını belirtin ve ardından
parantez içinde boyutu belirtin.
Ve sonra erişmek istediğimde sadece dizi adını ve ardından dizin
değerini kullanıyorum.
Ve böylece bir dizi için 10 boyutunda,
0'dan 9'a kadar geçerli olan dizinlere sahip olacaksınız.
Peki, şu adrese erişmeye çalışırsanız ne olur? dizide geçersiz
bir indekse sahip bir eleman, örneğin Dizin olarak 11 kullanarak 10 boyutlu bir diziye erişmek için
veya 10 bir dizindir.
Bir diziniz olacak sınır dışı hatası.
Yani bir ifade kullanırsanız veya dışında kalan bir dizin değeri
için bir değişken veya sabit dizisinin aralığı ve aralık dizisinin dışı
ne anlama gelir?
Bu ya olumsuz ya da veya boyuttan daha büyük bir sayıdır, gerçekten
boyuttan daha büyüktür. boyut eksi bir çünkü 0 taban var.
Yani eğer boyutunda bir diziniz varsa 10, boyut eksi 1, eğer 9'dan
büyükse bir dizi sınır dışı hatası.
Ve bir dizi ile ilgili sorun hatası, programınızın
çökmesine ve hatta Daha da kötüsü, programınızın normal çalışıyormuş
gibi görünmesine neden olabilir, ama sonra normal davranmıyor.
Yani üretmiyor tutarlı sonuçlar.
Bazen çöpleriniz olur veri, dizide hiçbir şey ifade
etmeyen veri.
Tekrar söylüyorum, ne zaman bir dizi sınırları hatasına sahipsiniz.
Ve sorun şu ki, dizilmiş out of bounds hatası derleyici tarafından
kontrol edilemez çünkü derleyici bir şey atayıp atamadığınızı
bilmeyecek daha büyükse veya boyuttan daha büyük bir şeye erişiyorsanız.
Yine de derlenecek bu alan sınırların dışında hatasına
sahip olsanız bile.
Esasen sınırlar dizisi hatası bir çalışma zamanı hatasıdır.
Bunu bulamayacaksın. programı çalıştırana kadar hata verir.
Ve yine bu sizin programının çok öngörülemez olması.
Bu yüzden çok ama çok diziye nasıl eriştiğinizi, hangi indeks değerlerini kullandığınızı
kullandığınızı ve diziye indeks değeri ile nasıl veri yazdığınızı
gösterir.
Şunlara çok dikkat edin dizi dizinleri ve ayrıca sınırlar.
Bir bilgisayara veri yazmak istiyorsanız dizi, çok, çok basit.
Temelde yapacaksın sadece dizini kullanın.
Böylece bir değer dizide saklanabilir elemanını sadece sol taraftaki dizi
elemanını belirterek eşittir işaretinin yan tarafını ve ardından
parantezleri kullanarak yazmak istediğiniz öğe.
Yani bu örnekte, elimizde bir dizi adı notlar, ne boyutta olduğunu bilmiyoruz, şu olmalı 100'den
daha büyük olmalıdır, aksi takdirde dizi sınırları dışında
hatası alırız.
Ama bu örnekte şunu söylüyoruz 100'ün altındaki not 95'e eşittir.
95 değeri şurada saklanır notlar dizisinin 100 numaralı
elemanı, çok basit.
Sadece dizini belirtirsiniz ve sonra hangi değeri imzalamak istiyorsanız
onu yaparsınız.
Değişkenleri de kullanabilirsiniz bir diziye değer atamak için.
Böylece 95 bir değişkende saklanabilir, tıpkı diğer değişkenleri atadığınız gibi.
Şimdi bir örnek üzerinden gidelim. dizi kullanımına bir örnek.
İşte bir kullanım örneği dizisi 10 sayıyı
okuyacak ve sonra bana Bu 10 sayının ortalaması.
Biz onları okurken toplamı hesaplayacak ve ardından ortalamayı
görüntüleyeceğiz.
Bu noktada, ben de Bu örneği kod bloklarına yerleştirmek
ve çalıştırmayı denemek istiyorum ve nasıl çalıştığını göstereceğim.
Normal görüş alanımızdayız. basit bir proje ve size bir dizinin kod bloklarında nasıl
çalıştığını göstereceğiz.
Fark edeceksiniz ki ana fonksiyonumuzda.
Bu giriş programa işaret eder.
Ve 12. satırda, biz bir dizi bildirmek.
Biz bir ilan edeceğiz boyutu 10 olan int türünde bir dizi.
Boyut parantezlerin içindedir, noktalı virgül ile bitiriyoruz.
Bu bir dizidir ve 10 değer depolayacak.
Eğer bu diziye sahip olmasaydık
ne yapmamız gerektiğini saklamak için 1. sınıflar dememiz gerekir. int, 2. sınıflar int, 3. sınıflar.
Bunun ne kadar sorunlu olduğunu görüyorsunuz. ve ne kadar sıkıcı olduğunu.
Bu çok güzel. basitçe 10 öğeyi depolayan tek bir değişken oluşturun
ve birlikte gruplandırılmışlar.
Öğeleri bir dizide sakladığınızda veri değerlerinin farklı olmasını istemiyoruz,
hepsi farklı şeyler.
Bu örnekte olduğu gibi, depoluyoruz notlar, yani hepsi not.
Bir diziye isim vermek istemezsiniz ve sonra notlarımı
saklayacağımı söyleyeceğim. Sakla beni.
Benim... Benim... her neyse, yaşım falan.
Aynı türde depoladığınızdan emin olun bir dizi olduğunuzda veri.
Satırdaki bir sonraki değişken 13 bir sayı değişkenidir.
10'a eşit.
Bu sayı olacak okunacak değer sayısı, çünkü dizinin içinden
geçiyoruz.
Toplam uzun, toplayacağız değerlerden geçerken sayılar ve sonra ortalama
gidiyor bir float olması gerekir çünkü sayıların ortalamasını
almak isteriz.
İlk yapacağımız şey 17. satırda kullanıcıya
şunu yapmasını istediğimizi söyleyeceğiz 10 not girin ve ardından değerleri
okuyacağız.
Yani 20. satırda nasıl olduğumu fark ettiniz girintiliyorum
ve iyi bir adlandırma, girinti ve iyi bir bloklama kullanıyorum. kod blokları için kod girintisi.
Burada, 20. satırda, şunu beyan ediyorum benim döngü kontrol değişkenim.
Eski bir derleyici çalıştırıyorum, c derleyici 89, bu yüzden aynı satırda bildiremiyorum
ve başlatamıyorum.
Normalde bunu yaparsınız.
Ama bunu koştuğum için yaptığımda C89 derleyicisi bir hata alıyor.
Bu yüzden değişkenimi satırda bildiriyorum 20, ve sonra bir for döngüsü kullanıyorum.
for döngülerine aşinayız önceki derslerimizden kod tekrarı
yapmanızı sağlar.
Burada sadece şunu söylüyoruz. sayaç kontrollü bir for döngüsüne
sahipsek, 0'dan başlayacağız ve 10'a kadar devam edecek.
Bu yüzden gideceğiz 10 iterasyon boyunca, ancak indeksin
0 olduğunu fark ettiniz.
Bu önemli çünkü I değişkenini kullanarak
bir diziye erişeceğiz.
Ve sonunda fark edeceksiniz ki for döngüsünün sonunda, döngü kontrol
değişkenini artırarak değiştiriyoruz.
Bu yüzden çıktısını alacağız size göstermek için dizi boyunca
ilerlerken I artı 1'in değerini rakamlar için nerede olduğunuzu.
Yani temel olarak şöyle diyecek 1. sınıf 2. sınıf 3. sınıf 4. sınıfa girin.
Daha sonra sizden scanf kullanarak notu girin.
Bunu dizimizde saklayacağız.
Fark edeceksiniz ki dizide saklayın,
normal bir değişken erişimi gibi.
Sadece notları kullanırsın ve sonra dizini belirtirsiniz.
Burada indeksimiz olarak I kullanıyoruz.
Yani bu 0'a eşit olacak ilk iterasyon, 1 ikinci iterasyon,
2 üçüncü iterasyon.
Ve 0 ile başlamamız iyi oldu. çünkü diziler 0 tabanlıdır
ve sonra sadece adresi kullanırız operatörü, ve işareti.
Biz geçerken, biz notları toplayacağım.
Yani toplam diyeceğiz toplam artı alt I derecesine eşittir.
Her bir sınıf temel olarak bir toplam hesaplayın.
Ve sonra döngüden çıktığımızda 10 kez çalıştırdıktan
sonra, ortalamamızı şu değere eşitleyeceğiz toplamı sayıya böler
ve bir float'a atar, burada atıyoruz.
Bu, veri türünü değiştirmektir.
Unutmayın, toplam bölü sayı, toplam uzun ve int olarak sayılır ve biz bunu bir float'a dönüştürmek
istiyoruz.
Ve en sonunda, biz ortalamanın çıktısını alacağım.
Şimdi devam edip bunu çalıştıralım ve hata almadığımızdan emin olun, ki 0 hata ve
0 uyarımız var.
Şimdi çalıştıralım.
Ve bu yüzden yapacak tam olarak bahsettiğim şey.
On sınıfa girin diyecek. ve sonra küçük bir işaretin içine bir 1 koyar, böylece hangi numarada
olduğumuzu biliriz.
Bu 95 gibi koyacağız 32 55, içeri girecek ve buraya herhangi bir sayı
koyacaktır.
Çok da mantıklı değiller, Sorun değil, son numaram 23.
Bu 10'un ortalaması Notlar 51 olacak. 20.
Ama bu gerçekten güzel çünkü biz 10 değişken oluşturmak zorunda değilsiniz.
kullanarak diziye erişiyoruz. alt simgesini kullanarak diziye
değer atayabiliriz.
Bu aslında scanf yaptığımızda.
Veri atıyoruz bu alt simge için.
Şimdi eğer bunu değiştirirsek ve diyelim ki 1'den başladık ve saymak
yerine hangi 10 ise, aslında eşit olarak ayarlarız.
Yani aslında hadi bunu 1 olarak değiştirmeyin.
Diyelim ki başlayacağız 0'da, ama şimdi 10. dizine
kadar gideceğiz.
Unutmayın, dizin 10 sınırların dışındadır çünkü dizinin boyutu
10'dur, ancak dizin değeri 0'dır tabanlıdır, böylece maksimum indeks 9 olur.
Ve yine, biz mümkün olacak çünkü derleyiciler sınır
dışı hataları algılamazlar, Sorun onu çalıştırdığımız zaman.
Şimdi programı çalıştırdığımızda, 11'inci sınıfa girmeye çalışırsak
büyük bir sorunumuz olacak.
Yani her şey yoluna girecek.
10 sınıfa girdiğimizde, Sorun 11'e geldiğimizde
ortaya çıkacak.
Şimdi 11 tane var ve veri depolamaya çalışacak.
Kötü bir şey olmadı, ama bizim ortalama doğru olmayacaktır.
Ve bu çok öngörülemez bir davranış. bir sınır dışı hatası aldığınızda.
Yani emin olmak istiyorsun ki göz dersi sayınız var ve ne zaman emin
olmak istiyorsunuz bilgiye erişirseniz, sınırların dışına da çıkmazsınız.
Bu da dizinin temelleri, Dizinin bildirilmesi, boyutun
sadece veri türünün belirtilmesi ve ardından boyut ve parantezler, diziye erişme veya dizide
veri saklama dizisine, indislerin içinde I alt simgesini
kullanarak değerler atar.
Ve biz bile yazdırabilirsiniz alt simge kullanarak da indeksler.
Diziler oldukça fazla kullanılıyor.
Birçok örneğimiz olacak dizileri çünkü işleri basitleştiriyor.
Dizilerin sabit boyutlu olduğunu unutmayın.
Değiştiremezsiniz sınıfların büyüklüğü.
Her zaman öyle olacak. 10 programı çalıştırdığınızda.
Yani yukarıdaki herhangi bir veriyi atarsanız genişlemeyecek.
Ayrıca unutmayın ki notlar aynı veri türü olmak zorundadır.
Dizeleri veya kelimeleri saklayamıyorum sınıfında sadece ints depolayabiliyorum.
Şamandıraları içinde saklayamıyorum orada sadece ints depolayın.
Teşekkür ederim.