Ir ao conteúdo
  • Cadastre-se

Rafael Domingues Corrêa

Membro Pleno
  • Posts

    35
  • Cadastrado em

  • Última visita

Tudo que Rafael Domingues Corrêa postou

  1. No método que utilizei eu separei o vetor 9x9 em 9 regiões de 3x3. Passei cada região para um vetor de teste. E verifiquei se havia semelhanças no array. Aí vai o código completo pra você dar uma estudada. Compile para observar! #include <stdio.h> //Para entrada e saíd de dados#include <stdlib.h> //Para srand() e rand()#include <time.h> //Para time()/** Essa função cria um novo vetor aleatório **/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(clock()); //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}/** Essa função checa se não há números repetidos numa região **/int quadrosOk(int vet[9][9]){ int i, j, k, l, m, //Controle de loop para alinhar região c_x, c_y, //Controle de loop de regiões lidas n, o, //Controle de loop de comparação de quadros vet_aux[9]; //Vetor onde um quadro será alinhado k = 0; //Iniciliza controladores de loop l = 0; m = 0; for(c_x=0, c_y=0; c_x<3 && c_y<3; ) //Enquanto não checa todas as regiões { for(i=k; i<k+3; i++) { for(j=l; j<l+3; j++) { vet_aux[m] = vet[i][j]; //Alinha um quadro em um único arrray m++; } } for(n=0; n<9; n++) { for(o=0; o<9; o++) { if(n != o) //Isso é necessário para não comparar um item com ele mesmo { if(vet_aux[n] == vet_aux[o]) //Se números iguais no vetor { return 0; //Retorna falso } } } } //Navegando nas regiões do vetor do sudoku if(c_x < 2) { c_x++; l = l + 3; } else { c_x = 0; c_y++; l = 0; k = k + 3; } m = 0; } //Se nenhum número igual for achado retorna verdadeiro return 1;}int main(){ int sudoku[9][9], //Há a necessidade de criar um vetor apropriado para a função i, j; do //Faça { inicializaSudoku(sudoku); //Crie um novo sudoku } while(!quadrosOk(sudoku)); //Enquanto houver regiões com números repetidos //Para mostrar o vetor do sudoku for(i=0; i<9; i++) { for(j=0; j<9; j++) { printf("[%i] ", sudoku[i][j]); if(j == 2 || j == 5) { printf(" | "); } } if(i == 2 || i == 5) { printf("\n-----------------------------------------\n"); } printf("\n"); } return 0;}
  2. Eu acabei de publicar uma resposta nesse tópico http://forum.clubedohardware.com.br/forums/topic/1120100-ajuda-fun%C3%A7%C3%A3o-srand-em-c/ sobre como construir um vetor para jogo de sudoku.
  3. guillherme_rangel, eu só me esqueci de citar uma coisa... será necessária mais uma função para verificar a presença de números repetidos em quadros 3x3 que deverá reposicionar os arrays para que fiquem de acordo com as regras do sudoku Fica assim a função: int quadrosOk(int vet[9][9]){ int i, j, k, l, m, //Controle de loop para alinhar região c_x, c_y, //Controle de loop de regiões lidas n, o, //Controle de loop de comparação de quadros vet_aux[9]; //Vetor onde um quadro será alinhado k = 0; //Iniciliza controladores de loop l = 0; m = 0; for(c_x=0, c_y=0; c_x<3 && c_y<3; ) //Enquanto não checa todas as regiões { for(i=k; i<k+3; i++) { for(j=l; j<l+3; j++) { vet_aux[m] = vet[i][j]; //Alinha um quadro em um único arrray m++; } } for(n=0; n<9; n++) { for(o=0; o<9; o++) { if(n != o) //Isso é necessário para não comparar um item com ele mesmo { if(vet_aux[n] == vet_aux[o]) //Se números iguais no vetor { return 0; //Retorna falso } } } } //Navegando nas regiões do vetor do sudoku if(c_x < 2) { c_x++; l = l + 3; } else { c_x = 0; c_y++; l = 0; k = k + 3; } m = 0; } //Se nenhum número igual for achado retorna verdadeiro return 1;} Por obrigação será necessário implementar em main() ou outra função do programa do //Faça{ inicializaSudoku(sudoku); //Para iniciar um vetor apropriado basta colocá-lo como parâmetro} while(!quadrosOk(sudoku)); //Enquanto ouver números repetidos nas regiões Para fazer com que o programa consulte mais vetores por segundo seria melhor substituir srand(time()); por srand(clock()); onde time() consulta o tempo em segundos e clock() em milisegundos. Falou, um abraço, meu jovem.
  4. Vai depender de como seu arquivo está estruturado. Se for de forma textual haverá a necessidade de uso da biblioteca <string.h> Mas se for estruturado de forma binária será necessário criar uma estrutura padrão de leitura, que vai facilitar muito seu serviço.
  5. Eu dei-lhe a lógica e a sintaxe correta basta você fazer a implementação que seu projeto exige.
  6. 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!
  7. Sabe que os métodos de entrada e saída são em C++, não é? E você nao navegou pelo array usando a variável de controle de loop e usou mal o ponteiro do array da estrutura Taí o código funcionando. Repare as modificações using namespace std;#include <iostream>#define N 100float CalculaMedia( float nota1, float nota2, float nota3){ return (nota1 + nota2 + nota3) / 3;}int main(){ int Nu; cout << "Digite o Numero de Alunos: "; cin >> Nu; cout << "*********************************************" << endl; struct Aluno { char nome[N]; char matricula[6]; float nota1; float nota2; float nota3; float media; } a[Nu]; int i; for (i = 0; i < Nu; i++) { cout << "Digite o Nome do Aluno: "; cin >> a[i].nome; cout << "Digite a Matricula: "; cin >> a[i].matricula; cout << "Nota da A1: "; cin >> a[i].nota1; cout << "Nota da A2: "; cin >> a[i].nota2; cout << "Nota da A3: "; cin >> a[i].nota3; cout << "\n\n"; } cout << "************************************************" << endl; for (i = 0; i < Nu; i++) { cout << "Nome do Aluno: "; cout << a[i].nome << endl ; cout << "Matricula: "; cout << a[i].matricula << endl ; cout << "Nota da A1: "; cout << a[i].nota1 << endl ; cout << "Nota da A2: "; cout << a[i].nota2 << endl ; cout << "Nota da A3: "; cout << a[i].nota3 << endl ; a[i].media = CalculaMedia(a[i].nota1,a[i].nota2,a[i].nota3); cout << "Situacao: " << ((a[i].media >= 5.0) ? "A" : "R") << endl << endl; } return 0;}
  8. 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;}
  9. A ideia do sudoku pode ser mais simples do que você pensa. Basta você criar um array não repetido e mover ele nos outros arrays Array raiz e abaixo os valores correspondentes [0][1][2][3][4][5][6][7][8] 3 5 2 1 4 9 7 8 6 Basta você atribuir a mesma sequência a outros arrays a partir deste já feito Abaixo o próximo array e ainda mais abaixo os valores correspondentes do array raiz [0][1][2][3][4][5][6][7][8] [3][4][5][6][7][8][0][1][2] O próximo array receberá a sequencia ainda mais adiantada ou atrasada do array raiz Abaixo o próximo array e ainda mais abaixo os valores correspondentes do array raiz [0][1][2][3][4][5][6][7][8] [1][2][3][4][5][6][7][8][0] Pulando a série de vetores será possível criar uma possibilidade maior de jogos Por exemplo, onde o array[4] recebe o array[0] antes do array[1]. Assim a sequência ficará mais confusa e dificultará para o jogador. Lembrando que cada arrays não pode receber o array raiz no mesmo ponto inicial Essa é a lógica para contruir o sudoku

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!