Busca em vetor não ordenado.
Linha | Codigo |
001 | // Prof. Leo^nidas - http://www.matematica.br http://line.ime.usp.br |
002 | // MAC0122 - 2017 |
003 | // |
004 | // Descricao: |
005 | // 1. funcao "busca(int vet[], int n, int x)" que devolve i se x ocorre primeiro na posicao i, -1 em caso contrario |
006 | // 2. programa principal que |
007 | // * entrada dados: usuario digita valores ate que entra negativo, primeiro valor e' guardado na posicao 0 e assim por diante |
008 | // o ultimo valor digitado (negado) NAO sera' armazenado! |
009 | // * buscas: usando a funcao de 1, o usuario devera digitar um valor, se negativo pare (e nada imprime), senao |
010 | // verifique se valor no vetor (imprimindo sua posicao ou -1 se nao estiver no vetor) |
011 | // o programa para quando usuario digitar um valor negativo (neste caso o programa deve imprimir NADA). |
012 | |
013 | #include <stdio.h> |
014 | |
015 | #define MAX 50 |
016 | |
017 | // Vetor nao ordenado |
018 | // Param: 'vet[]' vetor com dados, 'int n' numero de elementos no vetor, 'int x' elemento buscado |
019 | // Devolve: j entre 0 e n-1 se encontrou na posicao j; -1 se x nao pertence a 'vet[]' |
020 | int busca (int vet[], int n, int x) { |
021 | int j; |
022 | for (j=0; j<n; j++) { // invariante: x NAO pertence a 'vet[0]' ate 'vet[j-1]' |
023 | if (vet[j]==x) |
024 | return j; // se executar essa linha => 'vet[j]' contem x e e' a primeira ocorrencia |
025 | } |
026 | return -1; |
027 | } |
028 | |
029 | int main (void) { |
030 | int n, vet[MAX]; |
031 | int i, x = 0; |
032 | // entrada de dados - tamanho do vetor (quantos dados uteis) |
033 | scanf("%d", &n); |
034 | // entrada de dados - supor valor nao negativos |
035 | for (i=0; i<n; i++) |
036 | scanf("%d", &vet[i]); |
037 | |
038 | // busca elementos (digitar negativo finaliza programa) |
039 | x = 0; |
040 | while (x>=0) { |
041 | scanf("%d", &x); |
042 | if (x>=0) { |
043 | i = busca(vet, n, x); |
044 | if (i>=0) |
045 | printf("%d\n", i); |
046 | else |
047 | printf("-1\n"); // NAO encontrado |
048 | } |
049 | } |
050 | return 0; |
051 | } |