Dúvida com Vetor ou Matriz !!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida com Vetor ou Matriz !!!

Mensagempor Andre_Cruz » 17 Jan 2010 22:02

Estou trabalhando com um 16F628A, em C com o compilador Hitech.
Criei uma matriz ou vetor(acho que são as mesmas coisas) do tipo inteira com 250 posições, inicie as posições, ai me veio a dúvida, como pegar o valor da posição da matriz e colocar ela em uma variavel ?

Por exemplo:

Código: Selecionar todos
//Valores para exemplo
unsigned int
 teste [250] = {0,10,20,30,40,50,60,70,80};

//Variavel que recebera o valor da matriz teste.
unsigned int
 valor = 0;

//Preciso atribuir o valor "10" que esta na posição 1 na matriz na var "valor"
//valor = teste[1];


Pesquisei na internet e em livros mas não consegui, por isso estou recorendo ao pessoal aqui do forum.

Agradeço a ajuda e participação de todos.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor ze » 18 Jan 2010 06:28

tente:
const unsigned int teste [250] = {0,10,20,30,40,50,60,70,80};
int ... lá se vai 1/4 da flash do chip...
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor RobL » 18 Jan 2010 06:41

Você quer o índice do elemento da matriz ?
Dado um valor da matriz, qual o seu índice?

Crie um looping com um contador iniciando em zero. Teste o valor, no seu exemplo, até encontrar o valor 10. Ao encontrar o valor o contador tem o índice.

Se sua matriz não tiver valores iguais com índices diferentes fica simples.

Conforme observação do Lelis, se seus elementos não ultrapassarem 255 e positivo, use algo como unsigned char, ou seja algo com 1 byte que tenha no seu compilador.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Andre_Cruz » 18 Jan 2010 09:04

lellis,

Vou testar com o const na hora de declarar a matriz.

RobL,
Eu preciso, colocar o valor armazenado na posição X (Que é o indice) da matriz, em uma variavel inteira.

O indice eu vou passar para a matriz.

Estou tentando assim:

valor = &teste[1];

Mas não esta funcionando.

Gostaria de saber como fazer.

Abraço a todos
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor RobL » 18 Jan 2010 10:29

Matriz é um ponteiro, então:
var_int = (teste + 0) ; // endereço de teste[0]
var_int = *(teste + 0) ; // valor de teste[0] var_int = 0
var_int = *(teste + 1) ; // valore de teste[1] var_int = 10...etc

Definindo ponteiro apontado para a matriz teste:
Você quer o endereço de um elemento da matriz. Supondo que seja isso:
int endereco ;
int *pointer ;
pointer = teste ;
Abaixo vai andando pelos elementos sem deferenciar:
endereco =(int *) pointer + 0; // endereço de teste[0]
endereço = (int *) pointer + 1 // etc
Dependendo de suas definições pode precisar cast.

Se preciso for pegar o endereço de cada elemento int da matriz veja a seguir:
Se voce criar um outro ponteiro, int, que aponta para o ponteiro criado acima (o pointer que aponta para teste) ao deferenciar esse novo ponteiro você obtem o endereço de cada inteiro da matriz.

Eu preciso, colocar o valor armazenado na posição X (Que é o indice) da matriz, em uma variavel inteira.


Creio que não seja isto, pois isto estás cansado de fazer :
valor = teste[n] ;
ou com ponteiros
valor = *pointer; // para o elemento que o ponteiro está apontando
vai pegaro valor inteiro de sua matriz e associar a int valor.
Abaixo pega o valor e aponta para o próximo.
valor = *(pointer+n) ; // n índice da matriz
ou ainda passando um numero para um elemento:
*(pointer + n) = valor ;

Rapaz penso que ainda não entendí sua dúvida.
Está dando algum tipo de erro? Poste aí

Seja lá o que for, não esqueça que "teste"não é uma variável mas um endereço fixo. Com ponteiros você pode pegar o valor, de cada elemento da matriz, ou o endereço de cada elemento.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor barboza » 18 Jan 2010 20:45

Andre_Cruz escreveu:lellis,

Estou tentando assim:

valor = &teste[1];

Mas não esta funcionando.

Gostaria de saber como fazer.




O certo é:

Código: Selecionar todos
valor = teste[1];


Pois o que esta fazendo é pegar o valor do endereço ao invés do conteudo.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Sergio38br » 18 Jan 2010 22:35

Senhores uma duvida? por que teste[1] e não teste[0], uma matriz não começa no end. 0 até o limite??

[ ]`s
Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor RobL » 19 Jan 2010 10:14

Está com índice 1, penso ser como exemplo. Ele quer ler todos de zero até o último.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Andre_Cruz » 21 Jan 2010 20:46

Obrigado pessoal era

valor = teste[1];

Mesmo.

Agradeço a todos !!!

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x