Ir ao conteúdo
  • Cadastre-se

Complicação com struct e ponteiro


Igor Bagnara

Posts recomendados

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");}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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