
j4m35_b0nd
Membros-
Total de itens
36 -
Registro em
-
Última visita
Tudo que j4m35_b0nd postou
-
Pessoal. Uma ajudinha por favor. Eu criei uma classe que herda o TFileStream. No create da minha classe eu escrevo algumas coisas dentro do arquivo carregado, incluíndo o nome de um outro arquivo da seguinte forma: Quando eu quero ler o nome de arquivo gravado, eu faço o seguinte Quando eu instancio a minha classe criando um arquivo (fmCreate) pela primeira vez, eu consigo ler o nome gravado dentro dele sem problemas. Porém, quando eu instancio a minha classe abrindo para leitura (fmCreate) um arquivo criado anteriormente, ele não retorna o nome correto do arquivo (retorna coisas como "Arquivo de saoArquivo", ou então "Arquivo de"). Alguém sabe me dizer o que eu fiz de errado?
-
(Resolvido) Identificar teclas pressionadas
pergunta respondeu ao j4m35_b0nd de j4m35_b0nd em C, C++
Mesmo você não encontrando algo específico para isso, agradeço por ter tentado. Para consultas futuras, segue todas as teclas que consegui identificar através dessa solução improvisada. char tecla; tecla = getch(); if (tecla == -32){ tecla = getch(); switch(tecla){ case 82: // INSERT break; case 71: // HOME break; case 73: // PAGE UP break; case 83: // DELETE break; case 79: // END break; case 81: // PAGE DOWN break; case 75: //Seta para esquerda break; case 72: //Seta para cima break; case 77: //Seta para direita break; case 80: //Seta para baixo break; case -123: // F11 break; case -122: // F12 break; case 139: // ALT + F11 break; case 140: // ALT + F12 break; } } else if (tecla == NULL){ tecla = getch(); switch(tecla){ case 59: // F1 break; case 60: // F2 break; case 61: // F3 break; case 62: // F4 break; case 63: // F5 break; case 64: // F6 break; case 65: // F7 break; case 66: // F8 break; case 67: // F9 break; case 68: // F10 break; case 104: // ALT + F1 break; case 105: // ALT + F2 break; case 106: // ALT + F3 break; case 107: // ALT + F4 break; case 108: // ALT + F5 break; case 109: // ALT + F6 break; case 110: // ALT + F7 break; case 111: // ALT + F8 break; case 112: // ALT + F9 break; case 113: // ALT + F10 break; } } else{ // Todas as opções abaixo possuem valor na tabela ASCII, assim como letras e números. switch(tecla){ case 9: // TAB break; case 27: // ESC break; case 8: // BACKSPACE break; case 13: // ENTER break; case 1: // CONTROL + A break; case 26: // CONTROL + Z break; case 24: // CONTROL + X break; case 3: // CONTROL + C break; case 22: // CONTROL + V break; case 32: // BARRA DE ESPAÇOS break; } } -
Acho que está tudo esclarecido já. Podem fechar o tópico.
-
Eu usarei o realloc, pois desconheço uma lista encadeada. Eu até posso fazer um contador, mas acredito que daria muito trabalho. Estou desenvolvendo um editor de texto para a faculdade, e minha idéia é alocar posições na memória correspondentes a cada linha de texto, e, para cada linha, alocar posições para caracteres. Para mover o cursor, eu preciso saber o tamanho da linha em que ele está. Se eu fizer um contador, terei que fazer um contador para cada linha, e como não sei quantas linhas serão, terei que usar alocação dinâmica também para criar um vetor, onde cada posição corresponda a uma linha do texto, e em cada uma de suas posições, terei um contador diferente. Se ouver uma forma de saber a quantidade de memória alocada, eu posso dividir o tamanho da memória alocada, que vai ser N x CHAR, por 1 x CHAR. Acredito que, se isso for possível de ser feito, é bem mais simples do que gerar um vetor apenas para contadores. Caso não aja forma de fazer isso, ai farei os vários contadores individuais. PS: Eu agradeço se você puder me explicar o que é lista encadeada.
-
Olá. Estou usando alocação dinâmica de memória para criar, e ampliar conforme a necessidade, um vetor. Como não poderei fazer um contador para saber quantas posições tem esse vetor, minha intenção era fazer algo do tipo: tamanho_do_vetor = sizeof(ponteiro_para_o_vetor) / sizeof(tipo_de_variavel_do_vetor) Não consegui fazer conforme o exemplo acima. sizeof(ponteiro) retorna 4 (acredito que seja o tamanho do ponteiro) sizeof(*ponteiro) retorna o mesmo que sizeof(tipo_de_variavel_do_vetor) Alguém sabe o que posso fazer para saber o tamanho do vetor alocado? Obrigado.
-
(Resolvido) Identificar teclas pressionadas
pergunta respondeu ao j4m35_b0nd de j4m35_b0nd em C, C++
Encontrei uma solução improvisada que funcionou bem. tecla = getch(); if (tecla == -32){ tecla = getch(); /*Aqui faço a busca pelo atual número que está na variável tecla e verifico a qual tecla ele corresponde */ } Para as teclas que não são padronizadas pela tabela ASCII, a função getch() era executada 2 vezes seguidas, inserindo o valor -32 ou então NULL, e depois era inserido um número pertencente a outra tecla na tabela ascii. Essa solução que encontrei na internet resolveu o problema, e então dou por resolvido o meu próprio problema. -
Olá pessoal. Alguém sabe com identificar as teclas pressionadas no teclado? Eu estou desenvolvendo um editor de texto bem simples, sem interface gráfica, e preciso identificar teclas especiais que são pressionadas. Através da tabela ASC II, consegui identificar as teclas TAB, BARRA DE ESPAÇOS, BACKSPACE e ENTER, mas não consigo identificar as SETAS DIRECIONAIS, nem as teclas HOME, INSERT, PAGE UP, PAGE DOWN, END e DELETE. Alguém tem idéia de como proceder? Obrigado.
-
Obrigado por reabrir o tópico Jonathan. O código ainda é o mesmo que está postado. Também fiz umas alterações para testar a função free(); Com as alterações que fiz para teste, ficou assim #include <stdio.h> #include <conio.h> void erro(){ printf("Memória insuficiente para continuar\nO programa será encerrado\n"); printf("\nPressione uma tecla para encerrar."); getch(); exit(1); } int main(int argc, char *argv[]){ //Aplicativa inicia usando 384KB de mémoria char op; short int ver; long long int qnt=0; double *x=0, *y=0, valor_x, valor_y; do{//Laço do while infinito //Início de "Le valores X e Y" printf("X%d = ",qnt); scanf("%lf",&valor_x); printf("Y%d = ",qnt); scanf("%lf",&valor_y); qnt++;//Qnt de linhas que tem minha tabela //Fim de "Le valores X e Y" /* printf("Deseja inserir mais dados?\nDigite:\n"); do{ printf("[S] - Sim\n"); printf("[N] - Não\n"); op = getche(); printf("\n"); ver=((op!='s')&&(op!='S')&&(op!='n')&&(op!='N')); if (ver){ printf("Opção inválida. Digite novamente.\n"); } }while(ver); */ //Início da rotina que aumenta uma posição nos vetores if (x){ x=(double*)realloc(x,qnt*sizeof(double)); y=(double*)realloc(y,qnt*sizeof(double)); if (!(x&&y)) erro(); } else{ x=(double*)malloc(1); y=(double*)malloc(1); if (!(x&&y)) erro(); } //Fim da rotina que aumenta uma posição nos vetores x[qnt-1]=valor_x; y[qnt-1]=valor_y; //}while((op=='s')||(op=='S')); }while(qnt<50000); //Após 100.000 posições (50.000 para X e 50.000 para Y), a memória vai para 1.520KB getch(); free(x); free(y); //Após uso dessas funções, o uso cai para 1.128KB printf("\nPressione uma tecla para encerrar o programa.\n"); getch(); return 0; } Eu achei que, após liberar a memória com free(), o uso voltaria para algo próximo dos 384KB iniciais. Mesmo assm, diminuiu um pouco o uso após a função liberar memória
-
Desculpe-me a demora para responder. Meu computador está apresentando problemas. Para testar, eu inseri 100.000 (cem mil) elementos no array. Após usar a função free(), pelo menos através do gerenciador de tarefas do windows, o uso de memória não diminuiu.
-
Já voltei. Não consegui usar a função free() que você mencionou. Pelo menos acho que não. Eu observo o Gerenciador de tarefas do Windows para ver o uso de memória RAM do programa. No código que mandei, coloquei o seguinte. free(x); free(y); Após a execução dessas instruções, o uso de memória continua o mesmo. Será que eu estou usando a função de forma errada, ou estou vendo errado o gerenciador de tarefas?
-
Sim, o retorno é um ponteiro para void. Em C ao tentar atribuir uma variável que foi declarada como int* (ponteiro para inteiro, como no código que postei) para void* (ponteiro para void, que é o retorno da função malloc) o compilador faz uma conversão implícita. Ou seja, ele converte de um tipo para o outro sem que o programador tenha que fazer nada. Mas em C++ não há essa conversão implícita e o programador precisa fazê-la de forma explícita, colocando um casting. Portanto, na instrução (int*) estávamos simplesmente convertendo um void* para um int*. Como você está compilando em C não há problemas, mas eu gosto sempre de fazer a conversão explícita. Vou marcar o tópico como Resolvido. Qualquer coisa posta aí ! Edit: Achei um pequeno problema no seu programa. Olhe essa linha: if (!(x||y)) Você fez isso para verificar se a memória pôde ser realmente alocada. No entanto, o operador or irá ter resultado verdadeiro se pelo menos um valor for verdadeiro, ou seja, se alguma das duas alocações teve êxito. Mas esse valor é invertido pelo not e a função erro será chamada se e somente se nenhuma das alocações tiver êxito, mas o ideal é que a função seja chamada se qualquer uma alocação não for feita. Então o correto é assim: if (!(x&&y)) Ou: if ((!x) || (!y)) Mas não cheguei a analisar seu código completo. Muito obrigado por toda a ajuda.
-
Seu exemplo foi excelente. Era exatamente isso que eu estava tentando fazer e não conseguia. Eu só não entendi uma coisa nas linhas acima. O que significa o "(int*)". Você poderia, por favor, me explicar? Muito obrigado. Como prometido, segue o que eu estava tentando fazer. Agora está funcionando. Usei o que você me ensinou e também algumas coisas que li na internet sobre alocação dinâmica de memória. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <math.h> void erro(){ printf("Memória insuficiente para continuar\nO programa será encerrado\n"); printf("\nPressione uma tecla para encerrar."); getch(); exit(1); } int main(int argc, char *argv[]){ char op; short int ver; long long int qnt=0; double *x=0, *y=0, valor_x, valor_y; do{//Laço do while infinito //Início de "Le valores X e Y" printf("X%d = ",qnt); scanf("%lf",&valor_x); printf("Y%d = ",qnt); scanf("%lf",&valor_y); qnt++;//Qnt de linhas que tem minha tabela //Fim de "Le valores X e Y" printf("Deseja inserir mais dados?\nDigite:\n"); do{ printf("[S] - Sim\n"); printf("[N] - Não\n"); op = getche(); printf("\n"); ver=((op!='s')&&(op!='S')&&(op!='n')&&(op!='N')); if (ver){ printf("Opção inválida. Digite novamente.\n"); } }while(ver); //Início da rotina que aumenta uma posição nos vetores if (x){ x=(double*)realloc(x,qnt*sizeof(double)); y=(double*)realloc(y,qnt*sizeof(double)); if (!(x||y)) erro(); } else{ x=(double*)malloc(1); y=(double*)malloc(1); if (!(x||y)) erro(); } //Fim da rotina que aumenta uma posição nos vetores x[qnt-1]=valor_x; y[qnt-1]=valor_y; }while((op=='s')||(op=='S')); printf("\nPressione uma tecla para encerrar o programa.\n"); getch(); return 1; }
-
Cara, to levando uma surra dessas funções. Não consegui aumentar minha matriz com ela. Será que você pode me dar um exemplo?
-
Estou usando C puro. Edito e compilo através do Dev C++. Comecei a aprender ponteiros recentemente. Acho que dá pra levar. Obrigado pela ajuda.
-
Essas funções parecem ser realmente o que eu estava procurando. Com elas, eu posso inserir novas posições em um vetor sempre que for necessário? Exemplo: Tenho um vetor de 1 posição inicial. Se o usuário for digitar um segundo valor, elas alocam uma segunda posição no vetor. Se o usuário for digitar um terceiro valor, elas alocam uma terceira posição no vetor. E assim sucessivamente, enquanto o usuário precisar. Obrigado.
-
Olá pessoal. Estou aprendendo C e cheguei em um problema que não sei como resolver. Meu programa irá receber dados de uma tabela com duas colunas. Uma coluna com valores de X e outra com o valor Y correspondente. A minha intenção era usar matriz, só que não sei quantos valores de X o usuário irá digitar. O que posso fazer para armazenar uma quantidade indeterminada de números, dos quais todos serão usados pelo programa, sem usar mais ou menos espaço do que o necessário? Por favor, me ajudem com isso.
-
Olá pessoal. Estou aprendendo a linguagem C e gostaria de ajuda numa coisa que imagino deve ser simples (pra mim ainda é difícil). Eu gostaria de saber como formatar a exibição de um número decimal desprezando zeros após a virgula do seguinte modo: Formatar o número "8.754000" e exibi-lo como "8.754". Eu quero retirar apenas os zeros após a virgula e não formatar com "%.3f". Obrigado pela atenção de todos.
-
Olá. Estou enroscado nas macros do excel. Eu criei uma planilha simples onde eu coloco datas em uma coluna e valores correspondentes em outra. O que eu gostaria de fazer agora é automatiza-la. Eu quero que, através de função ou macro, seja excluída as linhas com valores antigos e adicione novas linhas no lugar. Algorítimo possível. Verificar se data da primeira célula é menor que data X Se SIM, excluír linha correspondente, inserir nova linha em branco, verificar próxima célula Obrigado
-
funcionou sim, valeu.
-
Gente, vejam se vocês podem me ajudar com isso. Eu estou fazendo um programa que cria numerações em série e até agora ele vai muito bem. O que eu queria fazer que não estou conseguindo é completar com zeros a esquerda dos números. Por exemplo: Transformar 8, 9, 10, 11, 12 em 08, 09, 10, 11, 12 ou 008, 009, 010, 011 etc o número de zeros a esquerda é variável. Alguém sabe como eu posso fazer?
-
Alguém sabe como executar um arquivo que não se sabe onde pode estar? Vou tentar exemplificar. Eu fiz um programinha para que se escolha um player de vídeo que terá seu endereço gravado como uma variável e depois clicando em um botão, ele executa o vídeo no player escolhido. Parece uma coisa inútil, mas tem algumas vantagens, só que a questão é que eu tentei usar o commando Shell para chamar o player e o vídeo só que não consegui pois tenho que chama-los através de variáveis. Alguém sabe de qualquer coisa que eu possa fazer para resolver esse problema? Atenciosamente, j4m35_b0nd
-
Pra mim, é codificar uma pasta de forma que seu conteúdo se torne inacessível.
-
Alguém sabe se tem como criptografar uma pasta usando o Visual Basic?
-
Alguém sabe como fazer pra transformar um texto em hexadecimal pelo VB? Tem alguma função que faça o serviço ou eu tenho que substituir caracter por caracter? Outra coisa. Alguém sabe se tem como tirar as quebras de linha de um texto, ou seja, fazer todo o texto ficar em uma linha só até onde as Text Box não suportarem mais?
-
Mais ou menos. o dirlistbox e o filelistbox no visual basic são listboxs. E cada item da lista corresponde a uma pasta pro dirlistbox e a um arquivo pro filelistbox de um diretório que esteja rodando. Por exemplo: Se o diretório que estiver como path for o Meus Documentos, no DirListBox vai aparecer as pastas que estão no Meus Documentos, como Minhas Imagens, Minhas Webs, etc. No FileListBox vai aparecer os arquivos, como documentos, planilhas, etc. Daí, se você clicar em uma das pastas do DirListBox, ele faz dessa pasta como path, e mostra as subpastas dele, e o FileListBox, muda também o diretório e mostra os arquivos da nova pasta selecionada. Era isso que eu tava tentando fazer, mas não sei se da. Se souber de alguma forma parecida com o que eu coloquei ai, se você entender a confusão que eu fiz ali em cima. Mesmo assim valeu pela ajuda.