1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Criar programa em C

Discussão em 'Programação' iniciada por tinuviel12, 30 de Junho de 2009. (Respostas: 4; Visualizações: 3900)

  1. Preciso criar um programa em C que tenha um menu assim:
    1-Crie um vetor com tamanho definido pelo usuario;
    2-Preencha o vetor;
    3-Ordene pelo metodo quick sort;
    4-Ordene pelo metodo Bolha;
    5-Busca binaria;
    6-inprima vetor;
    7-Sair;

    Sendo que a opçao dois so pode ser feita depois da opçao 1, a 3 so pode ser feita depois da 1 e da 2 e assim por diante.
    Como chamar a opçao 1 apos escolher a 2?

    segue abaixo o programa:

    Código:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    //Funçao CRIA
    int* Cria(int *vet, int* n)
    {
         printf("Digite tamanho do vetor");
         scanf("%d",n ); 
             
         vet = (int*) malloc((*n)*sizeof(int));
         
         return vet;
    }
         
         
    //Funçao PREENCHE     
    int* Preenche(int *vet,int* n)
    {
         int cont;
         vet=Cria(n,vet);    
         for(cont=0;cont<=*n;cont++)
         {
             printf("Digite o numero %d: ",cont+1);       
             scanf("%d",&vet[cont]);
         }
         printf("\n ");
         return vet;
    }     
    //FUNCAO BOLHA
    void Bolha(int *vet,int *n)
    {
         int i,j;
             
         for(i=(*n);i>=1;i--)
              for(j=0;j<i;j++)
                   if(vet[j]>vet[j+1])
                   {
                         int temp=vet[j];
                         vet[j]=vet[j+1];
                         vet[j+1]=temp;            
                   }             
    }
    //FUNCAO QUICK SORT
    void Quick(int n, int* vet)
    {
         if(n<=1)
                 return;
         else {
                 int x=vet[0];
                 int a=1;
                 int b=n-1;
                 do{
                     while (a<n && vet[a]<=x) a++;
                     while (vet[b]>x) b--;
                     if (a<b){
                              int temp=vet[a];
                              vet[a]=vet[b];
                              vet[b]=temp;
                              a++;
                              b--;
                             }
                   
                   }while(a<=b);
                   
               vet[0]=vet[b];
               vet[b]=x;
         
               Quick(b,vet);
               Quick(n-a,&vet[a]);
               }
    }                
    //FUNCAO BUSCA_BIN
    int busca_bin(int n, int *vet, int elem){
        int ini=0;
        int fim=n-1;
        int meio;
        while (ini<=fim){
              meio=(ini+fim)/2;
              if (elem <vet[meio])
                 fim=meio-1;
              else if (elem >vet[meio])
                 ini=meio+1;
              else 
                 return meio;
        }
        
        
      return -1;    
        
    }
    //FUNCAO IMPRIME
    void Imprime(int *vet,int* n)
    {
         int cont;
             
         for(cont=0;cont<=*n;cont++)
         {
             printf("Vet[%d]: %d \n",cont+1,vet[cont]);       
           
         }
    }     
     
    int main()
        {
              int op,elem;
              int*vet,*n;
        do{
           printf("01.Criar Vetor\n");
           printf("02.Preencher Vetor\n");
           printf("03.Ordenar Vetor\n");
           printf("04.Ordenar Vetor Quick Sort\n");
           printf("05.Pesquisar Elemento\n");
           printf("06.Imprimir Vetor\n");
           printf("07.Sair\n");
           
           printf("\nEscolha uma opcao: ");
           scanf("%d",&op);
           
           switch(op){
                   case 1: 
                           vet=Cria(vet,n);
                           break;
                   case 2: 
                           Preenche(vet,n);
                           break;
                   case 3: 
                           Bolha(vet,n);
                           break;
                   case 4: 
                           Quick(&n,vet);
                           break;
                   case 5: 
                           printf("Digite o elemento a ser procurado: ");
                           scanf("%d",&elem);
                         
                           if (busca_bin==-1)
                              printf("Nao encontrou");
                           else
                              printf("Encontrou");
                           break;
                           
                   case 6: 
                           Imprime(vet,n);
                           break;
                            
           }
           }while(op!=7);
           
           system("pause");
        return 0;
        
        
        
        
        
        
        
        }
    
     
    Última edição pelo moderador: 30 de Junho de 2009
  2. Aparicio

    Aparicio /dev/mod
    Staff Member

    Crias uma variável que contenha o número da última operação feita. Assim quando lês a opção, se esta não for a opção logo a seguir à última fazes antes essa logo a seguir à última.
     
  3. Ou então quando fores a fazer a opçao por exemplo de preencher, fazes uma verificação para ver se o vector existe.
    O mesmo para o método de ordenar, ou seja, verificas se é um vector vazio.
     
  4. Ronnie_03

    Ronnie_03 Power Member

    Boas,

    Eu confesso que não li o teu código mas o que podes fazer é ter mais do que um menu, ou seja, quando abres o programa só mostras a opção 1 e a 7, depois mostras a 1 a 2 e a 7, depois fazes 1 3º menu com todas as opções. Assim consegues sempre aceder apenas ás opções que podes executar.

    Cumps
     
  5. dreamerboy

    dreamerboy Power Member


    Também pensei o mesmo, aumenta um bocado o código mas sem mudares o menu e sem complicar mt fazia assim:

    nas funções 2, 3, 4, 5, 6 colocava um código do tipo:
    *não esquecer de inicializar o n a zero dentro do main.

    Quanto Preencher, para evitar de verificar se o vector está vazio em todas as outras funções recorria a uma pequena "batotice", no Criar inicializava o vector a zeros e , caso queiras, informava num printf que o vector estava a zeros e que era acoselhavel ser preenchido. Assim mesmo que o utilizador siga no menu pela ordem errada não vai surgir erros, simplesmente vai estar a trabalhar com um vector só com zeros.


    Algo assim:



    Atenção que no teu Preenche tás sempre a chamar a função cria.
     
    Última edição: 5 de Julho de 2009

Partilhar esta Página