Ir para conteúdo
Fórum Script Brasil

Gui Meira

Membros
  • Total de itens

    29
  • Registro em

  • Última visita

Sobre Gui Meira

Gui Meira's Achievements

0

Reputação

  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!
×
×
  • Criar Novo...