Şimdi Ara

C de Labirent Uygulaması (Yardım)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
2.480
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Aşağıdaki kodları bi siteden buldum. Bizede buna benzer bir ödev verildi. kodları incelemek istedim. Fakat bi kaç yeri anlamadım.

    /*asagidaki fonksiyon ile Textfile'i okutuyoruz*/ kısmından sonra sanırım laby.txt adlı dosyayı bir yerden okutmamız lazım. Bunun içinde kendi yaptığımız yada hazır bir labirent olacak. Fakat bunu nereye ve ne şekilde kaydetmemiz lazım anlayan birilerinin yardımı lazım.

    edit: projeleri nereye kaydediyorsa oraya yapıştırmamız gerekiyor sanırım.

    2. sorumda # define WAIT for(;;) daki for(;;) ne işe yarıyor ve yerine başka bir ifade kullanabilir miyiz?

    Ayrıca programı çözebilen var mı? Ben bir türlü yazdığım labirenti çözemiyorum.

    Programı aldığım yerde yapılan labirent ve çözümünü koymuşlar. Aynı labirenti yaptım aynı değerleri girdim fakat çalışmadı.

    start(row column): 1 1
    finish(row column): 19 19

     C de Labirent Uygulaması (Yardım)


    ##################### 
    # # # #
    # # ############# # #
    # # # # #
    # # ###### ###### # #
    # # # # # # # #
    # # # # ##### # # # #
    # # # # # # # # #
    # # # # ## ## # # # #
    # ### ### # # # # #
    # # # # # # #
    # # # # # ### ### #
    # # # # ## ## # # # #
    # # # # # # # # #
    # # # # ##### # # # #
    # # # # # # # #
    # # ###### ###### # #
    # # # # #
    # # ############# # #
    # # # #
    #####################


    Bu da benim yaptığım labirent :
    ############ 
    # # #
    # # ########
    # # ####
    # # ########
    # # # #
    # # ### # #
    # # ### ####
    # # #
    ############



    Şimdiden teşekkürler...

    KODLAR:

    # include <stdio.h> 
    # include <stdlib.h>
    # include <string.h>

    # define WAIT for(;;)

    char labyrinth[100][100]; //global bir Array tanimliyoruz

    /*asagidaki fonksiyon ile Textfile'i okutuyoruz*/

    void read()
    {
    FILE *pf;
    int row, column;
    char c;

    pf = fopen( "laby.txt", "r");

    for( row = 0, column = 0;;)
    {
    c = fgetc( pf);
    if( feof( pf))
    {
    labyrinth[row][column] = 0;
    break;
    }
    labyrinth[row][column] = c;
    column++;
    if( c == ' ')
    {
    row++;
    column = 0;
    }
    }
    fclose( pf);
    }
    /*Labirenti displayde gösteriyoruz*/

    void output()
    {
    int row, column;
    char c;

    for( row = 0, column = 0; c = labyrinth[row][column];)
    {
    printf( "%c", c);
    column++;
    if( c == ' ')
    {
    row++;
    column = 0;
    }
    }
    }

    int way( int start_z, int start_s, int finish_z, int finish_s)
    {
    if( (start_z == finish_z) && (start_s == finish_s))
    {
    labyrinth[start_z][start_s] = '+';
    return 1;
    }
    /* Eger verilen baslangic ve cikis koordinatlari
    arasinda yol bulunursa cikis noktsini "+" isaretliyoruz.
    Ve bu basarili yol icin 1 geriveriyoruz.*/


    if( labyrinth[start_z-1][start_s] == ' ')
    {
    labyrinth[start_z][start_s] = '^';
    if( way( start_z-1, start_s, finish_z, finish_s))
    return 1;
    }

    /* Hedefimiz olan noktada degiliz ve bunun icin önce bir kere yukariya (start-z-1) gidiyoruz. Bu mümkün ise orada (labyrinth[start_z-1][start_s]) "^" isaretliyoruz. Bulundugumuz o noktadan sonra rekursiv bir yol daha bulup bulamadigimiza bakiyoruz.*/

    if( labyrinth[start_z+1][start_s] == ' ')
    {
    labyrinth[start_z][start_s] = 'v';
    if( way( start_z+1, start_s, finish_z, finish_s))
    return 1;
    }

    /* Daha hedefte degiliz ve yukariya deneme bizi amacimiza götürmedi. Bu sefer asagiya deniyoruz.*/

    if( labyrinth[start_z][start_s-1] == ' ')
    {
    labyrinth[start_z][start_s] = '<';
    if( way( start_z, start_s-1, finish_z, finish_s))
    return 1;
    }

    /* Asagiya ve yukariya gitmek birsey getirmadi ve sola gitmeyi deniyoruz.*/

    if( labyrinth[start_z][start_s+1] == ' ')
    {
    labyrinth[start_z][start_s] = '>';
    if( way( start_z, start_s+1, finish_z, finish_s))
    return 1;
    }

    /* Bütün denemeler amacimiza yardim etmedi. Ve tek sansimiz saga gitmek*/

    labyrinth[start_z][start_s] = ' ';
    return 0;

    /* Bütün denemeler basarili olmadi ve bizi cikmaza götürdü. Isaretlemeyi geri aliyor ve programda bu basarisizligi bildiriyoruz.*/

    }

    main()
    {
    int start_z, start_s, finish_z, finish_s;

    read(); // Labirenti okutuyoruz
    output(); // Displayde gösterme

    printf( "Start (row column): ");
    scanf( "%d %d", &start_z, &start_s);
    printf( "finish (row column): ");
    scanf( "%d %d", &finish_z, &finish_s);
    printf( "");

    /*Baslangic ve cikis koordinatlari klavyeden okutuyoruz*/

    if( way( start_z, start_s, finish_z, finish_s))
    output();
    else
    printf( "Sonuc bulunamadi!");

    /*way fonksiyonunun yardimi ile Cikis yolu arama ve
    yolu displaye gösterme*/

    WAIT;
    }



    < Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 19 Mart 2011; 13:19:40 >







  • for(;;) satırı sonsuz döngü kurar. Bunu WAIT şekline getirmiş arkadaş. Fakat niye programın sonuna böyle birşey koymuş onu anlamadım. Ben sonsuz döngü için while(1); yazarım.

    Program bir text dosyası aracılığıyla okuduğu labirenti çıkış yolunu da işaretleyerek ekrana basıyor sanırım. Labirenti özyinelemeli olarak dolaşmış. Fakat bulunduğumuz konumu nasıl anlıyor? Ne bizden istiyor ne de dosyada işaretli...

    Uygun bir zamanda üzerinde çalışayım güzelmiş.
  • büyük labirenti koyduğumda program hata veriyor küçüğü koyduğumda ekrana yazdırıyor fakat doğru çalışmıyor. hala çözemedim



    < Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 20 Mart 2011; 14:00:14 >
  • C de labirent çözen programın mantığı basittir. Şöyle hayal et, elini sağ yada sol duvara yasla ve çıkışı bulana kadar çekme. Program orada bir duvar olduğunu bilsin ve ilerlesin. Labirent çözülür.
  • Stack mantığı ile hareket ediyor sanıyorum. Şöyle ki; en başta hep sağını deniyor, sonra aşağıyı, solunu ve en son yukarısını. Yol devam ettiği sürece devam ediyor. Çıkmaz sokağa geldiği zaman ise geri dönüp kaldığı yerden devam ediyor. Yani sağına bakıyor, boş ise (Duvar yok ise) devam ediyor, ve yeni karede tekrar sağına bakıyor boş ise devam ediyor. Sağ tarafını dolu görene kadar devam ediyor. Dolu gördüğünde bu sefer bulunduğu karenin altına doğru ilerlemeye çalışıyor. Sonra soluna ve en son da yukarısına. Eğer hepsinde çıkmaz sokağa varırsa, bu sefer bir önce geldiği kareye dönüyor ve orada kaldığı yerden devam ediyor. Böylelikle bütün kombinasyonları deneyerek yolunu buluyor. Biraz karışık oldu galiba :)
  • Yapay Zeka’dan İlgili Konular
    c'de yardım
    14 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.