Ir ao conteúdo
  • Cadastre-se

Danielle Emely

Membro Júnior
  • Posts

    16
  • Cadastrado em

  • Última visita

posts postados por Danielle Emely

  1. @devair1010  depuração pra reduzir erros, não sabia que tinha tipos =P. Não costumo usar um stw com debug, mas tava pensando em passar meus códigos por um processo de debugging. Vou usar algumas vezes quando for preciso, costumo compilar meus códigos via terminal mesmo. Codeblocks tem mesmo, alguns não recomendam e outros sim. Ainda tô pensado haha

    @arfneto bacana, parece uma boa IDE mesmo. Queria ver se alguém recomenda um mais recente também, pensando na experiência enquanto usuário também

    Obrigada, pelas indicações :)

    • Curtir 1
  2. #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    typedef struct{
    	int* vet;
    	char** vetNome;
    }Teste;
    void mergeSort(Teste, int, int );
    void intercala(Teste, int, int , int);
    void bubbleSort(Teste test, int tamanho);
    int pesquisaBin(Teste, char* chave, int, int);
    int main(){
    	Teste test;
    	test.vetNome = malloc(sizeof(char*) * 7);
    	for (int i = 0; i < 100; i++){
    		test.vetNome[i] = malloc(sizeof(char) *100);
    	}
    	strcpy(test.vetNome[0],"Aberlado Barbosa\n");
    	strcpy(test.vetNome[1], "José Frances\n");
    	strcpy(test.vetNome[2], "Barbara Vitoria\n");
    	strcpy(test.vetNome[3], "Maria Silva\n");
    	strcpy(test.vetNome[4], "Bia Menezes\n");
    	strcpy(test.vetNome[5], "Samile Tania\n");
    	strcpy(test.vetNome[6], "Maria Souza\n");
    	test.vet = malloc(sizeof(int) * 5);
    	int k = 0;
    	for (int i = 4; i >= 0; i--){
    		test.vet[k] = i;
    		k++;
    	}
    	mergeSort(test,0,6);
    	//bubbleSort(test,5);
    	int pos = pesquisaBin(test, "José Frances\n", 0, 6);
    	for (int i = 0; i < 7; i++){
    		printf("posição %d, nome: %s\n",i,test.vetNome[i] );
    	}
    	printf(" Posicao de José: %d\n", pos);
    	return 0;
    }
    // ordenação com merge sort
    void mergeSort(Teste test, int inicio, int fim){
    	if(inicio < fim){
    		int meio = ((inicio + fim)/2);
    		mergeSort(test, inicio, meio);
    		mergeSort(test, meio + 1, fim);
    		intercala(test, inicio, meio, fim);
    	}
    }
    void intercala(Teste test, int inicio, int meio, int fim){
    	int tamanho;
    	int i, j, k, esq, dir;
    	int fimEsq = 0, fimDir = 0;
    	tamanho = fim -inicio + 1;
    	esq = inicio;
    	dir = meio + 1;
    	char** vetOrdenado;
    	vetOrdenado = malloc(sizeof(char*) * tamanho);
    	for (int l = 0; l < tamanho; l++){
    		vetOrdenado[l] = malloc(sizeof(char) *100);
    	}
    	if(vetOrdenado != NULL){
    		for(i = 0; i < tamanho; i++){
    			int tam1 = strlen(test.vetNome[esq]);
    			int tam2 = strlen(test.vetNome[dir]);
    			int tamMax;
    			if(tam1>tam2){
    				tamMax = tam1;
    			}else{
    				tamMax = tam2;
    			}
    			if(!fimEsq && !fimDir){
    				if(strncmp(test.vetNome[esq], test.vetNome[dir], tamMax) < 0)
    					strcpy(vetOrdenado[i], test.vetNome[esq++]);
    				else
    					strcpy(vetOrdenado[i], test.vetNome[dir++]);
    			
    				if(esq > meio)
    					fimEsq = 1;
    				if(dir > fim)
    					fimDir = 1;
    			}else{
    				if(!fimEsq)
    					strcpy(vetOrdenado[i], test.vetNome[esq++]);
    				else
    					strcpy(vetOrdenado[i], test.vetNome[dir++]);
    			}
    		}
    	}
    	for(j=0,  k = inicio; j < tamanho;j++, k++){
    		strcpy(test.vetNome[k], vetOrdenado[j]);
    	}
    }
    //ordernação com bubble sort
    void bubbleSort(Teste test, int tamanho){
    	int i, continua, fim = tamanho;
    	char* aux = malloc(sizeof(char)*50);
    	do{
    		continua = 0;
    		for (i = 0; i < tamanho-1; i++){
    			int tam1 = strlen(test.vetNome[i]);
    			int tam2 = strlen(test.vetNome[i+1]);
    			int tamMax;
    			if(tam1>tam2){
    				tamMax = tam1;
    			}else{
    				tamMax = tam2;
    			}
    			if(strncmp(test.vetNome[i], test.vetNome[i+1], tamMax) > 0){
    				strcpy(aux,test.vetNome[i]);
    				strcpy(test.vetNome[i],test.vetNome[i+1]);
    				strcpy(test.vetNome[i+1],aux);
    				continua=i;
    			}
    		}
    		fim--;
    	}while(continua!=0);
    }
    // pesquisa binária de strings
    int pesquisaBin(Teste test, char* chave, int esq, int dir){
      int m;
      int tamanho = strlen(chave);
      if(strncmp(test.vetNome[esq], chave, tamanho) == 0){
        	return esq;
      }else if(strncmp(test.vetNome[dir], chave, tamanho) == 0){
      		return dir;
      		}else{
         		m = (esq + dir)/2;
        		if(strncmp(test.vetNome[m], chave, tamanho) < 0){
            	pesquisaBin(test, chave, m + 1, dir);
          		}else{
            	pesquisaBin(test, chave, esq, m - 1);
          }
      }
    }

    usei strncmp @arfneto assim como tinha dito para o@devair1010 , ele era bom ver casos de nomes iguais e sobrenomes diferentes. Ai tem as versões de ordenação bubble e merge, assim como busca binária. E o tempo de execução do merg é melhor no pior caso do que o pior caso do  bubble :). Muito obrigada, pessoal!! Espero ajudar quem precisa  

    • Curtir 2
  3. @arfneto  e @@devair1010 Eu consegui implementar com merge sort e bubble sort!! Tentei com o bubble e vi o que errei no merge, como vou precisar de uma struct, fiz uma de teste. Querem ver o código? Tava pensando em postar amanhã mais tarde, mas não sei se faço outro fórum pra isso

    adicionado 5 minutos depois

    @arfneto  é em c 

  4. Olá, estou realizando um trabalho em que preciso ordenar um vetor de strings com merge sort, no entanto, estou com dificuldade em como vou fazer as comparações entre nomes de pessoas, pensando nas possibilidades de nomes com letra inicial igual, aí sendo preciso olhar as demais letras pra ver qual nome virá primeiro, e de nomes iguais precisando olhar os sobrenomes pra ver qual dos nomes virá primeiro. Alguém pode me orientar em como vou fazer essa ordenação usando merge sort?  

    • Curtir 1
  5. @isrnick nem imprime a matriz, também achei que era pra funcionar :( 

    mas consegui uma solução. muito obrigada @devair1010 

    a solução que encontrei foi essa:

    for(int i = 0; i < n; i++){
    		for (int j = 0; j < m; j++){
    			fscanf(leitura, "%c", &c);
    			if(c == '.' || c == '-' || c == 'x' || c == 'X'){
    				matriz[i][j] = c;
    			}else{
    				j--;
    			}
    		}
    	}

    no caso peguei aquilo que me interessava e o resto não armazenaria na matriz. Obrigada pela ajuda de vocês, foi muito bem vida cada uma. Agora tá tudo certinho

    • Curtir 1
  6. Estou lendo uma matriz de char de um arquivo texto, porém não quero armazenar na matriz o '\n', como faço para ignorá-lo? 

    Exemplo de matriz que está no arquivo:

    . . x . . . .
    . . - . . . .
    . . . . x . .
    . . . - . . .
    . . x x . . .
    . . . . . . .

    Achei que daria certo porquê pensei que o fscanf não leria o \n, mas quando imprimi essa matriz, tava quebrando linha e ainda faltou alguns caracteres, e acho que espaços pra eles o caractere '\n' ocupou.

    Meu código para a leitura tá assim:

    for(int i = 0; i < n; i++){
    		for (int j = 0; j < m; j++){
    			fscanf(leitura, "%c", &c);
    			if(c != ' '){
    				matriz[i][j] = c;
    			}else{
    				j--;
    			}
    		}
    	}

     

    • Obrigado 1
  7. @AnsiC eu usei NULL mesmo, mas achei que faria só uma comparação pra ver se meu arquivo não apontava pra nada, esse perror me mostra o erro especificamente? Vou usar ele aqui pra ver, e obrigada :)

    adicionado 3 minutos depois
    FILE* leitura = fopen(nomeArquivo, "r");
    	 if (leitura == NULL) {
         		printf ("Erro ao abrir o arquivo\n");
        }

    meu código usando o NULL na comparação tá assim, @AnsiC

    • Curtir 1

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!