Ir para conteúdo
Fórum Script Brasil

Gui Meira

Membros
  • Total de itens

    29
  • Registro em

  • Última visita

Tudo que Gui Meira postou

  1. Olá amigo! Essa função, do jeito que coloquei ali, funciona da forma que te falei: se passar no argumento 'codigo' o valor 1, ele aumenta 10%, se for 2, aumenta 20% e assim por diante, tudo na mesma função, bastando você mudar a chamada da função. Por exemplo: calculaAumento(salario,3,&novoSalario); Isso ai aumentaria o salário em 30%. A brincadeira ai é mais com a matemática do que com a programação. Observe como a função calcula o novo salário: *novoSalario = salario + salario * ((float)codigo / 10); Eu somo o valor atual do salário com o valor: salario * (codigo/10) Como o valor do código são números de 1 a 10, dividindo por 10 eu tenho valores de 0,1 até 1. Suponha que o código seja 1. Dividindo por 10 eu tenho 0,1. Talvez você deva se lembrar das aulas de porcentagem na escola que multiplicar um número por 0,1 é a mesma coisa que pegar 10% dele, por isso quando você passa o código 1, ele pega o salário e soma com 10% do valor dele e assim por diante. E só pra esclarecer, esse (float) ai no meio da expressão é pra forçar que a variável código seja tratada como float, porque o tipo original dela é int e quando você passa dois ints para o operador de divisão (/) ele retorna só a parte inteira da divisão, sem vírgula. Ou seja, sem o (float) a divisão codigo/10 retornaria zero para os códigos de 1 a 9. Ufa... só espero não ter confundido as coisas ainda mais :D Um abraço!
  2. Olá amigo! Muito provavelmente o problema é realmente o fato do seu programa estar fechando muito rápido e você não consegue ver. O system("pause"); deveria resolver o problema. Em que ponto do código você está colocando ele? Lembre-se que ele deve ser colocando antes do 'return 0;'. Outra alternativa, que o pessoal também costuma utilizar é a função getch() da conio.h em vez do system("pause"). Eu particularmente não gosto de nenhuma das duas, mas provavelmente deve resolver seu problema. Qualquer dúvida, estamos ai! Um abraço! EDIT: O Durub foi mais rápido que eu :D
  3. Olá amigo! Além de uns nomes das variáveis escritos errado, acho que você se embolou um pouco com as chaves e os asteriscos. As funções do seu programa devem ser declaradas fora da função main(), seja acima dela ou abaixo, sendo que eu costumo dar preferência por declarar acima, caso contrário o compilador reclama e você acaba tendo que declarar um protótipo acima da main(). Quanto aos parâmetros da função, você declara como declararia as próprias variáveis, por exemplo, se a função foo vai receber um inteiro e um ponteiro para float e retornar um outro inteiro, você a declararia assim: int foo(int var1 , float *var2) Quanto ao seu código, não consegui consertar, ta um pouco confuso, mas fiz um exemplo que eu acho que pode te ajudar com essa coisa de funções e ponteiros. O meu código funciona assim: ele pergunta o salário e o código, ai dependendo do código ele aumenta o valor do salário, dessa forma: Se o código for 1, aumenta 10%. Se o código for 2, aumenta 20%. ... Se o código for 10, aumenta 100%. Ele faz isso chamando uma função que define o valor da variável novoSalario. Esse exemplo poderia ser feito fazendo a função retornar um valor e armazenando na variável, mas preferi usar o ponteiro para te mostrar mais ou menos como se faz. #include <stdio.h> void calculaAumento(float salario , int codigo , float *novoSalario) { *novoSalario = salario + salario * ((float)codigo / 10); } int main(void) { float salario,novoSalario; int codigo; printf("Digite o seu salário: "); scanf("%f",&salario); while (salario <= 0) { printf("Este salário não é válido. Digite outro: "); scanf("%f",&salario); } printf("Digite o código: "); scanf("%d",&codigo); while (codigo < 1 || codigo > 10) { printf("O código deve estar entre 1 e 10. Digite outro: "); scanf("%d",&codigo); } calculaAumento(salario,codigo,&novoSalario); printf("Seu novo salário é R$%.2f.\n",novoSalario); } Qualquer dúvida, estamos ai! Espero ter ajudado!
  4. Olá amigo! Lá no final do programa você ta passando um vetor de inteiros para o printf do maior par e do maior ímpar, quando deveria passar só um inteiro. Se quer exibir só maior número desse vetor, utilize algo parecido com isso: int maior, maiorpar[10], i; maior = maiorpar[0]; for(i = 1; i < 10; i++) { if(maiorpar[i] > maior) { maior = maiorpar[i]; } } Ao final desse loop, a variável 'maior' conterá o maior valor contido no vetor 'maiorpar'. O mesmo vale para o menor, só trocando o sinal de comparação. Espero ter ajudado! Um abraço!
  5. Olá amigo! Tem uns pequenos erros ai no seu código, mas são coisas simples, como usar %f pra uma variável inteira ou %d para um float, alguns nomes errados de variáveis e tal... mas é só ir seguindo os erros apontados pelo compilador que você corrige fácil fácil. Quanto ao problema dos "números nada a ver" quando você vai imprimir um float, isso é normal. Por padrão todas as casas decimais são exibidas. Você pode controlar isso fazendo assim: printf("%.2f",variavel); Observe o .2 entre o % e o f. Isso diz que é para imprimir apenas duas casas decimais. As outras serão arredondadas automaticamente. Existem MUITOS desses truques com o printf e realmente vale a pena aprender alguns deles, basta dar uma googlada e você encontra. Espero ter ajudado!
  6. Olá amigo! Para incluir uma biblioteca qualquer no seu programa e que não esteja disponível no sistema, você terá que baixar os arquivos dessa biblioteca no site da mesma e depois fazer alguma coisa no compilador pra dizer a ele que é pra linkar seu programa com essa biblioteca. No gcc do Linux você faz isso adicionando uma flag na linha de comando. Por exemplo, quando quero linkar com a biblioteca matemática, adiciono -lm. Nos compiladores do Windows, te confesso que não sei como fazer... Quanto ao seu problema com os números muito grandes... certamente que a idéia de usar uma biblioteca para precisão "infinita" é a solução mais elegante. Entretanto, como gerar a sequência de Fibonacci nada mais é do que realizar somas, você não teria muito trabalho para implementar sua própria "precisão infinita", usando strings por exemplo. Nesse caso, em vez de representar o número como um tipo int, representaria como um tipo char[], onde cada caractere é um número e em vez de somar com o operador '+', somaria com sua própria função de soma, que realizaria a operação algarismo por algarismo. Feito isso, você pode ter números do tamanho que quiser (ou enquanto houver memória no seu PC). Boa sorte! Um abraço!
  7. Gui Meira

    Strings e ponteiros

    Olá amigo! Pra mim, a chave principal para entender e implementar essas funções de tratamento de strings é lembrar que uma string nada mais é do que um vetor de caracteres e, o mais importante, terminado com o caractere '\ 0'. Tendo isso em mente, fica fácil pelo menos começar a pensar em algo. Vou começar pela mais fácil e te dar as dicas para as outras. int guimeira_strlen(char * frase) { int i = 0; while(frase[i] != '\ 0') { i++; } return i; } Observe o que eu fiz nessa função: comecei a olhar primeiro caractere da string, se não for o \ 0, significa que a string não acabou, então somo 1 no meu contador. Depois olho o próximo, e o próximo, até chegar ao final. Por fim, retorno esse valor. As outras ficam por sua conta, vou só dar umas idéias: strcmp(): Você vai receber duas strings e vai olhar as duas caracter por caracter. Se você encontrar um caractere diferente, retorna dizendo que são diferentes. Se chegar no \ 0 das duas, então são iguais. strncpy(): Também vai receber duas strings. Faz um loop de 1 até o número de caracteres a serem copiados e vai copiando de uma string pra outra. strcat(): Vai olhando caracter por caracter da primeira string até encontrar o \ 0. Chegando no \ 0, começa a copiar a segunda string a partir dai. strfind(): Nessa aqui você pode usar um loop dentro de outro. No loop de fora você vai varrendo a primeira string em busca de uma letra que seja igual à primeira letra da segunda string. Quando encontrar, você entra em outro loop para comparar as próximas letras e ver se é de fato uma ocorrência da segunda string. 2: Você pode usar um loop para ver cada caractere da string e simplesmente usar printf("%d",c); onde c é o caractere. Como você ta usando %d, que é para inteiros, o C já faz a conversão para o valor ASCII pra você. 3: Baseado na tabela ASCII você pode subtrair um determinado valor de cada caractere para torná-lo maiúsculo. Também é válido usar uns ifs e tal pra ver se o caracter é maiúsculo ou minúsculo e tal... mas tudo baseado na posição deles na tabela ASCII. 4: Como diz o enunciado da questão, é extremamente simples. É só olhar cada caractere da string e verificar se ele é diferente do Z. Se for diferente, soma 1, se for o próprio Z, faz ele passar a ser o A. 5: Faz um loop pra ler a string e ir imprimindo todos os caracteres, exceto o espaço. Quando encontrar um espaço, imprime o \n. Perceba que tratamento de strings está ligado muito intimamente com loops de repetição. Em quase todas as situações você terá que analisar caractere por caractere e fazer alguma coisa com eles. Tente implementar alguma coisa e qualquer dúvida, estamos ai! Boa sorte! Espero ter ajudado!
  8. Olá amigo! Aqui aconteceu exatamente o contrário do que você falou: ele não compilou, mas depois que eu mexi um pouco ele compilou e funcionou como esperado: Digite um numero: 10 Os numeros abaixo são primos: 1 ate 10 7 5 3 2 Total de numeros primos : 4 O que aconteceu aqui foi que meu compilador reclamou do 'ê' na variável 'você'. Bastou substituir por 'voce' e o problema foi resolvido. Usar caracteres especiais para nomes de variáveis não é uma prática muito boa, procure evitar. Espero ter ajudado! Um abraço!
  9. Olá amigo! A função time(); retorna um tipo time_t, que na prática é um inteiro com o número de segundos passados desde a UNIX Epoch (1 de janeiro de 1970, às 00:00). Quanto aos números aleatórios, acho que não posso ajudar muito. Uma dica, que só funciona se estiver no Linux, é ler os números aleatórios a partir do /dev/random. Um abraço!
  10. Olá amigo! Você poderia perguntar ao usuário qual operação ele quer fazer e armazenar isso num char, ou num int, depois dar um switch nessa variável. Acho que é a forma mais prática de se livrar dos inúmeros if-elses. Vou deixar um exemplo em C, porque C++ não é muito minha praia, mas provavelmente não vai ter problemas pra entender: ... int operacao; printf("Qual operação deseja fazer?\n"); printf("1) Soma\n"); printf("2) Subtração\n"); printf("3) Multiplicação\n"); printf("4) Divisão\n"); scanf("%d",&operacao); while (operacao < 1 || operacao > 4) { printf("Este número não é válido, digite um número entre 1 e 4.\n"); scanf("%d",&operacao); } switch(operacao) { case 1: //aqui você soma break; case 2: //aqui você subtrai break; case 3: //aqui você multiplica break; case 4: //aqui você divide break; } ... Um abraço!
  11. Olá amigo! Para o seu exemplo, a declaração é bastante simples: int impares(int vet[5]) Então, dentro dessa função impares(), você poderá usar o vetor vet[5] normalmente, como você fez na sua função main(). Vale lembrar ainda que você não necessariamente precisa dizer o tamanho do vetor. A declaração abaixo também é válida: int impares(int vet[]) E, por fim, tem também a declaração na forma de ponteiro, mas não sei se vale a pena entrar em detalhes sobre isso: int impares(int * vet) Já na hora que você for chamar a função impares() dentro da main(), deve passar apenas o "nome" do vetor: impares(vet); A explicação disso tem a ver com ponteiros, então também não vou entrar nos detalhes, mas acho que com isso você já consegue resolver seu problema! Espero ter ajudado e qualquer dúvida estamos ai! Um abraço!
  12. Eu sugeriria algo mais ou menos assim: Primeiro você faz um loop com 14 iterações, uma pra cada turma. Ai dentro desse loop, você pergunta o número de alunos matriculados na turma e entra em um novo loop que vai ter o número de iterações igual ao número de alunos. Nesse segundo loop você pergunta se o aluno estava presente ou ausente e vai guardando numa variável quantos alunos estiveram ausentes nessa turma. Terminado esse loop dos alunos (você ainda está dentro do loop das turmas), você tem o número de alunos ausentes e o total de alunos da turma, ai é fácil calcular a porcentagem e armazenar num vetor de float. No caso do seu problema, não há a necessidade de usar uma matriz, já que você vai armazenar apenas uma informação para cada turma. Um vetor com 14 posições já é suficiente. Se você precisasse armazenar, por exemplo, a porcentagem de ausências e a média da turma, ai você poderia usar uma matriz 14x2, já que você quer guardar 2 informações pra cada turma. Tendo preenchido esse vetor com esses dados é fácil exibir a porcentagem de ausência de cada turma e aquelas que tiveram ausência maior que 5%. Qualquer dúvida, estamos ai! Boa sorte!
  13. Já começou a escrever algum código, amigo? Quais suas dúvidas no problema?? Um abraço!
  14. Olá amigo! Como você não mencionou em que sistema operacional está, vou puxar sardinha pro meu lado também! No Linux existe a biblioteca ncurses, que permite criar janelas, menus, botões e outras coisas mais em modo texto. O resultado é bem interessante! Um abraço!
  15. Olá amigo! Pra apostilas de C ou de qualquer outra linguagem te indico o bom e velho www.apostilando.com E especificamente para o C, te indicaria o livro "C Completo e Total", do Herbert Schildt, que trás uma introdução bem completa ao C além de um guia de referência com todas as funções da biblioteca padrão e mais algumas outras, além de mostrar passo a passo a implementação de um interpretador C. A edição que eu tenho aqui está bem velhinha, trás inclusive uma introdução à programação em ambiente gráfico no "novíssimo Windows 95", mas não deixa de ser uma boa referência. Além, é claro, do oráculo que tudo sabe, o Google! Quanto à programação com interface gráfica, mais especificamente o GTK, eu tenho encontrado alguma dificuldade em achar material de qualidade e em português, mas te indicaria um clássico da internet sobre o assunto, o guia Mantendo a sanidade com o Glade. Ele da uma introdução sobre o GTK e sobre o Glade, que é um programa que você pode usar pra construir suas interfaces graficamente, sem ter que fazer tudo na unha. Depois que você tiver aprendido o básico de como programar usando GTK + Glade, o jeito é partir pra documentação oficial. Os fóruns também são ótimos lugares pra obter mais informações. E, mais uma vez, o oráculo é seu melhor amigo nessas horas. Espero ter ajudado!
  16. Gui Meira

    libxml2

    Olá amigo! Eu já usei a libxml2 uma única vez e só precisei de alguns poucos recursos dela, mas acredito que ela não seja capaz de ler um arquivo da internet. Minha sugestão é que baixe o arquivo para o computador e depois leia-o com a libxml2. Usando a interface easy da libCurl você faz isso com pouquíssimas linhas de código. Caso o programa seja algo simples, só pra uso próprio, você pode também se aproveitar das maravilhas do pinguim e dar uma solução um pouco menos elegante: baixa o arquivo chamando o wget através do system(). Espero ter ajudado!
  17. Salve salve amigos! Enquanto o Vagalume não tem a boa vontade de lançar o plugin deles pra Linux, to desenvolvendo um programinha em C pra buscar as letras das músicas pra mim. Ele tá até cumprindo o papel dele direitinho, mas tem uma coisa me incomodando... Toda vez que eu abro uma música ele abre uma nova janela do programa pra buscar a letra. Gostaria que fosse, por exemplo, como no Windows Media Player. Se ele já está aberto e você abre uma nova música, ele abre essa música naquela mesma janela. Pesquisei um pouco e achei esta dica de como descobrir se um processo do mesmo programa está em execução. Isso já me ajuda a impedir que o programa abra várias janelas, mas ai ganho um outro problema: ele simplesmente não abriria as outras músicas enquanto a janela com a primeira estivesse aberta. Acho que eu precisaria de um jeito pra que se o usuário abrisse uma música e o programa já estivesse aberto, esse novo programa que ele abriu simplesmente "avisasse" para o que já está aberto que é pra ele carregar tal música e depois fechasse. E é aqui que gostaria das opiniões de vocês sobre a forma de fazer isso. Até então tudo que eu consegui pensar foi deixar um socket escutando em uma porta qualquer, ai quando o programa fosse aberto pela segunda vez, poderia enviar o nome da música para o que já está rodando através desse socket e então fechar. Acho que não teria grandes problemas pra implementar isso, só que ta me parecendo aquela coisa de usar um míssel nuclear pra matar um mosquito... Gostaria de saber se alguém tem alguma idéia mais simples pra resolver isso. Desde já obrigado a todos!
  18. Desculpa a desatenção, tava cheio de sono aquela hora... mas hj vou olhar com atenção =D Já fiz um chat no Visual Basic, então queria experimentar algo novo... Muito obrigado pela ajuda!!! EDIT: Valeu tb pela atenção Churc!
  19. muito obrigado pela ajuda! Andei dando mais uma pesquisada sobre o assunto e vi que uma solução para o meu problema seria um tal de multithread (sim, sou leigo no assunto). Dei uma pesquisada no google mas não achei nada muito esclarecedor. alguém poderia me dar uma direção, uma ajuda, uma luz, alguma coisa asssim? =D Abraços a todos!
  20. Boa noite a todos! Estou começando no mundo do Delphi e estou com umas duvidas e se possivel gostaria que vocês esclarecessem =D Estou tentando fazer uma espécie de messenger usando o delphi. Minha idéia seria fazer um programa servidor e os programas clientes se conectariam a ele. Então se o cliente 1 quisesse mandar uma mensagem ao cliente 2, ele enviaria a mensagem ao servidor que enviaria ao cliente 2. Minha duvida é: tem jeito de fazer isso usando sockets? Também tenho uma pequena noção de Visual Basic e já fiz programas com ele utilizando sockets, mas sempre com dois programas se conectando. Não sei se seria possível que um programa (o servidor) se conecte ao mesmo tempo com vários outros (os clientes). Alguma ideia? Alguma sugestao? Um abraço a todos!!!
  21. Gui Meira

    Algumas Duvidas

    Bom, to terminando um programa e faltam algumas ultimas duvidas... 1) Quando mando criar o programa, junto com o executavel aparecem varios outros arquivos alem das dlls que eu estou usando... teria como juntar esses arquivos no proprio executavel do programa? Mas no executavel do proprio programa e não em um programa de instalação... 2) No programa tem uma checkbox para iniciar com o windows... em um outro post que eu perguntei sobre isso, o graymalkin me indicou um link para outro post onde tinha tres jeitos diferentes de fazer o programa iniciar com o windows e o que eu achei que seria mais conveniente é atraves do registro do windows... mas eu to com dois problemas... primeiro porque não to conseguindo usar o comando que eu achei em um guia sobre mecher no registro do windows no macoratti.net e segundo porque preciso indicar no registro o caminho completo para o programa, tem algum jeito de eu descobrir o caminho para o programa e o nome do executavel dele??? 3) Existe algum jeito de saber o IP do computador onde o programa está instalado??? Isso pouparia o usuario de ter que ir naqueles sites que mostram o IP ou no ms dos... Editando... 4) Uma pequena curiosidade sobre a progress bar... eu gostaria de saber se tem como colocar uma progress bar daquelas que os quadradinhos verdes ficam só passando de um lado para o outro em vez de mostrar quanto falta pra acabar... Bom, por enquanto é "só" isso.. desde já thank you very much!!!
  22. Gui Meira

    Screenshot

    Humm, acho que confundi as classes com as dlls... mas de qlquer jeito está funcionando certinho =D Sobre o save, resolveu meu problema, valeu ;)
  23. Gui Meira

    Screenshot

    Na verdade eu estou usando um controle winsock para vb 2005, a proposito foi ate um conselho seu em um outro tópico que eu abri, porque eu estava usando o winsock para vb6 e você me aconselhou a procurar um que fosse para vb 2005... Agora sobre a imagem... a função que tem la no guia que eu citei acima retorna um bitmap, como eu poderia fazer pra salvar essa imagem no disco??? porque feito isso o resto realmente é tranquilo, basta usar o Sendfile do winsock pra enviar a imagem de um programa para o outro... Mais uma vez muito obrigado ;)
  24. Gui Meira

    Screenshot

    Eu estou terminando um programa e basicamente falta essa parte... eu preciso tirar uma screenshot e enviar para outro programa via winsock... Para tirar a screenshot eu achei esse guia: http://www.macoratti.net/vbn5_cpt.htm Mas eu não sei como fazer pra enviar essa imagem atraves do winsock... alguém poderia me dar um help??? Desde já, muito obrigado!!!
  25. Gui Meira

    Apostilas De Vb.net

    Alem do macoratti.net que é um site realmente excelente, eu recomendo o www.apostilando.com, que trás muitas apostilas sobre diversos assuntos ;) Na seção de visual basic você também vai achar apostilas sobre o vb.net
×
×
  • Criar Novo...