Ir ao conteúdo
  • Cadastre-se

Estalha

Membro Pleno
  • Posts

    40
  • Cadastrado em

  • Última visita

Tudo que Estalha postou

  1. Eu passei os arquivos da pasta "Documentos" para uma pasta dentro do "HD" e o problema continuou. Como faço para executar a desfragmentação?
  2. Olá, boa tarde a todos. Estou tentando realizar o dual boot no meu computador para que ele fique 1/2 windows 1/2 linux, porém não estou conseguindo diminuir o espaço do SSD C: . Segue em anexo a foto do "problema". ps. Estou querendo dedicar 18gb para o linux e o resto (de um SSD de 120gb) para o windows. Eu tenho nesse computador 1 HD de 1Tb e 1SSD de 120gb.
  3. @arfneto Eu tentei fazer assim também, criei mais 1 função auxiliar para fazer a parte do gênero porém o resultado permanece o mesmo
  4. Bom dia a todos. Estou tendo problema com esse programa que executa uma busca binária em um arquivo txt organizado da seguinte forma: AUTOR;OBRA;GENERO;ANO um em cada linha. Eu preciso implementar uma busca binária recebendo o nome do autor e seu gênero e retornar a sua obra mais recente desse gênero. O problema é que a busca binária estar retornando sempre o mesmo valor, independente dos inputs. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_AUTOR 80 #define MAX_TIPO 30 #define MAX_GERAL 150 typedef struct DADOS{ char *nome; char *obra; char *tipo; int ano; }Dados; int contaLinhas(FILE *file); void inicializa(int n, Dados** info); Dados *buscaBinariaPrincipal(Dados **info, int numObras, char *autor); int comparaTipo(Dados **info, int inicio); int menorData(int d1, int d2); int main(void){ FILE *arqInfo = fopen("", "r"); int numLinhas =contaLinhas(arqInfo); int posicao = 0; if(!arqInfo){ printf("Erro ao abrir o arquivo"); exit(1); } Dados *info[MAX_GERAL]; inicializa(MAX_GERAL, info); while(posicao <= numLinhas){ info[posicao]=(Dados*)malloc(sizeof(Dados)); info[posicao]->nome =(char*)malloc(sizeof(char)*MAX_AUTOR); info[posicao]->obra =(char*)malloc(sizeof(char)*MAX_AUTOR); info[posicao]->tipo =(char*)malloc(sizeof(char)*MAX_TIPO); if((info[posicao] == NULL)||(info[posicao]->nome == NULL)||(info[posicao]->obra == NULL)||(info[posicao]->tipo == NULL)){ printf("Erro ao alocar memoria"); exit(1); } fscanf(arqInfo," %[^\n;]; %[^\n;]; %[^\n;];%d\n",info[posicao]->nome,info[posicao]->obra,info[posicao]->tipo,&info[posicao]->ano); posicao++; } rewind(arqInfo); char *autorProcura=(char*)malloc(sizeof(char)*MAX_AUTOR);; char *tipoProcura=(char*)malloc(sizeof(char)*MAX_TIPO);; if((autorProcura == NULL) || (tipoProcura == NULL)){ printf("Erro ao alocar memoria"); exit(1); } printf("Insira o nome do autor: "); scanf(" %[^\n]", autorProcura); printf("Insira o tipo de obra: "); scanf(" %[^\n]", tipoProcura); int numObras = posicao; //printf("%s %s %s %d", info[1]->nome,info[1]->obra,info[1]->tipo,info[1]->ano); Dados *resultado = buscaBinariaPrincipal(info, numObras, autorProcura); printf("%s %s %s %d ",resultado->nome, resultado->obra, resultado->tipo, resultado->ano); for(int z=0; z<posicao;z++){ free(info[z]->nome); free(info[z]->obra); free(info[z]->tipo); free(info[z]); } free(autorProcura); free(tipoProcura); fclose(arqInfo); return 0; } int contaLinhas(FILE *file){ char c; //le letra por letra, cada letra 1 byte char letra ='\n'; //letra parametro para veriicar fim de linha int numLinhas = 0; while(fread (&c, sizeof(char), 1, file)) { if(c == letra) { //se a ultima letra for \n é porque a linha acabou, somando +1 numLinhas++; //numero de linhas } } rewind(file); return numLinhas; } void inicializa (int n, Dados** info){ int i; for (i=0; i<n; i++) info[i] = NULL; } Dados *buscaBinariaPrincipal(Dados **info, int numObras, char *autor){ int inicio = 0; int final = numObras - 1; while(inicio <= final){ int meio = (inicio + final)/2; switch (strcmp(autor, info[meio]->nome)){ case -1:{ final = meio -1; break; } case 1:{ inicio = meio -1; break; } case 0:{ int resultado = comparaTipo(info, meio); return info[meio]; } } } printf("O autor não foi encontrado"); return NULL; } int comparaTipo(Dados **info, int inicio){ int i =0; while(strcmp(info[inicio]->nome, info[inicio+i]->nome) == 0){ i++; } int final = i; while(inicio <= final){ int meio = (inicio + final)/2; int inicioConstante = meio; if(menorData(info[inicioConstante]->ano,info[meio]->ano) == -1) final = meio -1; else if(menorData(info[inicioConstante]->ano,info[meio]->ano) == 1) inicio = meio + 1; else{ while((meio>0) && menorData(info[inicioConstante]->ano,info[meio-1]->ano) == 0){ meio--;} int retorno = meio; return retorno; } } printf("Genero não encontrado "); return -1; } int menorData(int d1, int d2){ if(d1 < d2) return -1; if(d1 > d2) return 1; return 0; }
  5. @JorgeGus Vou dar uma olhada. Muito obrigado Jorge. Sobre o livro de algoritmos, você tem algum em mente que possa me recomendar?
  6. Bom dia pessoal tudo bem? Sou estudante de engenharia da computação e estou cursando programação em C esse período, tenho feitos os exercícios recomendados pelo professor porém ainda me sinto muito inseguro com a matéria. Gostaria de saber se vocês conhecem algum livro, site, apostila, etc.. que tenha exercícios gradativos de programação em C. Desde já agradeço a atenção e o apoio.
  7. @devair1010 eu troquei e o erro continua igual, aparecem esses caracteres especiais: À@q À@q À@q À@q À@q À@q À@q
  8. Boa noite a todos. Estou tendo problema em um exercício, onde devo ler o titulo de vários livros separados por "/" e logo ao lado o estoque do livros em 5 lugares diferentes. Depois devo escrever em um novo arquivo txt o nome de cada um sem o estoque, porém na hora de escrever, saem vários caracteres estranhos. Alguém pode me ajudar pff. O formato do txt original é: /* LIVRO/ 1 2 3 4 5 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define MAX 127 FILE * openFile(const char * file, const char * mode); int contaLinhas(FILE *file); float calculaMedia(FILE * file); int main (void){ FILE *entrada = openFile("arquivoOrigem.txt", "r"); FILE *titulo = openFile("arquivoDestino1.txt", "wb"); //w+ porque caso o arquivo não exista, ele cria o arquivo FILE *estoque = openFile("arquivoDestino2.txt", "wb"); char bigName[MAX]; int x = 0; int i = 0; int numLinhas; numLinhas = contaLinhas(entrada); float *vetorMedias=(float*)malloc((numLinhas)*sizeof(float)); //checar alocacao de memoria if (vetorMedias ==NULL){ printf("Erro ao alocar memoria"); exit(1); } //montando vetor com media de estoque de livros while(i < numLinhas){ vetorMedias[i]=calculaMedia(entrada); i++; } char **nomeLivros = (char**)malloc((numLinhas)*sizeof(char)); if (nomeLivros == NULL){ printf("Erro ao alocar memoria"); exit(1); } for(int w =0; w<numLinhas; w++){ nomeLivros[w] =(char *)malloc((strlen(bigName)+1)*sizeof(char)); if (nomeLivros[w] == NULL){ printf("Erro na alocacao dinamica.\n"); exit(1); } } while(x < numLinhas){ char criaLinha='\0'; fscanf(entrada, "%[^/\n]s", bigName); while ((criaLinha!='\n') && (criaLinha !=EOF )){ criaLinha=fgetc(entrada); } strcpy(nomeLivros[x], bigName); x++; } //criando arquivo com os nomes dos livros dos livros for(int n = 0; n<numLinhas; n++){ fprintf(titulo, "%s \n", nomeLivros[n]); } free(vetorMedias); //loop para liberar memoria matriz for(int y = 0; y<numLinhas; y++){ free(nomeLivros[y]); } fclose(entrada); fclose(titulo); fclose(estoque); return 0; } FILE * openFile(const char * file, const char * mode){ FILE *fp; if((fp = fopen(file, mode)) != 0){ return fp; } else{ printf("Erro ao abrir o arquivo\n"); return NULL; } } int contaLinhas(FILE *file){ //contando quantidade de linahs no arquivo char c; char letra = '\n'; // define o fim da linha int numLinhas = 0; //numero de numLinhas no arquivo while(fread (&c, sizeof(char), 1, file)){ if(c == letra) { //se a ultima letra for \n é porque a linha acabou, somando +1 numLinhas++; //numero de linhas } } numLinhas++; return numLinhas; } float calculaMedia(FILE * file){ char nome[MAX]; float p1,p2,p3,p4,p5; float media; fscanf(file," %[^/]/ %f %f %f %f %f",nome,&p1,&p2,&p3,&p4,&p5); media = (p1+p2+p3)/5; return media; }
  9. Boa tarde a todos. Estou tendo muita dificuldade em um exercício de C. Ele pede para ler um arquivo entrada.txt onde tem vários filmes com seus diretores(cada filme em uma linha com seus autores, separando por FILME/DIRETO1;DIRETOR2;...;DIRETORn) e pede para modificar um arquivo saida.txt, colocando cada filme na ordem alfabética. Não estou conseguindo armazenar cada linha do arquivo em 1 string separada, para depois modificar. #include<stdio.h> #include<string.h> #include<stdlib.h> int main (void){ char c; //le caractere por caractere char letra = '\n'; // define o fim da linha int numLinhas = 0; //numero de numLinhas no arquivo char letraBarra = '/'; //caractere que separa livro autor char letraPonto = ';'; //caractere que separa os autores int j = 0; int i; FILE *entrada = fopen("arquivo1.txt", "r"); FILE *saida = fopen("arquivo2.txt", "w"); //testando abertura arquivos if(entrada == NULL){ printf("Erro ao abrir o arquivo"); exit(1); } if(saida == NULL){ printf("Erro ao abrir o arquivo"); exit(1); } //contando quantidade de linahs no arquivo while(fread (&c, sizeof(char), 1, entrada)){ if(c == letra) { //se a ultima letra for \n é porque a linha acabou, somando +1 numLinhas++; //numero de linhas } } char conteudoLinhas[numLinhas][100]; //o conteudo completo de cada linha do arquivo char *resultado; char conteudo[100]; while(!feof(entrada)){ resultado = fgets(conteudo, 100, entrada); if(resultado){ for(int j =0; j<strlen(conteudo); j++){ conteudoLinhas[i][j] = conteudo[j]; } i++; } } fprintf(saida, "%s",conteudoLinhas); fclose(entrada); fclose(saida); return 0; }
  10. Olá pessoal, boa noite. Estou realizando uma lista de exercícios da faculdade e empaquei nesse exercício. "Faça um programa que abra um arquivo HTML e elimine todas as “tags” do texto, ou seja, o programa deve gerar um novo arquivo em disco que elimine todas as tags Html que são caracterizadas por comandos entre “<” e “>”. Veja abaixo um exemplo de um texto em HTML e do texto que deverá ser gerado pelo programa após eliminar as tags Html" Não estou conseguindo interpretar como posso resolver o exercício. #include<stdio.h> #include<locale.h> #include<string.h> int main (void){ char letra ='\n'; //letra parametro para veriicar fim de linha char letra2 ='<'; char letra3 ='>'; setlocale(LC_ALL,"Portuguese"); FILE *arquivo1 = fopen("Lista4Ex6_01.txt", "r"); FILE *arquivo2 = fopen("Lista4Ex6_02.txt", "w"); if(!arquivo1){ printf("Erro ao abrir o arquivo"); } if(!arquivo2){ printf("Erro ao abrir o arquivo"); } char textoOriginal[500]; int i =0; char resultado[500]; int j = 0; fgets(textoOriginal, sizeof textoOriginal, arquivo1); if(textoOriginal[i] == letra2){ while(textoOriginal[i] != letra3){ i++; } }else{ while(textoOriginal[i+1] != letra2){ resultado[j] = textoOriginal[i]; i++; j++; } } fputs(resultado,arquivo2); fclose(arquivo1); fclose(arquivo2); return 0; }
  11. Não se esqueça de fechar o arquivo depois fclose(arq);

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!