Ir ao conteúdo
  • Cadastre-se

dontpanic

Membro Pleno
  • Posts

    1.032
  • Cadastrado em

  • Última visita

Tudo que dontpanic postou

  1. Você colocou um colchete a mais antes de 'if (lista.primeiro == nullptr)'. Além disso, mesmo que seu compilador permita chamar a função main() recursivamente, entenda que isso foge dos padrões da linguagem... outros compiladores podem marcar seu código com erro de sintaxe.
  2. Esse erro normalmente não tem nada a ver com o código, e sim com o sistema operacional. Provavelmente uma outra instância do seu programa ainda tá rodando, e você tentou rodar ele novamente. Abra o gerenciador de tarefas do windows e finalize qualquer processo do seu programa que esteja rodando, ou simplesmente reinicie o computador. Além disso, se quiser ajuda com o código evite postar ele numa imagem pois fica difícil de ajudar (eu teria que digitar tudo na mão pra compilar o código). É bem mais fácil dar um ctrl-c e ctrl-v e colocar as tags 'code' do que tirar printscreen e postar imagem.
  3. Os números que já foram falados não valem mais pra todos os jogadores, ou apenas pra quem já falou ele? Eu resolveria isso simplesmente criando uma lista dos números que já foram falados. Por exemplo: - Jogador 1 escolhe o seu número. - Jogador 2 escolhe o seu número. Lista de números falados vazia = { }; - Jogador 1 diz que o número do jogador 2 é X. - Testa se X tá na lista de números falados. - Se sim: - - - "Número já dito. Escolha outro / passa a vez / etc" - Se não: - - - X é igual ao número do jogador 2? - - - Se sim: - - - - - - "Acertou. Fim do jogo" - - - Se não: - - - - - - Insere X na lista de números falados. Lista de números falados = { X }; Daí repete a mesma coisa pro Jogador 2, depois volta pro 1, etc. Essa lista pode ser implementada do jeito que você quiser. Desde uma lista encadeada até um array simples com um índice. Daí cria uma função pra fazer uma busca nessa lista, pra testar os números que forem ditos.
  4. Bem, se o motivo for apenas pra aprendizado, eu até entendo... e acho que usando uma flag como eu demonstrei já resolve. Mas tenha em mente que como programador é importante sempre pensar na experiência que o usuário vai ter com o seu programa... mostrar uma mensagem de erro diferente sempre que a mesma coisa acontece é uma falha de design de projeto, pois o usuário pode ficar perdido. Desse modo você alterna entre as mensagens: int x = 1;...if (num1 == num2) { if (x = !x) printf("%s numero igual ao do numero1",nome2); else printf("%s numero igual ao do numero 2",nome1);} Desse modo você mostra a primeira mensagem apenas uma vez: int x = 1;...if (num1 == num2) { if (x) printf("%s numero igual ao do numero1",nome2); else printf("%s numero igual ao do numero 2",nome1); x = 0;}
  5. Como o screen disse, a expressão a mesma. Se você quiser que ela faça coisas diferentes cada vez que for acessada, você precisa usar algum tipo de 'flag' ou modificador nela. int x = 1;...if (num1 == num2) { if (x = !x) printf("%s numero igual ao do numero1",nome2); else printf("%s numero igual ao do numero 2",nome1);} Só por curiosidade, por que você tá complicando de propósito um código simples assim?
  6. 'carac' é do tipo 'char', mas 'alfabeto[v]' é um array de char. Talvez o que você queira fazer seja: carac = alfabeto[v][0]; Além disso eu não entendi porque você tá usando arrays de strings se você tá usando apenas caracteres.
  7. Eu não tenho muita experiência com C#, mas eu tenho quase certeza que "txtRazaSociEmpresa" equivale ao TextBox em si... pra acessar o texto contido no textBox você precisa acessar algum elemento dele. Provavelmente "txtRazaSociEmpresa.text" ou algo assim. No visualStudio, se você colocar um ponto depois de txtRazaSociEmpresa e esperar uns 2 segundos ele mostra pra vocês os elementos daquele objeto que você pode acessar.
  8. É só colocar as expressões que você quer que sejam resolvidas antes do println entre parenteses. System.out.println("Resultado da soma é: " + (x=5+4) );
  9. A função scanf() retorna o número de elementos que foram lidos, ou zero em caso de erro. Então, se você tiver: y = scanf("%d", &x); Considerando que 'x' é do tipo INT, então 'y' vai ser igual a 1 se você digitar qualquer número inteiro, e vai ser igual a 0 se você digitar uma letra ou nome. Basta então testar o valor de y e repetir o scanf. #include <stdio.h>int main(){ int x, y; do { y = scanf("%d", &x); while (getchar() != '\n'); // limpando o stdin } while (!y); return 0;}
  10. Pra calcular o MMC entre dois números, você faz X igual o menor valor entre os dois números e faz um FOR simples subtraindo 1 de X a cada loop, onde você testa se os dois números são divisíveis por X (resto da divisão igual a zero). Caso sejam, você achou o maximo divisor comum. Daí basta fazer ( NxM / MDC ). A segunda questão é bem simples... a fórmula tá no próprio enunciado. A terceira questão também... só fazer um FOR, com X começando em 2, até N... dividindo N por X e testando se o resto da divisão é zero ou não. #include <iostream> using namespace std; int mmc(int m, int n) { // ...} float volumeEsfera(float raio) { // ...} bool primo(int n) { // ...} int main() { // ... return 0;}
  11. A função gets() recebe como parâmetro um "char*", mas dependendo de como você declarou essa string "sexo", você parece estar passando um "char" apenas. Como você declarou essa string "sexo"? Além disso, seu código tá em C ou C++? Se tá em C, por que tá compilando ele como C++? E se tá em C++, por que tá usando funções do C?
  12. @Italo_TI Não são linguagens... são só frameworks e subsistemas que você usa em conjunto com as linguagens java e c#. Eu só quis dizer que a aplicação que você faz das linguagens é mais importante que as linguagens em si.
  13. Não sei responder quanto ao mercado de trabalho... sei que o C# ficou popular nos últimos anos, substituindo algumas vagas antigas, mas o mercado pra java ainda é bem popular, então num chute consciênte diria que estão no mesmo patamar, dependendo da região do país. Quanto a todo o resto, a sintaxe é bem parecida, as aplicações são bem parecidas, ambas são linguagens bem documentadas e com propósitos bem parecidos. Um programador java não teria muita dificuldade em aprender C# em poucos dias, e vice versa. A questão principal não é qual linguagem você quer aprender, mas qual framework. Com o C# você poderá expandir pro .NET, WPF, WinForms, interligação com os produtos da microsoft, etc. Com o Java você expande pra JSP, JavaFX, Android, e terá acesso a um número maior de arquiteturas. Sinceramente, procure molhar os pés nas duas linguagens... não é difícil nem tomará muito tempo.
  14. Procure no google por "java profiling" e você vai encontrar alguns programas que fazem profiling do seu programa, ou seja, eles dizem o quanto de memória ele está usando, em quanto tempo as classes são executadas, etc. Depois disso você pode testar seu sistema em algumas máquinas virtuais com configurações diferentes, e a partir desses testes você define os requerimentos mínimos.
  15. Tem certeza que tá funcionando corretamente? Nesse FOR aqui: for(j=0;nome2[j];j++) O programa tá testando o valor de nome2[j] antes de nome2[j] ser setado. Compilei no gcc e ele não imprime nome2[] corretamente. Se no segundo FOR eu trocar nome2[j] por nome[j], daí ele funciona corretamente.
  16. Quando tiver uma dúvida assim, basta fazer o famoso "teste de mesa", ou "escreva no papel os valores da memória". for(i=0;nome;i++); Esse código acima, vai apenas pegar o tamanho de nome[] e colocar em i. Cada string que você digita com o scanf ou gets termina em um character nulo ("\0"), então esse FOR vai testar se nome é igual a zero, quando sim, o FOR termina e i terá o tamanho da string. (Era mais simples usar strlen() ) for(j=0;nome2[j];j++) No segundo FOR, digamos que i seja igual a 20, que é o tamanho de nome, e j começará em 0. Então, no primeiro loop desse for você terá: nome2[0] = nome[20 -0 -1] ---> nome2[0] será igual a nome[19] Segundo loop, j é igual a 1: nome2[1] = nome[20 -1 -1] ---> nome2[1] será igual a nome[18] Terceiro loop, j igual a 2: nome2[2] = nome[20 -2 -1] ---> nome2[2] = nome[17] E assim por diante. Ele tá percorrendo o array nome2[] de 0 até 20, e colocando nele os elementos do array nome[] de 20 até 0. A única coisa que tô achando estranho é o critério de parada da segunda array (nome2[j]), pois testei aqui e não funciona. Ou você digitou errado, ou tem alguma parte do código antes disso que inicializou aqueles valores.
  17. Com o fgets você não usa máscaras... qualquer processamento é feito depois, na string capturada por ele. Por exemplo, se o seu fgets pegou a string "FN:Bruno Eduardo" então basta copiar os caracteres string[3] até string[15] pra uma substring. Você pode copiar manualmente (faz um FOR copiando os characters) ou então usa a função memcpy() ou strncpy(). Ex: #include <stdio.h> #include <string.h> int main() { char string1[20] = { "Ola mundo\0" }; char string2[10]; memcpy( string2, string1+4, 6 ); printf("%s\n", string2); return 0; } Edit: Sobre o "%*4c", o asterisco tá dizendo pra ignorar o que vier a seguir. O 4c significa "4 caracteres". Então "%*4c%s" --> Ignore os 4 caracteres a seguir e guarde o restante numa string. O site que eu uso pra pegar essas referências é http://www.cplusplus.com/reference/cstdio/scanf/ Mas eles não explicam muito bem lá... pra ser sincero são poucos livros/sites que explicam esse tipo de coisa. O jeito é sair testando mesmo.
  18. A função fscanf lê os characters até achar um espaço em branco ou quebra de linha (ou fim do arquivo). A função fgets lê os characters até achar uma quebra de linha ou fim do arquivo. Então talvez pro seu código seja melhor usar o fgets() já que os nomes têm espaços em branco. Se preferir usar o fscanf mesmo, você pode tentar manipular a máscara dele pra pegar o que quer... por exemplo: fscanf(arquivo,"%*4c%s",buff); ---> isso aqui vai ignorar o "FN:" e pegar apenas "Bruno" na terceira linha. Depois é só usar outro fscanf() pra pegar "Eduardo". Mas acho que dá mais trabalho.
  19. Queria ajudar, mas não sei nada de visualG. Pessoalmente, acho muita bobeira o pessoal ficar perdendo tempo usando essas pseudo-linguagens pra ensinar lógica de programação quando o mesmo pode ser feito tranquilamente com linguagens mais convencionais, com documentação melhor. É como aprender a andar de bicicleta com uma bicicleta de madeira sem rodas, quando você poderia usar o mesmo tempo pra aprender com uma bicicleta normal. Mas como você tá aqui pra tirar sua dúvida e não pra saber minha opinião sobre o visualG, a única coisa que eu posso dizer é que aquela função provavelmente pega o valor ASCII de um número e retorna o character equivalente. Pelo menos foi isso que deu pra entender pelo protótipo dela: NumpCarac(Cont: Inteiro): Caractere Se você procurar no google por "NumpCarac", tem um vídeo do youtube que parece ensinar o que essas funções fazem.
  20. Você tá usando o mesmo nome de variável pro scanner e pra string. Variáveis precisam ser únicas.
  21. tb_resultado.Text = Convert.ToString(total);
  22. Pra pegar as notas, você pegou o texto que estava nos TextBox e converteu de string pra numero, certo? Então é só fazer o contrário agora... pega o total, converte pra string e faz "TextBox.Text = valor";
  23. Ué... é só não jogar em tela cheia.
  24. @jpsan Meu raciocínio inicial era o seguinte: 0 0 0 0 0 0 0 0 0 Partindo de [0,0] a função ia testar se: - É igual ao ponto 2,2? - - Se sim: Soma um caminho a mais - - Se não: Chama a função novamente, recursivamente, passando agora como parâmetro os pontos [0,1] (direita) e [1,0] (abaixo) A função repete a mesma coisa com esses dois pontos, testa se é 2,2... se não, os 2 pontos chamam mais 4 pontos. E os 4 pontos chamam mais 8, etc. É basicamente a mesma função que é usada pra percorrer uma árvore. O que eu deixei escapar é que esse problema na verdade não é uma árvore... se tratar ele como árvore, eu acabo contando alguns caminhos mais de uma vez. Por exemplo, o ponto [0,1] iria chamar a função novamente pros pontos [1,1] e [0,2]... e o ponto [1,0] iria chamar a função pro ponto [1,1] e [2,0]. O caminho que passa por [1,1] seria contado duas vezes. Então essa lógica não ia funcionar. Daí eu trapaceei um pouco e achei no google um blog onde um matemático explicava esse problema. E a solução dele é parecida com a minha, só que de trás pra frente... em vez de começar no ponto [0,0], você começa no [2,2], reseta a matriz inteira com o valor 1 e vai percorrendo os caminhos inversos, montando um triangulo de pascal ao somar os valores adjacentes. Por exemplo: 0 0 0 0 0 0 0 0 0Nos pontos [2,0] e [2,1] pro ponto [2,2] só existe um caminho.Nos pontos [0,2] e [1,2] pro ponto [2,2] também só existe um caminho. 0 0 [1] 0 0 [1][1][1][1]No ponto [1,1] existem dois caminhos (a soma dos valores nos pontos adjacentes [2,1] e [1,2]) 0 0 1 0 [2] 1 1 1 1No ponto [0,1] existem 3 caminhos (soma dos adjacentes --> 2 + 1)No ponto [1,0] também existem 3 caminhos (mesma coisa) 0 [3] 1[3] 2 1 1 1 1E finalmente no ponto [0,0] existem 6 caminhos... mais uma vez, a soma dos adjacentes (3 + 3) [6] 3 1 3 2 1 1 1 1O valor que ficar no ponto 0,0 é o resultado que o problema procura.
  25. O último da série (o 99) é: F(99) = 218.922.995.834.555.169.026 E pra representar ele você vai precisar de mais de 8 bytes. Dependendo do compilador que você esteja usando, do sistema operacional (32bits, 64bits), etc, é bem provável que o valor máximo que você consiga representar usando apenas o C puro e as bibliotecas padrão, seja 8 bytes usando um "unsigned long long int". Eu testei aqui e consegui ir até F(93): #include <stdio.h>#include <stdlib.h> int main() { int i; unsigned long long int f1 = 0; unsigned long long int f2 = 1; unsigned long long int f3; printf("%llu\n",f1); printf("%llu\n",f2); for( i=2; i<100; i++) { f3 = f1 + f2; printf("%d - %llu\n",i,f3); f1 = f2; f2 = f3; } printf("\n"); return 0;} Depois do 93, nem mesmo os 8 bytes do longlongint dão conta... daí pra representar valores maiores que esse você vai precisar usar alguma biblioteca própria pra isso. Eu sei que no visual studio existe alguns tipos que são capazes se representar valores maiores. Mas como você tá usando o gcc, recomendo dar uma olhada numa biblioteca chamada inttypes.h.

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...