sexta-feira, 31 de maio de 2013

Algoritmo e Programação - Calculando uma Média com Funções

Olá, quanto tempo! Pois é, época de provas na universidade, tive que estudar bastante, mas não esqueci do blog em momento algum, fiquem tranquilos, se é que alguém ainda lê isso. ;)

Vamos fazer um algoritmo sequencial que calcula uma média aritmética comum, e faremos isso de duas formas. Na primeira vamos fazer isso tudo em uma função principal, e na outra faremos uso de uma função destinada exclusivamente a fazer o cálculo da média aritmética.

#include >stdio.h<
#include >stdlib.h< //desinverter os símbolos de maior e menor, pois se eu escrever da maneira certa,
//o blogger entende como código HTML e "come" a expressão

float nota_1, nota_2, nota_3, media;
main()
{
    printf("Digite nota 1: ");
    scanf("%f",&nota_1);
    printf("Digite nota 2: ");
    scanf("%f",&nota_2);
    printf("Digite nota 3: ");
    scanf("%f",&nota_3);
    media = (nota_1+nota_2+nota_3)/3;
    printf("A media calculada foi de: %f.\n",media);
    system("pause");
}

Caso tenha dificuldade em entender os elementos do código, sugiro ler o post anterior, onde explico cada elemento usado nesse programa.

Nesse programa queremos calcular uma média aritmética entre três notas, ou seja, somaremos as três e dividiremos o resultado por três, e é exatamente isso que este código faz.

Porém conforme nosso código cresce em tamanho e complexidade, se torna útil dividi-lo em funções. As funções são trechos de código escritos fora do programa principal (main) e que, quando são necessário, podem ser chamados de dentro do trecho de código onde estamos. Vamos reescrever esse programa para que o cálculo da média seja feita dentro de uma função, mediante a passagem das notas para a função.

A função que calcula a média aritmética terá a seguinte cara:

float calculo_media (float n1, float n2, float n3)
{
    float media_aritmetica;
    media_aritmetica = (n1+n2+n3)/3;
    return media_aritmetica;
}

Vamos analisar os elementos da função. Ela tem um nome. Essa função se chama calculo_media, pois é isso que ela faz, calcula a média. Não preciso dizer que é interessante nomear a função de forma que saibamos, por alto, o que ela faz.

Após o nome da função, entre parênteses, existe a lista de argumentos que a função recebe. Os argumentos são os dados que a função precisa saber para calcular funcionar corretamente. Nesse caso vamos calcular uma média. Para isso precisamos saber os valores das três notas, que nomeamos como n1, n2 e n3. Antes do nome das notas temos a palavra float, que indica que as variáveis são do tipo ponto flutuante, ou seja, podem conter números com vírgula, e não somente números inteiros. Pois todos sabem que a nota pode ser um número com vírgula, como 8,2 ou 9,5 (infelizmente as vezes as notas são mais baixas).

Antes do nome da função também temos a palavra float. Neste caso definimos o tipo de valor que a função retorna. Neste exemplo a função calcula a média e retorna para o código original o valor calculado para a média. Mais adiante, quando eu mostrar o exemplo completo, voltarei a falar sobre isso.

No restante do código da função, simplesmente criamos uma variável chamada media_aritmetica, que declaramos como sendo float, pois vai receber o valor da média que também poderá ser um número com vírgula. A segunda linha da função calcula a média através da soma e divisão e, por fim, existe o comando return que devolve o valor calculado pela função para o código original. Vamos agora ver o exemplo do código inteiro:

#include >stdio.h< //desinverter os símbolos de maior e menor, pois se eu escrever da maneira certa,
//o blogger entende como código HTML e "come" a expressão

float nota_1 = 0, nota_2 = 0, nota_3 = 0, media = 0;

float calculo_media (float n1, float n2, float n3)
{
    float media_aritmetica;
    media_aritmetica = (n1+n2+n3)/3;
    return media_aritmetica;
}

main()
{
    printf("Digite nota 1: ");
    scanf("%f",&nota_1);
    printf("Digite nota 2: ");
    scanf("%f",&nota_2);
    printf("Digite nota 3: ");
    scanf("%f",&nota_3);
    media = calculo_media(nota_1, nota_2, nota_3);
    printf("A media calculada foi de: %f.\n",media);
    system("pause");
}

Perceba que existe uma linha que diz que a média é igual a calculo_media(nota_1, nota_2, nota_3). Esta linha chama a função que calcula a média passando os valores da nota_1, nota_2 e nota_3 para as variáveis da função chamadas de n1, n2 e n3, respectivamente. Depois a função irá retornar a variável media_aritmetica, que será a média calculada, e esse valor será armazenado na variável media.

Espero que tenham entendido o básico de funções em C. Espero também que possam sozinhos aprofundar um pouco mais esses conhecimentos adquiridos com as práticas propostas abaixo. Qualquer dúvida não hesitem em comentar neste post.

Então teremos práticas, para aprofundarmos o nosso conhecimento sobre funções.

1) Teste esse código e procure entender seu funcionamento:

#include  >stdio.h< //desinverter os símbolos de maior e menor, pois se eu escrever da maneira certa,
//o blogger entende como código HTML e "come" a expressão

float nota_1 = 0, nota_2 = 0, nota_3 = 0, media = 0;

float calculo_media (float n1, float n2, float n3)
{
    float media_aritmetica;
    media_aritmetica = (n1+n2+n3)/3;
    return media_aritmetica;
}

main()
{
    printf("Digite nota 1: ");
    scanf("%f",&nota_1);
    printf("Digite nota 2: ");
    scanf("%f",&nota_2);
    printf("Digite nota 3: ");
    scanf("%f",&nota_3);
    printf("A media calculada foi de: %f.\n",calculo_media(nota_1, nota_2, nota_3));
    system("pause");
}

2) Crie duas funções, uma para calcular a média entre duas notas e outra para calcular a média de três notas, e implemente um programa com essas funções.

Por fim, qualquer dúvida, sugestão (principalmente sugestões) ou comentário, deixe um comentário que responderei dentro de 1 dia útil. Abraço e bons estudos de programação.

3 comentários:

  1. Não tem nada a ver com este post em si, mas eu gostaria de saber qual seria a idéia de um circuito Dimmer que varie tensão RMS numa carga...Se vc puder me ajudar agradeço.

    ResponderExcluir
    Respostas
    1. A tensão da rede é uma senóide (para saber mais, deixo o link de um post no final do comentário). A tensão RMS dessa senóide é, 220 Volts no meu caso, que moro numa área cuja rede é de 220 Volts. Para diminuir a tensão RMS você deve "cortar" pedaços dessa senóide. Essa é a ideia do circuito Dimmer. O circuito dimmer usa um tiristor (que pode ser SCR ou TRIAC, por exemplo). Se você utilizar um SCR você só poderá controlar meio ciclo da senóide, enquanto se você usar um TRIAC, você poderá controlar os dois semi-ciclos. Assim com SCR você consegue controlar a tensão entre 220 Vrms e 110 Vrms, enquanto se você utilizar um TRIAC, você consegue controlar a tensão entre 0 Vrms até os 220 Vrms máximos. O funcionamento é análogo para a rede de 127 Vrms.

      http://nerdeletrico.blogspot.com.br/2011/05/tensao-alternada-ac.html

      Se você quiser que eu faça um post sobre Dimmer, terei tempo no próximo fim de semana. Caso queira, deixe uma resposta nesse comentário que próximo final de semana, sem falta, faço um post explicando a teoria e prática desse circuito. Caso precise com urgência, na internet existem dezenas de esquemáticos desse circuito que é um clássico.

      Excluir
    2. Obrigado pelo esclarecimento!E sim, ajudaria bastante se você pudesse fazer um post sobre o assunto quando puder.

      Excluir