Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. vangodp

    pilhas

    Qualquer condicional o único que espera é true o false, em outras palavras 0(zero) ou 1(um ou qualquer outro valor que seja verdadeiro). então... if ( t != 0 && pilha[t-1] == '(' ) --t; ...primeiro resolveria o lado esquerdo do operador &&, ou seja que t!=0 pode ser tanto 1 como 0(deixo claro que não conferi o resultado), ato seguido se olha o que esta a direita de &&, ou seja que pilha[t-1] == '(' pode igualmente ser zero ou um ficando o if hipoteticamente desse jeito if ( 1 && 1 ), nesse caso 1 e 1 seria verdadeiro, então se executaria --t. Agora olho por que não é a mesma coisa t-- que --t. Para você entender o que acontece faça o seguinte: int n = 10;printf ("%d", n-- ); //imprime primeiro e depois faz a resta, ou seja, imprime 10, e depois resta 1.printf ("%d", n ); // imprime 9 agora si fizer: int n = 10;printf ("%d", --n ); // resta antes de imprimir, ou seja imprime 9.printf ("%d", n ); // imprime 9 Entendeu? Si o operador está antes da variável se leva a cabo 1º a ação de decrementar porque o operador está antes da variável, si o operador estiver depois da variável, primeiro se imprime e depois se decrementa, porque o operador esta depois da variável. A efeitos o printf ("%d", --n ); é como si fosse: n = n-1;printf ("%d", n ); Isso é a mesma coisa, e agora é impossível não compreender. E printf ("%d", n-- ); é como si fosse: printf ("%d", n );n = n-1; Isso já responde o pilha[t++] = s, É como si fosse: pilha[t] = s[i];t = t+1; fácil? Acho que sim. Sobre o return t == 0, como falei antes "Qualquer condicional o único que espera é true o false...". para saber que é que está devolvendo return seria tão fácil como fazer printf("%d", (t==0));. Si t fosse zero, zero é igual a zero? Sim claro! Então devolve true(1), retorna 1. Por outro lado si t fosse 1. O t(1) é igual a zero? Não! Então é falso. retorna 0; Não posso provar seu programa agora porque estou formatando meu computador. Só to de passo rapidinho. Si tiver mais problemas em breve acho que terei o pc pronto.
  2. Ok já te entendi. você devia ter postado isso desde o principio. Para isso você pode usar os valores hexadecimais, decimais, octais etcetc. Exemplo: #include <stdio.h>int main ( int argc, char *argv[] ) { char string[6]={'\xb0', '\xb1', '\xb2', '\xb3', '\xb4'}; for ( int i = 0; i < 6-1; i++ ) { if ( string[i] == '\xb0' ){ printf( "Indice [%d] Sucesso\n", i ); }else printf("Indice [%d] Falha\n", i); } return 0;}
  3. como comparar? Da mesma forma que farias com qualquer outra char. if( 'a' == 'b' )...
  4. O C/C++ padrão não suportam gráficos, sempre teremos que optar por alguma biblioteca de terceiros, isso é normal em um linguagem que foi desenvolvido antes de que existissem las interfaces gráficas, porém C/C++ são muito ampliáveis através de bibliotecas, isso sem duvida é o que o faz um dos melhores linguagens, conforme minha opinião, claro, pois eles foram concebido de forma "simples" e se adaptam a maioria dos campos requeridos. Infelizmente não posso dar exemplos de código por que eu não estou acostumado a cargar gifs, porém sei que existe uma biblioteca chamada GDI que sim pode permitir a carga de gifs de forma relativamente fácil, busque informação em Google de "como cargar gifs em C/C++". Sorte!
  5. Tanto C++ como Java e também C# são POO. C++ é um linguagem compilado, os outros 2 são frameworks.
  6. vangodp

    Validação de CPF

    Vamos fazer uma coisa. Te pego esse e você pergunta o que não entender ok? Compare com o seu e veja. #include <stdio.h>#include <locale.h>int validaCPF ( const int * const );int main ( void ) { setlocale(LC_ALL, "portuguese"); int cpf[11]; char input[12] = "52998224725"; printf("Digite o número do CPF sem pontos, espaços ou traços:\n"); //scanf("%11[^\n]%*c", input ); //"529.982.247-25" for ( char i = 0; i < 11; i++ ) { cpf[(int)i] = (int) input[(int)i] - 48; if ( cpf[(int)i] < 0 || cpf[(int)i] > 9 ) { //Validando a entrada de dados printf("ENTRADA INVÁLIDA\n"); return 1; } } printf("\nO CPF digitado foi: \n"); for ( char i = 0; i < 11; i++ ) { printf("%d", cpf[(int)i]); if ( i == 2 || i == 5 ) printf("."); if ( i == 8 ) printf("-"); } printf("\n\n"); if ( validaCPF (cpf)==1 ) printf("O CPF digitado É válido =)\n"); else printf("O CPF digitado NÃO É VÁLIDO =(\n"); return 0;}int validaCPF ( const int * const cpf ) { int digito1, digito2, temp = 0; for ( char i = 0; i < 9; i++ ) temp += ( cpf[(int)i] * ( 10 - i ) ); temp %= 11; if ( temp < 2 ) digito1 = 0; else digito1 = 11 - temp; temp = 0; for ( char i = 0; i < 10; i++ ) temp += ( cpf[(int)i] * ( 11 - i ) ); temp %= 11; if ( temp < 2 ) digito2 = 0; else digito2 = 11 - temp; if ( digito1 == cpf[9] && digito2 == cpf[10] ) return 1; else return 0;}
  7. vangodp

    ler arquivo

    E como se supõe que eu te explico como fazer um programa para ler um arquivo que você não sabe como vai ser =/. É de inteiros, é de chars? tamanho variável ou constante? etc etc... Fica difícil assim você não acha? Si ao menos você facilitar um programa com uma matriz que você quer guardar no arquivo eu posso passar ele ao arquivo e depois ler ele.
  8. você tem que investigar qual é o header que você precisa para usar timers em pic. Eu também não sei qual é a que você está utilizando para os botões. Talvez si você postar todo o código podemos te ajudar mais. E qual são os programas que você esta usando também. O código que eu te passei não posso testar ele por que não tenho acesso as mesmas libs que você esta usando. Entendeu? Dar más informação sobre programas, livrarias, compartir el projeto. Em pic não sei muito o sistema que se usa para programar, porém esses gotos são horríveis para meus olhos, porém como eu falei, pic é outro mundo, e eu não tenho ideia de nada em pic. Si você quiser trocar uma ideia melhor você pode me add no skype, la me chamo igual. Sorte.
  9. vangodp

    ler arquivo

    matriz de que ? que vai ler a matriz? Inteiros, chars..? faça ao menos 2 linhas do que vai conter esse arquivo, por exemplo: 123 123 123 123 321 331 234 112 ou 12,123, 322, 12 23,33,12,23
  10. while(1) e for(; são bucles infinitos. Normalmente se usa quando o criador disponibiliza algum outro método para deter o bucle. Nesse caso o que se encarga disso é essa linha if (no == -1) break, o break se encarga de "quebrar" o loop. Tecnicamente a reposta a sua pergunta é. Fica no loop até que no seja igual que -1! Quando isso suceder o break; vai fazer o programa sair desse loop e parar justo depois da chave que fecha o while. while(1) e for(; são loops infinitos. Leia isso: http://linguagemc.com.br/loop-infinito-em-c/ Exatamente! É somente um valor inicial para representar algo. Pode ser para representar que essa casinha da ponte não foi visitada ainda, ou que o personagem ainda não sabe se tem tabua ou é um buraco conforme vi assim por em cima o enunciado(É só uma suposição. XD). Sorte.
  11. Eu não sei nada de PIC não, porém si puder usar switch e menos esses arcaicos gotos... #include <stdio.h>#include <time.h> //nao sei si time funciona com pics porem é para ter uma ideia#define PRESSIONADO 0x00 //supondo que 0x00 equivale a pressionado (nao entendo muito de microcontroladores XD) Nao seria PRESSIONADO quando botao1 for 0x01???#define TIME 500enum FILTRO{FILTRO1=1, FILTRO2};int main () { int caso = 1; //iniciamos no filtro 1 clock_t inicio; clock_t tempoTranscurrido; float segundos=0; while ( 1 ){ switch(caso){ case FILTRO1: //no FILTRO1... printf("F1\n"); //averiguar si botao1 foi pressionado aqui if ( botao1 == PRESSIONADO ){ //...quando o BOTAO1 for pressionado... caso = 2; //...ele vai para o FILTRO2,... } break; case FILTRO2: //...e no FILTRO2... printf("F2.\n"); inicio = clock(); while ( 1 ){ //averiguar si botao1 foi pressionado aqui if ( segundos < 5 || botao1 != PRESSIONADO ){ tempoTranscurrido = clock(); //isso le o tempo pasado acho que em milisegundos segundos = (float)(tempoTranscurrido - inicio) / CLOCKS_PER_SEC; //esse calculo guarda em segundos o tempo que passo em cada iteraçao do loop }else if (botao1 == PRESSIONADO){ caso = 3; //vamos para libera2 que vc nao deu mais detalhes sobre o que faz break; }else{ caso = 1; // si nao acontece uma das duas açoes anteriores em 5 segundos voltamos para FILTRO1 break; } } break; case LEBERA2: //TADAH!! break; default: //IMPORTANTE CASO POR DEFAULT!! break; }//FIN SWITCH } return 0;} Essa seria a ideia, claro que não posso provar ela já que não sei o programa nem as libs que você esta usando para comprovar teclas, esse cod é só para expor uma ideia, na real as libs sei que são outras e não essas que eu coloquei aí, mas por ignorância da minha parte sobre o tema de PICs deixo ele assim, fique com o conceito somente, si tiver duvidas pergunte. E si não nem ligue para o que eu falei, passa batido. kkkk.
  12. Tem o mesmo efeito que while(1). Sobre o 0x3f não tem uma explicação fácil ou simples, a mais lógica é que ele colocou 0x3f ou 63 por que "teve vontade". O problema é que memset se usa para dar valores a vetores de chars(c_strings) já que precisamos informar um x numero de casinhas (não vale valores negativos "size_t" ) a serem formatadas como se explica nessa pagina http://www.cplusplus.com/reference/cstring/memset/, nesse caso cada casinha ia ganhar o valor de carácter '?'(conforme a tabela abaixo) pois memset formata chars não inteiros, na memoria cada char ocupa um byte e cada inteiro ocupa 4bytes(pode variar de um computador a outro). O valor hexdecimal 0x3f si retirar o 0x deixando 3f indica nessa tabela o carácter '?'. Vamos tentar encontrar a lógica disso. Pesamos que temos um array de inteiros assim: int arrray[100]; E que queremos formatar ele com 0x3f como no seu caso. memset(array, 0x3f, sizeof(array)); Bem... recorde o anterior, porque agora vou tentar explicar alguns conceitos. Si vou no meu computador e faço printf ("char=%d\nint=%d"sizeof(char),sizeof(int)); me imprime isso: char=1 int =4 O anterior que imprimiu quer dizer o tamanho que ocupa em bytes(conjunto de 8bits) cada variável na nossa memoria. Então vamos pensar assim... Um char ocupa [0] e um inteiro ocupa [0][0][0][0] ok. o problema esta que si eu faço size of de array com printf ("%d",sizeof(array) me vai retornar um valor 4 vezes maior si o array for de inteiros que no caso de ser array de chars. Prove isso: char arrray[100]; printf ("%d",sizeof(array); E logo depois em outro programa prove isso: int arrray[100]; printf ("%d",sizeof(array); Ambos dentro de um simples main claro. O primeiro me vai imprimir 100, e o segundo vai imprimir 400! Por que isso? Porque como falei um inteiro ocupa [0][0][0][0](4Bytes) frente a char que ocupa [0] (1Byte), sizeof me devolve o tamanho em Bytes, e isso é o que memset quer saber, o tamanho em Bytes que tem o array, porque ele vai meter em cada byte o valor 0x3f ou o que é o mesmo 63. Isso não tem lógica? Ou sim?. XD Agora já sabemos que memset independente do tipo do array, não importa si é int ou char, ele vai fazer isso: memset pega 0x3f e no caso de um char ele faz [0x3f], e no caso do array for de inteiros ele faz [0x3f][0x3f][0x3f][0x3f], ele recheia sizeof(array) numeros em Bytes com o valor 0x3f, si são 100 bytes, 100 bytes que ele vai encher com 0x3f, si são 400 o que devolve sizeof, pois 400 Bytes serão recheados com 0x3f. Ainda não entendemos a lógica verdade? Por que 0x3f??? =( Más provamos agora imprimir seu array mesmo ele sendo de inteiros como si ele fosse de chars dessa forma: #include <stdio.h>#include <string.h>#define TAM 100int main (){ int i; int array[TAM]; memset ( array, 63, sizeof(array) ); for(i=0; i<TAM; i++){ printf("array[i] contem: %c\n", array[i] ); } getchar(); return 0;} agora provamos como inteiro: #include <stdio.h>#include <string.h>#define TAM 100int main (){ int i; int array[TAM]; memset ( array, 63, sizeof(array) ); for(i=0; i<TAM; i++){ printf("array[i] contem: %d\n", array[i] ); } getchar(); return 0;} No caso de imprimir ele como char tem mais lógica não? Por que como inteiros sai um numero estranho 1061109567, isso no meu computador, más no seu pode ser até outro numero. Esse numero é o resultado de ter 0x3f en cada um do seus 4 Bytes de cada inteiro, isso é o representa esse numero. porém o numero não é o importante, o importante é o que representa esse numero, e acho mais lógico que ele represente '?' do que 1061109567. O que você não acha? Más realmente não estou muito seguro do que estou contando aqui, por que só quem programou isso entende realmente o por que ele fez isso. Eu vou seguir investigando por minha conta e si tenho novidades já aviso aqui mesmo.
  13. pense nisso como uma pilha de pratos ao que só podemos fazer operações ao final da pilha, pois não faz sentido tirar um prato debaixo da pilha. A pilha sempre vai ter um tamanho limitado, pois não existe memória infinita. regras a seguir para utilizar pilhas: 1-Tamanho limitado: por muita memória dinâmica que usamos, "TODA" memória tem um fim, pois ela é física, e tudo que é físico tem limitações, nesse caso tem limitação de espaço, si for dinâmica pode variar de tamanho, mais ainda assim não será ilimitada. 2-Operaçoes somente ao final da lista: Si vamos agregar algo na pilha, tem que ser no final, e si vamos retirar algo também, sempre do final. A regra se chama LIFO Last In First Out, "Ultimo a entrar será sempre o primeiro em sair", recorde isso pois é o mais importante. #include <stdio.h>#include <string.h>#include <stdlib.h>int main () { const int TAM = 4; char pilhaNomes[TAM][100]; //pilha do tamanho de TAM nomes de maximo 100 letras cada int pilha = 0; //contador para o tamanho da pilha char nome[100]; //variavel temporal para leer o nome e depois guardar na pilha. int op; //opçao para o menu int continuar = 1; //condiçao para loop principal int i; while(continuar){ printf("1-intruduzir \n2-retirar \n3-Listar \n0-Sair\n?: "); scanf("%d%*c", &op); system("cls"); switch (op) { case 1: if ( pilha < TAM ){ printf("Nome para introduzir a pilha: "); scanf("%99[^\n]s%*c", nome); strcpy(pilhaNomes[pilha], nome); pilha++; printf("Nomes na pilha = %d\n\n", pilha); }else{ printf("A pilha atingiu seu tamanho maximo, imposivel agregar mais nomes, somente podemos retirar nomes da pilha de momento.\n\n"); } break; case 2: if ( pilha > 0 ){ pilha--; printf("%s retirado da pilha.\n", pilhaNomes[pilha] ); printf("Nomes na pilha = %d\n\n", pilha); }else{ printf("Nao temos mais nomes por retirar\n\n"); } break; case 3: for ( i = 0; i < pilha; i++ ){ printf("%d %s\n", i+1, pilhaNomes[i] ); } printf("\n\n"); break; case 0: continuar = 0; break; default: break; } } getchar(); return 0;} Acho que com isso da para entender mais ou menos. Si tiver duvidas pergunte
  14. vangodp

    O que fazer a seguir?

    O C++ padrão não possui nenhuma livraria para gestionar interfaces gráficas. Lógico, ele foi criado la em meio dos 70kkkk. Por sorte C++ es altamente ampliável através de bibliotecas ou livrarias, como melhor gostar de chamar XD. Algumas bibliotecas podem ser QT, WimAPI, Wx Widgets, GTK que você mesmo mencionou, entre muitas, algumas muito mais portáveis que outras claro. Para mais informação busca no google "interfaces gráficas de usuário C++". Sobre que fazer com a linguagem C++, isso deixo a seu critério, si você for pedreiro e não saber que tipo de casa quer fazer isso é um grande problema kkk. Tente fazer um programa como uma especie de banco, "Banco Bargorn, seu dinheiro sempre em boas mãos!". Registro de clientes, alta e baixa, contas bancarias, sistema de empréstimos, cartão de credito, implemente um caixa eletrônico, contas domiciliadas de telefone, historial de conta.... Não sei, mais esse projeto é praticamente ilimitado enquanto a tudo o que pode crescer. =)
  15. Não é obrigado, más sim recomendável.
  16. Concordo exatamente com o que disse Higoor01. Não queria dizer esse ou o outro linguagem é melhor, porque realmente penso igual que ele. Depende do que você vai fazer. De que serve ficar aprendendo mil linguagens que você não vai usar?? A menos que você quiser rechear o curriculum, ou você goste realmente aprender varias linguagens, acho que se deve iniciar realmente pelo linguagem que você vai usar. Pense nisso... Que é o que você quer programar? Trace um objetivo. Sei que cada pessoa é um mundo, uns tem mais limitações que outros, e eu tenho mais que ninguém, porém eu consegui avançar bastante na linguagem que escolhi, em um principio queria só aprender C++, me dei conta que é impossível aprender C++ sem aprender C, não me foi mal, acabei aprendendo os dois linguagens, mas a minha meta principal sempre foi C++.
  17. vangodp

    Struct em c++

    Eu não vou fazer um texto kilometrico para te explicar tudo o que ta mal já que praticamente é tudo o que esta mal. Si você quiser aprender sobre arrays e matrizes de forma correta me adicione no skype e te explico melhor, no seus exemplo você não entendeu que são colunas, nem o que são filas, nem ta entendendo como trabalha as funções que gravam dados nas matrizes/vetores e que introduzem o carácter NULL al final do texto para marcar o fim do mesmo, nem entendeu como funciona os índices de C++. Em fim, o que você ta errando é em tudo... Lhe ofereço a oportunidade de aprender corretamente, porém não vou explicar aqui isso. Si quiser aprender ja lhe ofereci explicar por skype. Sorte.
  18. vangodp

    Struct em c++

    Eu tenho que sair, em umas horas eu estou de volta e te explico isso bem.
  19. Nunca se é cedo ou tarde demais. Eu por exemplo comecei muito tarde pois tenho 38 anos, e aprendi sem ajuda de ninguém. Quando eu era jovem existia poucos computadores, eram custosos, apenas se via algum que outro, lembro que quando vi um computador por primeira vez foi la no centro cultural de são paulo, ele tinha um joguinho muito primitivo, as pessoas faziam fila durante horas para jogar, tardavam tanto que eu não podia experimentar, isso que eu vivia em frente, meus olhos brilhavam com aquela maquina. Recordo pedir para minha mãe comprar um, porém como falei eram caros demais, e ela achou que eu não iria aprender nada daquilo, hoje sabemos que ela estava equivocada. kkk Em fim, descubra si você gosta realmente disso, por que você é bem novo e pode aproveitar bem desde cedo, coisa que eu não pode fazer, meu primeiro computador eu o comprei quando tinha 27 anos, e desde então não parei de aprender. Desde 2009 aprendo C++ por minha conta, aprendo lento, porém constante. Já o domino bastante bem, melhor que muitos cursados que tem pelos foros, alguns deles simplesmente falam "vou aprender programação" e desistem quando veem ponteiros. kkk, ou então ficam pedindo que se lhes faça os deveres de programação, a coisa é que si sou eu que faço, a experiencia será minha. kkkk Não é cedo não! Falou? Sorte, si quiser ajuda me busque por skype. No meu perfil você tem o enlace.
  20. vangodp

    Struct em c++

    Ainda tem erros. Por exemplo login.novo_user[8] == login.jose[8] você só esta comparando as ultimas duas letras e em cima você se sai de rango. nao existe nenhuma casinha novo_user[8] a ultima é novo_user[7] e ainda você não pode usar a ultima por que ela esta reservada para o carácter nulo que define o fim do string. você diz que funciona porém eu só vejo bugs em esse código. Si quiser entender como funciona os strings e arrays pode me buscar por skype que te posso dar uma explicada. Onde você esta aprendendo C++? Quem te ensina?
  21. Acrescentarei um plus ao que te contou @dif. Si quer entrar na deepweb use um sistema operativo virtual com algum programa que o permita criar, como virtual box ou outro de sua escolha.
  22. prove iniciar com c#, já que ele é bastante mais estendido e a meu ponto de vista, não só serviria para Unity, si não que para muitas outras coisas. Javascript não é nada mal, porém fora do Unity não teria muita utilidade si não é para programação web e pouco mais, e ainda você sempre pode aprender ele depois. Investigue por sua conta em que áreas você pode aplicar ambos, não pense de mente fechada como só em Unity, pense mais amplio. Que outros programas posso fazer com C# ou Javascript? Fique com el que mais lhe parece melhor.
  23. Si precisar de ajuda pode me buscar por skype . Sorte.
  24. Nao conheço muito C#, mas sei que ele precisa de net framework para que funcione. Em c/c++ não precisamos de nenhum framework para isso, uma vez compilado o programa e transformado a exe esse sempre funcionará nessa maquina sem precisar instalar nada mais. Em C/C++ é você que se encarga de gestionar a memoria ram, já em C# tenho entendido que que é o framework que se encarga disso, ou posso estar falando uma tonteria, porém como você já conhece o linguagem C# não preciso dizer nada. Entre C e C++ a diferença é que C++ é orientado a objetos, ou seja, você trabalha com classes, herança, polimorfismo, etc, igual que C#, porém C usamos funções e estruturas somente. Por que você não prova C ou C++ durante uma semana? Assim você pode ter uma ideia de qual são as diferenças, ao menos iniciais. Aprenda variáveis, string, bucles, funções, e só com isso você se vai dar conta que estarás todo o tempo trabalhando sobre a memoria, coisa que os frameworks emulam, porém com muito mais cuidado. Em C/C++ si sair de rango lascou kkkkk.

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!