Ir ao conteúdo
  • Cadastre-se

atlos

Membro Pleno
  • Posts

    267
  • Cadastrado em

  • Última visita

Tudo que atlos postou

  1. 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
  2. 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
  3. 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
  4. 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;}
  5. 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
  6. mas realmente nao tem nada errado ali..relaxa um pouco amigo(na boa),depois volta e vai entender com certeza
  7. o "if(NUM2 <= NUM1)" que voce colocou é errado,o certo seria if(num2 > num1)
  8. 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();
  9. é 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; }
  10. 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"
  11. difícil saber o que realmente a pessoa ta querendo com esse tipo de pergunta,pior ainda é quando nem voltam pra explicar..
  12. mas o que exatamente seria "travar"?
  13. 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..
  14. 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!
  15. voce nao ta usando excluir(&lista); ?
  16. 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);
  17. é 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
  18. 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)
  19. 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
  20. 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
  21. 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
  22. 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"
  23. 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
  24. atlos

    Jogo em C++

    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

×
×
  • Criar novo...

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!