Ir ao conteúdo
  • Cadastre-se

devair1010

Membro Pleno
  • Posts

    6.249
  • Cadastrado em

  • Última visita

Tudo que devair1010 postou

  1. @Eli Almeidaa essa 3ª aí , está compilando , mas não dá o resultado desejado , e mesmo para iniciantes esse código não está nada bom , e então , por que você não experimenta fazer do modo tradicional , que seria usar um Loop "laço de repetição" , que diminuiria muito a quantidade de linhas do seu código , pois do jeito que está , tem muita coisa desnecessária , vai dar muito trabalho , para fazer as comparações e ficar imaginando um monte de possibilidade que podem acontecer no algoritmo , além de que o código final teria 3 kb de tamanho e em um pc que tem muita memória , esses 3 Kb é nada , mas se você quiser colocar esse código em um micro controlador pic 16F84A que tem apenas 1 Kb de memória esse programa não serviria , pois não caberia na memória dele , mas se você usar os comando apropriados como loop's e vetores e outros , esse mesmo algoritmo , sem os comentários , teria apenas 1 Kb de tamanho e caberia nesse micro controlador PIC16F84A : Algoritmo "o maiorrr" Var maior , num , i , aux : inteiro ordinal : vetor[1..10] de caractere Inicio ordinal[ 1] := "Primeiro" ordinal[ 2] := "Segundo " ordinal[ 3] := "Terceiro" ordinal[ 4] := "Quarto" ordinal[ 5] := "Quinto" // cada nUmero tem seu respectivo Ordinal ordinal[ 6] := "Sexto " ordinal[ 7] := "Sétimo" ordinal[ 8] := "Oitavo" ordinal[ 9] := "Nono" ordinal[10] := "Décimo" aux := 1 escreval (" Informe dez números inteiros") para i de 1 ate 10 faca // Loop com dez repetiCOes leia( num ) // le o numero digitado se num > maior então // verifica se o nUmero digitado Eh maior // que a var "maior" que foi criada // e inicializada com valor zero , e se sim maior := num // a var "maior" recebe o valor desse nUm // que Eh maior aux := i // var auxiliar armazena a posiCAo na sequencia // de nUmeros digitados para usar o cardinaL fimse // fim da comparaCAo fimpara // fim do Loop "para / fimpara" escreval() escreval("O ",ordinal[ aux ]," número ",maior," , é o Maior . . . !" ) escreval() Fimalgoritmo e essa 5 , pode ser com repita e também com enquanto
  2. @Eli Almeidaa o comando "mod" só funciona com números inteiro , assim se não der para dividir por dois o compilador considera que o resto é o próprio número 1 , pois a parte inteira da divisão de 1 por 2 é igual a zero , e 0 * 2 = 0 , e de 0 para 1 = 1 , assim o resto é 1 .
  3. @arthursoaress teste a memória colocando uma outra que esteja boa , e poste as configurações de se pc .
  4. @Reinaldo_Lopes veja se seu código segue esse exemplo algoritmo "SHOPPING CENTER" var vector : vetor[0..100] de inteiro cad_shopping : vetor[0..100,0..5] de caractere // matriz de nomes nome,resp : caractere tip,cod , opc : inteiro area,condominio: real contador , a : inteiro // ---------------------------------------------------------- procedimento menu // tela de menu inicio limpatela escreval ("________________SHOPPING CENTER________________") escreval ( ) escreval ("___________Digite a opção desejada_____________") escreval ( ) escreval (" 1 - Cadastrar loja ") escreval (" 2 - Consultar loja ") escreval (" 3 - Listagem de todas as lojas ") escreval (" 4 - Sair ") leia ( opc ) limpatela fimprocedimento // ---------------------------------------------------------- procedimento listagem_lojas inicio escreval (" Está no listagem loja" ) escreval para a de 0 ate contador faca escreval( a,"ª Loja " ) escreval("Código --: ", cad_shopping [a,0] ) escreval("Nome ----: ", cad_shopping [a,1] ) escreval("Área ----: ", cad_shopping [a,2] ) escreval("Tipo ----: ", cad_shopping [a,3] ) escreval fimpara escreval escreval("Total De Lojas Cadastradas -> ", contador) escreval escreval(" Tecle Enter" ) leia ( resp ) fimprocedimento // ---------------------------------------------------------- procedimento sair inicio escreval escreval(" Saindo Do Programa . . . !") fimprocedimento // ---------------------------------------------------------- procedimento cadastrar_loja // cadastro de loja inicio escreval(" Está no cadastrar loja") repita escreva ("Código: " ) leia ( cad_shopping [contador,0] ) escreva ("Nome: " ) leia ( cad_shopping [contador,1] ) escreva ("Área: " ) leia ( cad_shopping [contador,2] ) escreval(" 1 - Confecções " ) escreval(" 2 - Alimentação " ) escreval(" 3 - Livros " ) escreval(" 4 - Serviços " ) escreva ("Tipo de 1 a 4 -: " ) leia ( cad_shopping [contador,3] ) contador := contador + 1 escreva ("Cadastrar outra ? 0 - SIM / 1 - NÃO") leia ( resp ) ate resp = "1" fimprocedimento // ---------------------------------------------------------- procedimento consultar_loja inicio escreval(" Está no consultar loja Tecle Enter") leia ( resp ) fimprocedimento // ----------------- Início do programa ----------------- inicio repita menu escolha( opc ) caso 1 cadastrar_loja caso 2 consultar_loja caso 3 listagem_lojas caso 4 sair outrocaso escreval("Opção Inválida . . . !") fimEscolha ate opc = 4 Fimalgoritmo
  5. @Reinaldo_Lopes você criou uma matriz "m_nome" com 100 linha por cinco colunas , onde os dados armazenados nela serão considerados como caracteres , começando de 1 até 100 e de 1 até 5 , e cadastrou os dados na posição começando de 1 até 4 e na hora de listar os dados , você colocou para escrever o que está na posição zero , que nem existe , até 3 para a de 0 ate contador faca escreval( a,"ª Loja" ) escreval("Código --: ",m_nome: [a,0] ) // não existe essa posiCAo ( 0 , 0 ) escreval("Nome ----: ",m_nome: [a,1] ) // no loop a var "a" vale zero no inIcio escreval("Área ----: ",m_nome: [a,2] ) // e não pode ter dois_pontos aqui escreval("Tipo ----: ",m_nome: [a,3] ) // tabulaCAo organiza dados escreval fimpara pode refazer a matriz "m_nome" para ter o zero , sim ! m_nome : vetor[0..100,0..5] de caractere // matriz de nomes // 100 Linhas // 5 Colunas e alterar também na hora de cadastrar procedimento cadastrar_loja // cadastro de loja inicio escreval(" Está no cadastrar loja") repita escreva ("Código: " ) leia ( m_nome[contador,0] ) escreva ("Nome: " ) leia ( m_nome[contador,1] ) escreva ("Área: " ) leia ( m_nome[contador,2] ) escreval(" 1 - Confecções " ) escreval(" 2 - Alimentação " ) escreval(" 3 - Livros " ) escreval(" 4 - Serviços " ) escreva ("Tipo de 1 a 4 -: " ) leia ( m_nome[contador,3] ) contador := contador + 1 escreva (" Cadastrar outra ? 0 - SIM / 1 - NÃO") leia(resp) ate resp = "1" fimprocedimento
  6. devair1010

    C Jogo em linguagem C

    @Junia C Olá , se você Já conseguiu fazer um código para seu programa ? , Poste ele aqui e ajudaremos .
  7. @Eli Almeidaa sim , esse programa pergunta se você quer repetir tudo novamente , e escreve "S/N" que significa "sim" ou "não" , aí você escolhe e digita a resposta , se for "n" ele termina o programa e se for qualquer outra letra ele repete , mas agora percebi que você que mesmo é substituir o comando "enquanto / fimenquanto" pelo "repita / ate" , e seria assim : Algoritmo "impares 2" Var n , i : inteiro Inicio i <- 1 escreva (" Digite um número ") leia( n ) repita se i % 2 = 1 então // esse simbolo % eh igual a esse "mod" escreval( i ) fimse i <- i + 1 ate i > n Fimalgoritmo
  8. @Eli Almeidaa o comando repita/ate , pode ser usado em qualquer parte do programa , e você escolhe o que vai repetir , podendo ser o algoritmo todo ou apenas uma linha dele , e nesse seu código , se você quer repetir para escolher vários números imprimindo os ímpares , vai precisar de mais uma variável para controlar o loop do "repita" , e seu código ficaria assim : Algoritmo "impares" Var n , i : inteiro resp : caractere Inicio repita i <- 1 // inicializar a variAvel pois vai repetir tudo escreval (" Digite um número") leia( n ) enquanto i < n faca se i % 2 = 1 então // esse simbolo % eh igual a esse "mod" escreval(i) // senao fimse i <- i + 1 fimenquanto escreva("outra vez S/N ") leia( resp ) ate resp = "n" Fimalgoritmo
  9. @juniorbenz7 seu código contém erros de lógica , pois você está usando o comando "senão" sem um respectivo "se" , e no escolha / caso não tem esse comando junto também , e creio que você esteja querendo mesmo usar o comando "outrocaso" que pertence ao "escolha/caso" , e poste seu código que você conseguiu com o comando "se" , para vermos como está , e esse seu código poderia ser assim : algoritmo "Reajuste salarial" var cargo : caractere salario, salario_reajustado : real inicio escreval(" reajuste para :") escreval(" professora ") escreval(" mecânico ") escreval(" outros ") escreva("Digite o cargo da pessoa ---: ") leia(cargo) escreva("Digite o salário da pessoa -: ") leia(salario) escolha cargo caso "professora" salario_reajustado <- salario * 1.5 caso "mecânico" salario_reajustado <- salario * 1.3 outrocaso salario_reajustado <- salario * 1.1 fimescolha escreval escreva("O novo salário de ",maiusc(cargo)," é R$ ", salario_reajustado) escreval fimalgoritmo
  10. @isaac klein de onde veio esse import "loja" ? , no meu PyCharm não encontrei nenhum mesmo . e seu código contém erro de syntaxe , pois no python , precisa fazer a identação obrigatória ,
  11. devair1010

    C Jogo em linguagem C

    @Junia C nesse link tem algumas informações : https://www.clubedohardware.com.br/forums/topic/1513565-tabuleiro-de-sudoku-em-linguagem-c/#comment-8063054
  12. @F1rmeza na imagem tem uma palavra "AGENDA" , em caracteres Gigantes , e no seu código não aparece ela , e a biblkioteca conio2 e a conio também não fazem parte das bibliotecas padrão da linguagem C, e assim pode funcionar em alguns dispositivos , mas não em outros , e melhor então não usa-la mesmo , e aí usando esse código da função gotoxy vai precisar usar a biblioteca "windows.h" , e assim também vai precisar criar outra função substituir a textcolor , e que pode bem ser essa: void gotoxy( int x , int y ) { SetConsoleCursorPosition( _h , ( COORD ) { x , y } ); } void textcolor( int letras ) { SetConsoleTextAttribute ( _h , letras + ( 0 << 4)); }
  13. @Eli Almeidaa o "repita" como o nome diz , vai repetir tudo que esteja entre o repita e o comando ate , pois senão seu menu não faria sentido , e você só usaria uma opção dele e terminaria o programa , e o que precisa é o programa ficar em loop repetindo , e só sair quando for digitado o "3" que é a condição de sair do programa , e você poderia usar outro comando para isso , como o "enquanto/fimenquanto" , o "opc" é uma variável para não perder o valor digitado no "menu" que é "opcao" , pois tem uma outra opção para escolher "credito ou debito" , e se usasse a mesma variável "opcao" , iria interferir nas opções do menu principal , identar serve para organizar o código , e assim pode se perceber facilmente os blocos do código , por exemplo , num loop "para/fimpara" , você vê quais comandos fazem parte desse loop pois eles estão mais para dentro do loop , e no VisualG , o código vai funcionar do mesmo jeito independente de estar identado ou não , mas em outras linguagens não funcionariam , pois nelas a identação é obrigatória , como no python .
  14. @Cord no C Sharp é fácil saber se um determinado arquivo existe no local especificado ou não , como em qualquer outra linguagem , e como na linguagem c se o arquivo não existe ele retorna "NULL" no C# ele retorna "FALSE" , usando esse comando : string caminho = "C:\\file.txt"; // nome do arquivo e do tipo "txt" bool retorno = File.Exists(caminho); // verifica se tem esse nome "file" nesse local
  15. @Gilberto Moreira ainda não sei programar em vba , mas parece um erro aqui nesse loop , onde você colocou para repetir cinco v ezes Private Sub BtnFotoWebcam_Click() Dim CaminhoFoto, Atrasar Dim ProgramaFoto 'CaminhoFoto = "C:\Users\StarForch\Pictures\" & TxtNomedoVisitante.Value & ".bmp" CaminhFoto = "C:\Users\StarForch\Pictures\" & TxtNomedoVisitante.Value & ".bmp" ProgramaFoto = shell("C:\Users\StarForch\Pictures\CommandCam.exe",vbMide) & Filename & CaminhoFoto '" shell("C:\Users\StarForch\Pictures\CommandCam.exe"/filename """CaminhoFoto" & "",vbMide) For Atrasar = 0 To 5 Application.Wait(Now + TimeValue("00:00:01") ) Next ImageFotoVisitante.Picture = Nothing 'ImageFotoVisitante.Picture = LoadPicture(CaminhoFoto) ImageFotoVisitante.Picture = LoadPicture(CaminhoFoto) End Sub
  16. @Pablo.Mascarenhas os números Romanos são compostos por Letras , sendo assim você vai precisar converter os números em caracteres de Letras maiúsculas , e uma forma de fazer a conversão seria colocando os "Romanos" em um vetor de pesquisar , e depois que você fizer um código sobre esse exercício , poste ele aqui e ajudaremos se ainda precisar .
  17. @Eli Almeidaa não é obrigatório , mas o modo como todos costumam fazer , coloque um nome no seu programa , faça a identação e organize seu código facilitando a leitura , e use o botão code "<>" , que está desenhado lá na barra de ferramentas da janela de postar e seu código vai ficar todo coloridinho e com uma melhor aparência , e poste o código todo desde o "algoritmo" até o "fimagoritmo" , isso facilita "copiar colar salvar" para testar , e por isso uma imagem não é uma boa ideia , melhor escrever em forma de texto , e se não usar vetor / matriz / registro , só vai poder listar 1 produto / compra mesmo , pois essas variáveis são simples e só podem armazenar nelas um valor de cada vez , e assim vai listar o último dado gravado nelas , Algoritmo "sistema de compras" // Disciplina : [Linguagem e Lógica de Programação] // Professor : Antonio Carlos Nicolodi // Autor(a) : // Data atual : 01/03/2023 // Objetivo: // Construa um programa em C que seja um sistema de compras de um supermercado. // Este programa deverá conter um menu com as seguintes opções: // * Comprar Produto // * Listar Produto // * Sair // Na opção de comprar produto, deve stá presente as segintes informações : // * Nome do Produto // * Quantidade // * Preço // ApOs recolher as informações digitadas pelo usuário, o sistema deve // mostrar o Valor Total do produto comprado. Em seguida perguntar ao // usuário a forma de pagamento . Caso seja crédito, haverá acréscimo // de 5% no total do produto. Se débito, haverá desconto de 10% no // total do produto. Faça uso de vetores para realizar a compra de // mais de um produto se o usuário desejar. // Ao listar produto, primeiro verifique se já existe algum produto // cadastrado, Senão, uma mensagem deverá ser exibida , informando que // não existe produtos cadastrados, faça a listagem dos mesmos // incluíndo as informações de forma de pagamento, valor total , // desconto ou acréscimo. Var // variAveis Globais produto : caractere // recebe valor vazio "" opcao , quantidade , opc : inteiro // recebe valor inteiro "0" preco , total : real credito , desconto : real // recebe valor de pt flutuante "0.00" porcentagem , pagamento : real existe : logico // recebe valor "falso" Inicio repita escreval(" Menu : ") // não Eh obrigatOrio , mas habitual como escreval(" 1 - Comprar produto") // todos costumam fazer , organizar e escreval(" 2 - Listar compra ") // identar o cOdigo facilitando ler e com escreval(" 3 - Sair ") // aparEncia mais agradAveL escreva (" Digite a opção ") // deixe um espaCo final e sem pular linha leia ( opcao ) escreval escolha opcao // a escolha do primeiro menu não precisa sinal de igual caso 1 escreva ("Qual o nome do produto ? -------: ") leia ( produto ) escreva ("Qual é a quantidade do produto -: ") leia ( quantidade ) escreva ("Qual é o preço do produto ? ----: ") leia ( preco ) total <- quantidade * preco escreval(" O total é :" , total ) escreval(" Qual é a forma de pagamento ? -: ") escreval(" 1 - Crédito ") escreval(" 2 - Débito ") escreval(" Digite a opcão ----------------: ") leia ( opc ) escolha opc // a escolha do segundo menu caso 1 escreval escreval("está no caso 1 do segundo Menu ") escreval porcentagem <- total * 0.05 total := total + porcentagem escreval("Haverá um acréscimo de 5 porcento = ",porcentagem) escreval(" e o valor total será ------------: ",total ) caso 2 porcentagem := total * 0.10 total := total - porcentagem escreval escreval("Haverá um Desconto de 10 porcento = ",porcentagem) escreval("e o valor total será -------------: ",total ) outrocaso escreval escreval("opCAo invALida . . . ! ") fimescolha // fim do segundo escolha / caso escreval existe := verdadeiro // marca como existe produtos comprados caso 2 escreval("está no Listar Compra ! ! ") escreval // sem vetor matriz ou Registro só pode listar // um mesmo pois essa var simples só armaz 1 val se existe então // se existir produtos comprados escreval("Nome do Produto -: ", produto ) escreval("Qtd do Produto -: ",1: quantidade ) escreval("Preço do Produto -: ", preco )//qtd espaCos se opc = 1 então escreval("Frm de Pagamento -: Crédito ") escreval("Acrescimo --------: ", porcentagem ) senao escreval("Frm de Pagamento -: Débito ") escreval("Desconto ---------: ", porcentagem ) fimse escreval("Valor Total ------: " , total ) senao escreval("// não existe produtos cadastrados") fimse caso 3 escreval escreval("Saindo Do Propgrama . . . ! ") outrocaso escreval("opção inváLida . . . ! ") fimescolha // fim do primeiro escolha / caso escreval ate opcao = 3 Fimalgoritmo
  18. @GSP85 portugol é uma linguagem inicial , geralmente usada em lógica de programação , tem comandos básicos , e se você vai usar o compilador VisualG 3.0 , então pode ver sobre essa questão nesse link https://www.clubedohardware.com.br/forums/topic/1634912-calcular-os-métros-quadrados-de-um-condominio/#comment-8541058 ou você pode usar um compilador mais avançado como o "portugol Studio" , os comandos dele se assemelha com os da linguagem c , e tem funções para criar gráficos e cores , e sons , com ele você pode fazer até um Game daqueles simples ,
  19. @Eli Almeidaa sim está certo pois são dois "se" e precisa de dois "fimse" , não precisa colocar nenhuma letra em maiúscula , só não pode colocar acentuação nem cedilha nas palavras chaves e variáveis , e em alguns casos precisa dos parênteses , como no comando "se" que tenha duas ou mais comparação juntas , e que precisa usar o operador lógico , e , ou , e creio que seja melhor escrever da forma como lhe agrada , porém não precisa ter trabalho desnecessário mudando para maiúscula e escrever uma letra e voltar para minúscula novamente , perdes tempo com isso , e nem precisa também colocar parênteses no comando "se" quando tem apenas uma comparação , e no escreval para pular linha também não , mais seria bom fazer a identação do código e organizar para tornar fácil de ler . e o comando copia seria mais apropriado nesse caso para evitar erro , pois não foi informado o que o usuário deve digitar , assim ele pode colocar apenas uma letra ou a palavra toda , e na hora de comparar você colocou apenas uma opção que você imagina que será digitada , então mesmo sendo iniciante precisa usar o comando copia sim , e ele não é tão difícil de entender seu funcionamento , mas seu código vai funcionar bem também sem esse comando "copia" , mas logo alguém vai dizer que deu um erro nessa parte .
  20. @Cris.Pavani melhor postar o código todo #define _WIN32_WINNT 0x600 #define _h GetStdHandle(STD_OUTPUT_HANDLE) #include <conio.h> #include <stdio.h> #include <iso646.h> #include <string.h> #include <windows.h> #include <time.h> #include <string> #include <algorithm> #include <iostream> /*#include <HLP.h> #include <neuronio.h> #include <funcao_linear.h> #include <funcao_tam_hiperbolica.h>*/ using namespace std; int main( int argc, char *argv[] ) { int cor_antes, cor_antis; CONSOLE_SCREEN_BUFFER_INFO c ; if( GetConsoleScreenBufferInfo( _h , & c ) ) { cor_antes = ( c.wAttributes & 0xFF) & 0x0F; cor_antis = ( ( c.wAttributes & 0xFF) >> 4) & 0x0F; } srand(/*_Seed:*/time(/*_Time:*/NULL) ); SetConsoleTextAttribute( _h , 9 + ( 14 << 4 ) ); system("cls"); cout << "\n executando o programa . . . !\n\n\n" << endl; FILE* arq; if( argc < 2 ) /// verifica a quantidade de argumentos arq = stdin; /// ler da entrada padrão else arq = fopen(/*_FileName:*/argv[1], /*_Mode:*/"r" ); /// ler do arquivo passado como parametro int num_entradas, num_camadas_escondidas, neuronios_saida; int qte_amostras, qte_teste, max_epocas; double erro_min, taxa_aprendizagem, taxa_reducao_aprendizado; SetConsoleTextAttribute( _h , cor_antes + ( cor_antis << 4 ) ); return 0; } em formato de Texto mesmo , pois uma imagem não dá para copiar e colar para testar , essas bibliotecas "Header's" , #include <HLP.h> #include <neuronio.h> #include <funcao_linear.h> #include <funcao_tam_hiperbolica.h> precisam estar na mesma pasta do arquivo desse código ,
  21. @Cambalinho a SFML é uma biblioteca externa que precisa ser instalada e configurada para ser usada junto com algum IDE , codeblocks visual studio , ou outros , e além dessa tem outras como a Allegro , SDL , QT , todas são parecidas com a API do windows , porém com mais recursos .
  22. @Pablo.Mascarenhas olá , bom Dia , ajudo no que puder , se for alguma coisa que eu saiba . e o que seria ?
  23. @DESESPERADO TECNOLOGICO se você remover a bateria do setup e esperar alguns segundo e depois colocar novamente , a placa e a BIOS estarão na configuração ideal , e não precisa mudar nada na BIOS , limpe os contatos da memória e verifique que esteja encaixada certa , e se essas tres peças , placa processador e memória estiverem boas , seu pc vai funcionar bem . não tem nada de driver da fabrica ou qualquer outro que faça funcionar ou não ,
  24. @DESESPERADO TECNOLOGICO qual a configuração de seu pc ? , nome e marca da placa-mãe e do processador ? , e o que você já fez para resolver , por exemplo , você já removeu a memória e limpou as trilhas dela ? , fez o clear_cmos , jampeando o jump da BIOS por alguns segundos ? , ou removeu a bateria por alguns segundos e colocou novamente ? , pois fazendo isso a placa volta a ficar com as configurações de fábrica e se mesmo assim não der vídeo então provavelmente essa placa está estragada , e consertar o vídeo onboard é praticamente impossível , então teste com uma placa de vídeo , daquelas bem simples mesmo , pode ser já usada , que você consegue nas oficinas de manutenção de pc , por R$70,00 . e em último caso compre uma placa-mãe nova .
  25. @Cambalinho para ter maior velocidade , você pode organizar seu código de forma que não use esse "Sleep" , pois isso faz demorar muito , #define _WIN32_WINNT 0x600 #include <stdio.h> #include <conio.h> #include <windows.h> #include <string.h> #include <math.h> #include <iostream> /* site https://www.clubedohardware.com.br/forums/topic/1619190-matem%C3%A1tica-como-se-move-1-ponto-no-espa%C3%A7o/#comment-8483220 coloque isso no link do compilador -lgdi32 -lmingw32 -lopengl32 -lopengl32 -lwinmm no codeblocks Settings / Compiler / Linker Settings / Other Linker Options */ using namespace std; int flg = 1; void LineMove(int &X0, int &Y0, int &Z0,int &X1, int &Y1, int &Z1,int Speed=1) { float DX = X1 - X0; float DY = Y1 - Y0; float DZ = Z1 - Z0; float LineDistance = sqrt(pow(DX,2) + pow(DY,2) + pow(DZ,2)); float XStep = DX / LineDistance; float YStep = DY / LineDistance; float ZStep = DZ / LineDistance; if( flg == 2 ) { X0 += round( XStep * Speed ); Y0 += round( YStep * Speed ); Z0 += round( ZStep * Speed ); /// LineMoveFront X1 += round( XStep * Speed ); Y1 += round( YStep * Speed ); Z1 += round( ZStep * Speed ); } else { X0 -= round( XStep * Speed ); Y0 -= round( YStep * Speed ); Z0 -= round( ZStep * Speed ); X1 -= round( XStep * Speed ); /// LineMoveBack Y1 -= round( YStep * Speed ); Z1 -= round( ZStep * Speed ); } } void DrawLine3D(HDC Destination, int X0, int Y0, int Z0, int X1, int Y1, int Z1,COLORREF LineColor ) { //Avoiding division by zero: if(Z0==0) Z0=1; if(Z1==0) Z1=1; //Getting Line Distance(float results): float DX = X1 - X0; float DY = Y1 - Y0; float DZ = Z1 - Z0; float LineDistance = sqrt(pow(DX,2) + pow(DY,2) + pow(DZ,2)); //Getting the Steps incrementation(float results): float XSteps = DX/LineDistance; float YSteps = DY/LineDistance; float ZSteps = DZ/LineDistance; //Draw Line using the Steps\ Incrementation: float X = X0; float Y = Y0; float Z = Z0; int OldPosX = X0; int OldPosY = Y0; for( int i=0; i<LineDistance; i++ ) { //For every steps we calculate the perspective: float Perspective = 300/(300+Z); //The 3D to 2D convertion(i use 300 of eye distance, but we can change it): int PosX = trunc( X * Perspective ); int PosY = trunc( Y * Perspective ); OldPosX = PosX; OldPosY = PosY; //Draw the pixel: if( Z>0 ) SetPixel(Destination,PosX,PosY,LineColor); //Increment steps(integer results): X+=XSteps; Y+=YSteps; Z+=ZSteps; } } int main() { HDC HDCConsole; HWND csl ; RECT rec ; GetClientRect(GetConsoleWindow(),&rec); csl = GetConsoleWindow( ); HDCConsole = GetDC( csl ); int Speed = 1 ; int Front = 0 ; int LinePositions[6] = {100,100,0,900,100,500}; COLORREF LineColor = RGB( 255, 255, 0 ); do { if(flg) { flg = 0; FillRect(HDCConsole,&rec,CreateSolidBrush(RGB(0,0,0))); DrawLine3D( HDCConsole, 100 - Front, 100, 0 - Front, 900 - Front, 100, 500 - Front,LineColor ); DrawLine3D( HDCConsole, 100 - Front, 100, 0 - Front, 100 - Front, 400, 0 - Front, LineColor ); DrawLine3D( HDCConsole, 900 - Front, 100, 500-Front, 900 - Front, 400, 500 - Front,LineColor ); DrawLine3D( HDCConsole, 100 - Front, 400, 0 - Front, 900 - Front, 400, 500 - Front,LineColor ); } Speed=1; if((GetKeyState(VK_RSHIFT) & 0x8000)) Speed=10; if((GetKeyState(VK_UP) & 0x8000)) { Front += Speed; flg = 1; } if((GetKeyState(VK_DOWN) & 0x8000)) { Front -= Speed; flg = 1; } } while(!(GetKeyState(VK_ESCAPE) & 0x8000)); printf(" Tecle Enter"); cin.get(); /// pede teclar enter flg = 1; do { if( flg ) /// se moveu a linha { LineMove ( LinePositions[0],LinePositions[1], LinePositions[2], LinePositions[3],LinePositions[4], LinePositions[5], Speed ); /// calcula a prOxima posiCAo da linha flg = 0; /// reseta a flag FillRect(HDCConsole,&rec,CreateSolidBrush(RGB(0,0,0))); /// limpa a tela DrawLine3D(HDCConsole, /// desenha a linha na nova posiCAo LinePositions[0],LinePositions[1], LinePositions[2],LinePositions[3], LinePositions[4],LinePositions[5], LineColor ); /// com essa cor } Speed=1; if((GetKeyState(VK_RSHIFT) & 0x8000)) /// se pressionou Shift Direito Speed = 10; /// velocidade 10 if((GetKeyState(VK_UP) & 0x8000)) /// se pressionou Seta para Cima flg = 1; /// flag recebe valor 1 if((GetKeyState(VK_DOWN) & 0x8000)) /// se pressionou Seta para Baixo flg = 2; /// flag recebe valor 2 } while(!(GetKeyState(VK_ESCAPE) & 0x8000)); cout << "Draw ended!!!"; cin.get(); /// pede teclar enter 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!