İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Programlama Dilleri
Programlama Dilleri

Dev C Sorunu Acil Yardım

oguzkya26.12.20153 cevap2.716 görüntüleme
2015'den beri2 mesaj
#1
Aşağıdaki kodu dev c++'da projeyi açarken c++ seçip çalıştırınca gayet güzel çalışıyor ancak c seçince çalışmıyor. Bana lazım olan c dilinde çalışması hatam nerede acaba yardımcı olabilirmisiniz.

#include <stdio.h>

const int MazeHeight = 70;
const int MazeWidth = 20;


char Maze[MazeHeight][MazeWidth + 1];

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

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

for( row = 0, column = 0;;)
{
c = fgetc( pf);
if( feof( pf))
{
Maze[row][column] = 0;
break;
}
Maze[row][column] = c;
column++;
if( c == ' ')
{
row++;
column = 0;
}
}
fclose( pf);
}



const char Wall = '#';
const char Free = ' ';
const char SomeDude = '+';

class COORD
{
public:
int X;
int Y;
COORD(int x = 0, int y = 0) { X = x, Y = y; }
COORD(const COORD &coord) { X = coord.X; Y = coord.Y; }
};

COORD StartingPoint(1, 1);
COORD EndingPoint(7, 8);

void PrintDaMaze()
{
for (int Y = 0; Y < MazeHeight; Y++)
{
printf("%s\n", Maze[Y]);
}
printf("\n");
}

bool Solve(int X, int Y)
{

Maze[Y][X] = SomeDude;




if (X == EndingPoint.X && Y == EndingPoint.Y)
{
return true;
}


if (X > 0 && Maze[Y][X - 1] == Free && Solve(X - 1, Y))
{
return true;
}
if (X < MazeWidth && Maze[Y][X + 1] == Free && Solve(X + 1, Y))
{
return true;
}
if (Y > 0 && Maze[Y - 1][X] == Free && Solve(X, Y - 1))
{
return true;
}
if (Y < MazeHeight && Maze[Y + 1][X] == Free && Solve(X, Y + 1))
{
return true;
}


Maze[Y][X] = Free;


return false;
}

int main()
{
read();
if (Solve(StartingPoint.X, StartingPoint.Y))
{
PrintDaMaze();
}
else
{
printf("Damn\n");
}

return 0;
}

lab.txt dosyasındaki labirentde bu;

# ####### # # # # ### # # # # # # # # # ### # # # # # ### # # # - Pastebin.com
Cevaplar
2012'den beri173 mesaj
#2
Selamlar,

Öncelikle C de çalışmamasının bir kaç nedeni bulunmakta.
  1. C' de class yoktur. Bunun için struct kullanman gerekmektedir.
  2. global olarak tanımladığın bir dizi ya da matris için boyut belirtirken boyut olarak, gene global olarak tanımladığın ve ön değer ataması yaptığın bir değişkeni kullanamazsın. Bunun için #define tipinde bir tanım yapman gerekmektedir.
  3. C de bool diye bir tip yoktur. Kendin bu tipi oluşturabilirsin. Mesela enum tipini kullanabilirsin. Ama bunun yerine int tipini kullanman daha iyi olacaktır.
Kodu aşağıdaki gibi C' de derlenir hale getirdim.
Gerisi sende.


#include <stdio.h>

#define MazeHeight 70
#define MazeWidth 20


char Maze[MazeHeight][MazeWidth + 1];

void read()
{
    FILE *pf;
    int row, column;
    char c;
    
    pf = fopen( "lab.txt", "r");
    
    for( row = 0, column = 0;;)
    {
        c = fgetc( pf);
        
        if( feof( pf))
        {
            Maze[row][column] = 0;
            break;
        }
        
        Maze[row][column] = c;
        column++;
        
        if( c == ' ')
        {
            row++;
            column = 0;
        }
    }
    
    fclose( pf);
}

const char Wall = '#';
const char Free = ' ';
const char SomeDude = '+';


typedef struct COORD COORD;

struct COORD {
    int X;
    int Y;
};

COORD StartingPoint;
COORD EndingPoint;

void PrintDaMaze()
{
    int Y;
    
    for (Y = 0; Y < MazeHeight; Y++)
    {
        printf("%s\n", Maze[Y]);
    }
    
    printf("\n");
    
}


int Solve(int X, int Y)
{

    Maze[Y][X] = SomeDude;

    if (X == EndingPoint.X && Y == EndingPoint.Y)
    {
        return 1;
    }

    if (X > 0 && Maze[Y][X - 1] == Free && Solve(X - 1, Y))
    {
        return 1;
    }
    
    if (X < MazeWidth && Maze[Y][X + 1] == Free && Solve(X + 1, Y))
    {
        return 1;
    }
    
    if (Y > 0 && Maze[Y - 1][X] == Free && Solve(X, Y - 1))
    {
        return 1;
    }
    
    if (Y < MazeHeight && Maze[Y + 1][X] == Free && Solve(X, Y + 1))
    {
        return 1;
    }
    
    Maze[Y][X] = Free;
    
    return 0;
}

int main()
{
    StartingPoint.X = 1;
    StartingPoint.Y = 1;
    EndingPoint.X = 7;
    EndingPoint.Y = 8;
    
    read();
        
    if (Solve(StartingPoint.X, StartingPoint.Y) == 1)
    {
        PrintDaMaze();
    }
    else
    {
        printf("Damn\n");
    }
            
    return 0;
}
oguzkya Konuyu açan
2015'den beri2 mesaj
#3
Hocam öncelikle verdiğin bilgiler için teşekkür ederim kodda çalıştı ellerine sağlık çok teşekkür ederim
2012'den beri173 mesaj
#4
Rica ederim.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.