Ir para conteúdo
Fórum Script Brasil

bruce845

Membros
  • Total de itens

    81
  • Registro em

  • Última visita

Tudo que bruce845 postou

  1. Não sei exatamente como está o esquema da sua rede, mas você poderia colocar o modem em modo bridge e o seu roteador autenticar a conexão. Daí, você configura a DMZ apenas no roteador. Colocando o modem em modo bridge, a interface WAN do roteador receberá IP válido, não havendo dois NAT's ativados como parece estar pela sua descrição. Basta o NAT do roteador, do modem não precisa. Espero ter te ajudado.
  2. Saibam que não é uma boa prática misturar código HTML com código Java. A arquitetura MVC fala a respeito disso. Mas como faço para substituir os terríveis scriptlets? Nunca coloque links diretamente para JSP's. Sempre faça os links e formulários apontarem para uma servlet. Faça toda a implementação necessária na servlet e depois despache a requisição (vide RequestDispatcher) para uma JSP. Use as tags JSTL para fazer o necessário para mostrar os dados na tela. Espero ter ajudado com essas dicas.
  3. bruce845

    Tratamento de Exceções

    Para criar uma classe de exceção, você deverá herdar a classe Exception (java.lang.Exception) ou RuntimeException (java.lang.RuntimeException). Se você não herdar uma dessas classes, a classe nunca terá carcterísticas que uma exceção Java exige. Têm que ser alguma dessas duas classes porque elas que contém todos os métodos que uma exceção Java precisa ter (getMessage(), getStackTrace() entre outros). Espero ter ajudado.
  4. Amigo, estude mais sobre as Servlets, e você entenderá como usar os dados de um formulário que foi enviado. Use as servlets e procure evitar o uso de scriptlets em JSP. Envie a requisição primeiramente para uma Servlet, para depois redirecionar os dados para uma JSP. Espero ter ajudado.
  5. bruce845

    Maven + GWT

    Uma pena eu não saber mexer com Maven, mas a annotation @Override não é obrigatória, ela só serve para indicar que aquele método está sobrescrevendo outro. Essa annotation faz o Java verificar isso, mas ela pode ser muito bem retirada do código se estiver sendo incoveniente demais. Provavelmente deve ser um método que não está sobrescrevendo nenhum outro, nesse caso, basta retirar a annotation.
  6. Olha, eu não conheço nehuma api do Java que consiga ler arquivos do Excel. Porém, o que você pode fazer: Exportar os dados em formato "CSV separado por vírgulas" (Na hora de salvar a planilha no Excel, escolha "outros formatos" e selecione o "CSV separado por vírgulas"). Agora você irá fazer upload do arquivo CSV que você gerou (caso não saiba implementar o upload de arquivos, acesse esse tutorial). Após o upload do arquivo, você deverá usar uma API para ler o CSV (veja algumas aqui). Espero ter ajudado.
  7. Olá, tem como postar o conteúdo do log aqui? Reconfigure o Tomcat da maneira que você quer que ele funcione, rode e poste o log aqui. Se você estiver usando o Eclipse ou NetBeans, basta copiar o texto que aparecer (principalmente o que estiver em vermelho e as exceções que vierem a ocorrer). Senão, poste o que aparecer nos logs do Tomcat.
  8. Bem, não posso responder o exercício para você, mas se esse exercício se refere a scriptlets, vale lembrar que todas as JSP's contém a variável chamada request (HttpServletRequest) e session (HttpSession). Se você aprendeu a manipular essas variáveis em uma servlet, faça do mesmo jeito no scriptlet da JSP.
  9. Eu sei que o tópico é antigo, mas como não houve resposta até agora, acho que não tem problema deu postar a minha. No Java (não Javascript), quando você coloca o '\u' antes de algum número, ele procura o número na tabela de caracteres Unicode (UTF-8) e mostra o caracter correspondente. No seu exemplo, o que ele vai escrever na tela será a seguinte String: <iframe name="frete" width="480" height="407" src="http://www.look-tvs.com/yycast.php?canal=disney2" leftmargin=0 topmargin=0 marginWidth=1 marginHeight=0 frameBorder=0 scrolling=no> </iframe> Espero ter ajudado.
  10. Vai em Painel de Controle > Sistema > aba Hardware > Gerenciador de Dispositivos, opte por "Mostrar dispositivos ocultos" e vá va seção "Dispositivos que não são Plug and Play" e desative um driver chamado "HTTP". Após parar este driver, ele irá liberar a porta 80. Obs.: Você terá problemas ao usar a sua impressora. Caso necessite de imprimir algo, religue o serviço HTTP.
  11. Você pode achar inútil, mas quando você usar algum programa que necessite de um buffer em disco, um disco que tivesse a velocidade de uma memória RAM seria interessante nesses casos. Bem, para criar o driver, baixe o programa RamDisk RamDisk(150,4KB) URL alternativa Depois, extraia em algum lugar e execute o aplicativo "ramdisk.exe" e clique em "Install Ramdisk". Provavelmente poderá aparecer um aviso dizendo que o Windows não pôde verificar o editor do software. Opte por "instalar assim mesmo". O procedimento de instalação é feito apenas uma vez. Escolha o tamanho do driver virtual que não pode ultrapassar o tamanho da sua RAM e a letra na qual deseja atribuir o driver e clique em OK (ou apply), caso queira transaformar em MB, acrescente M ao final do número! No campo "Media Type", se escolher "RAM Drive", ele irá identificar o driver como um "Disco RAM", aparecendo com um ícone diferente na pasta "Meu Computador". Nesta maneira não é permitido trocar o sistema de arquivos. Se escolher "Fixed Media", ele simulará um HD e irá aparecer em "Meu Computador" como um HD. Se escolher "Remobable Media", ele simulará um pendrive e irá aparecer em "Meu Computador" como um pendrive. Obviamente ele ocupa a memória RAM de seu computador. Veja muito bem o tamanho antes de adicionar o driver. Mais infomações aqui.
  12. Bem, %i é o mesmo que %d (inteiro). O "l" junto ao i qualifica como um tipo de dado "long int" (ou simplismente "long") e para exibição, o 07 mostra obrigatoriamente 7 números, sendo que as casas vazias ele preencherá com 0. Ex.: long int numero = 5; printf("%07li",numero); // Irá mostrar 00000005. Espero ter ajudado!
  13. Olha, apesar do C++ ser mais evoluído que C, ainda contém uns incovenientes do C que precisam um pouco mais da nossa atenção. Existe um incoveniente em C++ em relação ao Java, que tudo alocado deve ser liberado da memóra (note que em C++ não existe o "Garbage Collector"). Declarações de array em C++ alocadas dinamicamente (com o uso do operador new) devem ser declaradas desta forma: Exemplo de um array de inteiros: int *vetor = new int[30]; Obs.: Diferentemente do Java, array em C++ não é um objeto, mas uma simples sequência de dados em memória (como no C). O seu método/função, deve retornar um ponteiro da posição inicial do array. No seu exemplo, ficaria assim: int *returnProc(bool *procb){ // Ao invés de int[], coloque int *. int aux1 =0, aux2 = 0; int *resp = new int[2]; // Ao invés de resp[], coloque *resp. ... resp[0] = aux1; resp[1] = aux2; return resp; } Para alguma variável receber o retorno dessa função, esta deve ser declarada com int* (ponteiro de int). Estude um pouco mais sobre ponteiros e matrizes na linguagem C. E será muito bom você postar as suas tentativas aqui, aí nós consertamos :D .
  14. Quero lhes apresentar esse software que pode não chegar nem perto do Skype, mas a forma que ele envia vídeo e áudio entre computadores da mesma LAN pode ser interessante e ainda mais de código aberto. O programa se chama MyPhone, que é tipo um Skype só que é somente para lan e exige que você digite o endereço IP do outro computador para que possa falar com a outra pessoa, é equivalente ao antigo NetMeeting. Se alguém estiver interessado em seu código, ele foi feito em C++. Se alguém quiser passar o programa para Java (não sei se tem como), poste aqui. Página do desenvolvedor Download MyPhone Download SourceCode MyPhone Download SourceCode MyPhone Linux
  15. Olá, meu nome é Bruce, tenho 19 anos, estou estudando Ciências da Computação. Estou aprendendo as linguagens Java e C++, e desejo me aperfeiçoar em programação. Tenho muito interesse em aprender a programar com a API do Windows para C/C++, mas não acho em lugar algum. Se alguém achar tutoriais, apostilas ou outro material que possa me ajudar, me repasse! Não tenho certeza se vou seguir a área da programação, pois não sei como são as outras áreas. Espero que a minha contribuição neste fórum esteja ajudando a edificar os nossos conhecimentos. Agradeço ao fórum por estar auxiliando em minha aprendizagem.
  16. Amigo, você apenas declarou a sobrecarga dos operadores ++ e -- sem usá-los. Para sobrecarregar os operadores de incremento e decremento, deve-se fazer da seguinte maneira: Deve se declarar assim: void operator++(void) Recebendo parâmetro void (o retorno pode ser definido por você), se você quiser sobrecarregar o pré-incremento: ++a Agora para sobrecarregar o pós-incremento, você deve declarar assim: void operator++(int numero) Recebendo um inteiro como parâmetro (o retorno pode ser definido por você) para que seja utilizado o pré-incremento: a++ O mesmo vale para o decremento. Obs.: Não são todos os compiladores que permitem sobrecarregar os operadores de incremento e decremento (nota de alguns livros). Outra: Jamais retorne uma referência de variáveis criadas dentro de funções (a última mensagem do compilador postada por você refere-se a isso) e atributos privados da classe. Uma vez retornada uma referência de variáveis locais de uma função, corre o risco de alguém manipular o endereço de memória da variável, que está destruída porque a função não está executando. Quanto aos atributos privados, você dá a rotinas externas ao objeto o poder de acessar o atrubuto do seu objeto, o que jamais pode acontecer! Espero ter ajudado!
  17. Bem, sua correção pelo que vi apenas usou a função getchar() da biblioteca stdio.h (que utiliza o buffer), ao invés da getch() da biblioteca conio.h (que apenas pressionando a tecla, ele retorna o caracter). Não entendi quais erros que você achou no meu programa mas td bem. Para quem ver esses tópicos e não estiver entendendo nada, vale lembrar que todo char no fundo armazena um inteiro, e esse inteiro equivale ao código ASCII do caracter armazenado. Para mostrar o caracter correspondente (no caso da printf()), basta dizer à printf() que se tratará de um inteiro. Ex.: char letra = 'a'; printf("%d\n",letra); Agora nos métodos de E/S de C++, basta converter o tipo char para int com um cast: Ex.: char letra = 'a'; cout << (int)letra << endl; Códigos ASCII úteis: Tecla ESC = 27; a - z (minúsculo) = 97 - 122; A - Z (maiúsculo) = 65 - 90; '\n' (caracter de pular-linha) = 10; Obs.: Os caracteres precedidos de uma barra ('\n','\r',etc.) são considerados um único caracter.
  18. Eu montei um programinha que fornece o código ASCII da tecla digitada e descobre o caracter correspondente do código ASCII digitado. Bem, acho que pode ser útil também. #include <stdio.h> #include <ctype.h> #include <conio.h> int main(int argc,char **argv) { char letra; while(1) { puts("1 - Descobrir o codigo ASCII da tecla pressionada;"); puts("2 - Descobrir o caracter correspondente do codigo ASCII digitado."); puts("ESC - Sair do programa."); switch(getch()) { case '1':system("cls"); puts("Digite a tecla:"); printf("Em ASCII: %d\n",getch()); system("pause"); break; case '2':system("cls"); puts("Digite o codigo ASCII:"); scanf("%d",&letra); system("cls"); if(!isprint(letra)) { puts("Esse caracter não pode ser impresso na tela."); } else printf("O codigo %d corresponde ao caracter %c.\n",letra,letra); system("pause"); break; case 27:return 0; default:putchar('\a'); } system("cls"); } getch(); return 0; } [/codebox]
  19. Amigo, é o seguinte: Não sei se você sabe ponteiro de ponteiro, mas eu usei em seu programa para caso a lista esteja vazia, a sua função adicionar o elemento que irá estar na cabeça. É o seguinte, você estava tentando percorrer uma lista que estava apontando para NULL e a função insere sempre retornava o ponteiro do novo elemento, mas com o retorno da função você estava atribuindo na variável que tinha que guardar a cabeça da lista. Aí a variável lista guardava o ponteiro do elemento que você acabava de inserir, perdendo o resto da lista. Eu remodelei o su programa e ao invés de usar o nome definido por você no typedef, eu usei o nome da struct mesmo, mas isso não interfere em nada. Eis as minhas correções: #include <stdio.h> #include <stdlib.h> struct Ponto { int x; int y; struct Ponto *prox; }; void insere(struct Ponto **lista, int x, int y) { struct Ponto *novo = (struct Ponto *)malloc(sizeof(struct Ponto)); struct Ponto *temporario = *lista; // Nunca mexa no ponteiro que aponta para a cabeça da lista! novo->x = x; novo->y = y; novo->prox = NULL; // O prox da célula que você acabou de criar têm que apontar para NULL. if(*lista==NULL) // Se não houver lista, a célula recém-criada deve encabeçar a lista. { *lista = novo; } else { while(temporario->prox!=NULL) //Use um ponteiro temporário para percorrer a lista. temporario = temporario->prox; temporario->prox = novo; // Aí o prox da última célula da lista têm que apontar para a célula recém-criada! } return; // A função não necessita de retorno. } void mostrarlista(struct Ponto *lista) { struct Ponto *p; int i = 0; for (p = lista; p != NULL; p=p->prox) { ++i; printf("\n\nPonto %d: x [ %d ] = %d \n y [ %d ] = %d",i,i,p->x,i,p->y); } } int main(int argc,char **argv) { struct Ponto *lista; lista = NULL; insere(&lista,1,2); insere(&lista,3,4); mostrarlista(lista); system("pause"); free(lista); return 0; } [/codebox] Espero ter ajudado!
  20. Como todos os outros disseram, o nome da função tem que ser minúscula. int a; float x; scanf("%s",&a); printf("a resposta é %s",a); Você está tentando atribuir uma string a uma variável no scanf() e no printf() você está tentando mostrar uma string, sendo que a variável é float. Substitua o %s no scanf() por %d(porque você quer ler um inteiro) e coloque um %f no printf(), pois o que você está tentando mostrar é um float. Outra coisa: Como todos os outros dissram, inclua a biblioteca <math.h> E um outro detalhe: TODAS as funções da biblioteca math.h (incluindo a sqrt()) recebem como parâmetro um double e também retornam um tipo double, portanto, ao lidar com essas funções, use somente variáveis do tipo double para não acontecer imprevistos. Bem, reescrevendo o seu código, ele ficará assim: #include <stdio.h> #include <conio.h> #include <math.h> // Inclua essa biblioteca! void main(void) { double x; double a; printf("Digite o numero da potencia:"); scanf("%lf",&a); // Use %lf para ler double. x=sqrt(a); printf("A resposta é: %lf",x); getch(); } Espero ter ajudado!
  21. Olha, para fazer esse tipo de validação, devemos ver como a scanf() funciona. A scanf() retorna a quantidade de variáveis que ela conseguiu ler. Ex.: int teste; scanf("%d",&teste); Se você digitar um número inteiro, ela retornará 1, caso contrário, a scanf retornará 0. Mas vale esclarecer o seguinte: A scanf() foi projetada para ler sequencialmente o que você digitar. Ex.: int teste; scanf("%d",&teste); Se você digitar "123abc", ele irá guardar "123" na variável teste e irá descartar o "abc". Como a scanf() conseguiu atribuiu o número, ele retornará 1 dizendo que conseguiu ler a variável. Agora se você digitar "abc123", como a scanf() lê sequencialmene o que você digita, ele irá ver que o primiro dado se trata de uma string e não guardará nada na variável teste e retornará 0 dizendo que não conseguiu ler. Um outro caso especial: Se no exemplo acima você digitar 10.5, a scanf() vai ler o número inteiro antes do ponto, atrubuindo-o na variável teste e retornará 1. Então, a scanf() tem retorno do tipo int e retorna 1 (se ela estiver lendo apenas uma variável, ela pode ler mais) se ela conseguiu ler o dado digitado e 0 se não conseguiu ler (usuário digitou um dado inválido). Agora um exemplo de validação com a scanf(): int teste = -1; int valido = 1; do { valido = scanf("%d",&teste); fflush(stdin); // Sempre limpe o buffer para realizar uma nova leitura. if(!valido) puts("Dado invalido!"); }while(!valido); Caso o usuário digite um dado inválido (uma string por exemplo), ele irá invalidar! Espero ter ajudado! Vejam mais sobre a scanf() clicando aqui.
  22. Se estancia assim: // Suponha que exista uma classe chamada Lista: Lista<tipo que quer estanciar o objeto> lista; ou usando ponteiros: // Suponha que exista uma classe chamada Lista: Lista<tipo que quer estanciar o objeto> *lista = new Lista<tipo que quer estanciar o objeto>; Exemplos: // Suponha que exista uma classe chamada Lista: Lista<double> lista1; Lista<double> *lista2 = new Lista<double>; Lista<double> &lista3 = *new Lista<double>; Sempre que você se referir a uma classe com template, você deverá especificar o tipo de dado que ela estiver recebendo. Ex.: Classe<tipo_de_dado> Espero ter ajudado!
  23. char frase[100]; scanf("%s",frase); Olá, "CPP"! Do jeito que você colocou a scanf() para ler a string frase, a scanf() guardará na string da seguinte maneira: Suponha que você digitou: CPP e o melhor! O scanf() guardará na string apenas: CPP O resto da string ele irá ignorar porque a scanf entende o espaço termina a string. Para ela ler toda a frase, a scanf deverá ignorar o espaço. Ex.: char frase[100]; scanf("%[^\n]s",frase); Aí ele guardará a frase toda na string. Espero ter ajudado!
  24. bruce845

    [Ajuda] Struturas

    Crie uma variável ponteiro de long int e atribua a ela o endereço de raiz->item->ISBN. Assim você irá acessar o seu conteúdo sem problemas. Aí ao invés de ficar assim: else if(l->ISBN > raiz->item->ISBN) { return busca(raiz->dir, l); } Vai ficar assim: long int *valor_chave = &raiz->item->ISBN; else if(l->ISBN > *valor_chave) { return busca(raiz->dir, l); }
  25. bruce845

    Ajuda em codigo simples

    O que acontece: Como você colocou n++ no construtor e esse método é acionado sempre quando você cria um objeto. Quando você declarou o vetor de objetos, TODOS OS 10 OBJETOS FORAM CRIADOS NA MEMÓRIA INDEPENDENTEMENTE DE VOCÊ TER CADASTRADO O ALUNO. Aí o n que iniciou com 0, ao declarar o vetor de objetos, ele acionou o método construtor 10 vezes e depois criou um outro objeto chamado x, executando mais uma vez o método construtor. O certo não seria incrementar no método construtor, mas sim após inserir os dados do aluno. Espero ter ajudado!
×
×
  • Criar Novo...