testar se um valor pertence a um conjunto em linguagem C.

Iniciado por wdr, 31 de Julho de 2008, 08:34

tópico anterior - próximo tópico

wdr

Pessoal,


Em C, se eu tenho um conjunto de números inteiros ( cerca de vinte ) , existe uma maneira elegante de testar se um determinado valor pertence a esse conjunto?

é claro que eu poderia escrever algo como SE( OU OU OU OU OU ... ) , mas ficaria longo e não elegante. Em Delphi ou Pascal parece que existe um operador chamado IN. ficaria algo do tipo: IF x IN [2, 5, 7, 13] THEN ...

qual seria o melhor modo de fazer isso em C?

Obs. os inteiros que uso são pequenos e caberiam no tipo char (1 byte).

Obrigado


tfmoraes


kunigas

Que eu saiba em C não tem disso não. O jeito seria fazer um 'FOR' mesmo, que provavelmente é o que o 'IN' faz.

Entretanto, como você disse que os valores são pequenos, você pode pré-computar os valores do seu conjunto da seguinte maneira:

for (i = MIN; i<=MAX; i++)
    valor[ i ] = 0;
for (i = 0; i<n; i++)
    valor[ conjunto[i] ] = 1;


Onde MIN e MAX são o menor e maior valor respectivamente que você pode ter; n é o número de elementos do seu conjunto. Para saber se pertence ao conjunto,


if ( valor[ x ] == 1 )
    printf("Pertence\n");
else
   printf("Não pertence\n");



sprit

Bom talvez vc queira armazenas 20 inteiros em uma variavel de forma simples, acredito que seja isso:


#include<stdio.h>
#include<stdlib.h>

int main(void){
    // declarar uma variavel com 20 possicoes.
    // nao esqueca que uma matriz comeca do 0.
    int var[20];
   
    // faz um loop de 0 ate 19
    for(int i=0; i<20; i++){
            // armazena 0 na var posicao 0(var[0]), armazena 1...
            var[i]= i;
            printf("var[%d]= %d\n", i, var[i]);
    }
    system("pause");
    return 0;
}


Espero que ajude!!!
Se quiser se aprofundar mais, procure sobre matriz, vetores, variaveis....

sprit

Citaros inteiros que uso são pequenos e caberiam no tipo char (1 byte).
Bom se vc quer diminuir o tamanho use tipo:
short int variavel; // que vai de -128 ate 127 em numeros inteiros