C ile Programlamaya Giriş Quiz Soruları ve Çözümleri
Yazan : Şadi Evren ŞEKER
Soru 1) Bir dosyaya isminizi yazdırınız.
Çözüm 1) dosyaya ismimizi yazdıran kodu aşağıdaki şekilde yazabiliriz:

Yukarıdaki kodda dikkat edilecek bir husus, dosyanın “r” değil “w” şekliyle açılması ve dosyanın mutlaka kapatılmasıdır. Bilindiği üzere kapatılmayan dosyalara yazıldığından kesin olarak emin olamayız ve dosya kapatılmadıysa içerisine bilgi yazılmamış olabilir.
Yukarıdaki kod çalıştırıldıktan sonra aynı dizin içerisinde “dosya.txt” isimli bir dosya oluşturulur ve bu dosyanın wordpad benzeri bir programla açılması durumunda içinde ismimizin yazdığını görebiliriz.

Soru 2) Klavyeden okunan bir sayının asal çarpanlarını ekrana basan kodu yazınız.
Çözüm 2)

Yukarıdaki kodda görüldüğü üzere önce bir sayı okunmuş (kodun 7. Satırı) ardından bir döngü içerisinde, 2′den başlayarak bütün sayılara bu girilen sayıyı bölme denenmiştir. For döngüsünün (8. Satır) koşulu, sayının 1′den büyük olmasıdır. Dolayısıyla sayı 1 olunca yani bütün asal sayılara bölümü tamamlanınca çalışma duracaktır.
Yukarıdaki kodda bulunan iç döngü (9. Satırdaki while döngüsü) ise bir asal sayının birden fazla kere bölme ihtimaline karşı yazılmıştır. Örneğin 60 girdisi için 2 asal sayısı, 2 kere bölebilir. Bu durumda bir sonraki asal sayı ile deneme yapılmadan önce, şu anda bölmeyi denediğimiz asal sayı ile bölünmeyinceye kadar deneme yapıyoruz.
Kodun 11. Satırında ise, denediğimiz sayının, girilen sayıyı tam bölmesi durumunda bölerek sayıyı küçültüyor ve başarılı olarak bölebildiğimiz bu sayıyı bir çarpan olarak ekrana yazıyoruz.
Kodun örnek çalışması aşağıdaki şekildedir.

Soru 3) Bir dizgideki kelime sayısını ekrana bastıran kod yazınız.
Çözüm 3)

Soruda, girilen bir dizgideki (String) kelime sayısının saydırılması istendiği için, dizginin scanf ile okunması mümkün değildir. Bilindiği üzere scanf tek bir kelime okur ve bu durumda işe yaramaz. Birden fazla kelimenin boşlukları ile okunması istenen durumda gets fonksiyonu kullanılabilir. Yukarıdaki kodun 6. Satırında da bu şekilde dizgi okunmuştur. Ardından dizgide bulunan boşluklar dizgi sonuna kadar saydırılmıştır. Dizgi sonu kontrolü 8. Satırda bulunan for döngüsünde yapılırken, dizgi içerisinde o anda bakılan karakterin boşluk karakteri olup olmadığı 9. Satırdaki if kontrolü ile yapılmıştır. Şayet boşluk karakteri ise, kelimesayısı değişkeni 1 arttırılmıştır.
Basitçe hesaplanacağı üzere, bir dizgideki boşluk sayısı, kelime sayısından 1 eksik olur. Bu problemin çözümü için kelimesayısı değişkeni 0 yerine 1′den başlatılmıştır.
Kodun çalışan hali aşağıda verilmiştir.

Soru 4) Bir dizgideki en uzun kelimeyi bularak ekrana bastıran kodu yazınız
Çözüm 4)

Yukarıdaki kod, 3. Sorudaki koda benzer şekilde, dizgi sonuna kadar bütün karakterleri kontrol etmekte ve boşluk karakterlerinde kodun 15. Satırında bulunan if kontrolüne girmektedir. Bu kodda farklı olan bir özellik, iki adet karakter göstericisi (character pointer) ile dizgi üzerinde işaretleme yapılmasıdır.
Bu göstericilerden kelimebasi isimli gösterici, o ana kadar bulunan en uzun kelimeyi göstermekte, yenikelime göstericisi ise, üzerinden geçilen son kelimeyi göstermektedir.
Kodun çalışmasını aşağıdaki şekilde anlayabiliriz:

Yukarıda gösterildiği üzere, ilk başta iki gösterici de dizginin ilk karakterini göstermektedir. Ayrıca kelimeboyu ve yeniboy değişkenlerinin değeri 0′dır.
Ardından kodumuz döngü içerisinde karakter karakter ilerlemekte ve ilk boşluğu gördüğü anda aşağıdaki şekilde yeni kelim değişkeni hareket ettirilmektedir.

İlk boşluğa gösterici hareket ettirildikten sonra boşluğa kadar olan harf sayısı sayılmakta ve yeniboy 3 olmaktadır.
Tekrar bir boşluk karakterine kadar göstericimiz hareket eder:

Bulduğumuz yeni kelimenin boyu 4 olduğu ve şimdiye kadar bulduğumuz en uzun kelimeden daha uzun olduğu için kelimebasi göstericisini ilerletiyor ve yukarıdaki şekilde bulunan yeni kelimenin ilk karakterine atıyoruz, ayrıca yenikelime göstericisi, mevcut konuma ilerletiliyor ve bir sonraki kelimenin aranmasında kullanılıyor.

Yeni bulunan kelime boyu, o ana kadar bulunan kelime boyundan daha küçük olduğu için kelimebasi değişkenimiz hala o ana kadar bulunmuş en uzun kelimeyi göstermeye devam ediyor.

Bir önceki örnekte olduğu gibi, bulunan yeni kelimenin boyutu, ilk kelimeden büyük olmadığı için değişkenimiz ilerlemiyor.

Son olarak bulduğumuz yeni kelimenin boyu, şimdiye kadar bulunan kelimelerden uzun olduğu için, göstericiyi ilerletiyor ve kelimebasi olara bu kelimenin ilk harfini gösteriyoruz. Sonuçta dizgi sonuna kadar giderken, anlık olarak bir kelimenin boyutu değişkende tutuluyor, bir kelimenin boyutunun bu değişkende tutulan boyuttan daha uzun olması durumunda bu kelimeyi gösteren bir gösterici işaretleniyor ayrıca bu yeni kelimenin boyutu, elimizde o ana kadar bulunan en uzun kelime boyutu olarak tutuluyor.
Kodun çıktısı aşağıdaki şekildedir:

Soru 5) Kullanıcıdan bir sayı okuyarak, okunan bu sayı boyutlarında bir kare matrisi, her hücresine, en yakın kenara olan uzaklığı ile doldurunuz.
Çözüm 5)
Soruda her hücreye, en yakın kenara olan uzaklık yazılması istenmiş, bu durumda örneğin 5×5 boyutunda bir matris için aşağıdaki şekilde veri girilmesi gerekir:
| 1 | 1 | 1 | 1 | 1 |
| 1 | 2 | 2 | 2 | 1 |
| 1 | 2 | 3 | 2 | 1 |
| 1 | 2 | 2 | 2 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Görüldüğü üzere kenar değerlerine 1 , bir içerdeki hücrelere 2 ve en ortadaki hücreye 3 yerleştirilmesi istenmiş.
Bu dorunun çözümünde sadece döngüler kullanılarak bir döngünün kenara olan uzaklığı hesaplanıp ekrana yazdırılabilir. Bu yöntemin çözümü aşağıdaki şekildedir:

Yukarıdaki kodda görüldüğü üzere, her hücre için, hücrenin kenara olan 4 farklı uzaklığı hesaplanmıştır. Bu değerlerden iki tanesi, koordinatları olan i ve j değerleridir ki bu değerler, sol kenara ve üst kenara olan uzaklık olarak düşünülebilir.
Ayrıca sağ kenar ve alt kenara olan uzaklıkların hesaplanması kodun 20. Ve 21. Satırlarında bulunan a ve b değişkenleri ile yapılmıştır. Matrisin boyutundan koordinat çıkarılmış ve 1 ilave edilmiştir.
Sonuçta elimizde 4 farklı kenara olan 4 farklı uzaklık bulunmaktadır. Bizden istenen bu uzaklıklardan en küçüğünü ekrana basmamız. Bu durumda kodun 4-13 satırları arasında bulunan ve verilen 4 sayıdan en küçüğünü döndüren fonksiyonu çağırarak bu 4 uzaklıktan en küçüğünü bulabiliriz.
Kodun çalışan hali aşağıdaki şekildedir:

« LZW Sıkıştırma algoritması | İkinci Dereceden Sondalama (Quadratic Probing) »
Yorumlar
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'C ile Programlamaya Giriş Quiz Soruları ve Çözümleri' isimli yazı 13 Jan 2010 tarihinde, saat: 16:03 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 800 defa okunmuştur.
Benzer yazıları C/C++, Kod Örnekleri, Programlama Dilleri, Sınavlar kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Yazarın Kitabı
Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Sıralama işleminiz poligonu...
- Şadi Evren ŞEKER: bahsettiğiniz sıralama algoritması...
- Abdurrahman ulusoy: merhaba hocam. gelişigüzel...
- Oguz Okutan: Merhaba hocam.. Fonksiyonlarda degere göre...
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
Yakın Yazılar
C ile Programlamaya Giriş Quiz Soruları ve Çözümleri
Soru Cevaplama (Question Answering, QA)
de morgan kuralı (de morgan rule)
Bağımsız düğümler (Anti Clique, Independent Set)
Emory, CS170 dersi sınav soruları çözümleri
Tembel Programlama (Lazy Programming)
Kayıplı Sıkıştırma (Lossy Compression)
C ile programlamaya giriş final sınavı çözümleri
Yahut Problemi (Özel Veya Problemi (XOR Problem, exclusive or))
İleri Beslemeli Ağlar (Feedforward Neural Networks)
Gizli Katman Sayısı (Number of Hidden Layer)
Tek Katmanlı Sinir Ağları (Single Layer Neural Networks)
Sinir Ağlarında Katmanlar (Neuron Layers)
Eksensel İzdüşüm (Axonometric Projection)
fonksiyonel programlama (functional programming)
asgari tarama ağacı (en kısa örten ağaç, minimum spanning tree)
Bağlantılar
4. sorunun 27. satırındaki if’deki büyüktür ters verilmiş galiba hocam.
yeniboyu tanımlarken hata yapmışım.
teşekkürler..