Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Caue Santana

Comparar os dados de um vetor

Recommended Posts

Olá, estou com uma dúvida num programa que estou fazendo. É assim:

Tenho que fazer uma comparação no vetor para que as datas de um arquivo não se repitam.

Tentei usar o strcmp mas n entendi muito bem como funciona.

 

E tem um outro ponto, para cada comparação entre os elementos tenho que fazer uma soma de valores onde a parte das datas se repetem e caso não repita, eu coloco as datas em outro vetor,  mas pelo que eu vi, só dá para comparar o vetor inteiro ao invés de parte por parte, mas posso estar enganado, como disse n entendi muito bem como funciona.

 

Então como fazer a comparação tal que a cada comparação eu posso fazer uma determinada função?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Caue Santana  O melhor seria que tu postasse o código que já fez. Você quer comparar dois vetores ou elementos dentro de um único vetor? Ao que eu entendi é que você tem que comparar cada elemento com todos os outros para ver se existem elementos repetidos dentro de um mesmo vetor, é isso mesmo? poste até onde você já chegou neste código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gustavo.Loggin  Bom, eu tentei comparar 2 vetores, mas de qualquer forma esses vetores têm o mesmo valor, então se for mais fácil comparar elementos de um único vetor sinta-se a vontade para mudar o que for preciso

 

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include <string.h>
#include <locale.h>

struct Final
{
	int ano, mes, dia, codigo;
  	float qtde, total;
};

struct Comp 
{
  int ano, mes, dia, codigo;
  float qtde, preco;
};

struct TVendasT 
{
  int ano, mes, dia, codigo;
  float qtde, preco;
};
  
int main() 
{
  FILE *Arq, *Arq1;
  int QtdeVenda = 0;
  int QtdeVend = 0;
  int QtdeVendasDia = 0;
  int i, cont, g, h, j, x, y, z, teste;
  int *A1, *A2, *M1, *M2, *D1, *D2, *Cod1, *Cod2, *d, *a, *m;
  float *Q1, *Q2, *P1, *P2;
  int *Ano[z], *Mes[y], *Dia[x];
  float Total[x], *Media[x];
  char S[100];
  char Q[100];
  char K[100];
  float var1, var2;
  TVendasT *VT;
  Comp *C;
  Final *F;
   	
 Arq = fopen("vendas.txt", "r");
  while (fgets(Q, sizeof(Q), Arq) != NULL) 
    QtdeVenda++;
    fclose(Arq);
    
    
  D1 = (int *)malloc(sizeof(int) * QtdeVenda);
  M1 = (int *)malloc(sizeof(int) * QtdeVenda);
  A1 = (int *)malloc(sizeof(int) * QtdeVenda);
  Cod1 = (int *)malloc(sizeof(int) * QtdeVenda); 
  Q1 = (float *)malloc(sizeof(float) * QtdeVenda);
  P1 = (float *)malloc(sizeof(float) * QtdeVenda);

  D2 = (int *)malloc(sizeof(int) * QtdeVenda);
  M2 = (int *)malloc(sizeof(int) * QtdeVenda);
  A2 = (int *)malloc(sizeof(int) * QtdeVenda);
  Cod2 = (int *)malloc(sizeof(int) * QtdeVenda); 
  Q2 = (float *)malloc(sizeof(float) * QtdeVenda);
  P2 = (float *)malloc(sizeof(float) * QtdeVenda);
 
     Arq = fopen("vendas.txt", "r");
  while (fgets(S, sizeof(S), Arq) != NULL) 
    QtdeVend++;
  VT = (TVendasT *)malloc(sizeof(TVendasT) * QtdeVend);
  fclose(Arq);
  

  
  Arq = fopen("vendas.txt", "r");
  i = 0;  
  		while (fscanf(Arq, "%d;%d;%d;%d;%f;%f;\n", &A1[i], &M1[i], &D1[i], &Cod1[i], &Q1[i], &P1[i]) != EOF)
    	{
    		teste++;	
			i++;  
		}
	fclose (Arq);
	printf("%d\n", i);
	//Eu coloquei esses printf para saber se estava tudo ocorrendo bem, antes eu iria usar a variável "teste" mas não deu muito certo.
	teste--;
	printf("%d\n\n", teste);
	
	
    //Aqui, ele pega todos os valores que leu do Arq "vendas.txt" e salva a partir da 2ª linha
    
    /*
	Eu fiz isso pois eu decidi fazer a comparação entre dois vetores, mas se for mais fácil comparar os elementos de um vetor
	pode ser dessa forma também, apenas tem que fazer a comparação.
	*/
	Arq = fopen("totvendas.txt", "w");
  for(i = 1; i < QtdeVend; i++)
  {
	fprintf(Arq, " %d;%d;%d;%6.2f;%5.2f; \n", D1[i], M1[i], A1[i], Q1[i], P1[i]);
  }
  		fclose(Arq);
  		 
  		 //Esse foi um teste para saber se até aqui está OK.
  		 printf("PI\n\n");
  		 system("pause");
  		 
	//Arquivo "totvendas.txt" que recebeu os valores do "vendas.txt" a partir da segunda linha
	Arq = fopen("totvendas.txt", "r");
  	i = 0;  
  		while (i <= QtdeVenda-1)
		  {
		  	fscanf(Arq, "%d;%d;%d;%f;%f;\n", &D2[i], &M2[i], &A2[i], &Q2[i], &P2[i]);
		  	i++;
		   } 
    		
    
	fclose (Arq);	
	printf("foi\n");
	printf("%d", i);
	
//	  for(i = 0; i < QtdeVend; i++)
  //{
	//		if(D2 == 0 || M2 == 0 || A2 == 0 || D2 == 0)
	//		printf(" %d;%d;%d;%6.2f;%5.2f; \n", D2[i], M2[i], A2[i], Q2[i], P2[i]);

//  }
  		//fclose(Arq);
  		printf("\nPA\n");

  	Arq = fopen("totvendas.txt","r");  	
		 
	i=0;	 
	x=1;
	
	
//	*Total[0] = P1[0];
//	*Dia[0] = D1[0];
	
	//Esse	foi o último teste que tentei fazer
	cont=0;
	while (D1 == D2)
	{
		Total[i] = P1[cont];
		cont++;
	}
	
	printf("Piu\n");
	
	//Abaixo estão vários teste que eu tentei fazer para rodar, mas n obtive êxito
	
//	printf("%d \t %d\n", Total[0], P1[0]);
//	printf("%d \t %d\n", Dia[0], D1[0]);
	
/*	
	for(cont=1; cont<QtdeVenda;cont++)
	{
		if (D2 == 0)
		{
			Total[x] += g;
			break;
		}
		
		if (D1[cont] == D2[cont])
		{
			g = P1[cont];
			Total[x] += g;
			g = NULL;
		}
		else
		{
			h = D1[cont];
			Dia[x] = h;
			h = NULL;
			x++;
		}
	}
*/	
//	for(cont =0; cont<x;cont++)
//	{
//		printf("%d \t %d", Dia[cont], Total[cont]);
//	}


	
//	{
//		if (D1 == D2)
//	}	
		
		
/*		//else
		{
			if(D1 != D2)
			{
				Dia[i] = D1[i];
				x++;
			}
		}
		

		
		i++;
	} 		
*/ 	
  //  fclose(Arq);
//	system("pause");
	
 //	printf("%d \t %d", i, j);
 	
 	
 	
 	
 	
	
/* 	
	for(cont=0;cont<QtdeVend;cont++) 		
	{
		A2[cont] = A1[cont];
		M2[cont] = M1[cont];
		D2[cont] = D1[cont];
	}
*/
	
	
//	system("pause");
	printf("PI");
}

 

Estou anexando também o arquivo -> vendas.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Caue Santana  Cara, a melhor forma seria comparação de um elemento com todos os outros em um laço de repetição FOR e uma estrutura condicional IF para realizar as medidas necessárias caso encontre um valor igual.

 

Ex:

int vetor[10];

for(int i=0; i<10; i++){
  for(int j=1; j<10; j++){
  	if(vetor[i]==vetor[j]){
      		cout<<"Valores iguais!";
    	}
  }
}

Desculpe por eu não analisar mais a fundo seu código e te sugerir mudanças específicas, é que as provas de fim de ano da faculdade estão tomando todo meu tempo... :tw_dissapointed:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×