Jump to content

Recommended Posts

Posted

Boas pessoal, estou com uma pequena dúvida num programa..

Eu tenho uma função que recebe um vector como parâmetro: void verifica(*v);

Eu tentei passar o vector da seguinte maneira: verifica(&vector); vector(*vector); Estas duas maneiras diziam que o tipo int * e int*[] eram incompatíveis (ou algo do género), depois tentei assim verifica(vector); assim já não deu erro, mas depois na função eu ao usar tipo if(*v==u); dava erro no v, dizia: operand of * must be a pointer ... Não estou a perceber qual a maneira correcta de enviar o vector para a função ;x

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Resposta com um exemplo (se tivesses fornecido codigo a resposta estaria mais de acordo com a tua duvida ...)

#include <stdio.h>

int sumarray(int *array, size_t elems) {
    int sum = 0;
    while (elems--) sum += *array++;
    return sum;
}

int main(void) {
    int array1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int array2[] = {10, 20, 30, 40};
    printf("soma do array 1 = %d\n", sumarray(array1, sizeof array1 / sizeof *array1));
    printf("soma do array 2 = %d\n", sumarray(array2, sizeof array2 / sizeof *array2));
    return 0;
}

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted
bool verifica_posicoes(int *v){
int conta=0;
for(int i=0;i<4;i++){
	if(*v[i])
}
}

int main(){
char chave[4],tentativa[4];
int contaPosIguais=0,contaPosDifere;
int pos[4];
scanf("%s",chave);
scanf("%s",tentativa);
for(int i=0;i<4;i++){
	if(chave[i]==tentativa[i]){
		contaPosIguais++;
	}
	for(int j=i+1;j<4;j++){
		if(chave[i]==tentativa[j]){
			verifica_posicoes(pos);
		}
	}
}
return 0;
}

Esta ai, dá erro no *v da função, como eu disse anteriormente, estou a passar o vector pos.

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

bool verifica_posicoes(int *v){
int conta=0;
for(int i=0;i<4;i++){
	if(*v[i])
}
}

Nao uses o * na condicao; mete-a apenas com

		if(v[i])

Tirando isso a funcao ta bem ... excepto que so funciona para arrays de exactamente 4 elementos. Se alguma vez quiseres usa-la com arrays de 3 elementos nao podes.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Nao uses o * na condicao; mete-a apenas com

		if(v[i])

Tirando isso a funcao ta bem ... excepto que so funciona para arrays de exactamente 4 elementos. Se alguma vez quiseres usa-la com arrays de 3 elementos nao podes.

Neste caso o vector terá exactamente 4 posições, mas porque é que se for 3 já não posso?

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Neste caso o vector terá exactamente 4 posições, mas porque é que se for 3 já não posso?

Porque na funcao estarias a aceder ao quarto elemento do array, que nao existe!!!

int array[3];
array[3] = 0; /* BANG!! array[3] nao existe */

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Porque na funcao estarias a aceder ao quarto elemento do array, que nao existe!!!

int array[3];
array[3] = 0; /* BANG!! array[3] nao existe */

Oh, tipo mas se mudar no main para int pos[3] já posso usar a função com o array de 3 elementos 😄 ... Pensei que mesmo que mudasse não podia usar a função, estava a achar estranho xD !

Obrigado pmg  😁

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

Oh, tipo mas se mudar no main para int pos[3] já posso usar a função com o array de 3 elementos 😄 ... Pensei que mesmo que mudasse não podia usar a função, estava a achar estranho xD !

Obrigado pmg  😁

Nao, nao. Tens que mudar o 4 na funcao.

Se mudares no main para um array de 3 elementos, a funcao continua a "querer" aceder ao quarto elemento.

A melhor maneira é tirar o 4 da funcao e passar a responsabilidade do tamanho a funcao que chama a verifica_posicoes. Da forma que eu escrevi a funcao sumarray().

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Nao, nao. Tens que mudar o 4 na funcao.

Se mudares no main para um array de 3 elementos, a função continua a "querer" aceder ao quarto elemento.

A melhor maneira é tirar o 4 da função e passar a responsabilidade do tamanho a função que chama a verifica_posicoes. Da forma que eu escrevi a funcao sumarray().

ah! sim, continua a aceder ao 4 porque na função o 4 nunca muda, esta certo, deve enviar o tamanho do vector também para a função e em vez de 4 coloco esse mesmo tamanho, já entendi o que me querias dizer.. Neste caso o exercício trata-se do jogo mastemind, por isso é que eu não necessitei de mandar para la o tamanho do vector, porque a tentativa e a chave do jogo é sempre constituído por 4 elementos..

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

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.