-
Total de itens
883 -
Registro em
-
Última visita
Tudo que vangodp postou
-
O operador % que se chama "modulo", serve para obter o resto de uma divisão. Se ao usar o operador de divisão(/), para por exemplo dividir "int resultado = 5/2", o resultado seria igual a 2. Porem sobra 1 correto? E se isso for exatamente o que eu quero? Saber o resto da divisão, e não o valor? Então uso modulo. Então no "int resultado = 5%2" resultado seria 1. Com isso você já sabe para que serve o operador modulo. Ao entrar no for por primeira vez(E só essa primeira vez), tanto i como k receben os valores de 0 e 1 respectivamente. logo começa a repetir k=k+i%2 até que se de a condição de i<k(i menor que k). Sendo assim a melhor estratégia para essas coisas é anotar em um papel tudo o que for acontecendo. E também é bom usar o proprio programa para ir imprimindo para nós os valores e assim ser possível a compreensão do problema. Isso mostro logo em seguida. Outro ponto em destacar é que não sei se é do seu conhecimento porem os operadores tem uma prioridade, ao igual que em matemáticas, por exemplo / tem prioridade sobra + e -, etc. isso você pode ver nesta pagina: https://pt.wikipedia.org/wiki/Operadores_em_C_e_C%2B%2B Nesta tabela: Por exemplo, na linha: o operador ++(incremento) tem prioridade sobre o operador --(decremento). Porque ++ esta primeiro. Porem ao mesmo tempo tanto o operador de incremento como o de decremento tem prioridade aos parêntesis pois o parêntesis se encontra mais abaixo na tabela. O que da para entender que a ordem de prioridades funciona mais ou menos desta forma: ou seja que a ordem seria esta ++, --, (), [], ., ->... Acho que deu para entender como funciona as prioridades. Porque eu to explicando isso? Porque se você for na tabela, na sua expressão k=k+i%2 você tem 3 operadores =, + e o %. Esqueça o operador =, mas os operadores de soma e modulo, um tem maior prioridade que o outro, modulo tem prioridade ao operador de soma, então na parte de k+i%2 vai ter prioridade i%2, ou seja vai ser obtido o resultado de i%2 e o resultado disto seria somado a k. para ficar mais claro aconteceria isso k=k+(i%2). Agora vamos usar o próprio programa para que nos diga em cada momento o valor das variáveis. Para isso vamos alterar ele para imprimir ditos valores. #include <stdio.h> int i, j, k; int main() { printf("Antes de entrar no main as variaveis i, j e k tem os seguintes valores:\n"); printf("i=%d\n", i); printf("j=%d\n", j); printf("k=%d\n\n", k); //As variaveis i, j e k podem gerar numeros ao "azar", pois podem conter lixo já que podem //ocupar o lugar na memoria que antes tivesse outro variavel de outro programa qualquer que //tenha liberado esse espaço porem deixou lá seus valores antigos. for ( //atribuição: Somente acontece uma vez pois não há logica em atribuir valores mais de //uma vez para as variaveis que estiverem nesta parte i = 0, j = 1, k = 2, printf("Dentro do for as variaveis tomaram o valor de:\n"), printf("i=%d\n", i), printf("j=%d\n", j), printf("k=%d\n\n", k); //condição: Acontece cada vez antes de entrar no corpo do for{}, por encuanto i for menor que k // da verdadeiro(true), por encuanto tiver um true nesta parte o programa continua rodando. Se // i llegar a ser igual o maior que k será gerado um false, pois i n será menor que k, neste momento //já n se executará mais o corpo do programa -> {k = k + i % 2;}. E i já não se incrementará mais no seguinte passo. i < k; //Alteração de valores: //Nesta parte se alteram os valores das variaveis conforme a necessidade do //programador. Essa parte acontece todas as vezes que o for rodar, igual que a ultima //parte. Importante! Esta depende da anterior, já que se for gerado um false na parte da condição //não chegará a entrar nesta. i++, printf("Agora seus valores são:\n"), printf("i=%d\n", i), printf("j=%d\n", j), printf("k=%d\n\n", k) ) { //Corpo do programa printf("A expressao k = k + i %% 2 é realizada\n"); printf ("Antes da expresao %d = %d + %d %% 2 \n", k, k, i); k = k + i % 2; printf ("Depois da expresao %d = %d + %d %% 2 \n\n", k, k, i); } printf ( "%d,%d,%d", i, j, k ); } Vou deixar aqui também o fonte, por que as vezes ao copiar código de esta pagina gera error, então neste caso melhor baixar o fonte. http://cpp.sh/9b5fs
-
Fala português?
-
string Alocar Posições de uma string em uma variável
pergunta respondeu ao Eduardo Cesar Lenz de vangodp em Tutoriais & Dicas - C, C++
sprintf?- 2 respostas
-
ARQUIVOS COMPILADOS EM C FECHANDO SOZINHOS
pergunta respondeu ao Gabriel Roma de vangodp em Tutoriais & Dicas - C, C++
temos que adivinhar seu programa? -
não... para nada. Perfeito.👌
-
usa o botão <> para postar o código 👋
-
tirar & quando for ler strings ou ponteiros dos scanfs. E certamente você tem lixo no buffer, procure limpar o buffer.
-
preenchimento tabela Hash
pergunta respondeu ao Andrew Menezes de vangodp em Tutoriais & Dicas - C, C++
crie um array com os dados e passe pela tal função hash em um laço -
c Duvida sobre erro em um algoritmo em C com ponteiros
pergunta respondeu ao John Cunha de vangodp em C, C++
https://www.clubedohardware.com.br/forums/topic/1342345-erro-na-execução-de-um-algoritmo-em-c-com-ponteiros/?do=findComment&comment=7322140 -
Colisores Retangulares em Blocos p/RPG game em C
pergunta respondeu ao Cristiano Camacho de vangodp em C, C++
Não sei seu nível de Inglês mas se buscar por "bounding box collision" certamente vai encontrar o que está procurando. Neste video o cara explica como calcular as colisões, porem para sdl sfml. -
Colisores Retangulares em Blocos p/RPG game em C
pergunta respondeu ao Cristiano Camacho de vangodp em C, C++
para que alguém fosse capaz de lhe ajudar deveria entender como funciona o sistema de coordenadas da megadrive. -
Boa sorte
-
Seria melhor usar a etiqueta <> para postar os códigos
-
Se supõe que deve ter a vez do jogador 1 e a vez do 2, dependendo da vez do jogador atual você comprova com um if. Vamos supor que jogador 1 é X, e que jogador 2 é O, deveria ter uma variavel int player que inicializara com o valor de 1, e que passado a vez de um jogador deveria incrementar mas nunca passar de 2, se isso acontecer deve voltar ao valor de 1. Vamos ver na pratica. #include <stdio.h> #include <stdlib.h> #define dim 3 typedef struct Cordenadas{ int x; int y; }Ponto; void tabuleiro(char vetores[dim][dim]){ printf("\t\%c|%c|%c\n",vetores[0][0],vetores[0][1],vetores[0][2]); printf("\t-----\n"); printf("\t%c|%c|%c\n",vetores[1][0],vetores[1][1],vetores[1][2]); printf("\t-----\n"); printf("\t%c|%c|%c\n",vetores[2][0],vetores[2][1],vetores[2][2]); } int main(){ char vetores [dim][dim]={{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}}; int sair = 0; int vencedor = 0; int player = 0; //Começa com player 1. Player1 = 0 e Player2 = 1; Ponto ponto; while ( sair != 1 ){//Por incuanto não tiver um vencedor continua rodando system("cls"); tabuleiro(vetores); printf("É a vez do jogador %d. Escolha sua jogada.\n", (player == 0)? 1 : 2); printf("Linha?: "); scanf("%d%*c", &ponto.x); printf("Coluna?: "); scanf("%d%*c", &ponto.y); system("cls"); printf("Escolheu a posicao %d%d.", ponto.x, ponto.y); vetores[ponto.x][ponto.y] = (player == 0)? 'X' : 'O'; //Si se tratar do player 0(player1) vai botar um X no mapa, caso contrario se trata do outro player, e neste caso bota um O. ;) Essa era sua duvida //Verificar aqui si tem vencedor... //Verificar se por exemplo aconteceu 3 X na linha1. linha0 == X X X if ( vetores[0][0] == 'X' && vetores[0][1] == 'X' && vetores[0][2] == 'X' ){ sair = 1; vencedor = 0; //Vencedor player 1 } //verificar os outros casos //Só incrementamos si NÃO há um vencedor. Vai nos servir para informar qual foi o vencedor no final, por isso não pode incrementar depois de ter um jogador vitorioso. if (sair != 1){ player++; player = ((player)%2); } } system("cls"); //informar vencedor printf("O vencedor é o player %s", (vencedor == 0)? "PLAYER1" : "Player2" ); } Tenta entender... e si tiver duvidas pergunte
-
E qual sua duvida Jaime?
-
Sujeira no buffer. Limpe o buffer depois de cada leitura, sobre tudo antes de ler chars ou strings.
-
Criptografia rsa problema com o fmod resto
pergunta respondeu ao johncaravlho de vangodp em Grupo de Estudos
procure no google "Tipos de dados em C/C++" e você verá alguns -
Criptografia rsa problema com o fmod resto
pergunta respondeu ao johncaravlho de vangodp em Grupo de Estudos
Eu não sou muito bom em matematicas não, mas se você usar o google vai até sair algumas "coisinhas" hihihi https://stackoverflow.com/questions/8496182/calculating-powa-b-mod-n #include<stdio.h> int modulo(int a, int b, int n){ long long x=1, y=a; while (b > 0) { if (b%2 == 1) { x = (x*y) % n; // multiplying with base } y = (y*y) % n; // squaring the base b /= 2; } return x % n; } int main(){ printf("%d", modulo(131, 23, 187)); return 0; } -
É bem util acostumar a chamar perror depois de abrir um programa. Seria muito bom você acostumar abrir um arquivo da seguinte forma pois você comprova possiveis erros de abertura: #include<stdio.h> int main(){ FILE* arq; char* nomeArquivo = "teste.txt"; //Comprovando if( (arq=fopen( nomeArquivo,"r"))==NULL){//Si fopen retornar nullo... //Se o arquivo NÃO caimos aqui perror("Erro"); //Perror vai informar o por que. Pode ser porque o arquivo não existe, ou pode que você não tenha permisão, ou haja um erro... realmente podem ser muitos erros, por isso é importante chamar o perror para saber. puts("Aperte uma tecla para sair."); getchar(); return 1; // Termina com o código do erro 1 e sai do programa. } /* Se o arquivo abriu caimos aqui, é dizer, si o fopen retornou qualquer outra coisa que não seja null então caimos aqui, e podemos seguir. Recorde que precisa fechar o arquivo com fclose antes de sair ou en outros casos. */ return 0; } Agora bem... isso quer dizer uma palavra por linha certo? Se for assim bastaria você usar fscanf para ler cada uma das palavras: #include<stdio.h> int main(){ FILE* arq; char* nomeArquivo = "teste.txt"; char palavra[100]; //Comprovando if( (arq=fopen( nomeArquivo,"r"))==NULL){//Si fopen retornar nullo... //Se o arquivo NÃO caimos aqui perror("Erro"); //Perror vai informar o por que. Pode ser porque o arquivo não existe, ou pode que você não tenha permisão, ou haja um erro... realmente podem ser muitos erros, por isso é importante chamar o perror para saber. puts("Aperte uma tecla para sair."); getchar(); return 1; // Termina com o código do erro 1 e sai do programa. } /* Se o arquivo abriu caimos aqui, é dizer, si o fopen retornou qualquer outra coisa que não seja null então caimos aqui, e podemos seguir. Recorde que precisa fechar o arquivo com fclose antes de sair ou en outros casos. */ //Repete até o fim do arquivo while( fscanf(arq, "%s", palavra) != EOF ){// lê uma palavra printf("%s\n", palavra); // imprime uma palavra } return 0; } Então agora quer dizer que você lê uma linha e guarda essa linha no vetor palavra, agora seria só tratar essa palavra como quiser.
-
quando você declarar qualquer variavel, essa pode conter lixo. Prove declarando bool e dando um valor inicial. #include <iostream> using namespace std; int main () { bool padrão[100] = {false}; padrão[0]=padrão[10]=padrão[35]=padrão[83]= true; unsigned int contador = 0; while ( contador < 100 ) { if (padrão[contador]!=true){ cout << "if: " << contador << endl; }else{ cout << "else: " << contador << endl; } contador++; } cin.ignore(); return 0; }
-
E qual sua duvida?
-
Questão em linguagem C
pergunta respondeu ao Vinícius Heller Fernandes Nascimento de vangodp em Grupo de Estudos
👍 -
E qual são suas duvidas?
-
Qual o melhor livro pra começar a aprender a progamar?
pergunta respondeu ao Miguel Alessandro de vangodp em C, C++
Eu comecei con videos de youtube🤣