Ir para conteúdo
Fórum Script Brasil

gbplayer

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Tudo que gbplayer postou

  1. Fiz este programa, que executa normalmente até a opção de pesquisa de array, quando ele trava. O que há de errado? #include<stdio.h> #include<stdlib.h> #include<conio.h> #define TAM 100 void lerArray(int[],int); void ordenaArray(int[],int); int pesquisaArray(int[],int,int); int a[TAM]; main() { int fim=0,opcao,tam,elemento,pesquisa,pos; int chave1=0; while(!fim) { system("cls"); printf("Programa de pesquisa binaria em arrays\n" "Escolha uma opcao:\n\n" "1. Ler array\n" "2. Pesquisar elemento no array\n" "3. Sair\n"); scanf("%d",&opcao); switch(opcao) { case 1: { printf("Qual o tamanho do array?\n"); scanf("%d",&tam); while(tam<1||tam>TAM) { system("cls"); printf("O array deve ter entre um e %d elementos.\n" "Quantos elementos havera no array?\n",TAM); scanf("%d",&tam); } int a[tam]; lerArray(a,tam); ordenaArray(a,tam); chave1=1; } break; case 2: { if(chave1==1) { printf("Que elemento sera pesquisado?\n"); scanf("%d",&elemento); pesquisa = pesquisaArray(a,pos,elemento); if(pesquisa==0) printf("O elemento %d foi encontrado na posicao %d.\n",elemento,pos); if(pesquisa==1) printf("O elemento não foi encontrado!\n"); } else printf("Leia um array antes!\n"); } break; case 3: fim=1; break; default: printf("Digite 1, 2 ou 3!\n"); break; } getch(); } } void lerArray(int a[], int tam) { int i; printf("Digite os termos, separados por enter ou espaco:\n "); /*Impressão do pedido de entrada pelo teclado*/ for(i=0;i<tam;i++) /* lerArray usa um for para receber pelo teclado os valores do array, de entrada[0]*/ scanf("%d",&a); /*até entrada[tam]*/ } void ordenaArray(int a[],int tam) { int passo,aux,cont; for (passo=1;passo<tam;passo++) { for(cont=0;cont<tam-passo;cont++) { if(a[cont]>a[cont+1]) { aux=a[cont]; a[cont]=a[cont+1]; a[cont+1]=aux; } } } } int pesquisaArray(int a[],int pos,int elemento) { int tam; int inf=0,sup=tam-1,meio; meio=(inf+sup)/2; if(a[meio]==elemento) { pos=meio; return 0; } else if(a[meio]<elemento) return pesquisaArray(a,meio+1,elemento); else return pesquisaArray(a,meio-1,elemento); return 1; }
  2. Olá, preciso fazer um programa C que realize pesquisa binária em um array segundo o seguinte enunciado: "Implemente um programa em C que receba um array de inteiros da mesma forma que no programa da questão anterior e faça uso seguinte função para pesquisa binária (2.0): /* Realiza pesquisa binária em um array de inteiros Retorna 0 caso o elemento seja encontrado, neste caso , a variável pos contém a primeira posição de ocorrência do elemento no array Retorna 1 caso contrário */ int pesquisaArray(int a[], int &pos, int elemento) Atentar que para pesquisa binária o array precisará ser ordenado primeiro – incluir no seu código a função para ordenação ou então garantir que na leitura do array ele já fique ordenado. Seu programa deverá contemplar o seguinte menu de opções em loop: 1. Ler array 2. Pesquisar elemento no array 3. Sair" :blink: As partes do menu switch e as funções de entrada e ordenação de array eu consegui fazer, mas não consigo fazer a pesquisa binária do modo como a questão pede. Parece que é preciso o uso de ponteiros, mas ainda não estudamos isso. Alguém pode me explicar como fazer com ponteiros, e se houver como, um modo de fazer sem ponteiros? :rolleyes: Obrigado!
×
×
  • Criar Novo...