BLM 111 ALGORİTMA VE PROGRAMLAMA I

Benzer belgeler
BLM 111 ALGORİTMA VE PROGRAMLAMA I

C PROGRAMLAMA D İ L İ

Diziler (Arrays) Çok Boyutlu Diziler

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Sınav tarihi : Süre : 60 dak.

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

Hafta 11 Çok Boyutlu Diziler

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

BİL1001 Bilgisayar Bilimlerine Giriş 1

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

HSancak Nesne Tabanlı Programlama I Ders Notları

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Giriş. ENF102 Jeoloji

Döngü komutları komutların bir çok kez yeniden yürülmesini. sağlayan, programlamada kullandığımız önemli yapılardan biridir.

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

8. Bölüm DİZİLER. tip dizi_ismi[eleman_sayısı]; Bütün diziler 0 ile baţlar.

C PROGRAMLAMA D İ L İ

Pointer Kavramı. Veri Yapıları

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

ALGORİTMA VE PROGRAMLAMA I

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Döngü ve Koşul Deyimleri

Bil Hafta Çalışma Soruları (Yanıtlar)

2. Dereceden Denklemin Köklerini Bulan Program

YAPILAR (STRUCTURES)

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

C Programlama Dilininin Basit Yapıları

MAK 1005 Bilgisayar Programlamaya Giriş C DİLİNE GİRİŞ. Prof. Dr. Necmettin Kaya

Temel Giriş/Çıkış Fonksiyonları

Hazır Fonksiyonlar {\} /\ Suhap SAHIN Onur GÖK 1

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

C Programlama Dilinde Değişkenler

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Programlama Dilleri 1. Ders 4: Diziler

BİLG Dr. Mustafa T. Babagil 1

Programlamaya Giriş. Program : Belirli bir problemi çözmek için bir bilgisayar dili kullanılarak yazılmış deyimler dizisi.

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Temel Bilgisayar Bilimleri Ders Notu #4-1. kısım

ALGORİTMA VE PROGRAMLAMA I

C# Örnek Uygulamalar I

BÖLÜM 9: POINTERLER (İŞARETÇİLER)

Döngüler - Loops 4/9/2010. ENF-102 Jeoloji Giriş. Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Genel Programlama I

Yrd. Doç. Dr. Caner ÖZCAN

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

C++ Dersi: Nesne Tabanlı Programlama

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Arasınav Sınavı Soruları Güz 2017 Süre: 90 Dakika

C#(Sharp) Programlama Dili

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

BÖLÜM 7: DÖNGÜ KONTROL YAPILARI

Hafta 12 Karakter Tutan Diziler

C PROGRAMLAMA DİLİNE GİRİŞ

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

C++ Operatörler (Operators)

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

Döngüler - Loops 4/13/2011. ENF-102 Jeoloji Sayaç kontrollü bir döngüdeki temel öğeler. Sayaç (counter) Kontrollü Döngüler.

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Dr. Fatih AY Tel: fatihay@fatihay.net

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

4.Hafta BİL Soruların Çözümleri

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

Döngü Komutları. Komutu. while Komutu Diğer Operatörler Bileşik Komut for Komutu. İçiçe Döngüler break ve continue Komutları

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

8. İŞARETCİLER (POINTERS)

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

ALGORİTMA VE PROGRAMLAMA II

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

ALGORİTMA VE PROGRAMLAMA I

Genel Programlama II

Genel Programlama II

Kocaeli Üniversitesi C Bilgisayar Programlama Ara Sınavı Test Soruları

Arasınav Soruları Güz, Süre: 90 Dakika

Hafta 13 Fonksiyonlar

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Özyineleme (Recursion)

#include <stdio.h> main() { int i; i=0; do { printf("i nin simdiki degeri= %d\n",i); i = i + 1; } while (i<5); }

Giris {\} /\ Suhap SAHIN Onur GÖK

Transkript:

1 BLM 111 ALGORİTMA VE PROGRAMLAMA I DİZİLER (ARRAYS) Kullanıcıdan N tane tamsayı, xi, alalım ve 1. Bu sayıların ortalamasını hesaplamak isteyelim ort = 0; for (i=0; i<n; i++) { scanf( %d), &sayi); ort += 0; ort /= N; ort = x 2. Bu sayıların varyansını (değişinti) hesaplamak isteyelim N var = (x ort) N 1 Bu sefer, xi değerlerini tutmak zorundayız; çünkü önce ortalamayı hesaplamaya sonra da değerleri varyans hesaplamasında teker teker kullanmaya ihtiyacımız var. Yollardan biri her sayıyı ayrı değişkenlerde tutmaktır. Örneğin, N = 100 olursa100 tane değişken tanımlamak zorundayız, ama bu hiç uygulanabilir değil. Başka alternatif bir yol bu değişkenleri aynı ad altında gruplandırmak ve her birinin farklı ve tek bir indeksi olmasıdır. Bir dizi (array) bir grup bellek konumudur. Bu konumlar aynı ada ve aynı veri tipine sahiptir. Belli bir konuma, yani dizi içindeki bir elemana, başvurmak (erişmek) için, dizinin adını ve köşeli parantezler içinde değişkenin (elemanın) konum numarasını (indeksini) belirtmek gerekir. int X[100]; int ort = 0, sayi; float var = 0.0; for (i=0; i<100; i++) { scanf( %d,&sayi);

2 ort += sayi; X[i] = sayi; ort /= 100; for (i=0; i<100; i++) var += (X[i] - ort) * (X[i] - ort); var /= 99; Kullanmadan önce dizileri belirtmek (tanımlamak) gerekir. int X[100]; float Y[90], Dizi[10]; float Y[90];, derleyiciden float dizisi Y için 90 konum ayırmasını ister, yani her biri bir float değer tutabilen 90 bellek hücresi. Diziler (elemanları) bellekte yer işgal eder, bu yüzden ayrılacak hücrelerin sayısını belirtmek gerekir, örneğin Y dizisi için 90. Bu sayılar için sabit ifadelere gerek vardır. Örneğin, aşağıdaki tanım geçerlidir. #define b 3 const int a = 2; int y [a*b+2]; Elemanlarını değişkenler gibi kullanabiliriz, örneğin: float A[10]; A[3] = 2; /* A nın 4. elemanına 2 değerini ata */ A[4] = A[3] * 2; /* A nın 4. elemanının değerini al, 2 ile çarp, sonucu A nın 5. elemanına ata */ A[3]++; /* A nın 4. elemanının değerini 1 artır */ Dizinin ilk elemanının indeksi sıfırdır, yani diziler 0. Elema ile başlar. Dizinin boyu N olduğunda, dizinin son elemanının indeksi N 1 dir. İndeksler, yalnızca tamsayılar veya tamsayı ifadeler olabilir.

3 int k[5], i; for (i=0; i<5; i++) k[i] = i*2; k[2*2-1] = 3; k[k[4] / k[1]] = 2; k[1.5] = 3; /* hata verir */ Dizinin elemanları değişkenler olarak değerlendirilebilir, ama dizi adı bir değişken değildir. double YeniDizi[5]; tanımını yaptığımızı varsayalım. O zaman YeniDizi[0], YeniDizi[1], YeniDizi[2], YeniDizi[3] ve YeniDizi[4] değişkenlerimiz var ama YeniDizi diye bir değişkenimiz yok. Dizinin boyunu geçen elemanlara erişmeyi denemeyin. int k[5] diye bir dizi tanımlandığını varsayalım, bu durumda k[-45], k[-1], k[5], k[22], vs. gibi elemanlara erişmeyi denememelisiniz. Aslında derleyici böylr erişime izin verir ama belirtilen indekslerle gösterilen hücreler ayrılmamışsa sorunlarla karşılaşabilirsiniz. Bildirim sırasında dizilere ilk değerler atamak da mümkündür, değerler virgüllerle ayrılmış bir liste halinde verilir. int n[4] = {1, 2, 3, 4; int n[4] = {1, 2, 3, 4, 5; /* çok fazla değer (dizinin boyundan buyuk), derleme zamani hatasi verir */ int n[4] = {2, 3; int n[] = {1, 2, 5, 3, 7, 7, 0; /* az ilk değer, kalan elemanlara sıfır değeri atanir */ /*calisir, derleyici ilk deger olarak verilen elemanların sayısı kadar boyda bir dizi yaratir, bu durumda 7 boyunda */ int n[]; /* derleme zamani hatasi verir */ Diziler statik yapılardır. Bu dizinin boyunu kodunuzda belirlediğiniz ve boyunu daha sonra değiştiremeyeceğiniz anlamına gelir. Özet olarak, ya dizinin boyunu belirlemeli ya da diziye ilk değerler atamalısınız.

4 Örnek 1: Tamsayı veri tipinde 100 tane elemanınız olduğunu düşünün. Bu sayıların simetrik olup olmadığını kontrol etmek istiyorsunuz. Elemanlar kullanıcı tarafından sırayla veriliyor. #include <stdio.h> int main() { int sayilar[100], i; for (i=0; i<100; i++) scanf("%d",&sayilar[i]); for (i=0; i<50; i++) if (sayilar[i]!= sayilar[99-i]) break; if (i==50) printf("sayilar simetrik\n"); else printf("sayilar simetrik degil\n"); Örnek 2: Kullanıcı karakterler giriyor. Bu karakterlerdeki her bir küçük harfi ve her bir büyük harfi saymak istiyorsunuz. Girilen karakterler % karakteri okununca bitiyor. Bütün diğer karakterler göz ardı edilmeli. #include <stdio.h> int main() { int kucuk[26] = {0, buyuk[26] = {0, i; char a; printf("karakterleri gir: ");

5 scanf("%c",&a); while (a!= '%') { if (a >= 'a' && a <= 'z') kucuk[a -'a']++; else if (a >= 'A' && a <= 'Z') buyuk[a - 'A']++; scanf("%c",&a); printf("kucuk harfler\n"); for (i= 0; i<26; i++) printf("%d ", kucuk[i]); printf("\n"); printf("buyuk harfler\n"); for (i= 0; i<26; i++) printf("%d ", buyuk[i]); printf("\n"); Dizilerin önemli bir eksiği vardır: Dinamik olarak yaratılamaz veya kullanılamazlar. Örneğin, kullanıcının onluk tabanda birbiri ardına tamsayılar girdiğini ama programın başında bu sayıların kaç tane olduğunu bilmediğimizi düşünelim (sayıların sayısının da kullanıcı tarafından verildiğini veya kullanıcı bir son değer girene kadar sayıların okunduğunu varsayalım). Bu sorunu çok büyük diziler tanımlayarak ve kullanıcının bu sınırı aşmayacak kadar değer girmesini umarak çözebiliriz. Aşağıdaki örneklere bakalım. float kullanicisayilari[100000], sum; int i, n; scanf( %d,&n);

6 for (i=0; i<n; i++) scanf( %f,&kullanicisayilari[i]); toplam = 0; for (i=0; i<n; i++) toplam += kullanicisayilari[i]; Kullanıcı 100000 e eşit veya daha küçük bir boy girerse, yukarıdaki kod çalışır. 100500 girerse, indeksler sınırı aşar ve sorunlarla karşılaşılabilir. Şimdi kullanıcının dizinin boyu olarak 5 girdiğini düşünelim, o zaman da 99995 bellek hücresi boşu boşuna ayrılmış olur. Çok büyük boylu dizileri tanımlamanın verimsiz olduğunun farkında olalım, bu yüzden dinamik yapılara ihtiyacımız var. Örnek 3: Kullanıcıdan iki polinom alan, sonra bunları toplayan ve çarpan bir program yazmak istiyorsunuz. #include <stdio.h> #define MAX 100 int main() { int p1[max] = {0, p2[max] = {0; int top[max] = {0, carp[max] = {0; int i,j,n1,n2, buyukn; int carpmayapilamaz = 0; printf("ilk polinomun derecesini gir: "); scanf("%d",&n1); if (n1 >= MAX) printf("katsaylari gir:\n"); for (i=n1; i>=0; i--) scanf("%d",&p1[i]); printf("ikinci polinomun derecesini gir: ");

7 scanf("%d",&n2); if (n2 >= MAX) printf("katsaylari gir:\n"); for (i=n2; i>=0; i--) scanf("%d",&p2[i]); if (n1 > n2) buyukn = n1; else buyukn = n2; /*toplama*/ for (i = 0; i<=buyukn; i++) top[i] = p1[i] + p2[i]; /*carpma*/ if (n1*n2 < MAX) for (i=0; i<=n1; i++) for (j=0; j<=n2; j++) carp[i*j] += p1[i]*p2[j]; else carpmayapilamaz = 1; printf("toplama sonucu\n"); for (i=buyukn; i>=0; i--) printf("%d ",top[i]);

8 printf("\n"); if (!carpmayapilamaz) { printf("carpma sonucu\n"); for (i=n1*n2; i>=0; i--) printf("%d ",carp[i]); printf("\n"); else printf("carpma yapilamiyor\n"); system("pause");