Ir ao conteúdo
  • Cadastre-se

Rafael Domingues Corrêa

Membro Pleno
  • Posts

    35
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de Rafael Domingues Corrêa em Chamando funcão foi marcado como solução   
    Para chamar uma função através de uma variável, você deve se certificar que ela é um ponteiro para função. Pois uma variável comum só é capaz de receber dados de uma função. Estude o código abaixo:
    #include <stdio.h>void calculadora(){ printf("Nao faz nada.\n");}int main(){ void (*pFuncao)(); //Ponteiro para função pFuncao = &calculadora; //Recebe o endereço da função pFuncao(); //Chama função através do ponteiro return 0;} Um ponteiro para função é muito útil para aplicar em struct's, assim podendo criar métodos para os dados da estrutura, por exemplo. Aí você já começa a entrar em POO (programação orientada a objetos).
  2. O post de Rafael Domingues Corrêa em Ajuda, leitura de arquivo(texto) de forma aleatória. foi marcado como solução   
    Estude esse código que escrevi para você ler uma palavra apenas direto do arquivo.
    #include <stdio.h>#include <stdlib.h>#include <time.h>#define NUM_PALAVRAS 6 //Define o número de palavras no arquivoint main(){ int indexPalavra, //Variável do controle do index da palavra i, j; //Variáveis de controle de loop FILE *fp; //Ponteiro de arquivo char palavra[100]; //Varíavel pra armazenar a palavra fp = fopen("lista.txt", "r"); //Abre o arquivo if(fp) //Se arquivo existir { srand(time(NULL)); //Pega a semente do número randômico indexPalavra = rand()%NUM_PALAVRAS; //Gera o número da palavra (index) for(i=0, j=0; j<indexPalavra; i++) //Enquanto não achar o index { if(fgetc(fp) == '\n') //Se achar próxima palavra j++; //Passa para o próximo index; /** Enquanto isso o ponteiro 'fp' armazena em si mesmo a posição do arquivo que é navegada por 'fgetc()'. A cada consulta de caractere a posição do arquivo é passada pra frente **/ } } else //Se não achar arqquivo { printf("Lista nao encontrada.\n"); fclose(fp); //destrói o ponteiro return 0; //Fecha o programa com sucesso } //Basta ler a palavra agora i = -1; do { i++; palavra[i] = fgetc(fp); //Lê letra por letra if(palavra[i] == '\n') //Se caractere lido for de próxima linha break; //Terminou a palavra } while(palavra[i] != EOF); //Enquanto não fim do arquivo palavra[i] = '\0'; //Substitui o último caractere da palavra para indicar fim de frase //Feche o arquivo fclose(fp); //Daqui pra frente você implementa o jogo como quiser printf("Palavra: %s\n", palavra); return 0; //Fecha o programa com sucesso} Repare que o arquivo é  lido caractere por caractere. O index é definido por cada nova linha (o caractere '\n').
    Espero que ajude, Falou.
  3. O post de Rafael Domingues Corrêa em Ler arquivo CSV e tratar linhas foi marcado como solução   
    Carregue o arquivo *.CVS inteiro na memória e use a biblioteca <string.h> para gerenciar os dados em memória. Repare nesse código:
    #include <stdio.h>#include <string.h> //É com essa biblioteca que você vai gerenciar os dadosint main (){ char texto[] = {"Nome,Sobrenome,Idade,Peso\n\Rafael,Domingues Correa,20,59.0\n\Pablo,Picasso,67,61.3"}; //Dados supositórios char *pch; //Ponteiro para cada frase printf ("Separando texto em partes:\n\n"); pch = strtok(texto, ","); //A função strtoc recebe o endereço dos dados, e os caracteres de separação /** No caso de arquivos CSV a 'vírgula' (,) é o caractere separador **/ while (pch != NULL) //Enquanto houver frases { printf("%s\n", pch); pch = strtok(NULL, ","); //Procura próxima frase /** Nesse caso não há mais necessidade de enviar o endereço, pois strtok() armazena-o numa variável global de <string.h> **/ } return 0;} Basta fazer a implementação de leitura de arquivo com <stdio.h> e <sys/stat.h>
    E usar um espaço de memória alocado, com <stdlib.h> para armazenar os dados de acordo com a nova estrutura.
    Não é necessário criar um vetor, um array já será o suficiente.
     
    Qualquer dúvida dê um toque!
  4. O post de Rafael Domingues Corrêa em ajuda função srand em C foi marcado como solução   
    Eu criei o código explicado para facilitar seu entendimento da lógica em C
    #include <stdio.h> //Para entrada e saíd de dados#include <stdlib.h> //Para srand() e rand()#include <time.h> //Para time()void inicializaSudoku(int vet[9][9]) //Função global com parãmetro para um vetor 9x9{ int i, j, k, seek, //Varáveis de controle de loop aux; //Variável que receberá o número aleatório a ser comparado srand(time(NULL)); //Cria a semente dos números aleatórios vet[0][0] = rand()%9 + 1; //Inicia o primeiro valor do vetor pois não precisa ser comparado //Loop de preenchimento do vetor, usando variável de preenchimento /** Cria o vetor raiz **/ for (i=1; i<9; i++) //Variável 'i' recebe 1 pois o primeiro valor já foi iniciado { aux = rand()%9 + 1; //Auxiliar recebe novo valor j = 0; //Inicia a variável usada no loop para comparação while(j<i) //Enquanto todo array não é comparado { if(aux == vet[0][j]) //Se valor de auxiliar for igual a um que já existe no vetor { aux = rand()%9 + 1; //Auxiliar recebe novo valor j = 0; //Reinicia a comparação } else //Se for diferente { j++; //Passa para a próxima comparação } } //Se chegar nesse ponto é porque todos os números são diferentes vet[0][i] = aux; //Posição no vetor recebe o valor válido } //Você pode aproveitar a própria sequência raiz para contruir o jogo for(i=1; i<9; i++) { //Não pode repetir a primeira sequência, então if(vet[0][i]-1 <= 0)// Se o valor do ponto do vetor for igual a 0 { aux = vet[0][0] - 1; //Recebe o valor do primeiro ponto do vetor } else //Se não { aux = vet[0][i] - 1; //Recebe o ponto do vetor analisado } /** Como você começará de um ponto no meio do array será necessário rebubiná-lo para completar as outras lacunas **/ seek = 0; //define a sequencia como não rebubinada for(j=aux, k=0; j<9; j++, k++) { vet[i][k] = vet[0][j]; //Ponto nulo do vetor recebe uma posição aleatória pré indicada if(!seek) //Se não rebubinado { if(j >= 8) { j = -1; // 'j' recebe uma posição antes do início normal do array seek = 1; //Indica rebubinação } } else // Se já rebubinado { if(j >= aux) // Se 'j' for igual à posição aleatória inicial { j = 99; //Completa o array } } } } return; //Encerra função}int main(){ int sudoku[9][9], //Há a necessidade de criar um vetor apropriado para a função i, j; inicializaSudoku(sudoku); //Para iniciar um vetor apropriado basta colocá-lo como parâmetro //Para mostrar o vetor do sudoku for(i=0; i<9; i++) { for(j=0; j<9; j++) { printf("[%i] ", sudoku[i][j]); } printf("\n"); } return 0;} Dê uma estudada na função. Falou, um abraço!
  5. O post de Rafael Domingues Corrêa em [Resolvido!] Vetor de tamanho 9 sem repetição! foi marcado como solução   
    Silvio, coloquei um código mais explicativo para lhe ajudar a entender a lógica
    #include <stdio.h> //Para entrada e saíd de dados#include <stdlib.h> //Para srand() e rand()#include <time.h> //Para time()int main () //Função geral do tipo inteiro{ int vet[9], //Vetor que carregará os valores i, j, //Varáveis de controle de loop aux; //Variável que receberá o número aleatório a ser comparado /** Não há a necessidade de criar dois vetores pois um valor de cada vez, apenas, será comparado **/ srand(time(NULL)); //Cria a semente dos números aleatórios vet[0] = rand()%9 + 1; //Inicia o primeiro valor do vetor pois não precisa ser comparado //Loop de preenchimento do vetor, usando variável de preenchimento for (i=1; i<9; i++) //Variável 'i' recebe 1 pois o primeiro valor já foi iniciado { aux = rand()%9 + 1; //Auxiliar recebe novo valor j = 0; //Inicia a variável usada no loop para comparação while(j<i) //Enquanto todo array não é comparado { if(aux == vet[j]) //Se valor de auxiliar for igual a um que já existe no vetor { aux = rand()%9 + 1; //Auxiliar recebe novo valor j = 0; //Reinicia a comparação } else //Se for diferente { j++; //Passa para a próxima comparação } } //Se chegar nesse ponto é porque todos os números são diferentes vet[i] = aux; //Posição no vetor recebe o valor válido } for (i=0; i<9; i++) //Exibe todos os valores { printf("[%d]\t",vet[i]); } //Como main() é do tipo inteiro deve retornar um valor inteiro 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!