-
Posts
267 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
Tudo que atlos postou
-
delemar,tem um tópico bem parecido aqui,ve se isso serve http://forum.clubedohardware.com.br/forums/topic/1068322-problemas-com-a-valida%C3%A7%C3%A3o-da-vari%C3%A1vel-em-c/ se nao for isso pergunta de novo
-
voce teria que colocar um jmp depois do jc e mais um label depois do label CARRY jc CARRY ;Se a carry estiver setada então salta para o label CARRY e nao executa a instrução abaixo(jmp NCARRY)jmp NCARRY ;Se a carry nao estava setada,a instrução acima nao vai executar o salto e o programa vai alcançar essa instrução ;que vai saltar para o label NCARRY,pulando o label CARRYCARRY : ADD A, #1BNCARRY: MOV 31h,A
-
ta bom.. SE FOI O QUE EU ENTENDI,POR EXEMPLO: mov A,40h ;numero em 40h passado para A add A,1 ;adiciona 1jc LABEL1 ;Testa e salta se a carry foi setada CF=1jmp ContinuaPrograma ;Se a carry nao estava setada então controle do programa alcança essa instrução e saltaLABEL1 : mov A,41h ;Passa valor em 41h add A,1 ;e adiciona 1ContinuaPrograma : PS: Nao sei se é exatamente assim a sintax em 8051,porém o 8086 é parecido,então se nao for exatamente isso,é algo parecido
-
ve se isso ajudaria int funcaobusca(int x,int *v){ int i; for(i = 1;i < 6;i++) { if(v[i] == x) { std::cout<<"O valor " <<x << " esta no vetor na posicao "<<i<<std::endl; return 0; } } return 1;}int main (){ int v[6]; int x; int i; for(i = 1;i < 6;i++) std::cin >>v[i]; std::cout<<"valor x"<<std::endl; std::cin >> x; if(funcaobusca(x,v) == 1) { std::cout<<"nao encontrado"<<std::endl; } system("pause"); return 0;}
-
entende que um código por mais simples que seja poderia te deixar boiando,isso desestimula o aprendizado depois(por experiencia própria e por ja ter visto outras pessoas),pra voce entender o código teria que pelo menos conhecer a sintax da linguagem,enfim..pra isso voce teria que aprender pelo menos o basico(o que nao aconteceria nesse tópico),se quiser eu posso te indicar livros bem didáticos
-
recomendo fortemente que aprenda C++
-
mas realmente nao tem nada errado ali..relaxa um pouco amigo(na boa),depois volta e vai entender com certeza
-
o "if(NUM2 <= NUM1)" que voce colocou é errado,o certo seria if(num2 > num1)
-
deve ser porque o get() que voce usa lá em baixo ta lendo a tecla no buffer,depois que passar os valores pra "a" e "b",usa std::cin.ignore();
-
é só fazer um loop,enquanto o numero digitado for menor que 0 ou 0,ele nao sai do loop,POR EXEMPLO while(std::cin >> a) { if(a > 0) //Se a for maior que 0 break; //Sai do loop std::cout<<"Digite um valor valido"<<std::endl; } na verdade em em "b" voce nem precisaria testar se o numero é 0,porque se "a" for maior que 0,e "b" só pode ser maior que "a" então nao tem porque testar se "b" é 0,POR EXEMPLO while(std::cin >> { if(b > a) break; std::cout<<"Digite um valor valido"<<std::endl; }
-
difícil eu conseguir explicar bem alguma coisa ts..mas vou tentar,esse seria o programa inteiro #include <iostream>using namespace std;int main (){ int I,J,RZERO,DIVISOES,PRIMO; float RESTO; RZERO = 0; PRIMO = 0; int a; int b; std::cin >> a; if( a <= 0) //Se for 0 ou igual a 0 termina o programa return -1; std::cin>>b; if( b <= 0 || b < a) //Se for 0 ou menor que a,termina o programa return -1; for (I=a;I<=b;I++) { DIVISOES = 0; for (J=1;J<=I;J++) { RESTO = I % J; if (RESTO == RZERO) { DIVISOES ++; cout << "\n" << I << " E DIVISIVEL POR " << J << " O RESTO E " << RESTO << "\n"; } else { cout << "\n" << I << " NAO E DIVISIVEL POR " << J << " O RESTO E " << RESTO << "\n"; } } if (DIVISOES == 2) { cout << "\n" << I << " E PRIMO PORQUE E DIVISIVEL POR 1 E POR " << I << " PORTANTO DUAS DIVISOES EXATAS " << "\n" ; PRIMO ++ ; } else { cout << "\n" << I << " NAO E PRIMO PORQUE HA " << DIVISOES << " DIVISOES EXATAS " << "\n" ; } cout << "\n --------------------------------------------------- "; cin.get (); } cout << "\nFORAM ENCONTRADOS " << PRIMO << " NUMEROS PRIMOS "; cin.get (); return 0;} o que acontece é que se o usuario digitar o valor 0 para a variavel "a",o programa termina(return -1),se o usuario digitar o valor 0 para a variavel "b" ou um valor menor que foi digitado para a variavel "a" o programa tambem termina(era isso que voce queria,certo?) depois no contador do loop em vez de voce começar a partir dos valores predeterminados(2 ate 12)voce pode começar a contar a partir dos valores passados para a variavel "a" ate "b"
-
difícil saber o que realmente a pessoa ta querendo com esse tipo de pergunta,pior ainda é quando nem voltam pra explicar..
-
mas o que exatamente seria "travar"?
-
int a; int b; std::cin >> a; if( a <= 0) //Se a for menor ou igual a 0 termina o programa return -1; std::cin>>b; if( b <= 0 || b < a) //Se for 0 ou menor que a,termina o programa return -1; for (I=a;I<=b;I++) //substitui os valores para contagem no loop só corrigindo aqui..
-
obrigado..que bom que conseguiu(eu ja ia pedir arrego),mas qualquer um aqui faz o mesmo quando ve que a pessoa esta se ajudando tambem,provavelmente só nao vieram porque viram que eu conseguiria ajudar se quiser fazer algo pode vim ajudar tambem quando se sentir confortavel,bons estudos abraço!
-
voce nao ta usando excluir(&lista); ?
-
tem que mudar a assinatura da função tambem no começo do programa void excluir (struct consulta *inicio); substitui por void excluir (struct consulta **inicio);
-
é porque voce tava pegando só um ponteiro no parametro da função,quer dizer,voce tava tentando atribuir um ponteiro(prox)à um objeto lista(*inicio),no caso aqui teria que ser uma referencia para um ponteiro(**)(ou ponteiro para ponteiro tanto faz..) aqui ta o código com algumas alterações void excluir (struct consulta **inicio){ if (inicio == NULL) printf("Sem registros"); else { int cod, cont = 0; consulta *p = *inicio; consulta *pr = NULL; printf("\nEntre com o codigo do registro que deseja excluir: "); scanf("%d", &cod); do { int numer = atoi(p->numero); if (cod == numer) { cont = 1; if (pr == NULL) { *inicio = p->prox; } else pr->prox = p -> prox; //proximo nodo em p printf("\nExclusao feita com sucesso\n"); break; } pr = p; //Nodo atual em p agora em pr p = p->prox; //proximo nodo em p } while (p !=NULL); if (cont == 0) { printf("\nRegistro nao localizado. \n"); } }} Isso deve excluir um elemento em qualquer posição,mas o programa ainda tem alguns erros.. Quando for passar como argumento o ponteiro "lista" para a função excluir,tem que passar uma referencia pro ponteiro,assim: excluir(&lista); pra minizar os aborrecimentos na próxima que for fazer um programa,a cada função que voce criar,testa pra ver se ela ta fazendo o que voce pretende,ve se o programa ta entrando nos blocos que tem que entrar,quando for usar uma função standard procura ver como ela age internamente(tem muito livros sobre isso e sites tambem) e se isso vai influenciar de algum modo no seu programa,bons estudos
-
entendo,mas falta pouco,se puder dizer qual o erro que o compilador ta gerando e passar mais uma vez o código da função excluir seria bom,pode ser algum erro bobo que voce nao ta vendo por causa do cansaço x)
-
mas o problema nao é na função excluir deleta o arquivo banco de dados atual,cria um novo e faz novos cadastros por exemplo,faz 3 cadastros e exclui o 2º elemento,na hora de adicionar ao arquivo no final do programa voce vai ver que ele só vai adicionar 2 elementos(o 1º e o 3º),o problema é que isso nao vai remover o outro elemento que ja tava no arquivo(no caso o 3º elemento)então quando voce ler o arquivo de novo na próxima vez que entrar no programa,ele vai ler até o 3º elemento(até aonde esta EOF)ficando com 1º elemento tendo o valor normal,o 2º tendo o valor do 3º elemento(que foi atribuido ao nodo do 2º elemento na função excluir),e o 3º elemento vai ta la intocado no arquivo.. uma das formas de voce resolver isso seria abrir o arquivo só para leitura e depois na hora de gravar os dados no arquivo,apagaria o arquivo atual e criaria um novo com os dados da lista atual
-
foi mal é que eu tava meio bebado de sono ontem Poe o valor de pr para null pra validar a condição consulta *pr = NULL; do { int numer = atoi(p -> numero); if (cod == numer) { cont = 1; if(pr == NULL) //Troca "!=" por "==" ,Se o elemento procurado for o 1º da lista { *inicio = p->prox; //Então poe o próximo nodo da lista no nodo atual(começo da lista) } else pr->prox = p->prox; //Atribui o próximo nodo em p ao proximo nodo em pr(que seria o nodo com o elemento à ser //deletado) printf("\nExclusao feita com sucesso\n"); break; } Se ainda assim tiver dando erro,então provavelmente deve ser a forma como voce ta armazenando os dados no arquivo ou lendo os dados no programa
-
nesse caso voce precisa pegar uma referencia(**)para o ponteiro "lista" e nao um ponteiro(*) para lista pra deletar um certo elemento em uma lista que nao seja o ultimo é um pouco diferente,tendo a sua função agora pegando uma referencia pro ponteiro void excluir (struct consulta **inicio); Algo assim pode ser feito: void excluir (struct consulta **inicio){ if (inicio == NULL) printf("Sem registros"); else { int cod, cont = 0; consulta *p = *inicio; consulta *pr = p; printf("\nEntre com o codigo do registro que deseja excluir: "); scanf("%d", &cod); do { int numer = atoi(p -> numero); if (cod == numer) { cont = 1; if(pr != NULL) { *inicio = p->prox; } else pr->prox = p->prox; //Atribui o próximo nodo em p ao nodo atual printf("\nExclusao feita com sucesso\n"); break; } pr = p; //Nodo atual em p agora em pr p = p -> prox; //Proximo nodo em p } while (p !=NULL); if (cont == 0){ printf("\nRegistro nao localizado. \n"); } }} PS:Eu nao testei em todos os casos,(na verdade eu só olhei sua função excluir),mas acho que é isso ai
-
caramba.. atoi converte uma string toda e voce ta passando só um elemento e do tipo int,se voce quer pegar um unico digito convertido de um array de char pra int,usa por exemplo "int n = binario - 48"
-
realmente tem muitas formas pra aprender inglês,o inglês ta ai em qualquer lugar que voce vá,o legal é você aproveitar alguma coisa que você goste de fazer pra aprender inglês,Cati,eu comprava cartas de Magic em inglês(geralmente são mais baratas rs),alias jogar Magic também ajuda a treinar sua lógica e algoritmo,se você gosta de seriado como o ismick falou,em vez de ver dublado procura ver em inglês(o canal da warner foi uma das minhas maiores fontes de Knowledge)tambem é legal botar as legendas em inglês pra treinar escrita
-
oi caroline,a maioria das coisas que voce me perguntou são dependentes da implementação das suas classes Player,Enemy, Camera,só posso tentar ajudar de uma forma superficial Pra renderizar texto..pode procurar sobre a biblioteca"FreeType",não tem como eu colocar aqui(isso no minimo precisaria de uma classe inteira,talvez voce ache algumas prontas pela internet) Ou voce pode usar a função "glutBitmapCharacter" pra mostrar em caractere,mas tem que setar e desabilitar algumas coisas antes Pra colisão simples voce pode definir um raio pra cada ator na classe e comparar esse raio com a distancia atual entre eles,se for menor que o raio,então colide,geralmente funções de colisão são colocadas dentro de um outro loop contendo a ação então é normal usar um if pra testar a condição da distancia em vez de fazer um loop,mas ja que é só pra mostrar.."fimpartida" seria o tempo dado pra partida,POR EXEMPLO : GLfloat *player_pos = m_player.getPosition();GLfloat *enemy_pos = m_enemy.getPosition();unsigned int posvertice = 4; //Testa com qualquer vertice//ator.raio seria a constante definida na classe pro raio maximo que algo pode se aproximar do atorwhile((player_pos[posvertice] - enemy_pos[posvertice]) > ator.raio || fimpartida >0) {//Faz o que tem que fazer//Depois algum resultado que influenciou na posição atual dos personagens,então seta a nova//posição m_player.setPosition(pos_atual_player); m_enemy.setPosition(pos_atual_enemy); }//Quando sair do loop testaria se o loop parou porque houve colisãoif((player_pos[posvertice] - enemy_pos[posvertice] ) < ator.raio){ glRasterPos2i(pos_xtela,pos_ytela); //Seleciona posição na tela onde vai ser escrito glutBitmapCharacter(fontecaractere,"gameover"); //Escreve gameover}return; Pra contar o tempo voce pode usar a classe CStopWatch, alguma coisa como: CStopWatch contatempo;contatempo.getElapsedSeconds(); //Dentro de um loop.. Contar pontos é só contar.. Pra mover a esfera só para o eixo z teria que aplicar uma transformação,voce poderia usar a classe "GLMatrixStack" para segurar sua M3DMatrix44f,ou então pode usar a classe GLFrame pra representar os vértices do objeto,isso simplifica porque "GLMatrixStack" pode aplicar todas as transformações nescessarias,POR EXEMPLO GLFrame ator_esfera;GLMatrixStack mtx_ator_esfera; Depois na função que renderiza a cena,poderia usar ator_esfera.MoveForward(0.1f); //Move 0.1f pra frente mtx_ator_esfera.PushMatrix(ator_esfera); //Passa para GLMatrixStack a pilha de //ator_esfera com um novo valor mtx_ator_esfera.Translate(tx,ty,tz); mtx_ator_esfera.Rotate(ang_ += 0.5f,rx,ry,rz); //Aplica Transformação ob_esfera.Desenha(//argumentos); //ob_esfera pode ser um "GLTriangleBatch" mtx_ator_esfera.PopMatrix(); Só pra terminar voce teria que passar essa matriz transformada de "mtx_ator_esfera" pro shader como argumento,isso pode ser feito com a classe "GLGeometryTransform",que poderia ter tanto a pilha de mtx_ator_esfera,quanto a pilha de Frustum,e ja faria automaticamente a transformação da pilha de ambos com a função "GetModelViewProjectionMatrix()", resultando na matriz de projeção de modelo-visualização,pra isso voce teria que setar o objeto de "GLGeometryTransform" (de preferência no construtor da classe)pra que ele aponte pro topo da pilha de ambos com a função "SetMatrixStacks"
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