
Gui Meira
Membros-
Total de itens
29 -
Registro em
-
Última visita
Sobre Gui Meira

Gui Meira's Achievements
0
Reputação
-
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!
-
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
-
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!
-
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!
-
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!
-
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!
-
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!
-
(Resolvido) Ajuda para calcular numero primo
pergunta respondeu ao Adenison Santos de Gui Meira em C, C++
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! -
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!
-
Ajuda com uma calculadora orientada a objetos em c++
pergunta respondeu ao Brunno Loss de Gui Meira em C, C++
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! -
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!
-
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!
-
Já começou a escrever algum código, amigo? Quais suas dúvidas no problema?? Um abraço!
-
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!
-
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!