Jump to content
miguel__1

estrutura dinamica

Recommended Posts

miguel__1

Boas malta,

Criei um tabuleiro para um jogo mas em codigo normal sem guardar, apenas apresenta na consola, mas precisava de o passar para uma estutura dinamica, como faço? Não estou mesmo a conseguir... :confused:

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Se calhar era boa ideia colocares aqui o código (dentro das respectivas tags) e explicares melhor o que pretendes. Eu não percebi o que pretendes.

Quando dizes "em código normal" o que queres dizer? E "sem guardar" o que queres dizer?


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
miguel__1

void criatabuleiro()
{
   int i,j,t=0, colunas=0, linhas=0, dim_ok=0;
   srand(time(NULL));
   t = rand() % 2;
   if (t==1)
    printf("\n    Jogador A a definir as dimensoes do Tabuleiro!\n\n");
  else
    printf("\n    Jogador B a definir as dimensoes do Tabuleiro!\n\n");
    do
    {
		    printf("\nNº Linhas(4-8): ");
		    scanf(" %d", &linhas);
		    printf(" \nNº Colunas(6-10): ");
		    scanf(" %d", &colunas);
		    if ((colunas < 6 || colunas > 10) && (linhas < 4 || linhas > 8 ))
			    printf("Dimensoes Erradas, Inserir novamente!");
		    else if(colunas >= 11 || colunas <= 5 )
			    printf("N Colunas Erradas, Inserir novamente!");
		    else if (linhas < 4 || linhas > 8 )
			    printf("N Linhas Erradas, Inserir novamente!");
		    else
		    {
			    if(linhas >= colunas)
				    printf("Dimensoes Invalidas! O numero de colunas tem que ser superior ao de linhas!");
			    else
				    dim_ok = 1;
				    printf("Dimensoes Validas");
		    }
	    } while(dim_ok==0);

    if(colunas == 6)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |");
	    for(i=0; i< linhas; i++)
	    {
		 putchar('\n');
		 printf("| %d |", i+1);
		 putchar('\t');
		 for (j=0; j<colunas; j++)
		   {
			  if(i==linhas-1 && j==colunas-1)
			   {
				  printf("X");
				  break;
			    }
		    printf("*\t");
		    }
		    putchar('\n');
	    }
    }
    else if(colunas == 7)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |");
	    for(i=0; i< linhas; i++)
	    {
		 putchar('\n');
		 printf("| %d |", i+1);
		 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
		    putchar('\n');
	    }
    }
    else if(colunas == 8)
    {
    putchar('\n');
    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    else if(colunas == 9)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   I   |");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    else
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   I   |   J   ");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
}

void main()
{
   criatabuleiro();

}

Este é o código que tenho, e o que preciso é que o tabuleiro seja guardado numa estrutura dinamica, mas não sei como fazer.

Share this post


Link to post
Share on other sites
miguel__1

usa a função malloc

Sim mas e mais? O que é preciso mudar mais? É esse o meu problema.

Edited by miguel__1

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Pelo que percebi, tu estás a fazer a impressão do tabuleiro em runtime, certo?

Se usares o malloc como sugeriu o HHH, podes pedir as dimensões ao user e criar um tabuleiro dinamicamente!

Olha, eu para me entreter fiz um código que cria uma matriz bidimensional, pedindo as dimensões ao user e depois fiz um valor percorrer toda a matriz a partir de um ponto de partida (coordenadas x,y) também pedidos ao user.

Vê o que eu fiz e pode ser que te ajude, pelo menos a começar!


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
miguel__1

Pelo que percebi, tu estás a fazer a impressão do tabuleiro em runtime, certo?

Se usares o malloc como sugeriu o HHH, podes pedir as dimensões ao user e criar um tabuleiro dinamicamente!

Olha, eu para me entreter fiz um código que cria uma matriz bidimensional, pedindo as dimensões ao user e depois fiz um valor percorrer toda a matriz a partir de um ponto de partida (coordenadas x,y) também pedidos ao user.

Vê o que eu fiz e pode ser que te ajude, pelo menos a começar!

Sim, é mesmo isso. Eu tenho que mudar de runtime para estutura dinamica. Onde posso encontrar isso que fizes-te?

Share this post


Link to post
Share on other sites
miguel__1

Boas malta,

estou com um erro estranho que nunca me apareceu: undefined reference to `WinMain@16'

O codigo que tenho é:

#include <stdio.h>
#include <ctype.h>
#include "head1.h"

char** criar_tabuleiro(int colunas, int linhas)
{
   int **T;
  int i, j;
  T = malloc (linhas * sizeof (int *));
  for (i = 0; i < linhas; i++)
    T[i] = malloc (colunas * sizeof (int));
   for(i=0; i<linhas; i++)
   {
    for(j=0; j<colunas; j++)
    {
	    if (i==linhas-1 && j==colunas-1)
		    printf("X");
	    else
		    printf('*');
    }
   }
   return T;
}
void imprime_tabuleiro (char **tab, int colunas, int linhas)
{
   int i, j;
   system("cls");
   for(i=0; i<linhas; i++)
   {
    for(j=0; j<colunas; j++)
    {
	    printf("%c", tab[i][j]);
    }
   }
}

void aumenta_tabueiro(int colunas, int linhas)
{
   colunas +=1;
   linhas +=1;
   int i, j;
   system("cls");
    if(colunas == 6)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |");
	    for(i=0; i< linhas; i++)
	    {
		 putchar('\n');
		 printf("| %d |", i+1);
		 putchar('\t');
		 for (j=0; j<colunas; j++)
		   {
			  if(i==linhas-1 && j==colunas-1)
			   {
				  printf("X");
				  break;
			    }
		    printf("*\t");
		    }
		    putchar('\n');
	    }
    }
    else if(colunas == 7)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |");
	    for(i=0; i< linhas; i++)
	    {
		 putchar('\n');
		 printf("| %d |", i+1);
		 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
		    putchar('\n');
	    }
    }
    else if(colunas == 8)
    {
    putchar('\n');
    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    else if(colunas == 9)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   I   |");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    else if(colunas == 10)
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   I   |   J   ");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    else
    {
	    putchar('\n');
	    printf("	 |  A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   I   |   J   |   K   |");
	    for(i=0; i< linhas; i++)
	    {
			 putchar('\n');
			 printf("| %d |", i+1);
			 putchar('\t');
			 for (j=0; j<colunas; j++)
			   {
				  if(i==linhas-1 && j==colunas-1)
				   {
					  printf("X");
					  break;
				    }
			    printf("*\t");
			    }
			    putchar('\n');
	    }
    }
    printf(" %d ", colunas);
}
void jogadas(char **tab, int colunas, int linhas)
{
   int vez =0, linha_jogada=0, veneno = 0, op, check=0;
   char coluna_jogada;
   imprime_tabuleiro (**tab, colunas, linhas);
   ((vez % 2) + 1);
   if(vez == 0)
    printf("\n\nJogador A:");
   else
    printf("\n\nJogador B:");
   //printf("\n\n Jogador %d ")
   do{
    do{
    printf("\n\nLinha: \n");
    scanf(" %d", &linha_jogada);
	    if(linha_jogada > linhas)
		    printf("Nº Linhas invalido!");
	    else
		    check = 1;
    } while(check !=1);
    do{
    check = 0;
    printf("\n\nColuna: \n");
    scanf(" %c", &coluna_jogada);

		    check = 1;
    } while(check != 1);

    imprime_tabuleiro(**tab, coluna_jogada, linha_jogada);
	    do{
		    printf("\n\n1 - Nova Jogada\n");
		    printf("2 - Mostrar Jogadas Anteriores\n");
		    printf("3 - Aumentar Dimensao do Tabuleiro\n");
		    printf("Opcao: ");
		    scanf("%d", &op);
		    switch(op){
			    case 1: op = 1;
			    case 2: printf("mostra_jogadas()");
			    case 3: aumenta_tabueiro(coluna_jogada, linha_jogada);
		    }
	    }while(op!=1);
   }while(veneno == 0);
}

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Eu não percebo nada de programação em Windows, mas saltou-me algo à vista que não sei se está correcto. A forma como tu alocas memória para a variável "tabuleiro".

Se perquisares pela net, encontras pelo menos 2 formas de alocar memória para uma matriz bidimensional!

Uma é alocares memória coluna a coluna e depois linha a linha, que acho que é o que tentaste fazer.

A outra é alocares memória de uma só vez e o acesso às posições ser feita de uma forma menos intuitiva.

O primeiro método está descrito aqui no fundo da página... Dá uma vista de olhos!

Edited;

Bem, se calhar o problema não está aí!!!

Tenta colocar uns printfs pelo meio do código para tentares perceber onde é que o programa crasha!

Edited by PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
HappyHippyHippo

sem entrar em questões de entry points de uma aplicação (porque parece que estas a começar)

vais fazer isto:

no teu visual studio (sim eu sei que tens o visual studio ... tenho um dedinho que adivinha), vais carregar com o botão direiro sobre o projecto da tua solução.

(nota : é o projecto e não a solução !!!)

vais às propriedads/proprities (última opção do popup que te apareceu)

na janela que te apareecu, vais escolher a opção "linker" no lado esquerdo

dentro do linker, vais escolher system/sistema

ai, na primeira opção que diz subsystem/subsistema, vais escolher consola(/SUBSYSTEM:CONSOLE)

gravas e recompilas ... e prontos ... está resolvido


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
miguel__1

sem entrar em questões de entry points de uma aplicação (porque parece que estas a começar)

vais fazer isto:

no teu visual studio (sim eu sei que tens o visual studio ... tenho um dedinho que adivinha), vais carregar com o botão direiro sobre o projecto da tua solução.

(nota : é o projecto e não a solução !!!)

vais às propriedads/proprities (última opção do popup que te apareceu)

na janela que te apareecu, vais escolher a opção "linker" no lado esquerdo

dentro do linker, vais escolher system/sistema

ai, na primeira opção que diz subsystem/subsistema, vais escolher consola(/SUBSYSTEM:CONSOLE)

gravas e recompilas ... e prontos ... está resolvido

Por acaso o teu dedo acertou, eu tenho o visual studio instalado mas não o uso, o que uso é o CodeBlocks. Mas o problema ja está resolvido :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.