Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

K3nshin

Como elimino o lixo do arquivo ?

Recommended Posts

Pessoal tenho q entregar esse trabalho pronto as 19 horas de hoje, sei q é sexta de carnaval mais tentem me ajudar por favor , no 3 arquivo onde eu salvo o vetor preciso q não seja salvo o lixo das posições q foram eliminas por serem repetidas

 

Tentei usar o cont da funcao q faz a junção mais não to conseguindo http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif

 

Segue o codigo

/******************************************************************************/
/* Escrever funções que completam o programa abaixo:													   */ 
/******************************************************************************/
#include <stdio.h>
#include <stdlib.h>


void Leitura_Arquivo_Inteiros(char *argv, int *vet, int qnt);//ler os arquivos
void Escreve_Arquivo_Inteiros(char *argv, int *vet, int qnt);//gravar em arquivo
void SelectionSort		   (int a[], int array_size); //ordenar o vetor
int Uniao_Vetores			(int *vetA, int qntA, int *vetB, int qntB, int *vetC, int qntC);//unir 2 vet sem repetir os numeros



int main(int argc, char *argv[])
  {
	int qntA = 5, vetA[qntA];
	int qntB = 10,vetB[qntB];
	int qntC = 15,vetC[qntC];   
   
		if(argc < 4)
			{
			   printf("\nErro: Digite o nomes dos arquivos !!!\n\n");
			   system("pause");  
			   exit(1);
			}
		
		Leitura_Arquivo_Inteiros(argv[1],vetA,qntA);
		system("pause");  
		system("cls");
	
		Leitura_Arquivo_Inteiros(argv[2],vetB,qntB);
		system("pause");  
		system("cls");
	
		Uniao_Vetores(vetA,qntA,vetB,qntB,vetC,qntC);	
		
		Escreve_Arquivo_Inteiros(argv[3],vetC,qntC);
		system("pause>>null");
			
	return(0); 
  }
  


void Leitura_Arquivo_Inteiros(char *argv, int *vet, int qnt)
{
  FILE *arquivo;
  int lidos, j;
  
	if ((arquivo = fopen(argv,"r")) == NULL)
		{
			  printf("Erro ao abrir arquivo!!!\n\n");
			  system("pause");  
			  exit(1);
		}
  
	lidos = 0;	
  
	while(fscanf(arquivo, "%d", &vet[lidos]) == 1)
		  {
			  lidos++;
		}
  
	
	fclose(arquivo);

	printf("\nNumeros lidos : %2d\n",lidos);
	printf("Os numeros sao:\n");

	for(j=0; j<lidos; j++) 
		{ 
			   printf("%2d\n", vet[j]);
		}
}



void Escreve_Arquivo_Inteiros(char *arg, int *numeros, int tam)
{
	FILE *arquivo;
	int i;

	if((arquivo = fopen(arg,"w")) == NULL)
	{
		printf("Erro ao abrir arquivo!!!\n\n");
		system("pause");
		exit(1);
	} 

	for (i=0; i<tam; i++)
	{
		  fprintf(arquivo, "%d\n", numeros[i]);
	} 

	fclose(arquivo);
	printf("\n\t	 Dados gravados com sucesso em %s\n\n",arg);
}



int Uniao_Vetores(int *vetA, int qntA, int *vetB, int qntB, int *vetC, int qntC)
{
   int i,j,c = 0;
   int aux = 0;
   int cont = 0;
   
   
	  for(i=0;i<qntA;i++)
	  {
		vetC[c] = vetA[i];
		c++;
		cont++;
	  }
	  
	  for(i = 0; i < qntB; i++ )
	  {
		for( j = 0; j < qntA; j++)
		   { 
			   if (vetB[i] != vetA[j])
				   aux = 1;
			   
			   else 
			   {
				 aux = 0;
				 break;  
			   }				
		   }
			   
		if (aux == 1)
		   {
			 vetC[c] = vetB[i];
			 c++;
			 cont++;
		   }
	  
	  }
	  
	  SelectionSort(vetC, qntC);
	  printf("\nVETOR CONCATENADO\n");
	  
	  
		for(c=0;c<cont;c++)
		{
		  printf("vetC[%2d] = %2d\n",c,vetC[c]);  
		}
	  
	  system("pause");  
	  system("cls");  
	  printf("\n\n\t\t  UNIAO REALIZADA COM SUCESSO!!!!\n\n");
}



void SelectionSort(int a[], int array_size)
{
	 int i;
	 for (i = 0; i < array_size - 1; ++i)
	 {
		  int j, min, temp;
		  min = i;
		  for (j = i+1; j < array_size; ++j)
		  {
			   if (a[j] < a[min])
					min = j;
		  }

		  temp = a[i];
		  a[i] = a[min];
		  a[min] = temp;
	 }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

é q você ta definindo o tamanho dele na main..

use um contador, e a kd novo item incremente-o. ai você passa esse contador como parametro no SelectionSort

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais o selection sort ta funcionando corretamente ele ta ordenando certinho o problema e quando eu salvo o vetC em arquivo.....aparece os numeros corretos mais nas posiçoes onde havia duplicidade aparece o lixo no txt.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom naum entendi muito..

a principio.

o vetC terá o msm tamanho do vetorA,

ai a kd incremento q vier do vetorB, você soma + 1 no indice do vetorC.

ai você ordena e salva ele no arquivo.. pensando nessa lógica naum tem como vir arquivo com lixo.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quit você consegue compilar ele ae ? ai você vai entender o q eu to falando pq ta meio complicado de explicar mesmo http://forum.imasters.com.br/public/style_emoticons/default/yay.gif , cria 2 arquivos um com 5 inteiros e outro com 10 ai você repete uns 3 numeros (numero do arquivo 1 tem q ser igual ao arquivo 2)

 

Depois disso da uma olhada no 3 arquivo q vai gerar .... valeu brother ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara daqui naum..

vow chegar em ksa umas 8 da noite, c der tempo..

ai te ajudo..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.