Ir ao conteúdo
  • Cadastre-se

dontpanic

Membro Pleno
  • Posts

    1.037
  • Cadastrado em

  • Última visita

Tudo que dontpanic postou

  1. int indiceDado1 = d.nextInt(dado1.size()+1); Veja, desse modo você tá adicionando +1 a função size(), então em vez de ter nextInt(6) que retorna um número entre 0 e 5, agora você tem nextInt(7), que retorna um número entre 0 e 6. Pra pegar um número entre 1 e 6, você precisa adicionar +1 ao resultado do nextInt(): int indiceDado1 = d.nextInt(dado1.size()) + 1;
  2. Eu entendi o problema. Mas como eu disse, o método nextInt(n) retorna valores entre 0 e n-1. // dado1.size() é igual a 6// então o código abaixo é o mesmo que ...d.nextInt(6)int indiceDado1 = d.nextInt(dado1.size());Isso significa que d.nextInt() vai retornar valores entre 0 e 5. É assim que essa função funciona.Se você quiser que retorne valores entre 1 e 6 basta somar +1 a esse valor.
  3. A função nextInt(n) do Random retorna um número entre 0 (inclusivo) e n (exclusivo). Então nextInt(6) vai retornar um número entre 0 e 5. nextInt(n) vai retornar um número entre 0 e n-1. Sobre o segundo problema, você tá comparando duas strings com o operador '=='. O java trata strings como objetos, então mesmo que elas tenham valores iguais, elas são dois objetos diferentes. Por isso que a igualdade nunca retorna true. Pense nisso como duas pessoas que possuem o mesmo nome. Elas possuem o mesmo nome mas são pessoas diferentes... é mais ou menos assim com as strings no java. Pra fazer a comparação dos valores delas, use a função equals: if (result2.equals(dado))
  4. Cara eu não entendi nada que você digitou aí. Rodei o código aqui normal, não vi problema nenhum. Em que parte do código deveria aparecer 6?
  5. dontpanic

    AJUDA

    Procure no google por um programa chamado autohotkey.
  6. @Vini_Vevo Então, mas eu tô procurando um pra música mesmo... pra jogo eu já uso o siberia.
  7. Ah, esqueci de dizer: não precisa ter microfone. Headphone normal mesmo, não headset. @Vini_Vevo Agradeço as sugestões, tô dando uma olhada aqui no turtle... mas cara, sem querer ser chato, eu tenho um siberiav2 aqui (uso ele pra jogos) e apesar do microfone dele ser excelente, a qualidade de som dele não é lá essas coisas. É ótimo pra jogos, pois ele realça os tipos de sons que são mais úteis em jogos, mas pra ouvir música ele é fraquinho.
  8. Há uns anos atrás tive oportunidade de testar um headphone decente e fui convertido. O problema é que são muito caros. Tô pensando em aposentar o philips vagabundo que eu tenho aqui e pegar um melhorzinho, mas como são caros eu tô com medo de gastar muito dinheiro a toa. Os que eu tô de olho no momento são esses: Sennheiser HD 280 PRO: http://www.kabum.com.br/produto/27467/sennheiser-fone-de-ouvido-profissional-dj-hd-280-pro-preto/ Sennheiser HD 518: http://www.kabum.com.br/produto/37156/sennheiser-headphone-hd518-preto-prata/ Philips Fidelio L2: http://www.kabum.com.br/produto/58870/philips-fone-de-ouvido-fidelio-l2-over-ear-com-microfone-l2bo-00 Algum audiófilo poderia me recomendar o melhor entre os 3? Ou talvez até outras opções (que eu possa comprar online sem precisar importar)? Pelos reviews que eu li, uma coisa que esses 3 têm em comum é que apesar de não darem muita importancia aos baixos, eles possuem um som mais equilibrado, o que é perfeito pra mim. Além disso o fone vai ser usado apenas em casa, no computador, então coisas como isolamento acústico não são importantes.
  9. A gente só pode ajudar se souber como você tá colocando isso em código. Chutando, eu acho que é bem provável que você esteja abrindo os arquivos no modo escrita ("w") em vez do modo append ("a"). No modo escrita, o arquivo é sobrescrito toda vez que você abre ele. No modo append, você só adiciona.
  10. dontpanic

    Calculadora RPN

    Você tá usando variáveis locais nas funções que manipulam a pilha. Cada vez que essas funções terminam, a pilha é perdida. Por exemplo, a função main chama a função inicializa(). Essa função adiciona um elemento naa pilha e inicializa ela, mas assim que essa função termina a pilha se perde. O main não tem como saber o que aconteceu naquela função. A mesma coisa acontece na função insere() e retira().
  11. No manual da função, diz que ela foi depreciada e substituída por nanosleep() (<time.h>). Procure no google exemplos da nanosleep().
  12. Pra C++, eu só usei dois livros até hoje, o do Bjorne ("A linguagem de programação C++") e "C++ Primer". No caso do Python, tem esse livro online de graça que é muito bom: http://www.diveintopython.net/ Pro C# e Java eu não sei nenhum livro bom, mas assim como o python você também encontra a documentação inteira da linguagem no site da msdn e da oracle. E pro C eu vou ficar devendo.
  13. O processo de aprendizado de todas elas é o mesmo, já que são todas linguagens imperativas. Então todas elas são simples de aprender. É só pegar um dado de 6 faces e jogar pra cima.
  14. dontpanic

    Exercício em C

    int x = 3452; int setor = x / 1000; // 3 int func = x - (setor * 1000); // 452
  15. Se você baixar o netbeans e clicar lá no assistente pra fazer uma aplicação Swing, metade disso aí já vai estar pronto.
  16. Pra alguém que começou a programar há duas semanas, eu diria que o programa tá muito bom. Duas semanas depois que eu comecei a programar eu nem sabia o que era uma variável. Mas se quiser alguns toques: - Evite o máximo possível usar variáveis globais. Nesse código aí não tem problema pois é um código fixo que faz apenas uma coisa... mas normalmente quando você começa a trabalhar em códigos maiores, o código vai crescendo com o tempo e variáveis globais acabam se tornando aquela pedra dentro do sapato. - Pra pegar o tipo de operação, você usou %s no scanf em vez de %c. Provavelmente foi só distração. Tenha cuidado com os scanf's e saiba usar as outras operações de input (como getchar) pra não depender tanto dele. - É uma boa ideia separar seu programa em partes. Por exemplo, se você tem um programa simples que declara umas variáveis, depois pega input do usuário depois processa esse input, é uma boa ideia separar o código de acordo com essas partes, apesar disso não ser obrigatório. É só pra facilitar a manutenção do código.
  17. No post anterior eu usei "return n" por engano. Era "return s": Em C/C++ a divisão de números inteiros com inteiros retorna um inteiro... então precisa também usar um float ou real pra pegar o resultado de s. float positivo(int n) { float s = 0.0; for (int x=1; x <= n; x++) s = s + 1.0/x; return s;}
  18. A função recebe UM valor, N. Mas a sua função tá recebendo dois valores, N e S. Apesar de você não ter deixado claro na questão, é bem provável que os termos da função positivo vão de 1 até N, isso significa que você precisa cobrir todos os números inteiros no intervalo de 1 até N. Se N for igual a 100, então a função usa os números 1, 2, 3, 4, 5,... 95, 96, 97, 98, 99, 100. Mas a sua função tá usando apenas os números de 1 até 5. Pra pegar os números de 1 até N você precisa de um laço de repetição. Assim: int positivo(int n) { int s = 0; for (int x=1; x <= n; x++) s = s + 1/n; return n;}
  19. Acho que você tá complicando muito as coisas. Sua lógica: Chama o programa A, que fica invisível. Depois de alguns segundos o programa A executa o programa B. Depois disso o programa A faz o programa B ir pro foreground. Não seria mais simples chamar diretamente o programa B, iniciar ele invisível e depois de alguns segundos tornar ele visível e no foreground? Tanto a parte de tornar visível/invisível vão precisar que você use a api do windows (win32) ou alguma framework que faz isso pra você (qt, gtk, winforms). Se usar win32, a função pra tornar a janela invisível é: ShowWindow(handleDaJanela, SW_HIDE); A função pra trazer a janela pro foreground é: SetForegroundWindow(handleDaJanela);
  20. Esse erro é do linker. Significa que você provavelmente esqueceu de adicionar a biblioteca do winsock (Ws2_32.lib) no seu projeto.
  21. Procure exemplos no google da classe URLConnection. Com ela você acessa o conteúdo de um site. Depois que seu programa tiver acesso ao conteúdo (o código html do site) você vai precisar filtrar ele pra pegar os dados específicos que você quer. Pra isso você pode criar seu próprio parser, ou usar um já pronto. O único que eu conheço é o jsoup, mas existem centenas por aí. Depois de pegar o site e extrair os dados dele, aí você passa esses dados pra tua classe que vai fazer a comparação dos preços e tal.
  22. Se for um projeto simples tipo console pra windows, basta adicionar essa flag no linker, na hora de compilar: -mwindows
  23. Dei uma olhada no teu código. Se o senhor permitir algumas observações: 1 - A primeira dela é sobre a função loading: int main() { loading(); ...}int loading(void) { //Tela de carregamento printf("Carregando"); sleep(1); printf("."); sleep(1); printf("."); sleep(1); printf("."); sleep(1); printf(".");}Eu já vi funções desse tipo aqui no forum algumas vezes, e eu sempre fico intrigado quando vejo isso.Veja só, antigamente quando os computadores tinham tela verde, eles era bem lentos. Eles eram tão lentos que algumas coisas que hoje em dia são computadas instantaneamente, antigamente demoravam alguns segundos. E coisas que demoram alguns segundos hoje, antigamente demoravam minutos. Pro usuário saber que o programa ainda estava funcionado, e que estava parado apenas pra computar algum dado e não porque tinha travado, alguns desenvolvedores começaram a usar barras de carregamento ou telas de espera. O motivo dessas telas não era fazer o programa ficar parado por motivo nenhum, o motivo era apenas assegurar que o programa não tinha travado. Porque nenhum usuário nesse planeta deseja que seu programa seja lento de propósito. É por isso que a gente tá sempre comprando processadores mais rápidos. 2 - A segunda coisa é sobre modularização do código. Modularização é quando você divide o seu programa em partes menores, pra ficar mais fácil de manter, expandir e corrigir os bugs que aparecem. Por exemplo, se eu tiver um código onde todo processamento está na função main: int main() { while( a+b > c) { if (x == y) { /* * um monte de codigo aqui */ } /* * mais codigo aqui */ for (i=0; i < 10; i++) { /* * mais codigo */ } } return 0;}Então se eu executar esse programa e tiver algum erro, eu vou ter que rever o código inteiro pra achar o bug.Mas se eu modularizar o programa: void abrirArquivo() { /* * parte do codigo aqui */}int sortearVetor(int x) { /* * outra parte aqui */}int main() { while( a+b > c) { if (x == y) { abrirArquivo(); } for (i=0; i < 10; i++) { sortearVetor(i); } } return 0;}Daí em caso de erro fica mais fácil de isolar o problema.O exemplo acima foi bem simples, mas você pode ir adiante. Em vez de separar não só em funções, você pode usar arquivos diferentes também. Pode colocar a parte de manipular arquivos em "arquivo.c" e "arquivo.h" e no programa principal, o "main.c", você usa um "#include "arquivo.h". Essa coisa de modularização é especialmente importante se você pretende que outras pessoas colaborem no seu código. Cada pessoa trabalha em um arquivo. 3 - E a terceira observação é quanto a organização do código. Principalmente se você pretende que outras pessoas colaborem com o seu código, é muito importante que ele seja legível pra todo mundo que vai ler o código. Isso pode parecer besteira, mas eu garanto que é mais importante do que parece. Por exemplo, colocar comentários no código é muito importante, mas colocar comentários em excesso acaba deixando o código ruim de ler, principalmente quando são 3 da manhã e você tá com os olhos cansados. scanf("%d", &command); //Cria um entrada para comandoQualquer pessoa que começou a aprender C ontem sabe o que o scanf faz, então aquele comentário é desnecessário.Ou código sem indentação correta. É isso. Espero que considere isso como críticas construtivas. Se precisar de ajuda em algo fique a vontade pra postar.
  24. Eu recomendo o livro do Bjorne "A linguagem de programação C++" (a quarta edição, pois já é atualizado pro c++11). Pra referência, quando eu não lembro como usar uma função ou tipo da biblioteca padrão, eu uso esses dois sites: http://www.cplusplus.com/ http://en.cppreference.com/w/ Tutorial você encontra vários no youtube. Sobre ponteiros, é mais simples do que parece. Resuminho: Isso é sua memória:[a] [a] [a] [ ] [b] // Endereço 00: a - angra.mp3[ ] [c] [c] [ ] [ ] // Endereço 05: b - senha_do_facebook.txt[ ] [ ] [ ] [ ] [ ] // Endereço 07: c - foto_de_mulher_pelada.jpgint x; // isso é um inteiro. // quando essa linha é executada pelo seu programa, o sistema operacional reserva // espaço na memória pra aquela variável, e associa a ela um endereço[a] [a] [a] [ ] [b] // Endereço 00: a - angra.mp3[ ] [c] [c] [ ] [ ] // Endereço 05: b - senha_do_facebook.txt[d] [ ] [ ] [ ] [ ] // Endereço 07: c - foto_de_mulher_pelada.jpg // Endereço 11: d - x// O valor de x é indeterminado, pois a gente não associou nenhum valor a ele// No entanto o endereço de x é '11'.x = 123;cout << x; // imprime: 123cout << &x; // imprime: endereço '11'// Se você acessar o endereço 00, você vai ler o conteúdo de angra.mp3// E se você acessar o endereço 11, você vai ler o valor 123.// Até aqui tudo certo?// Agora os ponteiros:int x; // inteiroint *px; // ponteiro[a] [a] [a] [ ] [b] // Endereço 00: a - angra.mp3[ ] [c] [c] [ ] [ ] // Endereço 05: b - senha_do_facebook.txt[d] [ ] [e] [ ] [ ] // Endereço 07: c - foto_de_mulher_pelada.jpg // Endereço 11: d - x // Endereço 13: e - pxx = 123;px = &x;// Um inteiro guarda valores inteiros// Um ponteiro guarda endereçoscout << x; // imprime 123cout << &x; // imprime o endereço 11cout << px; // imprime o endereço 11cout << &px; // imprime o endereço 13// Como px tá guardando o endereço de x, você usa o operador * pra ir até aquele endereço e acessar o conteúdo delecout << x; // imprime 123*px = 345;cout << x; // imprime 345cout << *px; // imprime 345O básico é isso.
  25. Um parser normalmente tem duas etapas. O analisador léxico, onde você pega o input (que nessa caso são strings armazenadas no arquivo) e transforma ele em tokens (as partes dele, como <numero> <sinal> <espaço> etc), e o analisador sintático onde você pega os tokens, usa alguma lógica nele (nesse caso a lógica é aritmética) e retorna o resultado. Como o exemplo que eu dei era bem simples, só tinha dois tipos de tokens (numero e sinal) então eu não precisei organizar os tokens nem fazer nada com eles: for (i = strlen(linha); i >= 0; --i) { if (linha[i] > 47 && linha[i] < 58) { // numero *p += (linha[i] - 48) * mod; mod *= 10; } else { if (linha[i] != ' ') { // sinal sinal = linha[i]; p = &x; // guardando agora os valores em x; mod = 1; } }}'p' é um ponteiro que aponta pra y e armazena os números iniciais nele. Assim que aparece um sinal no código (qualquer coisa que não seja número nem espaço em branco), eu guardo o sinal numa variável e faço 'p' apontar agora pra x, armazenando os próximos números nele.Depois disso vou direto pro switch. Como são as mesmas variáveis sempre, não precisa usar muita lógica de programação. Se a expressão fosse mais complexa, com vários números, sinais e parenteses, aí sim você precisa criar um mini analisador léxico. Alguma função que pega os números, sinais, simbolos e adiciona eles numa lista (uma pilha é melhor), depois pega essa lista e vai resolvendo as expressões. Por exemplo, se tiver uma string assim: "1 * 2 - 3 + 5" O analisador léxico vai transformar isso em duas listas: numeros[4] = { 1, 2, 3, 5 }; sinais[3] = { '*', '-', '+' }; E o analisador sintático vai usar a seguinte lógica: - sinais[0] é '*', e pra fazer uma multiplicação eu preciso de dois números, então eu retiro os dois primeiros elementos da lista numeros[], multiplico eles e devolvo o resultado: numeros[4] = { 2, 3, 5 }; sinais[3] = { '-', '+' }; - sinais[1] é '-', pra uma subtração retiro dois números da lista numeros[] subtraio e devolvo : numeros[4] = { -1, 5 }; sinais[3] = { '+' }; - ...repete o mesmo com sinais[2]. ... É mais ou menos isso. Existem maneiras mais simples de fazer isso, principalmente se você não considerar certas coisas como a precedencia de operadores (multiplicação e divisão sempre vem antes de soma e subtração) mas a lógica é essa.

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!