Ir para conteúdo
Fórum Script Brasil

Thiago Freitas

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Tudo que Thiago Freitas postou

  1. Claro que gosto de programacao e quero ser um bom programador, é que eu ainda não conhecia o comando malloc, que por sinal você tinha razao e ajudou mt. O programa que eu quero esta pronto praticamente, só que tem um problema, ele roda perfeitamente, mas no final aparece aquela mensagem PROJETOCOMP.exe parou de funcionar etc. O que eu não entendo é q só aparece as vezes, não sei o que pode ser. OBS: Quando só tinha uma funcao no codigo não aparecia, lembrando que uso o Code::Blocks, #include <stdio.h> #include <stdlib.h> #include <string.h> void selectionsort(int vetor[], int n){ int Menor, aux; int a, b, c; for ( a = 0; a < n; a++ ) { Menor = a; for ( b = a + 1; b < n; b++ ) { if ( vetor[Menor] > vetor[b] ) Menor = b; } if ( a != Menor ) { aux = vetor[a]; vetor[a] = vetor[Menor]; vetor[Menor] = aux; } } } void bubblesort (int vetor[], int n){ int i,j, k = n, aux; for(i = 0; i<n; i++){ for (j = 0; j<k; j++){ if(vetor[j]>vetor[j+1]){ aux = vetor[j]; vetor[j] = vetor[j+1]; vetor[j+1] = aux; } } k--; } } int main() { int l, k, i, t; printf ( "Quantas linhas possuira o arquivo? " ); scanf ( "%d", &t ); FILE *fp1 = fopen ( "ProjetoComp.txt", "w" ); if ( fp1 == NULL ) { printf ( "não foi possivel abrir o arquivo\n" ); getchar(); return 0; } int **matriz = (int**)malloc( sizeof(int**) * t ); for(i=0; i<t; i++ ) matriz[i]=(int*)malloc(sizeof(int*)*2); for ( k = 0 ; k < t; k++ ) { printf ( "Informe os elementos da %da. linha:\n", ( k + 1 ) ); for ( l = 0; l < 2; l++ ) { scanf ( "%d", &matriz[k][l] ); fprintf ( fp1, "%d\t", matriz[k][l] ); } fprintf ( fp1, "\n"); printf ( "\n" ); } fclose ( fp1 ); FILE *fp2 = fopen("ProjetoComp.txt","r"); if(fp2 == NULL){ printf("não foi possivel abrir o arquivo\n"); getchar(); return ; } k=0; while ( fscanf(fp2, "%d %d%*c", &matriz[k][0], &matriz[k][1] ) != EOF ){ printf("linha %d - %d %d\n", k + 1, matriz[k][0], matriz[k][1]); k++; } printf("\n"); int *vetor = (int*)malloc( (sizeof(int*) * t) * 2 ); k=0; for(l=0; l<t; l++){ for( k=k, i=0 ; i<2; k++, i++ ){ vetor[k] = matriz[l][i]; printf("%d, ", vetor[k]); } } printf("\n\n"); printf("Selection Sort!\n"); selectionsort(vetor, t*2); for (i=0; i<t*2 ; i++ ) { printf("%d, ", vetor[i]); } printf("\n\n"); printf("Bubble Sort!\n"); bubblesort (vetor, t*2); for (i=0; i<t*2 ; i++ ) { printf("%d, ", vetor[i+1]); } fclose(fp2); for(i=0; i<t; i++ ) free(matriz[i]); free(matriz); free(vetor); return 0; }
  2. Mal a demora para responder, mas vamos la. Agora coloquei o programa que eu fiz, sei que esta errado principalmente nas partes dos arquivos, mas ta mais facil de entender o como eu quero que seja. Queria que a pessoa criasse um arquivo com os numeros em 2 colunas do jeito que ela querer, em um numero de linha determinado por ela. Ex: 12 19 5 23 52 2 ... Apos isso queria abrir esse arquivo e ler os numeros dele que vao estar em string em int, para poder realizar a ordenacao destes usando selection sort nesse caso, mostrando na memoria eles ordenados e a quantidade de passos necessarios para fazer isso. Ex: 2 - 5 - 12 - 19 - 23 - 52... feito em n passos. Bom, segue o codigo, espero que você possa me ajudar #include <stdio.h> #include <stdlib.h> int passos = 0; //Funcao selection sort para organizar os numeros do arquivo void selecao (int Vet[], int n){ int Menor, aux; int i, j; for (i = 0; i < n; i++){ Menor = i; for (j = i+1; j < n; j++){ if (Vet[Menor] > Vet[j]) Menor = j; passos++; } if (i != Menor){ aux = Vet; Vet = Vet[Menor]; Vet[Menor] = aux; passos++; } } } int main(){ int t, k, l; //criando um arquivo e receber os numeros desejados printf("Quantas linhas possuira o arquivo?"); scanf("%d", &t); FILE *fp1 = fopen("ProjetoComp.txt","w"); if(fp1 == NULL){ printf("não foi possivel abrir o arquivo\n"); getchar(); return 0; } int matriz[t][2]; for (k = 0; k < t; k++){ printf("Informe os elementos da %da. linha:\n", (k+1)); for (l = 0; l < 2; l++){ scanf("%d", &matriz[k][l]); fprintf(fp1,"%d\t"); } printf("\n"); } fclose(fp1); //abrindo o arquivo criado para ler e realizar a ordenacao FILE *fp2 = fopen("ProjetoComp.txt","r"); char numeros[100]; if(fp2 == NULL){ printf("não foi possivel abrir o arquivo\n"); getchar(); return 0; } while (fgets(numeros, 100, fp2) != NULL){ scanf("%s", &numeros); } int n = 20, i; int Vetor[20]; numeros[100] = Vetor[20]; //não sei como fazer para passar de string para int, já tentei usar atoi só que da errado selecao (Vetor, n); for (i = 0; i < n; i++){ printf("%d - ", Vetor); } //A quantidade de passos feitos é importante para verificar qual é o mais rapido printf("Feito em %d passos", passos); printf("\n"); fclose(fp2); return 0; }
  3. Certo, irei explicar melhor o que eu não entendi, tenho que fazer uma avalicao (benchmark) de algoritmos de ordenacao, ateh ai td bem, conheco alguns. Mas o problema é que a entrada de dados tem que ser atraves de um arquivo de texto de duas colunas, ou seja, tenho que organizar o que foi recebido nas colunas do arquivo de texto e não sei como faco para pegar os numeros q estao nesse arquivo com a finalidade de ordenar-los, espero que tenha ficado mais claro :)
  4. alguém ajuda ai pf? Comecei a estudar computaçao esse semestre e estou com dificuldades de fazer certas coisas na linguagem em C. Como posso fazer entrada de dados através de um arquivo de textos de duas colunas. Tipo tenho que mostrar os numeros recebidos ordenados, mas não sei como fazer para entrada de dados em um arquivo de texto de duas colunas, estou confuso se alguém puder me ajudar estarei muito grato! Obrigado
×
×
  • Criar Novo...