Criar programa em C

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:
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.
 
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.
 
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?

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
 
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.


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:
if (n == 0)
{
printf ("Vector tem que ser criado primeiro"!!);
return 0;
}
*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:

//Funçao CRIA
int* Cria(int *vet, int* n)
{

int cont;

printf("Digite tamanho do vetor");
scanf("%d",n );

vet = (int*) malloc((*n)*sizeof(int));

for(cont=0;cont<=*n;cont++)
{
vet[cont] = 0;
}
printf("\n Vector inicializado a zero \n");

return vet;
}



Atenção que no teu Preenche tás sempre a chamar a função cria.
 
Última edição:
Back
Topo