Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

miguel__1

estrutura dinamica

Mensagens Recomendadas

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:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
miguel__1

usa a função malloc

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

Editado por miguel__1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Editado por PsySc0rpi0n

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.