Percorrer tabela de valores

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Percorrer tabela de valores

Mensagempor geraldomelo » 28 Nov 2008 04:07

Ola Pessoas .. vamos a essa seqüencia :
int const tabela[40] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};

se eu fizer :


a=tabela[x]; e ir incrementando o x até 40 , ate aqui tudo ok , mas ai eu preciso de mais duas variaveis tipo a1=tabela[x+14] e a2=tabela[x+27] , ou seja , preciso percorrer ela , com tres variaveis distintas e defasadas cada uma em 1/3 ... ai eh que tá , como fazer isso ?? do jeito que está ai acima , eles sempre vão começar do mesmo ponto , quando o x zerar , e eu queria que as 3 variaveis "corressem" a tabela inteira , tipo ficasse dando volta , se eh que vcs me entenderam .. tipo , o a1 sempre vai começar da posição 14 do jeito que está ai . mas oque eu quero eh que quando ele chegasse na posição 40 , ele começasse na posição 0 e consequentemente o a2 estaria na posição 14 e o a , estaria na posição 27 , ou seja estaria uma "volta " atrás de a1 e a2

abs

Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Re: Percorrer tabela de valores

Mensagempor andre_luis » 28 Nov 2008 08:04

Geraldo,


Porque não implementa isso via função ?
A variável de saída pode ser carregado num array :
Código: Selecionar todos
TYPE_ESTRUTURA int [3]  ;
valor TYPE_ESTRUTURA ;
valor = f ( tabela[0] , offset ) ;

Sendo algo tipo :

TYPE_ESTRUTURA f ( *int Table , char posicao )
{
char v1, v2 , v3 ;
resultado TYPE_ESTRUTURA ;

v1 = valor [ posicao ] ;
v2 = valor [ posicao + 14 ] ;
v3 = valor [ posicao + 27 ] ;

resultado = [ v1 , v2 , v3 ]
return (  resultado )
}



+++
Editado pela última vez por andre_luis em 28 Nov 2008 08:27, em um total de 3 vezes.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Jorge_Francisco » 28 Nov 2008 08:15

Geraldo,

É o que o andre_teprom disse, faz uma função, a não ser que só tenha colocado aquele array somente para exemplificar e o conteudo não seja aquele.

Explique melhor, a vai de 0 a 40?a1 vai de 14 a 40 ou de 14 a 27?e a2? Depois que chegar ao 40, volta ao 0?

Abraço
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Djalma Toledo Rodrigues » 28 Nov 2008 10:30

Parece que ele quer contadores em anel

1 a 40 14 a 13 (passando por 40) e 27 a 26 (idem)
´.
Editado pela última vez por Djalma Toledo Rodrigues em 01 Dez 2008 09:01, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Re: Percorrer tabela de valores

Mensagempor Renie » 29 Nov 2008 19:07

Oi G!

a resposta é bem simples!

Use 3 indexadores!

Não uso C, tente entender!

posicao, posicao1 e posicao2

posicao é seu index primário, você já deve ter um tratamento para o mesmo!

posicao1 = posicao + 14
if (posicao1 > 40) { posicao1 = posicao1 -40) // acho que é assim em C

posicao2 = posicao + 27
if (posicao2 > 40) { posicao2 = posicao2 - 40}

e use eles como indexadores da sua tabela circular!
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor barboza » 29 Nov 2008 21:47

Código: Selecionar todos
idx1++;
idx1 %= sizeof(tabela);

idx2 = idx1 + 14;
idx2 %= sizeof(tabela);

idx3 = idx1 + 27;
idx3 %= sizeof(tabela);


dado1 = tabela[idx1];
dado2 = tabela[idx2];
dado3 = tabela[idx3];




Se sua tabela realmente tem os valores que colocou, você não precisa dela, pois o dado será o idx + 1.
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 ivan » 30 Nov 2008 20:27

Uma lista encadeada com 3 indices. Acessou, idx aponta para o prox.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor geraldomelo » 30 Nov 2008 20:53

pessoal , obrigado a todos ... esta resolvido .. a solução do Renie satisfez oque precisava ... ah sim , os valores contidos na tabela são só ilustrativos

abraço a todos .. Valew Renie

Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP


Voltar para PIC

Quem está online

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

x