Ir para conteúdo
Fórum Script Brasil

thb_matrix

Veteranos
  • Total de itens

    1.445
  • Registro em

  • Última visita

Tudo que thb_matrix postou

  1. thb_matrix

    Dividir arquivo .h

    O segundo caso não funciona, apenas o primeiro. Me permite dar uma sugestão?? Além do uso do #ifdef em cada arquivo, sugerido anteriormente pelo amigo, separe um arquivo por classe. Fica muito mais limpo, organizado, e fácil de distribuir. Se você quiser usar assim mesmo, muitos projetos que trabalham dessa maneira(muitas classes no mesmo header) declaram todas as classes previamente desta maneira: class x; class y; clas blablabla; ... class x { ... }; class y { ... }; class blablabla { ... }; Mas eu no teu lugar faria o mais organizado: um header por classe. x.h tem a declaração completa de x, y.h tem a declaração completa de y. y.h inclue x.h por dependência de classes. Aí, utilizando o ifdef(SEMPRE faça isso para qualquer header, se não quiser ter problemas em tempo de compilação com freqüência), você garante que cada classe terá suas dependências supridas devidamente, além de organizar e distribuir melhor as coisas. Abraços!! []'s
  2. Esse exemplo geraria uma falha de segmentação, uma vez que o ponteiro retorno não é inicializado. Sem falar que existe um grande problema no uso do strcpy. Use sempre que possível o strncpy se não quiser ter problemas!! Neste caso, você poderia fazer o seguinte: char *inverte(char *nome); int main() { int i; char texto[20]; printf("Digite o texto: "); gets(texto); //gets é considerado depreciado, a entrada pode nunca ter um salto de linha e a chamada nunca acabar. //se o usuário entrar 24 ou mais caracteres, a tua entrada vai sobrescrever o valor do inteiro 'i'(buffer overflow) //se ele digitar mais de 28, dependendo do quanto mais for, ele vai sobrescrever as instruções de máquina da //tua função inverte(), fazendo com que o processo tente executar SABE-SE LÁ O QUE na tua máquina!! inverte(texto); printf("%s", inverte(texto)); // ele dá erro justamente aqui getch(); } char *inverte(char *nome) { int i, j=0; char *ret = (char*) malloc((strlen(nome) + 1) * sizeof(char)); //Aloca o espaço necessário if (!ret) { return ret; //Se malloc retornar nulo é porque não há memória suficiente para alocar o espaço necessário } i=strlen(nome) - 1; for (;i>=0;i--,j++) { inv[j]=nome[i]; } return inv; //Do jeito que você escreveu ele iria retornar um caractere. Mais especificamente, o primeiro caractere da string } Só pra lembrar, aquele SABE-SE LÁ O QUE que escrevi nos comentários do código pode ser, entre uma infinidade de possibilidades, alguma das seguintes: Mandar um e-mail xingando seu chefeMandar seus códigos fonte para um concorrenteMandar e-mails para todos os teus contatos dizendo que você anda de calcinha em casa[]'s Bruno
  3. Thiago, Creio que as informações que tu precisará na tabela de parse serão um código de identificação para cada item, uma informação do tipo do item(se é identificador, digito, ponto flutuante, string, caractere, etc...), e os dados. Caso a linguagem que o parser identificará seja tipada, tu vais precisar colocar o tipo do identificador encontrado na tabela(caso seja um identificador). Para a construção da tabela de parse, provavelmente uma classe contendo 3 variáveis resolveria o problema. Aí você cria um vetor desta classe para acessar a lista. Mas só não ficou claro na tua pergunta uma coisa: você quer fazer o parsing em algo, ou você quer fazer o parsing da gramática, e gerar o parser apartir da gramatica obtida através do primeiro parsing? No segundo caso, te recomendo utilizar um gerador de analisador léxico, como o flex por exemplo. []'s
  4. thb_matrix

    Codigo C no Gcc -Erro

    Ei, eu vi aquela linha do new comentada. Afinal, você está trabalhando(ou pretendendo) com C ou com C++?? O seu problema está aqui: printf("Os numeros multilpos de 7 e não multiplos de 5\ entre o MAX e o MIN informados são/e: "); Em um compilador que segue estritamente o padrão da linguagem, um bloco de caracteres("") deve começar e terminar na mesma linha. Como este é o caso do GCC, aí está seu erro.
  5. bom, no primero caso você ta instanciando o objeto normalmente. agora no segundo você ta criando um ponteiro pra ele. isso significa q você ta declarando uma regiao qualquer na memoria, e com o new você aloca esse espaco com um objeto da classe CProcesso. no fundo acaba dando no mesmo, mas usando o ponteiro você tem um acesso maior. tipo quero dizer assim, se você declara o objeto (como no exemplo a) dentro de uma funcao ou um bloco de comando qualquer, no final do bloco (quando ele chegar em }) o objeto é destruido e td q tinha nele é perdido. agora se você alocar a regiao na memoria, mesmo q a funcao termine, o espaco continua alocado ate você chamar o delete. o endereco no pontero (a variavel vprocesso) realmente é perdido quando termina a funcao, mas na verdade o o espaco na memoria continua la ocupado. e ai se você armazenar esse endereco (se você der um jeito de passa-lo pra fora da funcao) você pode continuar utilizando. uma vantagem disso por exemplo são funcoes q retornam string. as funcoes q retornam string tem ser do tipo ponteiro de char, ou seja, o resultadao dela retornara o endereco da memoria onde esta o resultado e não o resultado em si. mas acontece q assim q a funcao termina, o espaco dela é liberado (as variaveis internas dela, inclusive os ponteros são destruidos). então, as vezes é meio chato mexer com essas funcoes, porque por exemplo você não consegue dar printf direto nela. mas se você alocar algum espaco com o new, você tem mais facilidade. outra coisa tb sobre declara com pontero é q apesar de q exige mais trabalho pra se usar, é q o acesso a ele é muito mais rapido. porque se você acessa o objeto, o objeto aponta o endereco e ai sim o endereo é acessado. se você acessa o pontero ele vai direto no endereco. no fundo a diferenca parece pequena, mas em aplicacoes gds q tem gde processamento de dados, isso faz diferenca e imagino q se costume fazer um uso bem gde de pontero nesses casos. No primeiro caso você está alocando de maneira estática. A classe é alocada na STACK do escopo atual. No segundo você está declarando um ponteiro, e atribuindo a ele um endereço de memória alocado dinâmicamente(na HEAP, área fixa de memória). Ao alocar dinâmicamente, ganhamos dinamismo no programa e executaveis menores. Porém, PRECISAMOS ter alguns cuidados a mais. Se a função termina e existem objetos dinamicamente alocados, eles permanecem na memória. Quando isso acontece, PRECISAMOS retornar um ponteiro para que a função chamadora consiga de alguma forma desalocar(delete) o objeto quando este já for desnecessário. Caso um ponteiro não seja retornado, o ponteiro ainda é alocado na STACK(o ponteiro, e não a área para onde ele aponta), e ele será perdido, ocasionando um memory leak. Por isso, utilize a alocação dinâmica com responsabilidade. Quanto as strings, que em C eram simples arrays de caracteres, elas ganharam um tratamento orientado a objetos na STL: std::string string1("hahaha"); Prefira sempre utilizar a string da STL. Se precisar uma string de widechar em vez de char, utilize: std::basic_string<wchar> string2; a se eu não me engando q o malloc era uma funcao q existia em c pra realocar memoria e ai quando criaram o c++ inventaram o new pra dar mais facilidade no uso de objetos. agora acontece q com o malloc você consegue especificar certinho o espaco q você quer. tipo, você pode alocar um espaco maior do q o necessario. qual o objetivo disso?? o mais comum é pra se alocar memoria pra um array. se eu quero um array de 10 posicoes, aloco o espaco pra 10 inteiros, ou seja, sou q escolho o espaco q quero alocar, enquanto q com o new, ate onde sei, só posso alocar um tamanho fixo, de acordo com o tipo q eu passar. Não é uma questão de facilidade no uso de objetos. O operador new faz uma alocação dinâmica, como a função malloc, porém ele constrói o objeto na memória(invoca o construtor da classe), ao contrário da função malloc que simplesmente aloca e deixa lixo na região de memória. Em C++ SEMPRE use new e delete em vez de malloc e free. O malloc existe porque em C não existe new/delete, operadores introduzidos no C++. Com o new podemos alocar espaço para um array também: CProcesso *array = new CProcesso[10]; Apesar disso, o melhor é utilizarmos os containers da STL ao invés de arrays. Eles são mais dinâmicos e flexíveis: vector<CProcesso> primeiro_vetor; vector<CProcesso> segundo_vetor(10); //inicializamos com 10 posições Desta maneira se pode inserir, alterar, remover, procurar, (...) no vetor com muita facilidade.
  6. Não conheço o C++ Builder e nem nada para Windows, mas... Na falta de conhecer a ferramenta, procure uma documentação dela, pois é importante conhecer. Para quebrar um galho, tu poderia imprimir na tela uma mensagem a cada vez que A fosse chamado, inclusive incluindo os parâmetros na mensagem. []'s
  7. Primeiramente, cuidado com algumas más práticas!! Passar a estrutura toda como parâmetro faz com que toda a estrutura seja copiada na stack da função chamada. Quando você retorna a estrutura, faz com que ela seja copiada mais uma vez para a área de dados alocada para ela na função chamadora. Em vez disso, passe um ponteiro(ou referência, se estiver trabalhando com C++) para ela e não efetue retornos. Recomendaria fazer isso em todas as funções, sempre que possível(não tenho certeza se este é o caso, mas você que conhece o programa saberá). Outra coisa. Tua função Determinante() só retorna caso o condicional seja válido. Caso contrário, ele imprime um erro na tela mas não encaminha retorno algum para a função chamadora saber se tudo saiu ok. Fazendo isso, o retorno será lixo de memória. Obviamente, isto não vai interferir em nada no problema em sí, o que está errado vai continuar errado. Vamos agora à solução... Uma dúvida... Tu estás compilando com um compilador C ou com um compilador C++?? Se for um compilador C tu não poderá declarar as variáveis daquela maneira. Neste caso, declare-as no início da função. Isto pode, dependendo do compilador, ser o problema. Estou assumindo que o erro seja de compilação, pelo que entendi, certo?? Caso positivo, tu poderia mostrar o output do teu compilador?? []'s
  8. Você pode usar o formatador do printf para isso. Exemplo: printf("1o Numero: %5d", 45323); printf("1o Numero: %5d", 3233); printf("1o Numero: %5d", 32); printf("1o Numero: %5d", 323); printf("1o Numero: %5d", 3); Neste exemplo ele irá imprimir todos eles alinhados ATÉ 5 DIGITOS. O único porém é que a parte da string que o antecede tem que ser fixa, senão ele não alinha. []'s Use %.2lf A sintaxe dos formatadores: %[tamanho_principal[.tamanho_secundario]][alongação/encurtação]caractere-de-formato Aonde tamanho_principal é o número limite de digitos antes de um divisor, e tamanho_secundário, no caso de pontos flutuantes, é o número de casas após o divisor. A "alongação"/"encurtação" se refere aos qualificadores(long, long long, short, unsigned, etc). []'s
  9. Você pode usar o formatador do printf para isso. Exemplo: printf("1o Numero: %5d", 45323); printf("1o Numero: %5d", 3233); printf("1o Numero: %5d", 32); printf("1o Numero: %5d", 323); printf("1o Numero: %5d", 3); Neste exemplo ele irá imprimir todos eles alinhados ATÉ 5 DIGITOS. O único porém é que a parte da string que o antecede tem que ser fixa, senão ele não alinha. []'s
  10. thb_matrix

    Como fazer isso

    Deixa eu ver se eu entendi... Você precisa receber o dia, o mês e o ano, e aí caso seja ano bissexto, você muda o dia para 1 antes?? É isso?? Dá uma explicada melhor aí no problema pra mim tentar te ajudar!! Simplesmente não entendi :( Mas enfim, te adianto que tu não precisa fazer essa "maracutaia" toda de declarar 12 variáveis e tudo mais, basta usar a estrutura tm da biblioteca time.h. Veja essa página de manual: ctime(3)
  11. thb_matrix

    Não executa

    Por portabilidade use getchar(), que faz parte do padrão da linguagem, ao invés de getch(), que pertence a uma biblioteca de terceiros. Ele chega a perguntar pelo número?? Caso negativo creio que não seja o caso dele estar saindo sem que você veja. Mas posta aí!! []'s
  12. Olha... Isso varia muito de gosto. Sendo aplicativos para fins comerciais, apesar de gostar muito de Python, eu ficaria com Java pelo sentido das IDE's que ainda me agradam mais. Porém, ainda vale o que o Graymalkin disse, tu tens que ver com qual tu te adaptas mais. Acredito que eu prefira IDEs como o NetBeans(Java) em relação à outras exatamente pela questão da adaptação. Como cada um tem um gosto, não custa experimentar!!!!
  13. Cara, não testei ainda isso, mas a minha idéia seria tu deixar um diretório com vários arquivos de texto(conforme a demanda do site) de modo que verifique-se nesses arquivos se o título ou a mensagem bate com algum deles. Se for igual provávelmente é o mesmo post. Pelo que eu vi o orkut usa algo com a mesma idéia.
  14. Cara... Apesar de que tu, como tu mesmo dissestes, está começando, tu precisas saber algumas coisas inicialmente... Muitos softwares gráficos, não apenas para gravação de CDs, são apenas GUI's(interfaces graficas que rodam "sobre" um software para terminal). Acredito que esse nero para linux não foge a regra(talvez eu esteja enganado). A esmagadora maioria dos softwares para gravação de CDs grafico que conheço são GUI's para o cdrecord e outras ferramentas para gravação e criação de imagens. De fato não conheço nenhuma GUI que te dê uma forma de aproveitar a vasta quantia de recursos que o próprio cdrecord, em conjunto com estas ferramentas, te oferece. Além do mais, é bom que tu vá te familiarizando com o console, pois, como usuario domestico que não ganha nenhum tipo de suporta, precisarás fazer algum tipo de manutenção sozinho. No página em http://focalinux.cipsga.org.br/guia/interm...io/ch-tasks.htm tu vais ver uma breve explicação de como utilizar o cdrecord e o mkisofs, entre outros, para executar tarefas mais simples inicialmente. Com o tempo aprendendo a utilizar o cdrecord tu vais ver que é bem mais compensador. Qualquer dúvida estou aqui!
  15. thb_matrix

    Virus

    Entre em modo de segurança, remova o arquivo, abra o regedit e procure em todo o registro todas as referencias ao arquivo e as remova.
  16. thb_matrix

    Bloqueado....

    Olha, se for proxy transparente é meio brabo teu caso... Tu terias que achar uma falha no servidor proxy ou algo assim. É uma missão difícil, boa sorte. Porém se não for transparente basta tu remover a configuração de proxy da maquina.
  17. thb_matrix

    Python

    Quanto ao "ela é 'boa'?", isso só tu mesmo pode dizer. A linguagem 'boa' é aquela na qual sabemos resolver nossos problemas com uma certa eficiencia.
  18. thb_matrix

    Listas

    Eu não vejo que seja tão necessário você estabelecer o tamanho da matriz previamente, pois você terá controle sobre o fluxo do programa para fazer a matrix ter exatamente o tamanho certo. Caso precise um tamanho definido faça uma verificação se a matriz tem as posições desejadas. E isso possibilita vantagens, pois se for necessário aumentar a lista voce pode usar: lista1=range(0,10) lista1.append(11) lista2=range(3,13) lista2.append(1) ... lista11=range(20,30) lista11.append(28) listas=[lista1,lista2,...,lista10) listas.append(lista11)
  19. thb_matrix

    Lista De Usuários

    É.. Assim fica um tanto difícil de te ajudar... Se tu mostrares o teu smb.conf e nos passar as configurações de rede como elas teriam que ser talvez ajude. Quanto à rede deste servidor linux, funciona normalmente? Pinga as outras máquinas?
  20. thb_matrix

    Linux Para Iniciante

    Eu tenho uma visão de que distribuição é como gosto músical... Cada um tem um gosto, e para dizer se gosta de tal banda só escutando... Distribuições do Linux também... Te recomendo experimentar até achar alguma com a qual você se dê bem, que seja no teu estilo. Para mim isso aconteceu rápido quando cheguei no Slackware, que eu chamaria de distribuição para quem quer fazer tudo do seu modo. Eu não precisei passar por muitas para me apaixonar. Mas de fato é isso que acontece com os usuários do Linux: ele tenta conhecer várias, e derrepente se apaixona por uma.
  21. O instalador deles é um tanto diferente mesmo... Mas igualmente se você já conhece um pouco Linux creio que conseguirá. O que você tem a fazer é particionar com o comando cfdisk ou fdisk(use o segundo caso saiba usá-lo somente), e depois usar o comando setup e ir seguindo o menu com os passos da instalação.
  22. Eu sempre ajudei como pude, pois já passei meu tempo de sofrimento perguntando minhas coisas para lammers no irc, que só sabiam se acharem superiores por usarem Linux há mais tempo, mas conhecer algo de verdade não sabiam. A questão não é a comunidade Linux em sí, mas sim os idiotas que temos por aí. Tenho certeza que se perguntassem para alguém específicamente que conhece realmente o sistema operacional e a informática em sí, este alguém ao menos tentaria ajudar.
  23. Galera, especialmente para os enxadristas... Meu técnico precisava um banco de dados de xadrez pra linux, e eu achei algumas coisas do projeto GNU: http://directory.fsf.org/games/chess/ Aí você acha softwares para jogar, estudar e gerenciar torneios no sistema suiço.
  24. Pessoal, posso dar uma dica? Para fazer os "caça-googles" sem ser notado pelo visitante(eu não acho isso legal, mas tem quem ache), podemos inserir uma tag <p> com um estilo css que tenha o parametro display:none. Como ele não é normativo, mas apenas aceito pelo CSS nos padrões da W3C, alguns browsers podem ignorar, mas são rarissimos os browsers. Por isso, façam sempre o mais abaixo possível da página. Quanto aos links de uns para outros, pode se fazer o mesmo caso não queiram encher de links o site e queiram fazer em um grande grupo de sites.
  25. Pessoal, Gostaria de saber quem vai ao FISL(Fórum Internacional de Software Livre) daqui do pessoal do fórum. Poderiamos combinar um encontro entre o pessoal. Aguardo respostas. Obs: Caso eu fique muito tempo sem responder, me mandem um email, pois não tenho tido mais muito tempo inclusive para acessar o fórum. Obrigado
×
×
  • Criar Novo...