Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int tamanhoArquivo(char *entrada) {
- int tam = 0;
- int i = 0;
- FILE *arquivo = fopen(entrada, "r");
- while (!feof(arquivo)) {
- tam++;
- fscanf(arquivo, "%d", &i);
- }
- return tam - 1;
- }
- int *leArquivo(char *entrada, int tam, int *vetor) {
- FILE *arquivo = fopen(entrada, "r");
- if (arquivo) {
- int i, a;
- for (i = 0; i < tam; i++) {
- fscanf(arquivo, "%d", &a);
- vetor[i] = a;
- }
- }
- return vetor;
- }
- void escreveArquivo(char *saida, int tam, int *vetor) {
- FILE *arquivo = fopen(saida, "w");
- for (int i = 0; i < tam; i++){
- if ((i+1) != tam) {
- fprintf(arquivo, "%d ", vetor[i]);
- } else {
- fprintf(arquivo, "%d\n", vetor[i]);
- }
- }
- fclose(arquivo);
- }
- void ordena(int *vetor, int primeiro, int ultimo) {
- //quicksort
- int a, j, temp, i;
- if (primeiro < ultimo) {
- a = primeiro;
- i = primeiro;
- j = ultimo;
- while (i < j) {
- while (vetor[i] <= vetor[a] && i < ultimo) i++;
- while (vetor[j] > vetor[a]) j--;
- if (i < j) {
- temp = vetor[i];
- vetor[i] = vetor[j];
- vetor[j] = temp;
- }
- }
- temp = vetor[a];
- vetor[a] = vetor[j];
- vetor[j] = temp;
- ordena(vetor, primeiro, j - 1);
- ordena(vetor, j + 1, ultimo);
- }
- }
- int removeRepeticoes(int tam, int *vetor) {
- int i, j;
- j = 0;
- int vetorAux[tam];
- int tamAux = tam;
- //determina o tamanho do vetor final e remove as repeticoes
- for (i = 0; i < tam; i++) {
- if ((i + 1) != tam) {
- if( vetor[i] != vetor[i+1]){
- vetorAux[j] = vetor[i];
- j++;
- } else {
- tamAux--;
- }
- } else {
- vetorAux[j] = vetor[i];
- break;
- }
- }
- for (i = 0; i < tamAux; i++){
- vetor[i]=vetorAux[i];
- }
- return tamAux ;
- }
- int *concatena(int tam1, int *vetor1, int tam2, int *vetor2) {
- int tam3 = tam1 + tam2;
- /*
- * Aloca o espaço de memória onde o conteúdo da concatenacao vai ser armazenado
- */
- int *vetorAux;
- vetorAux = (int *) malloc((tam3) * sizeof(int));
- int i;
- //concatena os dois vetores no vetorAux
- for (i = 0; i < tam1; i++) {
- vetorAux[i] = vetor1[i];
- }
- for (i = tam1; i < tam3; i++) {
- vetorAux[i] = vetor2[i - tam1];
- }
- ordena(vetorAux, 0, tam3-1);
- return vetorAux;
- }
- int main(int argc, char **argv) {
- /* Verifica o numero de argumentos e encerra o programa caso não esteja dentro do
- * projetado
- */
- argv[1] = "/Users/liquuid/devel/ep1-ac/l1.txt";
- argv[2] = "/Users/liquuid/devel/ep1-ac/l2.txt";
- argv[3] = "/Users/liquuid/devel/ep1-ac/l3.txt";
- if (argc != 4) {
- printf("Numero de parametros incorreto, exemplo: \n %s array1.txt array2.txt saida.txt\n", argv[0]);
- return 1;
- }
- char *entrada1 = argv[1];
- char *entrada2 = argv[2];
- char *saida = argv[3];
- int *vetor1, *vetor2, tam1, tam2, *vetorSaida;
- tam1 = tamanhoArquivo(entrada1);
- tam2 = tamanhoArquivo(entrada2);
- vetor1 = (int *) malloc(tam1 * sizeof(int));
- vetor2 = (int *) malloc(tam2 * sizeof(int));
- leArquivo(entrada1, tam1, vetor1);
- leArquivo(entrada2, tam2, vetor2);
- tam1 = removeRepeticoes(tam1, vetor1);
- tam2 = removeRepeticoes(tam2, vetor2);
- vetorSaida = concatena(tam1, vetor1, tam2, vetor2);
- int tamFinal = removeRepeticoes(tam1 + tam2, vetorSaida);
- escreveArquivo(saida, tamFinal, vetorSaida);
- //getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement