Ir ao conteúdo

Posts recomendados

Postado

Eu tenho um exercício de programação, onde a função recebe uma matriz NxN e faz uma serie de procedimentos (não pode ser uma matriz vazia, todos os seus valores tem que ser inicializados, o usuario não pode escolher esses valores ou a dimensão da matriz). Eu consigo fazer se ja defino antes qual é o valor de N, porém o exercício pede para qualquer valor N. A minha pergunta é : tenho como fazer um programa ou existe uma função no qual descobre qual é a dimensão da matriz? Se eu conseguir colocar esse valor em uma variável, resolveria meu problema.

  • Amei 1
Postado
36 minutos atrás, Junior Conceição disse:

é só você iniciar a matriz normalmente e depois pedir pro usuário digitar o valor de N.


int n;
int matrix[n][n];
scanf("%d", &n);

 

Como falado anteriormente, vai acontecer uma serie de procedimentos de acordo com os valores da matriz, mas se eu fizer o que me mostrou, todos os valores não vão ser definidos. A matriz seria um tabuleiro, e seus valores seriam peças desse jogo.

  • Curtir 1
Postado

Se a função recebe (por parâmetros formais) uma Matriz (precisamente o local na memória de uma) não existe método (na sintaxe) que permita desvendar (adivinhar) as dimensões da matriz.

 

 

  • Curtir 1
Postado
3 horas atrás, lucas Bunzen disse:

o usuario não pode escolher esses valores ou a dimensão da matriz). Eu consigo fazer se ja defino antes qual é o valor de N, porém o exercício pede para qualquer valor N

 

O exercíçio pede qualquer valor de N, o usuário não pode escolher o valor de N.

 

E aí? Quem pode escolher o tal valor de N? Você? então não há dúvida. 

 

Se é uma função, não seria apenas um parâmetro?

  • Curtir 1
Postado
10 minutos atrás, arfneto disse:

 

O exercíçio pede qualquer valor de N, o usuário não pode escolher o valor de N.

 

E aí? Quem pode escolher o tal valor de N? Você? então não há dúvida. 

 

Se é uma função, não seria apenas um parâmetro?

O exercicio diz que dado uma matriz NxN que já existe e já foi inicializada, crie uma função void jogo(int matriz[N][N]){...}, ouseja, eu não posso pedir para o usuario o valor N, pois nem ele pode saber. Eu ate posso saber qual é a dimensão, mas como vou ajustar a variável N se tiver 1000 tabuleiros diferentes? E se eu não tiver acesso a essas matrizes, não existe nenhuma forma de ver sua dimensão?

  • Curtir 1
Postado
7 horas atrás, lucas Bunzen disse:

O exercicio diz que dado uma matriz NxN que já existe e já foi inicializada, crie uma função void jogo(int matriz[N][N]){...}, ouseja, eu não posso pedir para o usuario o valor N, pois nem ele pode saber. Eu ate posso saber qual é a dimensão, mas como vou ajustar a variável N se tiver 1000 tabuleiros diferentes? E se eu não tiver acesso a essas matrizes, não existe nenhuma forma de ver sua dimensão?

 

Talvez possa postar o enunciado...

A memória do computador é linear. Uma matriz é dada por um endereço, matriz no seu caso, e esse tal N que seria um parâmetro. Não existe forma de ver sua dimensão. Em C e C++ uma tal matriz de mais de uma dimensão é alocada por linha e o compilador faz as contas de acordo para acessar os valôres de acordo com os índices.

Dias atrás postei esse programa https://www.clubedohardware.com.br/forums/topic/1427656-retornando-array-2d-de-funções/?tab=comments#comment-7701240

 

que mostra como usar o mesmo endereço, como esse do seu caso, int matriz[N][N] para acessar como uma matriz de várias dimensões. Talvez ajude a entender o mecanismo disso.

 

  • Curtir 1
Postado
19 horas atrás, lucas Bunzen disse:

O exercicio diz que dado uma matriz NxN que já existe e já foi inicializada, crie uma função void jogo(int matriz[N][N]){...}, ouseja, eu não posso pedir para o usuario o valor N, pois nem ele pode saber.

 

1Eu ate posso saber qual é a dimensão, mas como vou ajustar a variável N se tiver 1000 tabuleiros diferentes?

2E se eu não tiver acesso a essas matrizes, não existe nenhuma forma de ver sua dimensão?

 

1 Supondo que é constante N do algoritmo, tu ajustas em tempo de programação.

enum {N = 10000}; /* Ajuste de 'N': Limitado !! */
void func (int matriz[N][N]) {...}

 

2 Uma matriz é uma tipo de estrutura primitiva, determinar suas dimensões (ou até seu espaço) é impossível se fora do seu escopo de declaração (onde é, naturalmente, um ponteiro).

/******************************************************************************

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby, 
C#, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS, JS
Code, Compile, Run and Debug online from anywhere in world.

*******************************************************************************/
#include <stdio.h>
enum {N = 100};
void func (int matriz[N][N])
{
    printf ("Fora do Escopo: %lu\n", sizeof matriz);
}
int main()
{
    int matriz[N][N];
    
    func (matriz);
    printf ("Dentro do Escopo: %lu\n", sizeof matriz);

    return 0;
}

/* Obs: nomes iguais, objetos diferentes */

 

Bons Estudos.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...