Ir ao conteúdo
  • Cadastre-se

dontpanic

Membro Pleno
  • Posts

    1.037
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de dontpanic em Salvar e visualizar imagem de um banco com base no ID cadastrado em C# foi marcado como solução   
    Se for uma imagem apenas pra cada cliente, basta criar uma coluna a mais na tua tabela cliente e colocar o caminho dela lá.
     
    Se for mais de uma imagem pra cada cliente, você cria uma tabela a mais com o ID da imagem, o caminho dela e o id do cliente relacionado. E na hora de resgatar essas imagens, você usa um JOIN entre a tabela clientes e a nova tabela imagens.
  2. O post de dontpanic em Como usar o comando Switch no c++ foi marcado como solução   
    A escolha do switch ou do if, while, etc, isso daí depende só do programador. Internamente esses comandos são bem parecidos pro c++ e uso que eles fazem do cpu é quase o mesmo. Então escolha o comando que vai fazer o seu código ficar mais fácil de ser lido por outros programadores.
     
    No teu código aí, não precisa colocar esse "DO" antes do switch e a condição do switch deve ser resolvida logo depois do comando switch e não nos cases. Os cases são apenas atalhos pra onde o programa vai "pular" dependendo do resultado da condição.
     
    switch (n % 3) {case 0:    // se o resultado de (n % 3) for igual a 0, o programa pula pra essa linha aquicase 1:    // se o resultado for 1, o programa pula pra essa linha...default:    // se nenhum case tiver o resultado de (n%3), então o programa vem pra essa linha}  
    Mas tem um detalhe. O switch apenas joga a execução do programa pra um determinado case. Mas depois de chegar naquele case ele executa tudo que estiver abaixo dele. Ou seja, se ele for pro case 1, então ele vai executar também o que estiver no case 2, 3, etc.
     
    Pra executar apenas o que estiver no seu case e depois sair do switch, você precisa usar o comando "break":
     
    switch (<condição>) {case 1:    // comandos aqui    break;case 2:    // outros comandos aqui    break;default:    // mais comandos}
  3. O post de dontpanic em vocês poderiam me ajudar nesse programinha em c++ foi marcado como solução   
    Se você quiser alocar dinamicamente seu vetor, use isso:
     
    int *b;b = new int[10]; // b tem 10 posições agora delete [] b; // liberar a memória no final do programa  
    E pra saber quantos bits você precisa pra representar um número é só pegar o múltiplo de 2 dele e somar 1.
    8 = 2^3 +1 --> pra representar 8 você precisa de 4 bits
    53 = 2^6 +1 --> pra representar 53 você precisa de 7 bits
  4. O post de dontpanic em Alguém poderia me ajudar com esses dois programas em c++ foi marcado como solução   
    Na primeira questão você esqueceu um ponto-e-vírgula depois de cont++, e esqueceu de retornar um valor no final do main, já que é uma função do tipo int.

    int main() { ... return 0;}
  5. O post de dontpanic em Terminal Service do Windows - Acessar um pc dentro de um domínio foi marcado como solução   
    Se você tiver acesso a rede local (roteador), é só redirecionar a porta do seu aplicativo pro IP do servidor. Assim um computador de fora da rede só precisa saber o IP do roteador, e ele faz todo o trabalho de encaminhar os pacotes pra máquina específica onde o servidor está rodando. 
    Sobre alternativas ao teamviewer, procure no google por VNC e por SSH.
     
    O VNC é um protocolo de acesso remoto, que faz basicamente aquilo que o teamviewer faz. Existem centemas de servidores/clients pro windows (ou qualquer que seja seu SO).
    O SSH é um protocolo que simula um shell remoto. Dependendo do uso que você estava fazendo com o teamviewer, pode ser que ele seja útil também.
  6. O post de dontpanic em Listar arquivos de um diretório. foi marcado como solução   
    Quando você chama a função openDir(), ela pega a lista dos arquivos no diretório e coloca tudo numa lista interna de estruturas.
    Depois ao chamar a função readdir(), ela percorre essa lista, item por item, e devolve o endereço desses items da lista.

    dir=opendir(dirn); // criou a lista de arquivos do diretório aqui...while(drnt = readdir(dir)) // percorrendo a lista aqui Até aí tudo bem, certo?
    Depois disso você usou teu array de ponteiros pra pegar o endereço das strings que guardam o nome desses arquivos no diretório:

    mat[i] = drnt->d_name; Até aí tudo certo também. Essa operação por si só não é incorreta.
    O problema é que fazendo isso, seu array de ponteiros acabou de jogar fora todos aqueles endereços que você tinha reservado lá em cima com o malloc:

    for (i=0;i<20;i++){    mat[i] = (char*) malloc(sizeof(char)*20);} E o problema maior ainda, é que os endereços novos que seu array de ponteiros está guardando, são endereços gerenciados pelo próprio <dirent.h>.
    Ou seja, quando você chamar a função closeDir(), ou mesmo quando o readDir() chegar no final da lista, esses endereços serão liberados e o seu array de ponteiros estará apontando para endereços desalocados na memória.
     
    Se você quer guardar no seu array de ponteiros os nomes dos arquivos do diretório, então em vez de pegar o endereço deles, você precisa pegar o CONTEÚDO deles.
    Pra isso você usa a função strcpy:

    while( (drnt = readdir(dir)) ){    strcpy(mat[i], drnt->d_name);    i++;} No entanto, tem outro erro que você deixou passar, que é o motivo principal do seu código estar travando:

    for(i=0;i<20;i++){    mat[i] =(char*)malloc(sizeof(char)*20);} // NESSE PONTO DO CÓDIGO, i É IGUAL A 20. ...while(drnt = readdir(dir)){    mat[i] = drnt->d_name; // QUANDO CHEGAR AQUI, [i] VAI SER 20, EM VEZ DE 0.    i++; // 21, 22, 23...} Você esqueceu de resetar o i.
    E por fim, você tá tentando imprimir os 50 items do seu array, quando na verdade você só reservou 20:
     

    for (i=0;i<50;i++){ ... }Edit:Ah! Já ia esquecendo:

    for(i=0;i<20;i++){ free(mat[i]);}free(mat);Pra economizar 1.6kb de ram
  7. O post de dontpanic em Como inserir e visualizar dados no banco através da seleção de comboBox? foi marcado como solução   
    Se você estiver usando windowsforms, é só pegar a instancia do combobox e vai ter lá uma função que retorna o conteúdo do elemento selecionado, como uma string.
    Você concatena essa string com os valores que quiser e monta sua query.
    Query = "select" + comboBox.selectedItem.toString() + "from" ...;
  8. O post de dontpanic em Cmd abre e fecha rapidamente ao abrir um arquivo .jar foi marcado como solução   
    Eu não entendo nada de servidor de minecraft, mas eu acho muito pouco provável que o server deles feche sem ao menos mostrar uma mensagem de erro.
     
    Pra saber qual mensagem de erro tá aparecendo, você faz o seguinte:
    -  Aperta [WIN + R] ("win" é aquela tecla com a janelinha do windows na maioria dos teclados)
    - Ou clica em "Iniciar", depois em "Executar", digita cmd.exe
     
    - O prompt de comando vai abrir na pasta do teu usuário (geralmente "c:/users/maycon")
    - Se o teu arquivo jar estiver em outra pasta, você navega até essa pasta. Pra fazer isso você digita no prompt cd c:\pasta\onde\o\jar\esta\instalado
     
    - Finalmente, no prompt, na mesma pasta onde o seu jar está, você digita: java -jar nomedoarquivo.jar
     
    Fazendo isso tenho 99% de certeza que, ou vai funcionar, ou vai aparecer uma mensagem de erro explicando o porquê não funcionou.
    A partir dessa mensagem de erro você descobre o que tá acontecendo.
  9. O post de dontpanic em Programa em C foi marcado como solução   
    Caramba, eu tinha digitado um monte de coisa mas quando eu enviei perdi tudo... peraí que vou digitar de novo...

    for(t=0;t<k;t++){ for(i=0;i<k;i++) for(j=0;j<k;j++) Mat[i][j] = aux; aux++; i++; j = i; k--;}Eu disse antes que sua lógica tava correta, mas no código acima depois do "aux++" quando você altera os valores de i e j, eles acabam voltando pra zero novamente quando o primeiro FOR recomeça.Além disso, não é uma boa ideia mexer com o valor de k, pois o primeiro FOR depende dele.
    A solução pra isso seria deixar o i e j em paz, e usar outra variável pra mexer com o valor inicial deles em cada iteração do primeiro FOR:

    int x = 0;int y = 0;for (t=0; t<k; t++){ for (i=0 + x; i<k - x; i++) for (j=0 + y; j<k - y; j++) Mat[i][j] = aux; aux++; x++; y++;}Agora toda vez que o primeiro FOR recomeçar, x e y vão ter um valor diferente, de modo que o i e o j vão ser iguais a 0+0, 0+1, 0+2, etc. E vão ser comparados com k-0, k-1, k-2, etc.Note que os valores de x e y começam em zero, e aumentam em 1 a cada iteração do primeiro FOR. Mas existe uma outra variável que também está fazendo isso, que é o próprio t.
    Então em vez de usar x e y, você pode usar apenas o t.

    for (t=0; t<k; t++){ for (i=0 +t; i<k -t; i++) for (j=0 +t; j<k -t; j++) Mat[i][j] = aux + t; }É isso.
  10. O post de dontpanic em Ajuda - Funções foi marcado como solução   
    int // <--------------- tipo de retorno da função: INTareatotal(float base, float altura,  float quantap){    float  areapredial; // float    areapredial=base*altura*quantap;     return areapredial; // <-------------- retornando: FLOAT}
  11. O post de dontpanic em Escrever numeros inteiros em um arquivo txt em c: Como fazer? foi marcado como solução   
    Assim como você tem o printf e o scanf, você tem também fprintf e fscanf.
    Fazem a mesma coisa, mas com arquivos.
     
    fprintf (arquivo, "%d", inteiro);
  12. O post de dontpanic em trabalho de recuperaçao c++ foi marcado como solução   
    99% das vezes que alguém chega aqui falando que tem um trabalho pra amanhã e que a culpa é do professor, eles nem tem um compilador instalado.
    Faculdade não é segundo grau, amigo... Faculdade é um local de pesquisa. O professor tá alí só como orientador, pra dizer o conteúdo da matéria, fornecer material de estudo e pra avaliar o aluno.
     
    Se o professor não tá fazendo a parte dele de orientar o aluno, se tá colocando assuntos que fogem do escopo da matéria ou se simplesmente tá sendo um *****, daí sim você se junta com teus colegas e vão reclamar com o coordenador do curso.
     
    Mas quanto ao aprendizado, é o aluno quem tem que correr atrás. Material disponível é o que não falta. E se precisar de alguma ajuda específica no teu código, estamos aqui pra isso.
  13. O post de dontpanic em Programa em pascal foi marcado como solução   
    Teu programa tá correto.
    É que a parte do divisor da função dá zero mesmo as vezes.
    Pra consertar isso você pode tentar separar a função em dividendo e divisor, e testar se o divisor é diferente de zero a cada iteração.

    Program funcao;VAR F: Real; G: Real; x,y: integer; t: integer; Begin For x:= 1 to 10 do begin t := x*x; for y:= 0 to 5 do begin F := (t*t) + (3*t) + (y*y); G := (t*y) - (5*y) - (3*t) + 15; if (G <> 0) then writeln(F/G); end; end; End.
  14. O post de dontpanic em Cifra De Cesar foi marcado como solução   
    A = 97
    Z = 122
    Pelo que entendi, você quer que a tua função lide apenas com as 26 letras do alfabeto, certo?
    Tipo, se a letra for Z e a chave for 1, em vez de transformar o Z em "{" você quer transformar ele em "A", é isso?
    Considere A é igual a 1 e Z é igual a 26.
    Se a chave for igual a 1, em vez de transformar os caracteres em [C + 1], você pode transformar eles em [ (C+1) % 26 ].
    Desse modo, quando a chave for igual a 1 e o caractere a ser transformado for igual a Z, em vez de transformar ele em 27 (26 + 1), você transforma ele em 1 ((26+1) % 26).
    E pra pegar o valor dele na tabela ASCII, é só adicionar depois 97, que é o valor do primeiro caractere na tabela ('a').
    Então, isso:

    src[n] = src[n] + chave;Vira isso:
    src[n] = (src[n] - 97 + chave) % 26;src[n] = src[n] + 97;Na prática você não precisa transformar eles entre 1-26 pra depois somar 97.Você pode simplesmente pegar o modulo de 122. Dá no mesmo.
     

    src[n] = (src[n] + chave) % 122;Não testei o código aqui.
  15. O post de dontpanic em Algoritmo que lê N e calcula E foi marcado como solução   
    Normalmente quando existe uma questão que diz assim "faça tal coisa de 1 até N", esse N representa qualquer valor acima de 1.
    Tecnicamente a questão ficou confusa mesmo pois o professor não deixou isso claro.
     
    E = 1 + 1 / 1! + 1 / 2! + 1 / 3! + 1 / N!
     
    Por exemplo, se a pessoa ver a fórmula acima, então faz sentido mesmo que é só substituir N por um número qualquer e pronto.
    Mas na verdade o que o exercício quer dizer, é que a equação é diferente pra qualquer valor de N. Ou seja, se N for igual a 2, então fica assim:
     
    E = 1 + 1/1! + 1/2!
     
    Se N for igual a 5:
     
    E = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5!
     
    Se N for igual a 20:
     
    E = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! ...(não vou digitar tudo, heheh)... + 1/18! + 1/19! + 1/20!
     
    Considerando isso, a tua primeira resolução tá incorreta pois tá apenas substituindo o N por um número (mas se o professor digitou a questão exatamente daquele jeito, sem explicar que era uma sequência, daí você pode entregar aquela resolução só pra sacanear ele).
     
    A segunda resolução tá correta, mas tá incompleta. Você tá fazendo só o fatorial, mas não tá somando os elementos da sequencia.
    A lógica é a seguinte:
    Algoritmo "teste"var        soma: real        fatorial: real        n: inteiro        contador: inteiro inicio        soma <- 1;        Leia (n)         Para contador de 1 ate n passo 1 faça                // coloca aqui o teu codigo pra pegar o fatorial                soma <- soma + ( 1 / fatorial )        fimPara fimAlgoritmo
  16. O post de dontpanic em Ajuda! foi marcado como solução   
    A função de achar os caminhos fica bem legal se você ficar recursivamente:
     

    int caminho(int vetor[], int x, int y) { if (x < 0 || y < 0) return 0; else return vetor[x][y] + caminho(vetor, x-1, y-1) + caminho(vetor, x-1, y);}void preencheComZeros(int vetor[], int x, int y) { if (x < 0 || y < 0) return; vetor[x][y] = 0; preencherComZeros(vetor, x-1, y-1); preencherComZeros(vetor, x-1, y);}int melhorResultado(int vetor[], int max_x, int max_y) { int soma = 0; for (int i = max_x; i > 0; --i) { for (int j = 0; j < max_y; ++j) { if (caminho(vetor, i, j) > 0) { soma += caminho(vetor, i, j); preencheComZeros(vetor, i, j); j = -1; // reseta o segundo FOR } } } return soma;}É bem provável que o código acima esteja incorreto.Eu só fiz mesmo pra dar uma ideia... e porque achei esse problema legal.
  17. O post de dontpanic em Recursividade C. foi marcado como solução   
    Você consegue resolver isso daí com recursão, com árvores, com filas, etc.
    O jeito que eu pensei aqui agora foi usando uma pilha.
    Coloca o número que você quer testar no topo da pilha. Depois você pega o topo da pilha, testa se é menor ou igual a K. Se não for menor ou igual a k, divide esse numero em duas partes e adiciona de volta a pilha, pra serem testados de novo no próximo loop.
    Pra colocar isso num algoritmo, acho que ficaria assim:
     

    int count = 0;int K = 4;pilha.push(18);while (pilha.NaoVazia) { elem = pilha.pop(); if (elem <= K) { count++; } else { pilha.push( elem / 2 ); pilha.push( (elem / 2) + (elem % 2) ); }}Recursiva: 

    int x = 18;int k = 4;int count = 0;void recursv(int x) { if (x <= K) count++; else if (x % 2) { recursv(x/2); recursv(x/2); } else { recursv(x/2); recursv((x/2) +1); }}Edit:corrigi umas coisas.
  18. O post de dontpanic em Erro com o char de novo? foi marcado como solução   
    Tem uma coisa que eu não percebi, mas que eu vi agora quando compilei esse código:
    Naquele primeiro scanf você tá pegando o preço do produto e armazenando em "valor", mas aí na hora de calcular o preço por estado você tá usando "valorp".
    Basta tirar o "p" no final.
    Além disso, você não precisa fazer essas contas todas aí... 7% é o mesmo que 0.07, 12% é o mesmo que 0.12.
    precomg = valor * 0.07;
    precosp = valor * 0.12;
    precorj = valor * 0.15;
    precoms = valor * 0.08;
    E se quiser simplificar mais ainda, nem precisa dessas 4 variáveis... no próprio printf() você já pode passar esses valores aí.
    printf ("\n\nO preço final com imposto em Minas Gerais será de: R$ %0.2f. \n", (valor * 0.07));
  19. O post de dontpanic em Pilha funcionando, mas... foi marcado como solução   
    if(Empty(*Pilha)) printf("VAZIA");*Pilha=(*Pilha)->Prox; // Se a pilha estiver vazia, NULL = NULL->prox ?printf("%i\n", Tmp->valor);free(Tmp);Se a pilha estiver vazia, os comandos depois do if vão dar erro.Você precisa de um ELSE alí, ou de um return dentro do if.
  20. O post de dontpanic em Problema com algoritmo de moda foi marcado como solução   
    for (x = 0; x < q; x++) { contx = 1; for (y = q-1; y >= 0; y--) { if (x == y) { y--; if (a[x] == a[y]) ...No primeiro loop do FOR exterior, x vai ser igual a zero.No último loop do FOR interior, y também vai ser igual a zero.
    O primeiro IF vai dar true (0 == 0), em seguida você vai transformar o teu "y" em -1 (y--).
    Daí você vai estar acessando a[0] e a[-1] no segundo IF. Daí o erro.
  21. O post de dontpanic em Ajuda com Árvore binária - impressões bizarras foi marcado como solução   
    Mudei algumas coisas na definição das strings e rodou certo aqui:
    ...typedef struct No{    char palavra[20];    struct No *pEsq, *pDir;}TNo;TNo *pRaiz = NULL;TNo* Insercao(TNo *pRaiz, char* novaPalavra);int main(){    char exemplo1[20] = "aaabbb";    char exemplo2[20] = "aaaaaa";    char exemplo3[20] = "aaaccc";    ...    return 0;}TNo* Insercao(TNo *pRaiz, char* novaPalavra){    ...} Dependendo do compilador, string[10], string[] e *string, não resolvem pro mesmo tipo de variável e podem causar esses erros exotéricos.
    Como você tá lidando com strings fixas, é melhor seguir o mesmo padrão na hora de declarar e acessar elas.
     
    Além disso você tá esquecendo de liberar a memória daqueles mallocs no final do programa.
  22. O post de dontpanic em Programação C, Fila circular foi marcado como solução   
    No C, um nome é um array do tipo char, que é o mesmo que um "char*".
    Então pra passar o nome pra função você usa:
    armazena("maria");
     
    E pra receber ele na função você usa:
    int armazena(char* nome) { ... }
  23. O post de dontpanic em Spline *****bicos foi marcado como solução   
    Normalmente o teu compilador retorna o erro e a linha onde aconteceu o erro.
    Esse tipo de erro "expected (alguma-coisa) before (alguma coisa)" geralmente acontece quando a gente esquece um ponto e vírgula ou esquece de fechar o escopo de uma função.
     
    É só ir na linha lá onde deu o erro e consertar.
  24. O post de dontpanic em Ajuda no meu algoritmo. foi marcado como solução   
    ...    // aqui já pegou os valores de horaTrabalhada e valorHora do usuário         salarioBruto = (horaTrabalhada * valorHora);               if (salarioBruto <= 1.174,86)        {            aliquota = salarioBruto * 8.0/100;        }        else if (salarioBruto >= 1.174,86 || salarioBruto <= 1.958,10)        {            aliquota = salarioBruto * 9.0/100;        }        else if (salarioBruto >= 1.958,11 || salarioBruto <= 3.916,20)        {            aliquota = salarioBruto * 11.0/100;        }        else if (salarioBruto > 3.916,20)        {            aliquota = 456.86;        }        else        {            printf("Valor inválido.");        }         if (aliquota > 0) { // se a variável aliquota recebeu algum valor)            INSS = (aliquota * salarioBruto);            salarioLiquido = (salarioBruto - INSS);            printf("Seu Salário Líquido É: %f", salarioLiquido);        }        ...
  25. O post de dontpanic em Duvida em matriz[C] foi marcado como solução   
    l=m[1][5]%2Isso daí vai pegar o valor que está na linha 1 e coluna 5, vai ver se esse valor é par (0) ou impar (1) e guardar em l.Mas pelo que entendi, o que você quer é guardar em l os valores apenas de linhas pares, certo?
    Então considerando a matriz "m[LINHAS][COLUNAS]" você tem que testar se "LINHAS" é par ou não.
     

    for (int linhas = 0; linhas < 6; linhas++) for (int colunas = 0; colunas < 6; colunas++) if (linhas % 2 == 0) l = m[linhas][colunas];Esse é o método mais didádito.Um jeito mais prático seria simplesmente somar 2 ao número de linhas em cada iteração.
    Em vez de "linhas++" usa "linhas+=2". Daí nem precisa do IF.

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!