trasmus yazdı: 24 Eyl 2024 15:08
Programı biraz daha karmaşıklaştırmak için rastgele sayı üretim aralığı kullanıcı tarafından belirlenebilir. Örneğin pozitif 1-100 sayı aralığında en az 10 sayı içeren bir değer girilmesi istenebilir. "Tahmin hakkı sınırlaması olsun mu?" diye sorulabilir ve hak sayısı sorulabilir.
Chat-gpt'ye aşağıda ki tarzda bir şeyler yazdırdım. Müsait zamanda bende kurcalayacağım.
Kod: Tümünü seç
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 100
#define MIN_NUM 1
// Fonksiyonlar
int isValidArray(int arr[], int size);
int containsAtLeast10Numbers(int arr[], int size);
int getRandomNumberFromArray(int arr[], int size);
int isClose(int guess, int target);
int main() {
int arr[MAX_NUM];
int size;
int guess;
int target;
char choice;
int maxGuesses = -1; // -1 sınırsız anlamında
int guessesMade = 0;
srand(time(NULL));
printf("Pozitif 1-100 arasi en az 10 sayi iceren bir dizi giriniz.\n");
printf("Dizi boyutunu giriniz: ");
scanf("%d", &size);
if (size < 10 || size > 100) {
printf("Dizi boyutu en az 10 ve en fazla 100 olmalidir.\n");
return 1;
}
printf("Dizideki sayilari giriniz (1 ile 100 arasinda):\n");
for (int i = 0; i < size; i++) {
scanf("%d", &arr[i]);
if (arr[i] < MIN_NUM || arr[i] > MAX_NUM) {
printf("Girdiginiz sayi aralik disinda.\n");
return 1;
}
}
// Dizide en az 10 farklı sayı var mı kontrolü (farklı sayı mı istiyorsan)
// Burada sadece dizide toplamda 10 sayı olduğundan zaten sağlanmış oluyor.
// İstersen farklı sayılar kontrolü de ekleyebilirim.
// Rastgele hedef sayı seç
target = getRandomNumberFromArray(arr, size);
printf("Tahmin hakki sinirlamasi istiyor musunuz? (E/h): ");
scanf(" %c", &choice);
if (choice == 'E' || choice == 'e') {
printf("Kac tahmin hakki olsun?: ");
scanf("%d", &maxGuesses);
if (maxGuesses < 1) {
printf("Tahmin hakki 1'den kucuk olamaz.\n");
return 1;
}
}
printf("Sayi tahmin oyununa basladiniz! 1 ile 100 arasinda sayi tahmin edin.\n");
while (1) {
if (maxGuesses != -1 && guessesMade >= maxGuesses) {
printf("Tahmin hakkiniz bitti. Kaybettiniz. Dogru sayi: %d\n", target);
break;
}
printf("Tahmininiz: ");
scanf("%d", &guess);
if (guess < MIN_NUM || guess > MAX_NUM) {
printf("Tahmin aralik disinda! Tekrar deneyin.\n");
continue;
}
guessesMade++;
if (guess == target) {
printf("Tebrikler! Sayiyi dogru tahmin ettiniz: %d\n", target);
break;
} else {
// Sıcak-soğuk geri bildirimi
if (isClose(guess, target)) {
printf("Sicak! Yaklasiyorsunuz.\n");
} else {
printf("Soguk! Uzaktasiniz.\n");
}
if (maxGuesses != -1) {
printf("Kalan tahmin hakki: %d\n", maxGuesses - guessesMade);
}
}
}
return 0;
}
// Rastgele diziden bir sayı seçer
int getRandomNumberFromArray(int arr[], int size) {
int index = rand() % size;
return arr[index];
}
// Yakınlık kontrolü, fark 10 veya daha azsa "sıcak" kabul edelim
int isClose(int guess, int target) {
int diff = guess - target;
if (diff < 0) diff = -diff;
return diff <= 10;
}
Ekran çıktısı:
Pozitif 1-100 arasi en az 10 sayi iceren bir dizi giriniz.
Dizi boyutunu giriniz: 10
Dizideki sayilari giriniz (1 ile 100 arasinda):
5
55
12
33
66
99
77
62
42
25
Tahmin hakki sinirlamasi istiyor musunuz? (E/h): h
Sayi tahmin oyununa basladiniz! 1 ile 100 arasinda sayi tahmin edin.
Tahmininiz: 1
Sicak! Yaklasiyorsunuz.
Tahmininiz: 2
Sicak! Yaklasiyorsunuz.
Tahmininiz: 5
Tebrikler! Sayiyi dogru tahmin ettiniz: 5
=== Code Execution Successful ===
Oyun akışı şöyle olacak:
1-Kullanıcıdan tahmin edilecek sayı aralığı içinden en az 10 sayı içeren bir dizi girmesi istenecek.
2-Tahmin hakkı sınırlaması istenip istenmediği sorulacak.
3-Ardından kullanıcı sayı tahmini yapacak.
4-"Sıcak" (tahmin doğruya çok yakın) ve "Soğuk" (uzak) geri bildirimleri verilecek.
5-Tahmin hakkı varsa hak bitince oyun bitecek, yoksa doğru tahmine kadar devam edecek.
Dipnot:
Sanırım çipet işi bir tık karmaşıklaştırdı. 