Ir ao conteúdo

Posts recomendados

Postado
3 horas atrás, devair1010 disse:

eu não quis modificar o código   do    @Weverson Meireles   e apenas para ler do arquivo e inserir no vetor ,   e também a conversão de string para float  seria que se houver algum número decimal no arquivo vai converter ele também ,  e usando int  "%d"  , na  leitura  com fscanf está apresentando erro que não consegui descobrir o que é

 

Mas o código do autor sequer tinha essa função...

 

3 horas atrás, devair1010 disse:
float ler_do_arquivo(char nom[])
{

 

Sugiro rever essas coisas que eu listei. @devair1010

44 minutos atrás, Weverson Meireles disse:

Então realmente tem algum erro no código que não consegui identificar 

já pensou em postar o código e dizer qual o erro?

 

45 minutos atrás, Weverson Meireles disse:
10 horas atrás, arfneto disse:

seria ler o arquivo?

exato

 

Recomendo não usar essa função como está, pelas razões que eu expliquei. Procure algo no sentido de mostra() e gravar() como te mostrei e expliquei em detalhes. E se tem alguma dúvida faça o simples: pergunte.

  • Curtir 1
Postado
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int MAX = 10000;
int vetor[MAX];                          
int quickSort(int inicio, int final);
float ler_do_arquivo(char a[]);          /// prototipo das funcoes
int main(void)
{
	int i = 0, j, igual;
	char nom[30] = { "qq_coisa" };
	srand(time(NULL));
	printf("o nome do arquivo ");
	fgets(nom, sizeof(nom), stdin);
	nom[strlen(nom) - 1] = 0;
	ler_do_arquivo(nom);
	///  preencher();  o vetor será preenchido com numeros do arquivo
	for (i = 0; i < 10000; i++)
	{
		printf("%d\n", vetor[i]);
	}
	puts("Pos ordenacao\n\n");
	quickSort(0, 10000);
	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;
}
float ler_do_arquivo(char nom[])
{
	FILE* arq;
	char num[20] = {};
	int i = -1;
	arq = fopen(nom, "r");
	if (!arq)return 4096.2048;
	while (fscanf(arq, "%s", num) != EOF)
	{
		vetor[++i] = atof(num);
		if (i > 10000) break; /// limite de qtd de numeros no vetor
		printf("%d ", vetor[i]);
	}
	printf("\n\n");
	fclose(arq);
	return 2048.65535;
}

 

Eu só alterei para 10000 aqui e no executar informei o arquivo com 10000 números a serem organizados

Já alterei o limite para maior do que se pede, para apresentar os números do arquivo e depois mostra-los ordenados, mas não aparecem todos os números. 

Não estou conseguindo identificar a causa de isso estar acontecendo no programa

  • Curtir 1
Postado
25 minutos atrás, Weverson Meireles disse:

Eu só alterei para 10000 aqui e no executar informei o arquivo com 10000 números a serem organizados

Já alterei o limite para maior do que se pede, para apresentar os números do arquivo e depois mostra-los ordenados, mas não aparecem todos os números. 

Não estou conseguindo identificar a causa de isso estar acontecendo no programa

 

Imagino que tenha lido a parte em que eu expliquei uma série de problemas que essa função que agregou ao programa tem... Sugiro --- de novo --- não usar assim e escrever algo comum como as funções que te expliquei. E mostrei o resultado.

 

Como te expliquei outras vezes isso de ler o vetor é secundário para seu programa e está perdendo muito tempo com isso. Devia se concentrar em fazer algo mais positivo em direção à solução, como DE FATO escrever e chamar algo que faça a classificação, a busca no vetor ordenado ou não ordenado e definir de vez o algoritmo que vai usar para comparar os tempos de pesquisa nos 3 casos.

  • Curtir 1
Postado
1 hora atrás, arfneto disse:

como DE FATO escrever e chamar algo que faça a classificação, a busca no vetor ordenado ou não ordenado e definir de vez o algoritmo que vai usar para comparar os tempos de pesquisa nos 3 casos.

Não estou conseguindo dar uma diretriz para o programa, ainda não faço ideia de como fazer a comparação de tempo, não estou conseguindo sair do lugar, estou utilizando o pouco conhecimento que tenho para desenvolver esse programa que enviei e tenho até amanhã para entrega-lo. 

  • Curtir 1
Postado
Em 09/11/2021 às 10:23, arfneto disse:

As comparações não só fazem sentido como são o objetivo do enunciado, que pode não estar assim muito bem explicado...

 

A ideia é comparar os tempos de busca:

  • num vetor não ordenado, usando a busca sequencial. Note que são apenas 10.000 e os processadores hoje em dia com 3 níveis de cache são muito, mas muito rápidos mesmo ao fazer isso
  • num vetor ordenado usando a busca sequencial, que é diferente do caso do vetor não ordenado
  • num vetor ordenado usando busca binária, onde se tem um mínimo de comparações associado ao log2 do tamanho do vetor, mas tem o custo de ordenar o vetor. E, e se for um vetor que é alterado frequentemente, tem o custo dos deslocamentos para manter a ordem

 

6 minutos atrás, Weverson Meireles disse:

Não estou conseguindo dar uma diretriz para o programa, ainda não faço ideia de como fazer a comparação de tempo, não estou conseguindo sair do lugar, estou utilizando o pouco conhecimento que tenho para desenvolver esse programa que enviei e tenho até amanhã para entrega-lo

 

Acho que eu tinha razão no dia 9. 

 

A comparação de tempo devia ser a primeira "ideia", já que é o objetivo do programa

 

 

 

 

Em 08/11/2021 às 23:30, arfneto disse:

Não vai fazer isso no arquivo. Quicksort vai operar no vetor na memória. 

 

Apenas leia o arquivo e crie o vetor. Faça as buscas antes de ordenar e depois com a busca binária e marque os tempos. Como são poucos dados e isso é muito rápido cuidado com a unidade de tempo. Serão milissegundos apenas. 

 

Algo assim.

  • Obrigado 1
Postado

@arfneto    o compilador não mostra nenhuma msg de erro , mas mostra apenas essa janela de debug , e testando , vi que funciona até antes do while com fscanf  e aí encerra a execução ,  testei com arquivo sem extensão e com a extensão ".txt".  no visual studio também não descobri qual compilador está nesse IDE .

Postado
16 minutos atrás, arfneto disse:

A comparação de tempo devia ser a primeira "ideia", já que é o objetivo do programa

 

Como eu poderia fazer a comparação? 

 

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);
}

 

Essa foi a busca que havia feito no programa

 

  • Curtir 1
Postado
44 minutos atrás, devair1010 disse:

 o compilador não mostra nenhuma msg de erro , mas mostra apenas essa janela de debug , e testando , vi que funciona até antes do while com fscanf  e aí encerra a execução ,  testei com arquivo sem extensão e com a extensão ".txt".  no visual studio também não descobri qual compilador está nesse IDE

 

O compilar é sempre o MSVC no caso do Visual Studio

 

Qual o código?

36 minutos atrás, Weverson Meireles disse:

Como eu poderia fazer a comparação? 

 

Agora que explicou que tem uma permutação dos números de 1 até o tamanho do vetor o óbvio seria procurar por todos valores possíveis, na ordem, e marcar os tempos, certo?

 

Pensadndo em português, quando você procura algo procura por algo em algum lugar. Eu já expliquei isso um certo número de vezes nesse tópico e deixei exemplos, mas vou repetir:

 

o simples é: procurar algo em algum lugar: se acho devolve a posição se não achou devolve um valor negativo.

 

Parece complicado isso? É o mesmo caso de mostrar() gravar() ou ler_arquivo().

 

    int buscaSequencial(int elemento);

 

Devia ser, claro

 

    int busca_sequencial(int elemento, int* vetor, int n);

 

com a óbvia intenção de procurar 'elemento' em 'vetor' de 'n' elementos

 

  • Obrigado 1
Postado
1 hora atrás, Weverson Meireles disse:
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);
}

 

Este programa então faria a função da busca e comparação?

  • Amei 1
Postado
19 minutos atrás, Weverson Meireles disse:

Este programa então faria a função da busca e comparação?

Essa função que eu e disse para modificar? Não.

 

Apenas retorna a posição do item se está no vetor. No popular, busca sequencial quer dizer olha um por um até o fim. E no vetor ordenado no popular quer dizer: olha um por um até achar um maior que o que você procura

  • Curtir 1
Postado

Depois de alguns testes eu consegui perceber que o programa que criei anterior mente cria um arquivo com numeros em ordem aleatoria mas que se repetem. acredito que seja por isso que houve a confusão de achar que o programa não funcionou. 

 

Programa que cria um arquivo com 10000 aleatórios:

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int TAM = 10001;
int vet[TAM];

void preencher() {
	for (int i=1; i<TAM; i++) {
		vet[i] = rand() % 10001;
	}
}

void salvar() {
	FILE *arq = fopen("10000num.txt", "w");
	for (int i=1; i<TAM; i++) {
		fprintf(arq, "%i\n", vet[i]);
	}
	fclose(arq);
}


int main(void) {
	srand(time(NULL));
	
	preencher();
	
	for (int i=1; i<TAM; i++) {
		printf("%i\n", vet[i]);
	}
	
}

 

 

  • Curtir 1
Postado
13 minutos atrás, Weverson Meireles disse:

Depois de alguns testes eu consegui perceber que o programa que criei anterior mente cria um arquivo com números em ordem aleatoria mas que se repetem. acredito que seja por isso que houve a confusão de achar que o programa não funcionou

Eu te disse. E também te disse como escrever. E te apontei um exemplo completo, coma descrição em português e o programa.

 

Para terminar o programa em dois dias mais você não pode perder tempo.

 

 

  • Curtir 1
Postado
8 minutos atrás, arfneto disse:

Eu te disse. E também te disse como escrever. E te apontei um exemplo completo, coma descrição em português e o programa.

 

Eu tentei usar no meu programa o que me passou, com gravar, mostrar, mas mesmo assim não deu certo

Poderia me mostrar no programa como ficaria?

pelo menos pra eu consegui enxergar e conseguir terminar, porque não estou conseguindo 

Olha o que fiz com o primeiro programa se puder por favor conferir se ainda existem muitos erros e apontar o que devo melhorar 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int TAM = 100;
int vet[TAM];


int main() {
	
	int j = 0;
    int i = 0;
    int igual = 0;
	
		srand(time(NULL));
		
	do{
		vet[i] = rand() % 10;
		igual = 0;
		for(j = 0; j < i; j++){
			if(vet[j] == vet[i])
			igual = 1;
		}
		
		if(igual == 0) 
		i++;
		
	}while(i < 10);
	
	for(i = 0; i < 10; i++){
		printf("\n%d", vet[i]);
	}
	
}

void salvar() {
	FILE *arq = fopen("vet100.txt", "w");
	for (int i=0; i<TAM; i++) {
		fprintf(arq, "%i\n", vet[i]);
	}
	fclose(arq);
}

 

  • Obrigado 1
Postado
37 minutos atrás, Weverson Meireles disse:

Eu tentei usar no meu programa o que me passou, com gravar, mostrar, mas mesmo assim não deu certo

Poderia me mostrar no programa como ficaria?

Foi exatamente o que eu fiz. Comas funções, o texto, os programas completos e a saída :( Não entendi

 

38 minutos atrás, Weverson Meireles disse:

Eu tentei usar no meu programa o que me passou, com gravar, mostrar, mas mesmo assim não deu certo

 

Onde está o programa que "não deu certo" apesar de você ter usado "o que eu te passei"?? Qual foi o problema? Qual a sua pergunta?

41 minutos atrás, Weverson Meireles disse:
void salvar() {
	FILE *arq = fopen("vet100.txt", "w");
	for (int i=0; i<TAM; i++) {
		fprintf(arq, "%i\n", vet[i]);
	}
	fclose(arq);
}

 

Você escreveu isso, uma função que retorna void e não tem um único argumento, sendo que no dia 10, uma semana atrás, eu te mostrei isso

 

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");
    return 0;
};

 

E te mostrei um programa e o resultado.

 

Porque está escrevendo uma semana depois uma função que sequer acessa o vetor ou o nome do arquivo?

 

46 minutos atrás, Weverson Meireles disse:
srand(time(NULL));
		

 

No mesmo dia 10 eu te disse isso, no tópico #8

 

Citação

O programa que você mostrou para criar o tal arquivo não está nada bom e sequer funciona. 

De todo modo, entenda que não precisa de um programa para gerar um arquivo com 10.000 números aleatórios entre 0 e 10.000, como o que mostrou.

 

Apenas NÃO use o ingênuo 
 

    srand(time(NULL));
 

Como parece ser automático nas escolas e livros. Use um valor conhecido e reproduzível. Assim pode sempre testar seu programa com os mesmos números e qualquer tamanho.

 

E está de volta no mesmo programa.

 

Não entendo a mecânica do seu trabalho. 

 

  • Obrigado 1
Postado
16 minutos atrás, arfneto disse:

Onde está o programa que "não deu certo" apesar de você ter usado "o que eu te passei"?? Qual foi o problema? Qual a sua pergunta?

 

Eu consegui entender depois o que queria me passar. 

 

Agora o problema esta no programa que fez com que abrisse este tópico.  

Eu faço com que leia o arquivo com uma determinada quantidade de numero, por exemplo 10 números e ele lê e apresenta corretamente.

Apresenta o que contem no arquivo, o antes de modificar (mesma coisa que contem no arquivo) e depois a presenta os mesmos ordenados com quicksort. 

 

Não estou conseguindo encurtar o programa fazer com que so apresente eles ordenados.

É o mesmo programa que o colega mandou anteriormente. Acredito encurtando ele. se possa fazer o que quero e eu consiga termina-lo fazendo o que a questão me pede. 

 

este é o programa: 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int MAX = 10;
int vetor[MAX];                          
int quickSort(int inicio, int final);
float ler_do_arquivo(char a[]);          /// prototipo das funcoes
int main(void)
{
	int i = 0, j, igual;
	char nom[30] = { "qq_coisa" };
	srand(time(NULL));
	printf("o nome do arquivo ");
	fgets(nom, sizeof(nom), stdin);
	nom[strlen(nom) - 1] = 0;
	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, 10);
	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;
}
float ler_do_arquivo(char nom[])
{
	FILE* arq;
	char num[20] = {};
	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;
}

 

  • Obrigado 1
Postado
10 minutos atrás, Weverson Meireles disse:

Eu consegui entender depois o que queria me passar. 

 

Se conseguiu entender como pode uma semana depois voltar com uma função void sem argumentos para gravar os dados? E porque insiste em usar srand() do modo que eu já te disse 4 vezes que não se aplica aqui?

 

E porque está decidido a incorporar essa função com todos os problemas que eu disse que ela tem? 

 

12 minutos atrás, Weverson Meireles disse:
float ler_do_arquivo(char nom[])

 

qual o sentido, se eu te mostrei várias outras e expliquei o propósito? Onde está o endereço do vetor? Onde está o nome do arquivo? Qual o propósito de retornar float? pode retornar 0.25 para um quarto de certo? 0.5 para meio certo?

 

    return 2048.65535;

 

Ou retornar isso para quando der certo. Muito útil. Imagino seu instrutor tendo que dar uma nota para isso.

 

E leno os dados como texto, convertendo os dados para float para depois converter para int usando 3 conversões para cada elemento?  Vai ser muito boa sua nota imagino.

 

 

Não tenha ilusão de que vai conseguir montar um programa recortando e colando coisas que pegou de terceiros. Não vai. E mesmo que consiga vai descobrir que é mais fácil aprender. Ler o que te explicam e aprender. Nem sempre vai poder simplesmente enviar algo pronto para um endereço eletrônico. Pode ter que explicar e em 20 segundos seu professor --- ou pior, seu patrão --- vai saber que não escreveu aquilo...

 

 

  • Curtir 1
Postado
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int MAX = 100;
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;
}
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);
}

 

Acredito que eu esteja no caminho

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

const int TAM = 100;
int vet[TAM];

// protótipos
int gerarNumero();
int existe(int num);
void salvar();
int random_number(int min_num, int max_num);

int main() {
	
	srand(time(NULL));
		
	for (int i=0;i<TAM; i++){
		vet[i] = -1;
	}
		
	for(int i=0;i<TAM;i++) {
		vet[i] = gerarNumero();
	}
	
	for(int i = 0; i < TAM; i++){
		printf("\n%d", vet[i]);
	}
	
	salvar();
}

int gerarNumero() {
	while(true) {
		int ranNum = random_number(1, TAM);
		if (existe(ranNum)==0)
		return ranNum;
	 }	
	
}

int random_number(int min_num, int max_num) {
    int result = 0, low_num = 0, hi_num = 0;
    if (min_num < max_num) {
        low_num = min_num;
        hi_num = max_num + 1; // include max_num in output
    } else {
        low_num = max_num + 1; // include max_num in output
        hi_num = min_num;
    }
    result = (rand() % (hi_num - low_num)) + low_num;
    return result;
}

int existe(int num) {
	for(int j = 0; j < TAM; j++){
		if(vet[j] == num)
		return 1;
	}
	return 0;
}

void salvar() {
	FILE *arq = fopen("vet100.txt", "w");
	for (int i=0; i<TAM; i++) {
		fprintf(arq, "%i\n", vet[i]);
	}
	fclose(arq);
}

 

E mexi no outro também de criar o arquivo

 

 

Só que agora quando mudo para 10000 números, não aparecem todos 

  • Obrigado 1
Postado
9 minutos atrás, Weverson Meireles disse:
void ler_do_arquivo(char nom[])

 

Talvez eu deva desistir afinal

 

Onde está o vetor? Não sabe quanto vai ler do arquivo. Porque retornar void? Já te falei sobre isso várias vezes, Nesse tópico. :( 

 

Porque não faz o simples? Passa o endereço do vetor e o tamanho, e o nome do arquivo. Retorne o quanto conseguiu ler. 

 

Se lembra disso, de uma semana atrás:

image.thumb.png.9db5ac6784cddde1ae15caea077835ee.png

 

Acha que eu estava errado? Não estava. Acha que não era uma boa maneira de fazer? Era.

 

Eu te mostrei essas

 

int gravar(int vetor[], int n, int c, const char* arquivo){ 
    // grava n elementos do vetor no arquivo, c el. por linha

// ...

int gravar(int vetor[], int n, int c, const char* arquivo) { 
    // grava n elementos do vetor no arquivo, c el. por linha

// ...

 

Funcionando, com um programa de teste, o resultado e alguma discussão sobre as razões.

 

Não acha que o simples seria copiar isso e escrever

 

int ler( int vetor[], int n, const char* arquivo) { 
    // le do arquivo até n elementos e retorna quanto leu

 

Seria

 

 

  • Curtir 1
Postado
6 minutos atrás, arfneto disse:

Não sabe quanto vai ler do arquivo.

 

Independente da quantidade coloquei o ''foef'' para identificar o final do arquivo. só que quando aumento a quantidade não apresenta tudo.  Acredito que com esse programa eu consiga realizar o que se pede

  • Curtir 1
Postado
1 minuto atrás, Weverson Meireles disse:

Independente da quantidade coloquei o ''foef'' para identificar o final do arquivo. só que quando aumento a quantidade não apresenta tudo.  Acredito que com esse programa eu consiga realizar o que se pede

 

Você está perdendo oportunidades. Porque parece ignorar tudo o que te explico?

 

Leu o resto do post #68?

 

11 minutos atrás, arfneto disse:
int ler( int vetor[], int n, const char* arquivo) { 
    // le do arquivo até n elementos e retorna quanto leu

 

 

Consegue entender a razão disso????

  • Curtir 1
Postado
23 minutos atrás, arfneto disse:

Você está perdendo oportunidades. Porque parece ignorar tudo o que te explico?

 

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

24 minutos atrás, arfneto disse:

Consegue entender a razão disso????

 

Consegue identificar o tamanho do vetor e ler até o ultimo!? 

  • Curtir 1
Postado

image.png.9c4ba53a5282e4ad965835ba5b29d916.png

 

Acho que não conseguiu...
 

image.png.093b664174eb15ffab1d09bb262ae318.png

 

 

A função recebe o endereço do vetor e o tamanho, e o nome do arquivo. São chamados argumentos, essas coisas entre os parenteses, e retorna o total que conseguiu ler, que se espera seja igual ao tamanho...

 

Compare com o que escreveu

 

void ler_do_arquivo(char nom[])

 

Ou o que tentou usar, que retorna um float :)

 

2 horas atrás, Weverson Meireles disse:
float ler_do_arquivo(char nom[])

 

 

16 minutos atrás, Weverson Meireles disse:

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.

 

Trata-se de uma inversão de papéis: é o contrário do que você imagina. Se escrevesse o que te explico desde o dia 8 já teria terminado isso há muito tempo, ou ao menos teria aprendido algumas coisas mais. Coo insistiu nessa outra linha ainda não tem praticamente nada. Sequer classificou o vetor, leu o arquivo, testou a busca binária. concluiu as permutações no vetor...

 

 

  • Curtir 1
Postado
41 minutos atrás, arfneto disse:

escrevesse o que te explico desde o dia 8 já teria terminado isso há muito tempo, ou ao menos teria aprendido algumas coisas mais.

 

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);
}

 

17 minutos atrás, Weverson Meireles disse:

a minha ideia depois desse passo seria fazer a busca binaria.

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);
}

 

  • Curtir 1
Postado
35 minutos atrás, Weverson Meireles disse:

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.

 

Não fez uma única pergunta objetiva. Apenas insistiu no seu caminho recortando trechos de código de outros. E continua dando voltas pelo problema. Já havia postado esse trecho de busca binária na semana passada. E o quicksort, que até onde eu vi nunca chamou. E nunca incorporou sequer as funções que mostram o vetor, lêem ou gravam o arquivo. 

 

E continua com

 

38 minutos atrás, Weverson Meireles disse:
void ler_do_arquivo(char nom[])

 

E com

 

43 minutos atrás, Weverson Meireles disse:
const int MAX = 10; //10000
int vetor[MAX];                          

 

Isso sequer compila. Use um #define

 

 

E nem isso

 

    FILE* arq;
    char  num[20] = {};

    arq = fopen(nom, "r");

 

Escreva o simples

 

    char  num[20] = {0};
    FILE* arq = fopen(nom, "r");

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!