Bilgisayar Programlama-I Soruları Çözümü

Bilgisayar Programlama-I Soruları Çözümü

Merhaba arkadaşlar!
Vize sınavını geride bıraktık, öncelikle hepinizin emeğine sağlık. Kolay sorular da vardı, düşündürenler de, ama önemli olan bu süreci birlikte değerlendirip nerelerde güçlü, nerelerde eksik kaldığımızı görmek.

Bu yazıda sınavda sorduğum soruların çözüm ve açıklamalarını paylaşıyorum. Amacım sadece doğru cevabı göstermek değil; neden o cevabın doğru olduğunu, hangi mantıkla oraya ulaşıldığını birlikte anlamak.

Lütfen çözümleri incelerken kendi yaptıklarınızla karşılaştırın, “şurada farklı düşündüm” dediğiniz yerleri de yorumlarda paylaşın. Bu sayede hem siz hem de arkadaşlarınız için daha verimli bir öğrenme ortamı oluşur.

Unutmayın, her sınav bir değerlendirme değil, bir öğrenme fırsatıdır.
Haydi şimdi, adım adım çözümlere geçelim!

Soru 1: Kullanıcıdan önce bir pozitif tam sayı (N) alınacaktır. Ardından program, 1’den N’e kadar olan tüm sayıları kontrol edecektir.

  • Eğer sayı hem 3’e hem 5’e tam bölünüyorsa, ekrana “Purple” yazdırınız.
  • Sadece 3’e bölünüyorsa ekrana “Red” yazdırınız.
  • Sadece 5’e bölünüyorsa ekrana “Blue” yazdırınız.
  • Hiçbirine bölünmüyorsa sayının kendisini yazdırınız.

Program tüm bu işlemleri bir döngü içinde yapmalıdır.Girdi doğrulaması için kullanıcı 0 veya negatif bir sayı girerse tekrar giriş istemek üzere koşul kullanınız. Akış Diyagramını Çiziniz

Çözüm 1:

Soru 2: Kullanıcıdan 1 ile 7 arasında bir sayı girmesini isteyen bir program yazınız. Girilen sayı, haftanın gününü temsil edecektir. Aşağıdaki kurallara göre switch–case yapısını kullanarak ekrana uygun mesajı yazdırınız:

  • 1 → Pazartesi
  • 2 → Salı
  • 3 → Çarşamba
  • 4 → Perşembe
  • 5 → Cuma
  • 6 → Cumartesi
  • 7 → Pazar

Kullanıcı 1–7 dışında bir değer girerse, switch–case içinde “Geçersiz gün!” mesajı yazdırılmalıdır. Kullanıcıdan gün bilgisi alındıktan sonra, Eğer gün Hafta içi ise: “Bugün çalışma günü.” Eğer gün Hafta sonu ise: “Bugün tatil günü.” şeklinde switch sonrasında if–else ile ek mesaj yazdırınız.

Çözüm 2:

#include <stdio.h>
#include <locale.h> // Türkçe karakter desteği için

int main() {
    // Konsolda Türkçe karakterlerin doğru görüntülenmesi için
    setlocale(LC_ALL, "Turkish"); 

    int gunNo;

    // 1. Adım: Kullanıcıdan gün numarasını al
    printf("Lütfen 1 ile 7 arasında bir gün numarası giriniz: ");
    scanf("%d", &gunNo);

    // 2. Adım: Switch-Case yapısı ile günü belirle
    switch (gunNo) {
        case 1:
            printf("Pazartesi\n");
            break; // Her durumdan sonra 'break' konulmalıdır
        case 2:
            printf("Salı\n");
            break;
        case 3:
            printf("Çarşamba\n");
            break;
        case 4:
            printf("Perşembe\n");
            break;
        case 5:
            printf("Cuma\n");
            break;
        case 6:
            printf("Cumartesi\n");
            break;
        case 7:
            printf("Pazar\n");
            break;
        default: // 1-7 dışındaki tüm değerler için
            printf("Geçersiz gün!\n");
            break;
    }

    // 3. Adım: If-Else ile hafta içi/hafta sonu kontrolü
    // '&&' (VE) operatörü kullanılır: gunNo 1'e eşit VEYA büyük VE 5'e eşit VEYA küçükse...
    if (gunNo >= 1 && gunNo <= 5) {
        printf("Bugün çalışma günü.\n");
    } 
    // '||' (VEYA) operatörü kullanılır: gunNo 6'ya VEYA 7'ye eşitse...
    else if (gunNo == 6 || gunNo == 7) {
        printf("Bugün tatil günü.\n");
    }
    // Geçersiz günler (örn: 8, 0, -1) bu bloklara girmez, 
    // çünkü switch-case zaten "Geçersiz gün!" mesajını vermiştir.
}

Soru 3: Kullanıcıdan pozitif bir tam sayı (N) isteyen bir program yazınız. Program, 1’den N’e kadar olan tüm sayıları kontrol edecek ve:

  • Çift sayıların adedini
  • Tek sayıların adedini
  • Çift sayıların toplamını
  • Tek sayıların toplamını

bir döngü kullanarak hesaplayıp ekrana yazdıracaktır. Ayrıca kullanıcı 0 veya negatif bir sayı girerse, program doğru değer girilene kadar kullanıcıdan giriş istemelidir.

Çözüm 3:

#include <stdio.h>
#include <locale.h> // Türkçe karakter desteği için

int main() {
    // Konsolda "Çift", "Tek" gibi Türkçe karakterlerin doğru görünmesi için
    setlocale(LC_ALL, "Turkish");

    int N;
    int i; // Döngü sayacımız

    // 1. Adım: Değişkenleri Tanımla ve Sıfırla
    // Toplama ve sayma işlemlerinde değişkenlerin 0'dan başlaması çok önemlidir.
    int ciftAdet = 0;
    int tekAdet = 0;
    int ciftToplam = 0;
    int tekToplam = 0;

    // 2. Adım: Girdi Doğrulaması (Pozitif Sayı Alana Kadar Sorma)
    // do-while döngüsü, koşul ne olursa olsun içindeki kodun
    // en az bir kez çalışmasını sağlar.
    do {
        printf("Lütfen pozitif bir tam sayı giriniz (N): ");
        scanf("%d", &N);

        if (N <= 0) {
            printf("Hatalı giriş! Lütfen 0'dan büyük bir sayı girin.\n");
        }
    } while (N <= 0); // N, 0'dan küçük veya eşit olduğu sürece döngü tekrar eder.


    // 3. Adım: 1'den N'e Kadar Döngü ve Hesaplama
    // 'i' 1'den başlar, N'e eşit olana kadar (N dahil) devam eder 
    // ve her adımda bir artar.
    for (i = 1; i <= N; i++) {
        
        // Bir sayının 2'ye bölümünden kalan 0 ise, o sayı çifttir.
        if (i % 2 == 0) {
            // Sayı Çift ise:
            ciftAdet++;      // Çift sayı adedini 1 artır.
            ciftToplam += i; // Çift sayıların toplamına 'i' değerini ekle.
        } 
        else {
            // Sayı Tek ise (Kalan 0 değilse):
            tekAdet++;       // Tek sayı adedini 1 artır.
            tekToplam += i;  // Tek sayıların toplamına 'i' değerini ekle.
        }
    } // for döngüsü burada biter

    // 4. Adım: Sonuçları Ekrana Yazdırma
    printf("\n--- HESAPLAMA SONUÇLARI (1-%d arası) ---\n", N);
    printf("Toplam Çift Sayı Adedi: %d\n", ciftAdet);
    printf("Çift Sayıların Toplamı: %d\n", ciftToplam);
    printf("----------------------------------------\n");
    printf("Toplam Tek Sayı Adedi:  %d\n", tekAdet);
    printf("Tek Sayıların Toplamı:  %d\n", tekToplam);
}

Soru 4: Klavyeden girilen terim sayısına göre fibonacci serisini bulan C kodunu yazınız.

Çözüm 4:

#include <stdio.h> // Ekrana yazdırma (printf) ve kullanıcıdan alma (scanf) için gerekli

int main() {

    int terimSayisi; // Kullanıcının kaç terim istediği
    int i;           // Döngü sayacı

    // 1. Adım: Serinin ilk iki sayısını belirle
    // Fibonacci serisi her zaman 0 ve 1 ile başlar
    int t1 = 0;
    int t2 = 1;

    // 2. Adım: Bir sonraki sayıyı hesaplamak için geçici değişken
    int sonrakiSayi;

    // 3. Adım: Kullanıcıdan terim sayısını al
    printf("Kaç adet Fibonacci terimi istiyorsunuz: ");
    scanf("%d", &terimSayisi);

    // 4. Adım: Seriyi ekrana yazdır
    printf("\nFibonacci Serisi:\n");

    // 'i' 1'den başlar ve kullanıcının istediği 'terimSayisi' kadar döner
    for (i = 1; i <= terimSayisi; i++) {
        
        // Mevcut ilk sayıyı (t1) ekrana yazdır
        // %d -> tamsayı (int) yazdırır
        // \n -> bir alt satıra geçer (sayılar alt alta yazar)
        printf("%d\n", t1); 

        // 5. Adım: Bir sonraki sayıyı hesapla
        // (Mevcut iki sayının toplamı)
        sonrakiSayi = t1 + t2;

        // 6. Adım: Sayıları bir sonraki adıma hazırla (kaydırma)
        t1 = t2;           // Eski ikinci sayı, yeni birinci sayı olur
        t2 = sonrakiSayi;  // Hesaplanan toplam, yeni ikinci sayı olur
    }

}

Yorumlar

Henüz yorum yok. Tartışmayı siz başlatmaya ne dersiniz?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir