Satranç tahtasinda 4 kale [soru] [cevabi]

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
Bir satranç tahtasına sırasıyla 4 kale yerleştiriliyor, birbirini tehdit ettikleri taktirde yerleştirme işlemi baştan yapılıyor, birbirilerini tehdit etmicekleri şekilde bir konumlama sağlayan programı c/c++ ile yazınız...

ps: prosedürel ve global değişken kullanımı var...
nesne yönelimlisini ilk fırsatta yazıcam.

PHP:
#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;
//srand( time(NULL) );

const int X_LIM = 8, Y_LIM = 8;

void sifirla( bool tahta_[X_LIM][Y_LIM], const int& x_lim_, const int& y_lim_ )
{
    for( int x_ = 0; x_ < x_lim_; x_++ )
        for( int y_ = 0; y_ < y_lim_; y_++ )
            tahta_[x_][y_] = false;
}

int& konumla( int& rkm_, int duzey_ )
{
    return (rkm_ = rand() % duzey_);
}

bool kontrol( bool tahta_[X_LIM][Y_LIM], int& x_, int& y_, const int& x_lim_, const int& y_lim_ )
{
    while( tahta_[x_][y_] )
        konumla( x_, x_lim_ ), konumla( y_, y_lim_ );

    tahta_[x_][y_] = true;
    cout << "bir kale " << x_ << " - " << y_ << " konumlarına konuşlandırılmış ve tehditler için kontrol ediliyor." << endl;

    for( int _x = 0; _x < x_lim_; _x++ )
        if( tahta_[_x][y_] && _x != x_ ) // bütün argümanların sınırlar içinde olduğunu konumlama fonksiyonunda doğrulamıştık !
            return true;

    for( int _y = 0; _y < y_lim_; _y++ )
        if( tahta_[x_][_y] && _y != y_ )
            return true;

    return false;
}

int main()
{
    bool tahta_[X_LIM][Y_LIM];
    bool deneme_ = true;

    int knm_x, knm_y;

    while( deneme_ )
    {
        deneme_ = false;
        sifirla( tahta_, X_LIM, Y_LIM );
        for( int at_ = 0; at_ < 4; at_++ )
        {
            konumla( knm_x, X_LIM ), konumla( knm_y, Y_LIM );

            if( kontrol( tahta_, knm_x, knm_y, X_LIM, Y_LIM ) )
                {
                    cout << "Çakışma var !" << endl;
                    deneme_ = true;
                    break;
                }
        }
    }

    cout << " writin' by Seçkin Kükrer !" << endl;


    system( "PAUSE" );

    return 0;
}
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
basit bişey ama insanların sınavda falan ihtiyacı oluyor, en azından bi yardımımız dokunsun, yanılıyor muyum [MENTION=322625]DumDumaq[/MENTION]
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
at diye girmişsin kale yerleştirip çıkmışsın mübarek :)
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
soru benide şaşırttı onu düzelttiricem [MENTION=194661]eSa[/MENTION]'dan rica edip. :D
son anda ben gördüm arkadaş aynı sorunun at versiyonu var falan dedi aklım gitti tabi. :D
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
soru benide şaşırttı onu düzelttiricem @eSa'dan rica edip. :D
son anda ben gördüm arkadaş aynı sorunun at versiyonu var falan dedi aklım gitti tabi. :D


Ayrıca algoritma biraz eksik gibi. Zira random pozisyonlar üretiyor şu anda. Yanlış değilim inşallah.
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
Hayır rastgele pozisyonlarda yerleştirilmeleri gerekiyor, birbiri peşine yerleştirilen kaleler asla istenen koşulu sağlamaz...
 

wasp071

Doçent
Katılım
25 Şubat 2012
Mesajlar
743
Reaksiyon puanı
1
Puanları
18
Anlasam c/c++ den hertürlü yerleştirimde:) İşte bilmiyorumm lanet olası programı :)
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
o değil demek istediğim. tam incelemedim ama sanki denenmeyen pozisyonlar kalabilir.
 

LeaveNhA

Doçent
Katılım
4 Aralık 2011
Mesajlar
597
Reaksiyon puanı
5
Puanları
18
sorunun birden fazla cevabı var, haliyle denenmeyen pozisyonlar kalıcaktır..
 
Üst