Ir ao conteúdo
  • Cadastre-se

Igor Bagnara

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  1. Estou tentando fazer um programa para analise de algoritmo de ordenação, mas ta voltando um erro e nao sei resolver. erro: [Error] request for member 'Chave' in something not a structure or union #include<stdlib.h>#include<time.h>#include<conio.h>#include<windows.h>typedef struct TipoItem { int Chave;} TipoItem;void Bubble(TipoItem* vet[], int n){ //função do Bubble Sort recebendo dois parâmetros de entrada, um vetor e um numero do tipo inteiro. int i,j; //variaveis de parada do laço, do tipo inteiro. long int comp =0, troca=0; //variaveis do tipo long int para comparação e troca de valores. int temp; //variavel para armazenar temporariamente um valor. for(i=n-1;i>=1;i--){ //laço percorre o vetor ao contrario, do fim para o começo e serve de parada para registros ordenddos. for(j=0;j<i;j++){//laço percorre o vetor ao contrário. comp++; //contador para ver o numero de comparações. if(vet[j].Chave>vet[j+1].Chave){//comparação caso o valor da posição atual seja maior que a seguinte, se for, ocorrerá a troca de valores. temp = vet[j].Chave; //variavel temporaria recebe o valor atual do vetor. vet[j].Chave= vet[j+1].Chave; //vetor na posição atual receve o valor da posição seguinte. vet[j+1].Chave= temp; //vetor da posição seguinte recebe o valor de temp, que era o valor do vetor atual, concluindo a inversão dos valores. troca++; //contador para ver o numero de trocas. } } } for(i=0;i<n;i++){//laço para possibilitar a impressao de dados. printf("%d\n", vet[i]);//imprime os dados armazenados no vetor ordenado. } printf("Total de Comparacoes: %d\n", comp);//mostra o total de comparações. printf("Total de Trocas: %d\n", troca);//mostra o total de trocas.}void Insertion (TipoItem* v[], int num){////função do Insertion Sort recebendo dois parâmetros de entrada, um vetor e um numero do tipo inteiro. int i, j; //variaveis do tipo inteiro. TipoItem a; unsigned long int compar=0, troc=0; //variaveis do tipo long int para comparação e troca de valores. printf("Insertion Sort"); for(i=1;i<num;i++){//laço de repetição, variave i inicializa com 1 pois a posição 0 é destinada para o registro encontrado. a=v[i]; //o nó a recebe o valor do vetor na posição i, o valor faz parte da sequencia fonte. j=i-1; //variavel recebe o ultimo valor já ordenado para comparação. compar++;//contador para definir quantidade de comparações. while((j>=0)&&(a.Chave<v[j].Chave)){//repete até que encontre o local para inserir, onde a posição atual seja maior que o destino e menor que a ultima comparação. troc++;//contado para definir quantidade de trocas. v[j+1]=v[j]; //desloca uma posição para a direita para fazer nova comparação. j--; //variavel decresce para que compare com uma posição a menos. } troc++;//contador cresce pois será inserido o valor na posição correta. v[j+1]=a;//valor inserido. } for(j=0;j<num;j++){//laço de repeticao com para impressão dos dados. printf("%d\n", v[j]);//mostra o vetor ordenado. } printf("Total de Comparacoes: %d\n", compar);//mostra o total de comparações. printf("Total de Trocas: %d\n", troc);//mostra o total de trocas. }int N; main(){ int i,a, opcao,b,c=0; //variaveis do tipo inteiro, "i" para o laço, "a" para contabilizar o tempo, "b" para fazer a contagem do tempo // e "opcao" para escolha do metodo e entrada. float tempo;//variavel do tipo ponto flutuante. FILE* entrada; //ponto do tipo FILE, para abertura da entrada do arquivo txt. //int v[N];//vetor que recebe a quantidade de entrada. do{//laço para validar que seja uma opcao correta. printf("Escolha um metodo de ordenacao e um arquivo de entrada no menu a seguir!\n\n");//Introdução para o menu. printf("1. Bubble Sort e entrada com 1000;\n\2. Bubble Sort e entrada com 50000;\n\3. Insertion Sort e entrada com 1000;\n\4. Insertion Sort e entrada com 50000;\n\n");//menu com opções do metodo e a entrada. scanf("%d", &opcao);//leitura da opcao. printf("OPCAO: %d\n\n\n", opcao); }while(opcao<1 || opcao>4); if(opcao == 1 || opcao == 3){//comparacoes para restringir as escolhas do tamanho do vetor. entrada= fopen("Vetor-1000-Crescente","r");//função para ler o arquivo.txt com os valores de entrada 1000. // printf("BUBLE MANO"); N=1000; } else if(opcao == 2 || opcao ==4){ entrada= fopen("Vetor-50000-Crescente","r");//função para ler o arquivo.txt com os valores de entrada 50000. // printf("INSERTI MANO"); N=50000; // printf("ENE: %d", N); }else{ printf("FAIL!\n\n\n"); }struct TipoItem v[N]; for(i=1;i<N;i++){//laço para rodar todas entradas do arquivo.txt fscanf(entrada, "%d", &v[i-1]);//ler todos valores de entrada e guardar no vetor. } fclose(entrada);//função para fechar o arquivo aberto. fflush(entrada); if(opcao==1 ||opcao==2){ //comparação para restringir as escolhas do tipo de algoritmo de ordenação. Bubble escolhido, pois opcao = 1 ou 2. printf("Algoritimo Bubble Sort!"); a= GetTickCount();//função do windows para contabilizar tempo em milissegundos. Bubble(v, N);//função para o algoritmo de ordenação Buuble Sort. }else {//algoritmo Insertion, pois opcao = 3 ou 4. printf("Algoritmo Insertion Sort!");//informando o algoritmo escolhido. a= GetTickCount();//função do windows para contabilizar tempo em milissegundos.// printf("entrou, n= %d", N); Insertion(v,N);//função para o algoritmo de ordenação Insertion Sort.// printf("SAIU, n= %d", N); } b=GetTickCount(); tempo=b-a;//definir o tempo de execução. printf("Tempo de Execucao: %.2f\n", tempo/1000);//mostra o tempo de execução. system("pause");}

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!