Ir ao conteúdo

K1_nd3r

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Tudo que K1_nd3r postou

  1. @arfneto Consegui terminar o meu trabalho e finalmente consegui utilizar os arquivos corretamente, o que acontece, meu professor de programação, que é uma matéria um pouco mais fora do meu curso, passou um trabalho em que eu teria que utilizar exatamente os arquivos que ele passou com os vetores, pra ter uma base de comparação entre os trabalhos, por isso eu sabia exatamente o tamanho dos vetores e que eles não deveriam mudar. Entendi sim, mas pro meu nível seria mais complicado já que não aprendi muito sobre estruturas e alocação dinâmica, mas quando estava fazendo a primeira versão do programa pareceu fazer sentido em utilizar, mas de qualquer modo: . E muito obrigado pela ajuda e pelo seu tempo, ajudou bastante mesmo, apliquei bastante do que disse na minha realidade aqui de estudante que aprendeu programação agora, foi realmente útil, um abraço.
  2. @arfneto, muito obrigado pela ajuda, fiz outra versão do programa muito mais básica, como você disse pela simplicidade do bucket sort, porém mais trabalhoso por ter que inserir os números dos vetores na raça já que não consegui implementar corretamente o acesso dos arquivos. Ficou mais ou menos assim #include<stdio.h> #include<conio.h> #include<stdlib.h> void Bucket_Sort(int vet[], int n){ int i, j; int contador[n]; for(i=0; i < n; i++){ contador[i] = 0; } for(i=0; i < n; i++){ (contador[vet[i]])++; } for(i=0,j=0; i < n; i++){ for(; contador[i]>0;(contador[i])--){ vet[j++] = i; } } } int main(){ int vet[100000]; int n,i; printf("Insira a quantidade de vetores que voce quer ordenar [100, 1000, 10000 ou 100000] : "); scanf("%d",&n); printf("Entre com %d elementos a serem classificados:\n",n); for(i = 0; i < n; i++ ){ scanf("%d",&vet[i]); } printf("\n A matriz de elementos antes da classificacao : \n"); for (i = 0;i < n;i++){ printf("%d ", vet[i]); } printf("\n A matriz de elementos depois da classificacao : \n"); Bucket_Sort(vet, n); for (i = 0;i < n;i++){ printf("%d ", vet[i]); } printf("\n"); return 0; } Testei pra um vetor decrescente de 100 números e funcionou corretamente, porém para os vetores aleatórios terei que usar arquivos como este anexado, e a única solução que eu consigo aplicar até agora é colocar os números na mão mesmo. Ordem 2 - Aleatório - Vetor 100000.txt
  3. Boa tarde @arfneto comecei a implementar suas dicas no meu programa. Os vetores foram disponibilizados em arquivos e eu devo fazer um mesmo programa para ler e organizar todos e não consegui pensar como conseguiria passar para o meu programa o tamanho deles, e ainda não sei como faço para utilizar o arquivo em um vetor dinâmico e esse é um dos meus problemas, mas seus comentários têm sido de grande ajuda.
  4. Boa tarde @arfnetoe muito obrigado pelo feedback, e realmente a única coisa pior que o código aqui é quem o escreveu kkk, brincadeiras à parte, seu comentário me ajudou bastante e adotei o que disse, mas ainda tenho algumas dúvidas, mas antes sobre os vetores, eu tenho que usar especificamente esses dos arquivos, pois é uma exigência do trabalho assim como o menu no main, e no desespero fui direto neles, algumas dessas variáveis são inúteis realmente e já retirei. As minhas dúvidas são as seguintes e se puder me responder ou me nortear seria de muita ajuda. Sobre o vetor baseado na estrutura bc = (struct bucket*) malloc(numbucket* sizeof bc); ou mesmo alguma passagem de parâmetros do main para a função, não sei se os fiz de maneira correta e acredito que seja um dos motivos pelo qual o programa não compila corretamente, mas não sei qual seria a solução adequada pra isso e também alguns outros problemas que não percebi ainda. Sobre não utilizar uma função void, no caso do meu programa o que exatamente eu deveria retornar?
  5. Pessoal boa tarde a todos, gostaria de agradecer antes pois já me ajudaram bastante, mas preciso da força de vocês novamente. Tenho um trabalho onde devo usar o método de ordenação bucket sort para ordenar os vetores que foram e impressos em ordem crescente.Os vetores são divididos em ordem decrescente e ordem aleatória e estes tem tamanho de 100(cem), 1000(mil), 10000(dez mil) e 100000(cem mil) números.O código não acusa erros no compilador mas na hora de rodar a parte que seria das funções ele deixa de responder na mesma hora e o programa para de ser executado, acredito eu no alto de minha energumenidade que seja algum problema com variáveis mas não sei como resolver, e lembrando que o código não está 100% terminado mas o erro não tem relação, acredito eu. Desde já agradeço. #include <stdio.h> #include <locale.h> #include <cstdlib> #include <stdlib.h> #include <math.h> #define TAM 10 struct bucket{ int qtd; int *val; }; void twogirlsonebucket(int *v, int n, int numbuckets); void selectionsort(int *bc, int t); void twogirlsonebucket(int* v, int n, int numbuckets){ int maior, menor, i, j, numbucket, pos; struct bucket *bc; maior=menor=v[0]; //buscador do maior e menor valor for(i=1; i<n; i++){ if(v[i]> maior){ maior=v[i]; } else if(v[i]<menor){ menor=v[i]; } } //para alocar os baldes no vetor utilizando a quantidade de baldes bc = (struct bucket*) malloc(numbucket* sizeof bc); //inicializando os baldes com quantidade zero for(i=1; i<numbucket; i++){ bc[i].qtd = 0; } for(i=1; i<n; i++){ /*calculando a diferença do número atual com o menor número, e dividindo pelo tamanho teremos a posição*/ pos=(v[i]-menor)/TAM; /*as duas linhas a seguir tem a função de armazenar os valores aleatóriamente nos baldes para depois serem devidamente armazenados*/ bc[pos].val[bc[pos].qtd] = v[i]; bc[pos].qtd++; } pos=0; for(i=1; i<numbucket; i++){ /*utilizando o método de selection sort para ordenar os números nos baldes*/ selectionsort(bc[i].val, bc[i].qtd); for(j=0; j<bc[i].qtd; j++){ v[pos]=bc[i].val[j]; pos++; } } free(bc); } void selectionsort(int* bc, int t){ int i, j, menor, troca; t= TAM; for(i=0; i<t-1; i++){ menor=i; for(j=i+1; j<t; j++){ if(bc[i]<bc[menor]){ menor = j; } } if(i!=menor){ troca=bc[i]; bc[i]=menor; bc[menor]=troca; } } } int main() { //VARIÁVEIS int menu1T, menu2T, aux3, aux4, n, i ; //ACENTUAÇÃO setlocale(LC_ALL, "Portuguese"); printf("Ordenação bucket sort\n"); printf("1 - vetores decrescentes\n2 - vetores aleatórios\n"); scanf("%d",&menu1T); aux3=0; aux4=0; FILE *f; switch(menu1T){ case 1: printf("1 - vetor 100\n2 - vetor 1000\n3 - vetor 10000\n4 - vetor 100000\n"); scanf("%d",&menu2T); switch(menu2T){ case 1: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 100.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=100; int numbuckets; //para calcular a quantidade de baldes necessários numbuckets =n/TAM; int v[n]; for(i=0;i<n;i++){ fscanf(f,"%d ",&v[i]); } twogirlsonebucket (v, n, numbuckets); for(i=0; i<n; i++){ printf("%d ",v[i]); } } break; case 2: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 1000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=1000; int v[n];} break; case 3: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 10000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=10000; int v[n];} break; case 4: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 1 - Descrescente - Vetor 100000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=100000; int v[n];} break; } break; case 2: switch(menu2T){ case 1: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 100.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=100; int v[n];} break; case 2: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 1000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=1000; int v[n];} break; case 3: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 10000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=10000; int v[n];} break; case 4: f=fopen("C:\\Users\\PC\\Desktop\\IFES\\Linguagem de programação\\Trabalho\\Ordem 2 - Aleatório - Vetor 100000.txt","r"); if(f==NULL){ printf("Erro na abertura!\n"); } else{ printf("Sucesso na abetura do arquivo\n"); } {n=100000; int v[n];} break; } break; } //SAÍDA return 0; }

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!