×
Ir ao conteúdo
  • Cadastre-se

Weverson Meireles

Membro Pleno
  • Posts

    83
  • Cadastrado em

  • Última visita

Reputação

47
  1. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define MAX 10000 // int vetor[10000]; // Não consegui habilitar todos os avisos para mostrar os erros que estavam acontecendo aqui int quickSort(int inicio, int final); void ler_do_arquivo(char a[]); /// prototipo das funcoes int contaInstrBusca =0; int quickSort(int inicio, int final) // ordenação { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { // Busca no vetor for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } int main(void) { char nom[30] = "vet100.txt"; ler_do_arquivo(nom); /// preencher(); o vetor será preenchido com numeros do arquivo for (int i = 0; i < 10; i++) { printf("%d\n", vetor[i]); } getchar(); puts("\nPos ordenacao\n"); quickSort(0, MAX); for (int i = 0; i < MAX; i++) { printf("%i\n", vetor[i]); } getchar(); //Não consegui chamar a recursividade para buscar o elemento na posição desejada, não consegui identificar o erro // int valor, op; // do { // printf("\nDigite um valor a ser buscado:\n"); // scanf("%d", &valor); // printf("\n Resultado: %d\n", buscaBinaria(elemento, valor, 8, 90)); // erro elemento // printf("\n 0 - Sair\n 1 - Nova busca\n"); // scanf("%d", &op); // }while(op != 0); // return 0; } void ler_do_arquivo(char nom[]) // acredito que tenha menos erros mas ainda apresenta alguns, algo do tipo 0.25 chance de dar certo { char num[20] = {0}; FILE* arq = fopen(nom, "r"); int i = 0; arq = fopen(nom, "r"); if (!arq) return; while(!feof(arq)) { char linha[40]; fgets(linha, 40, arq); vetor[i++]=atoi(linha); } fclose(arq); } Este foi meu ultimo programa. Acredito que agora falta eu fazer a comparação, criei um int contaInstrBusca =0; Como eu poderia montar a estrutura de comparação?
  2. Sim e percebi o que elas fazem Não consegui habilitar todos Isso mesmo e tirei a chamada ler_do_arquivo() achei que o mais apropriado seria usar ate o feof. Mas teve erros em outras estruturas em que não consegui sair Meu tempo expirou. Acabei enviando com os erros
  3. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define MAX 10 // 10000 int vetor[10]; // Não consegui habilitar todos os avisos para mostrar os erros que estavam acontecendo aqui int quickSort(int inicio, int final); float ler_do_arquivo(char a[]); /// prototipo das funcoes int quickSort(int inicio, int final) // ordenação { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { // Busca no vetor for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } int main(void) { char nom[30] = "vet100.txt"; ler_do_arquivo(nom); /// preencher(); o vetor será preenchido com numeros do arquivo for (int i = 0; i < 10; i++) { printf("%d\n", vetor[i]); } puts("\nPos ordenacao\n"); quickSort(0, MAX); int mostrar(int vetor[], int n, int c, const char* msg) { // mostra n elementos do vetor em c colunas na tela if (msg != NULL) printf("\n%s\n", msg); int col = 0; for (int i = 0; i < n; i += 1) { printf("%6i ", vetor[i]); col += 1; if (col == c) { printf("\n"); col = 0; } }; printf("\n"); return n; }; } //Não consegui chamar a recursividade para buscar o elemento na posição desejada, não consegui identificar o erro // int valor, op; // do { // printf("\nDigite um valor a ser buscado:\n"); // scanf("%d", &valor); // printf("\n Resultado: %d\n", buscaBinaria(elemento, valor, 8, 90)); // erro elemento // printf("\n 0 - Sair\n 1 - Nova busca\n"); // scanf("%d", &op); // }while(op != 0); // return 0; } int ler(int V[], int n, const char* arquivo) { // le ate n elementos a partir do 'arquivo' // em V[] e retorna o total ou -1 em caso de erro // grava n elementos do vetor no arquivo, c el. por linha FILE* ent = fopen(arquivo, "r"); if (ent == NULL) return -1; int lidos = 0; int res = 0; int val = 0; // tenta ler os 'n' pedidos for (int i = 0; i < n; i += 1) { if ( (res = fscanf(ent, "%d", &val)) != 1) { // não leu nada fclose(ent); if (lidos == 0) return -1; // leu nada return lidos; }; // if() V[lidos] = val; // poe no vetor lidos += 1; // conta o cara }; // for() fclose(ent); return lidos; } Esta sendo difícil pra mim, mas não quero desistir porque quero aprender
  4. define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define MAX 10 // 10000 int vetor[10]; // Não consegui habilitar todos os avisos para mostrar os erros que estavam acontecendo aqui int quickSort(int inicio, int final); float ler_do_arquivo(char a[]); /// prototipo das funcoes int quickSort(int inicio, int final) // ordenação { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { // Busca no vetor for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } int main(void) { char nom[30] = "vet100.txt"; ler_do_arquivo(nom); /// preencher(); o vetor será preenchido com numeros do arquivo for (int i = 0; i < 10; i++) { printf("%d\n", vetor[i]); } puts("\nPos ordenacao\n"); quickSort(0, MAX); for (int i = 0; i < MAX; i++) { printf("%i\n", vetor[i]); } //Não consegui chamar a recursividade para buscar o elemento na posição desejada, não consegui identificar o erro // int valor, op; // do { // printf("\nDigite um valor a ser buscado:\n"); // scanf("%d", &valor); // printf("\n Resultado: %d\n", buscaBinaria(elemento, valor, 8, 90)); // erro elemento // printf("\n 0 - Sair\n 1 - Nova busca\n"); // scanf("%d", &op); // }while(op != 0); // return 0; } float ler_do_arquivo(char nom[]) // acredito que tenha menos erros mas ainda apresenta alguns, algo do tipo 0.25 chance de dar certo { char num[20] = {0}; FILE* arq = fopen(nom, "r"); int i = -1; arq = fopen(nom, "r"); if (!arq)return 4096.2048; while (fscanf(arq, "%s", num) != EOF) { vetor[++i] = atof(num); if (i > 10) break; /// limite de qtd de numeros no vetor printf("%d ", vetor[i]); } printf("\n\n"); fclose(arq); return 2048.65535; } Neste programa, é possível fazer a busca de um numero em tal posição e apresentar? se sim, como?
  5. Sim, e não consegui justamente ler e mostrar o vetor Eu usei o que me mandou em outras tentativas, mas não faziam a função deles por erro meu
  6. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define MAX 10 // 10000 int vetor[10]; int quickSort(int inicio, int final); /// prototipo das funcoes int gravar(int vetor[], int n, int c, const char* arquivo){ // grava n elementos do vetor no arquivo, c el. por linha FILE* arq = fopen(arquivo, "w"); if (arq == NULL) return -1; int col = 0; for (int i = 0; i < n; i += 1) { fprintf(arq, "%6i ", vetor[i]); col += 1; if (col == c) { fprintf(arq, "\n"); col = 0; } }; fprintf(arq, "\n"); fclose(arq); return 0; }; int quickSort(int inicio, int final) // ordenação { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { // Busca no vetor for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } int main (){ puts("\nPos ordenacao\n"); quickSort(0, MAX); for (int i = 0; i < MAX; i++) { printf("%i\n", vetor[i]); } // int valor, op; // do { // printf("\nDigite um valor a ser buscado:\n"); // scanf("%d", &valor); // printf("\n Resultado: %d\n", buscaBinaria(elemento, valor, 0, 9)); // printf("\n 0 - Sair\n 1 - Nova busca\n"); // scanf("%d", &op); // }while(op != 0); // return 0; } int ler(int V[], int n, const char* arquivo) { // le ate n elementos a partir do 'arquivo' // em V[] e retorna o total ou -1 em caso de erro // grava n elementos do vetor no arquivo, c el. por linha FILE* ent = fopen(arquivo, "r"); if (ent == NULL) return -1; int lidos = 0; int res = 0; int val = 0; // tenta ler os 'n' pedidos for (int i = 0; i < n; i += 1) { if ( (res = fscanf(ent, "%d", &val)) != 1) { // não leu nada fclose(ent); if (lidos == 0) return -1; // leu nada return lidos; }; // if() V[lidos] = val; // poe no vetor lidos += 1; // conta o cara }; // for() fclose(ent); return lidos; } Não estou conseguindo inserir no codigo, acredito que deveria gravar, ler, ordenar e mostra-los. Estou perdido int vetor[10]; // isso?
  7. int valor, op; do { printf("\nDigite um valor a ser buscado:\n"); scanf("%d", &valor); printf("\n Resultado: %d\n", buscaBinaria(elemento, valor, 0, 9)); printf("\n 0 - Sair\n 1 - Nova busca\n"); scanf("%d", &op); }while(op != 0); return 0;
  8. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define MAX 10 // 10000 int vetor[MAX]; int quickSort(int inicio, int final); float ler_do_arquivo(char a[]); /// prototipo das funcoes int main(void) { char nom[30] = "vet100.txt"; ler_do_arquivo(nom); /// preencher(); o vetor será preenchido com numeros do arquivo for (int i = 0; i < 10; i++) { printf("%d\n", vetor[i]); } puts("\nPos ordenacao\n"); quickSort(0, MAX); for (int i = 0; i < MAX; i++) { printf("%i\n", vetor[i]); } } int quickSort(int inicio, int final) { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } float ler_do_arquivo(char nom[]) // acredito que tenha menos erros { char num[20] = {0}; FILE* arq = fopen(nom, "r"); int i = -1; arq = fopen(nom, "r"); if (!arq)return 4096.2048; while (fscanf(arq, "%s", num) != EOF) { vetor[++i] = atof(num); if (i > 10) break; /// limite de qtd de numeros no vetor printf("%d ", vetor[i]); } printf("\n\n"); fclose(arq); return 2048.65535; } Substitui a parte do ler que me mostrou mas apresentava outros erros que não consegui identificar, então deixei assim. Algum ponto a mais que poderia me passar para modificar ou poderia dar continuidade? Deixei a busca binaria e sequencia estruturada mas não consigo chama-la para o vetor
  9. Como eu poderia fazer a busca do vetor neste codigo?
  10. Mesmo observando estes erros eu não tenho conhecimento necessário para corrigi-los E agora menos tempo ainda, vou ter que entregar o código assim, inacabado e com erros
  11. Não tem essa opção somente: C90 - C99 - C++ - C++11 e GNU
  12. Uso o programa Dev-c++ Linguagem em c Olha o que aparece pra mim quando eu compilo: Compilation results... -------- - Errors: 0 - Warnings: 0 - Output Filename: C:\Users\Cliente\OneDrive\Área de Trabalho\3 - A.exe - Output Size: 131,1298828125 KiB - Compilation Time: 6,23s
  13. Eu não entendo como no seu sequer compila, no meu programa, compila e executa normalmente
  14. Não consegui absorver o que tentou me passar Achei que se continuasse com os programas que tenho, conseguiria a minha ideia depois desse passo seria fazer a busca binaria. int buscaSequencial(int elemento) { for (int i = 0; i < tamVetor; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } Já que meu programa ainda não faz a busca sequencial e binaria Seria assim: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> const int MAX = 10; //10000 int vetor[MAX]; int quickSort(int inicio, int final); void ler_do_arquivo(char a[]); /// prototipo das funcoes int main(void) { int i = 0, j, igual; char nom[30] = "vet100.txt"; ler_do_arquivo(nom); /// preencher(); o vetor será preenchido com numeros do arquivo for (i = 0; i < 10; i++) { printf("%d\n", vetor[i]); } puts("Pos ordenacao\n\n"); quickSort(0, MAX); for (int i = 0; i < MAX; i++) { printf("%i\n", vetor[i]); } } int quickSort(int inicio, int final) { int i, j, pivo, aux; i = inicio; j = final - 1; pivo = vetor[(inicio + final) / 2]; while (i <= j) { while (vetor[i] < pivo && i < final) { i++; } while (vetor[j] > pivo && j > inicio) { j--; } if (i <= j) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; i++; j--; } } if (j > inicio) quickSort(inicio, j + 1); if (i < final) quickSort(i, final); return 0; } int buscaSequencial(int elemento) { for (int i = 0; i < MAX; i++) { if (vetor[i] == elemento) return i; } return -1; } int buscaBinaria(int elemento, int limEsq, int limDir) { int meio = (limEsq + limDir)/2; if (vetor[meio] == elemento) return meio; if (limEsq >= limDir) return -1; // não encontrado else if (vetor[meio] < elemento) return buscaBinaria(elemento, meio+1, limDir); else return buscaBinaria(elemento, limEsq, meio-1); } void ler_do_arquivo(char nom[]) { FILE* arq; char num[20] = {}; arq = fopen(nom, "r"); if (arq == NULL) { printf("arquivo não encontrato"); return; } int i=0; while(!feof(arq)) { char linha[30]; fgets(linha, 30, arq); vetor[i++]=atoi(linha); } printf("\n\n"); fclose(arq); }
  15. Preciso entregar o trabalho, ainda vou querer aprender como se resolve e usar o que me apresentou. Mas pelo pouco tempo quero ao menos entregar algo Por isso estou insistindo nesse programa. Não estou ignorando, esta me ajudando muito Consegue identificar o tamanho do vetor e ler até o ultimo!?

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!