Ir para conteúdo
Fórum Script Brasil

kuroi

Membros
  • Total de itens

    7.184
  • Registro em

  • Última visita

Tudo que kuroi postou

  1. kuroi

    Loop infinito:

    Fazendo contagem de um em um?? Não, isso levaria horas, talvez dias. Preencher com números grandes deve ser um modo bem trabalhoso pra estourar a memória. Deve ser muito mais simples alocar explicitamente logo de uma vez um espaço bem grande a ponto de tomar toda a memória livre... a não ser que o SO tenha alguma proteção contra isso. Hum... fiquei interessado em testar, qualquer dia eu tento. Agora, ocupar toda a memória não deve causar dano nenhum ao hardware, caso tenha sido que você tenha imaginado ao dizer que o código fritaria o computador.
  2. kuroi

    Loop infinito:

    Na verdade, acho que o limite da variável int é 2147483647. Na verdade, vai de -2147483648 até 2147483647. Se quiser declarar como unsigned int, aí vai de 0 a 4294967296. Em sistemas de 64 bits, uma variável do tipo long long deve guardar valores equivalentes ao de uma int elevado ao quadrado (ou seja, 4294967296 elevado a 2 -- o que deve ser um número de 21 dígitos). Se quiser trabalhar com números ainda maiores ou infinitos, vai ter que usar uma biblioteca própria pra isso. Aqui tem uns exemplos de umas que devem servir pra você: http://gmplib.org/ http://www.tc.umn.edu/~ringx004/mapm-main.html https://mattmccutchen.net/bigint/ http://www.codeproject.com/Articles/1202/A...Integer-Numbers
  3. Strings são mais complicadas de mexer, porque ela própria jé é um ponteiro. Pra copiar strings, só usando a função strcpy(), ou fazendo sua própria função pra copiar strings. Pra variar, dexa eu postar mais umas das minhas explicações de 1000 linhas desnecessárias... Bom, toda string, todo array também são ponteiros. Isso é um ponteiro: char *Carro; Isso é outro ponteiro: char carro[8] Isso também é um ponteiro, temporário: "Corsa" Um ponteiro nada mais é que uma variável que guarda uma posição de memória. É um simples número inteiro. Por exemplo, o ponteiro Carro pode ter lá dentro um valor igual a 12345. Isso significa que ele aponta para a posição 12345 da memória. E lá na posição 12345 da memória é que você pode ter uma texto qualquer, por exemplo "Kadett". O ponteiro serve para apontar para esse endereço. Se eu usar a variável Carro diretamente, estou acessando o valor desse ponteiro. Se usar a variável *Carro adicionando o asterisco na frente, estou acessando o valor na posição de memória a que esse ponteiro aponta. Percebeu a diferença?? Exemplo: int x = 5; int *y; y = &x; //Aponto y para a posição de memória onde está x. //Sem asterisco -- vai mostrar a posição de memória onde está a variável x: printf("O ponteiro Y aponta para a seguinte posição da memória: %d\n", y); //Com asterisco -- vai mostrar valor 5: printf("Na posição de memória pra que Y aponta tenho o seguinte valor: %d\n", *y);.[/code] Se não me engano, nem todos os compiladores aceitam o primeiro printf() do código acima (talvez convertendo pra int), mas o importante era ilustrar pra você entender. Note também que quando você fez isso: [code]Carro = carro; Você não precisou usar o operador & na variável carro, pois ela prória já é um ponteiro. Ou seja, escrevendo somente carro, você já consegue encontrar a posição onde está sua string. Sendo assim, quando faço isso: *Carro = {"Corsa"}; Que, pra simplifcar, e como não tenho certeza se aquelas chaves chegam a afetar (e a não ser que alguém me corrija, recomendo que não as use), escreverei assim: *Carro = "Corsa"; Note que "Corsa" também é um ponteiro, porém temporário. Quando você escreve "Corsa", você não está acessando diretamente o texto "Corsa", e sim um ponteiro que aponta pra um outro local na memória onde está escrito "Corsa". Sendo assim, "Corsa" não vai retornar pra você uma string, e sim um ponteiro, um número inteiro. Por outro lado, *Carro, com asterisco, vai te levar diretamente para a posição da memória onde está o texto pra que esse ponteiro aponta. Ou seja, a linha de código acima vai tentar copiar um ponteiro pra dentro da string -- ou um número pra dentro de um texto. O que seria possível somente com as devidas conversões, mas não ia levar ao resultado que você quer. O que você quer seria fazer o ponteiro Carro levar ao texto "Corsa", correto?? O único jeito de fazer é isso, é copiar caractere por caractere da string origem (o texto "Corsa") para a string destino (o ponteiro Carro). Por sorte, já existe uma função que faz isso pra você. Ela se chama strcpy() e encontra-se dentro de "string.h", veja: http://www.cplusplus.com/reference/clibrary/cstring/strcpy/ Note que o código abaixo, aparentemente funcionaria, pois você faria o ponteiro Carro apontar diretamente para o ponteiro onde está "Corsa": Carro = "Corsa"; Mas este código não é eficaz e pode trazer seríssimos problemas, pois como eu já disse antes, "Corsa" é uma string temporária. Ela dura somente enquanto a instrução estiver sendo executada e é liberada da memória logo depois. Ou seja, seu ponteiro Carro estará apontando pra um espaço desalocado de memória o que é um grande perigo, pois a qualquer momento, outro processo pode passar a usar essa posição, e, tentar acessar esse espaço a partir do seu programa vai dar crash no seu programa no mesmo instante. Ou ainda, o seu próprio programa pode acabar ocupando a posição onde antes estava "Corsa" com uma nova variável, o que vai fazer com que o valor contido dentro da string Carro se altere sem que você saiba.
  4. Que pedido mais estranho heheh, mas é muita felicidade... Até a mais lendária entre todos os administradores que existiram, a Andreia, torcendo por mim... é muita emoção. Mas valeu gente, valeu leandro. Agora começa uma era de terror e sangue na scriptbrasil... pois estou a dois cliques de banir qualquer spammer que aparecer.
  5. Hum... acho que é porque você está abrindo como binário, tente trocar: fprintf(f,"\n"); por: fprintf(f, "\r\n"); Outra opção, também, seria abrir sem ser em binário. Trocando: f= fopen("matriz.txt","wb"); por: f = fopen("matriz.txt", "w");
  6. kuroi

    Erro de Script

    Então, frata, mas qual componente exatamente você usa?? Seria o objeto WebBrowser do Microsoft Internet Controls?? Se for, ele deve usar o IE do sistema, por isso eu disse que talvez resolvesse se atualizasse. De qualquer modo, então, talvez o IE esteja suprimindo os erros de JavaScript quando acessado normalmente, mas não pelo programa. Sendo assim, talvez tenha como contornar, mas não tenho experiência com o WebBrowser, então não sei dizer. De qualquer modo, não tenho experiência em abrir páginas de internet no VB6, mas talvez você pudesse tentar também outros componentes.
  7. Temos a sala de Parcerias para isso. Movido.
  8. Logaritmo?? Mas pra qual sistema você programa?? Windows?? Nunca usei cores, nem sei se é possível no console, mas faça uma busca por aí. Quanto a centralizar, você pode usar a seguinte função pra posicionar o texto: http://scriptbrasil.com.br/forum/index.php?showtopic=146042 Exemplo, gotoxy(5, 10); vai posicionar o cursor na coluna 5, linha 10. Pra centralizar, você primeiro tem que saber quantos caracteres cabem na tela na horizontal. Eu fazia muito isso no DOS, mas não lembro quantos caracteres são. Testei no console do Windows 7 e contei 80, mas não sei se o número pode variar, se você pretende distribuir seu programa pra diferentes sistemas, acho que seria bom checar isso antes. Mas sabendo quantos cabem na tela, subtraia o tamanho do seu texto e divida por 2, que você vai achar a coluna em que deve posicionar o texto para ficar no meio. Quanto ao site, costumo usar este: http://www.cplusplus.com/
  9. Movido pra .NET. E qual a mensagem de erro??
  10. kuroi

    Erro de Script

    Isso deve ser erro de JavaScript no código fonte da página, o problema é com o site deles. Esse erro só acontece pelo Visual Basic, ou quando você abre pelo navegador também acontece?? Agora, acho que tem como configurar o Internet Explorer pra não mostrar mais essas mensagens quando ocorrer erro, mas não sei onde é. Na verdade, tenho até vontade de chorar quando lembro da tela de configurações do IE, mas dê uma olhada, ou faça uma busca por aí, que talvez você encontre. Mas qual a versão do IE no sistema?? Talvez se você atualizar pra uma mais recente, resolva.
  11. Tópico fechado por duplicação. Respostas aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=167310
  12. Movido pra .NET. Existe mesmo o campo LoginForm1 na tabela tb_login_usuario??
  13. Então, danleon, mas acontece que o Garbage Collector, acredito, é usado apenas para gerenciar a alocação dinâmica. No Visual Basic fica um pouco difícil de verificar o que é alocação dinâmica, mas isso é uma coisa que fica muito claro quando trabalhamos com C/C++. Não deve haver necessidade de limpar variáveis comuns, pois elas são alocadas estaticamente. A alocação dinâmica seria aquela que fazemos explicitamente no código fonte. Já a alocação estática é aquela que é feita automaticamente pelo programa sem que precisemos interferir. Exemplo de alocação estática: Private Sub Exemplo() Dim var As Long 'A variável é alocada estaticamente End Sub 'A variável é desalocada[/code] Nesse caso, assim que a sub Exemplo() for chamada, deve ser alocado todo o espaço que for usado por variáveis internas (no exemplo, somente a variável var -- melhor dizendo, as variáveis devem ser alocadas no momento em que o Dim for executado). Assim que acaba a execução dessa sub, todos os espaços devem ser liberados. Assim, a variavel var é alocada na abertura da sub e desalocada ao final dela, sem que precisemos nos preocupar. Fazer variavel = Empty também é desnecessário, pois isso vai limpar o valor que está dentro do espaço alocado (deve mudar todos os bits pra 0), mas não irá desalocá-lo. Mesmo depois do Empty, você deve conseguir usar a variável normalmente. Agora, quanto à alocação dinâmica, ela é usada geralmente com objetos, pois usamos um ponteiro para apontar diretamente para a posição de memória onde ele está. Exemplo: [code]Private Sub Exemplo() Dim obj As ObjetoQualquer 'Aqui, um ponteiro para o objeto é alocado estaticamente, como uma variável qualquer. Set obj = New ObjetoQualquer 'Aqui, alocamos dinamicamente o objeto numa posição qualquer da memória e apontamos nosso ponteiro para lá. Set obj = Nothing 'Aqui, limpamos toda a área de memória que estava ocupada pelo objeto, após a alocação feita na linha acima. End Sub 'Aqui, o ponteiro também é desalocado, pois como eu disse, ele é, basicamente, uma variável qualquer. Sendo assim, quando alocamos o objeto usando o New, ele ocupa uma área de memória alheia àquela pertencente a essa sub. Por conta disso, é recomendável que façamos a limpeza dessa área manualmente (setando o Nothing) para garantir que ela aconteça, principalmente porque o próprio objeto pode ter um outro objeto dentro dele, ou pode ter alocado dinamicamente outras porções de memória que também devem ser limpadas. Quanto a arrays e matrizes, acredito que devem funcionar também como as variáveis comuns, quando declaradas com posições já fixas (exemplo: Dim arr(10) as Long). Ou seja, não há necessidade de desalocarmos explicitamente. Agora, os arrays de tamanhos variáveis (aqueles que podemos redimensionar a qualquer momento, usando ReDim), imagino que esses sim precisemos desalocar. Private Sub Exemplo() Dim arr() As Long 'Isso aqui também deve ser só um ponteiro vazio. ReDim arr(10) 'Alocamos dinamicamente os 10 índices numa posição qualquer da memória Erase arr 'Aqui desalocamos os 10 índices. End Sub[/code] E também acho que vale a pena comentar quanto às Strings. As strings também são um ponteiro que apontam para o local onde está a string verdadeira. Mas imagino que também não haja a necessidade de desalocá-las explicitamente, e que o programa tome conta disso como faz com as variáveis comuns. A verdade é que, quando você preenche uma strings de tamanho variável, ele aloca uma certa quantidade de memória (acredito que somente o suficiente para armazenar o número de caracteres que você está passando pra dentro dela). Quando você adiciona ainda mais caracteres na string, ultrapassando o limite alocado, deve ser necessário mover a string para uma nova posição de memória, onde caiba todo o texto que você queira colocar. Sendo assim, a movimentação de memória no uso de strings é intensa (a todo momento, são desalocados e alocados novos espaços), seria inconcebível que tenhamos que fazê-la nós mesmo. Quanto ao Garbage Collector, em algumas linguagens, como no ambiente .NET por exemplo, o GC existe para que não precisemos nos preocupar com isso em nenhum momento, fazendo todo o trabalho pra gente. No Visual Basic, você não tem muita alternativa. O artigo do Denis pode ajudar, mas, ainda assim, você tem que ficar de olho nos objetos e saber qual o momento certo pra se livrar de cada um dos objetos. Bom, acho que nem todos se preocupam com esse assunto. Muitos podem ler esse texto e dizer "O quê? Que perda de tempo, nunca fiz nada disso e nunca me atrapalhou!". Realmente, hoje em dia, gerenciamento de memória não é um problema tão grande quanto era há 15 anos atrás. Em aplicações pequenas, você realmente não deve notar nenhuma diferença, mas se você for fazer programas que trabalhem com grandes quantidades de dados, um mau uso da memória pode acabar trazendo grandes problemas. Além do mais, é melhor garantir desde o começo que seu programa funcione de forma limpa, pois você pode não ter certeza do que ele vai se tornar no final, de como os outros vão querer utilizar, nem os recursos do computador onde vai ser instalado. Lembrando que, quando o aplicativo é encerrado, o gerenciador de memória do windows, que, esperamos que reconheça todas as áreas da memória que pertenciam ao seu programa, deve liberá-las automaticamente. Ainda assim, é recomendável que limpemos os espaços explicitamente para prevenir possíveis erros. Além disso, para objetos que são criados e destruídos constatemente dentro da aplicação, pode ser imprenscindível que o façamos, pois a memória ocupada desnecessariamente pode prejudicar ao seu próprio programa, se ele ainda está em uso.
  14. Tópico fechado. Está se estendendo demais o assunto que não tem a ver com Visual Basic e que não deve levar a lugar algum.
  15. Sempre verifique tudo isso: - Veja se a opção File -> Save Data With Report está checada. Se estiver, descheque. - Clique em menu Database -> Verifiy Database. - De preferência, cheque a opção Database -> Verifiy on Every Print. Se o problema continuar, então talvez seja o Join que você fez que está trazendo tantos dados. Tente executar a query direto no banco de dados pra ver o que retorna. Fora que não entendi o que você está fazendo, você usa 8 RecordSets. Qual deles exatamente você passa para o report?? Todos?? Quantas tabelas tem no report??
  16. Você pode fazer o que quer usando a função InStr(), veja: http://www.aivosto.com/vbtips/instr.html http://www.macoratti.net/strings.htm
  17. É, danleon, entendo sua raiva, mas a verdade é que não dá pra saber, é bem possível que o coitado tenha sido pego por algum vírus que esteja usando o e-mail dele. Não acho que o cara seria ignorante o suficiente pra mandar spam do bradesco usando o próprio e-mail pessoal. Vá com mais calma da próxima vez, já que isso pode acabar levando a brigas e discussões intermináveis. Mas, no final das contas, é só assim que esses caras trabalham. Invasores, hackers, ou seja lá o que forem, só conseguem suas conquistas abusando de truques sujos e sem graça, muitas vezes se aproveitando da confiança de terceiros e, o que é pior, muitas vezes, dos próprios amigos. Mas a melhor forma de se precaver é ficar de olho e ter cuidado, não cair nesses truques.
  18. kuroi

    Ajuda pela mileonésima vez :D

    Não existe if else, o que você queria fazer?? Não deveria ser um if normal??
  19. O problema não é o TextStream e nem o número de linhas, o problema na verdade é que o limite de caractetes do TextBox, deve ser de 65.536. Se for pra passar disso, use a RichTextBox, que deve aceitar até 4.294.967.296 de caracteres, caso tenha memória RAM suficiente para isso.
  20. kuroi

    Apresentação

    E aí, Klarth, acho que o melhor katakana pro seu nome seria クラース em vez de クラルト.
  21. O que você digitou no InputBox()?? Será que o como tem espaços entre o If e o p1, o SAP não aceita??
  22. qual a linha do erro?? não seria essa?? if p1 > 7 Then você tem certeza q p1 é numerico nesse momento?? se tiver, tente assim: if CInt(p1) > 7 Then
  23. Fechado por duplicação, respostas aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=166843
  24. Depende de como você quer definir. Pode ser por JavaScript ou pela linguagem server-side que você pode estar usando (ASP ou PHP, por exemplo). Em JavaScript, você pode usar a propriedade .size, veja: http://www.w3schools.com/jsref/prop_text_size.asp http://www.w3schools.com/jsref/dom_obj_text.asp
×
×
  • Criar Novo...