• Nenhum resultado encontrado

Funções presentes na linguagem C

No documento Introdução ao C em 10 aulas (páginas 116-120)

Várias bibliotecas acompanham os ambientes de desenvolvimento em linguagem C, como é o caso do CodeBlocks, do DevC++, entre outros. 1Uma dica que pode lhe poupar tempo é, sempre que se deparar com a necessidade de executar um conjunto de instruções para realizar uma operação que refere-se a uma necessidade comum de outros usuários, investigue se já existe uma função antes de tentar implementar a sua.

7.2.1

Funções matemáticas

A biblioteca math disponibiliza várias funções matemáticas, como funções trigonomé- tricas para o cálculo do cosseno, função cos, função para cálculo de logaritmo, como a função log, entre outras, contudo, apenas duas funções serão discutidas, a função para cálculo de raiz quadrada, sqrt() e a função para cálculo de potência, pow(x, y).

7.2.1.1 Função para cálculo da raiz quadrada

Como já mencionado, não há um operador nativo na linguagem C que permita calcular a raiz quadrada de um número, contudo, podemos utilizar a função, sqrt(), disponibili- zada pela biblioteca math para fazer este cálculo (SCHILDT,1996). A seguir a sintaxe da função sqrt().

1 //Sintaxe:

2 #include <math.h>

3 double sqrt(double num);

7.2. Funções presentes na linguagem C 113

Conforme pode ser visto na sintaxe, a função retorna um double, que no caso será o resultado do cálculo da raiz quadrada do número que foi passado como argumento na invocação da função. O número passado como argumento também é do tipo double, contudo, tanto o retorno, quanto o argumento podem ser do tipo float, visto que um

double pode assumir valores do tipo float. Veja a seguir um exemplo em forma de

exercício.

7.2.2

Exercício de Exemplo

Faça um programa em C que leia um número e após a leitura, calcule e imprima a raiz quadrada deste número.

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 void main() 6 {

7 float numero, raiz;

8 printf("Informe um numero: \n");

9 scanf("%f", &numero);

10

11 raiz = sqrt(numero);

12

13 printf("A raiz quadrada do numero e: %f \n", raiz);

14 }

Na resposta proposta para o exercício foi adicionada a biblioteca math na linha 3, sempre que precisar utilizar uma função de alguma biblioteca, será necessário adicionar o arquivo cabeçalho correspondente no início do código. Na linha 7 foram declaradas as variáveis numero, para armazenar o número lido, e raiz para armazenar o resultado do cálculo da raiz quadrada. As linhas 8 e 9 são responsáveis pela leitura do número. A linha 11 é o ponto de interesse neste exercício, veja que a variável raiz recebe a função

sqrt(numero), isso, porque a função sqrt() retorna um valor e requer um argumento,

desta forma, a função irá calcular a raiz quadrada do número passado como argumento e retornar à instrução que a invocou o resultado do cálculo, neste caso, a atribuição à variável raiz é que foi responsável pela invocação da função.

7.2.2.1 Função para cálculo da potência

A função para cálculo da potência, pow(), requer dois argumentos conforme pode ser visto na sintaxe a seguir. O primeiro argumento é a base, ou seja, o número que deseja-se que seja calculado a sua potência, e o segundo argumento é o expoente, que é o valor no qual, o número da base será elevado (SCHILDT,1996). Assim como na função sqrt(), a função pow() também retorna um double, no caso, o valor calculado, e também admite valores do tipo float. Veja na sequência um exercício de exemplo do uso da função pow().

1 //Sintaxe:

2 #include <math.h>

114 Aula 7. Funções

7.2.3

Exercício de Exemplo

Faça um programa em C que leia um número e um expoente, após a leitura, calcule e imprima a potência do número lido em relação ao expoente também lido.

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 5 void main() 6 {

7 float base, expoente, potencia;

8 printf("Informe a base: \n");

9 scanf("%f", &base);

10 printf("Informe o expoente: \n");

11 scanf("%f", &expoente);

12

13 potencia = pow(base, expoente);

14

15 printf("A potencia do numero e: %f \n", potencia);

16 }

Assim como no exemplo anterior, a biblioteca math foi incluída na linha 3. Na linha 7 foram declaradas as variáveis necessárias, base, para armazenar o número que será elevado a uma potência, expoente, que será utilizada para armazenar a potência desejada e potencia para armazenar o resultado do cálculo. Entre as linhas 8 e 11 os valores foram lidos e armazenados nas respectivas variáveis. Na linha 13 temos o uso da função pow(), veja que, o acionamento da função foi realizado pela uso da atribuição à variável potencia, e a função recebeu dois argumentos, o primeiro argumento é o valor da base e o segundo argumento é o valor do expoente. Com esses dois valores a função retornará o resultado do cálculo que será atribuído à variável potencia. Na linha 15 a função printf() se encarrega de apresentar o resultado do cálculo.

7.2.4

Funções de tratamento de texto

A linguagem C não dispõe, nativamente, do tipo string, como é comum em outras linguagens, desta forma, para armazenar texto, é preciso utilizar um vetor do tipo char, como se trata de um vetor, então, algumas operações não são possíveis de forma direta, como é possível com outros tipos nativos. Duas operações em especial são as de maior uso, atribuição e comparação. A seguir serão discutidas duas funções da biblioteca

string que facilitam essas tarefas.

7.2.4.1 Função para atribuição de texto

1 void main()

2 {

3 char nome[30], novoNome[30];

4 nome = novoNome;

5 .

6 .

7.2. Funções presentes na linguagem C 115

Em linguagem C, a operação na linha 4 do código-fonte apresentado neste início de tópico não é permitida, porque como nome e novoNome são dois vetores, não há como garantir, por exemplo, que os dois vetores tenham a mesma dimensão, ou que as dimensões sejam compatíveis, então, não é possível fazer a atribuição direta, como na linha 4 do trecho de código à seguir. É necessário então, percorrer o vetor de origem e, a cada posição, atribuir o valor ao vetor de destino, contudo, várias validações devem ser previamente realizadas, como a compatibilidade de tamanho entre os vetores.

Realizar essas operações requer um bom trabalho, além disso, trata-se de uma operação recorrente em programação, desta forma, é conveniente ter uma função que facilite esta operação. A biblioteca string disponibiliza a função strcpy() que faz a atribuição de um vetor do tipo char a outro vetor, também do tipo char. Além disso, faz as verificações necessárias, lançando as exceções quando for o caso. A seguir a sintaxe da função e um exemplo de uso.

1 //Sintaxe:

2 #include <string.h>

3 char *strcpy(char *str1, const char *str2);

Como pode-se ver na sintaxe, a biblioteca string.h deve ser incluída no código-fonte. Outro detalhe é que a função strcpy() recebe dois parâmetros, o primeiro, str1, é o vetor que receberá os valores do segundo vetor, que no caso é o segundo argumento, str2, ambos os argumentos devem ser do tipo char (SCHILDT,1996). Como a função recebe como argumento os dois vetores envolvidos na operação, então não há necessidade da atribuição tradicional, como pode ser visto no exemplo a seguir, na linha 11, a função é invocada com os dois argumentos necessários e ela se encarregará de fazer o restante do trabalho. 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 void main() 6 {

7 char nome[30], novoNome[30];

8 printf("Informe o novo nome: \n");

9 scanf("%s", &novoNome);

10

11 strcpy(nome, novoNome);

12

13 printf("O novo nome e: %s \n", nome);

14 }

7.2.4.2 Função para comparação de texto

Comparar texto de forma direta, por exemplo, utilizando o sinal de igualdade, é outra ação indisponível na linguagem C, pois, novamente, o uso de vetores, impede isso, visto que, comparar dois vetores, implica em analisar cada posição comparando com a posição correspondente do outro vetor e novamente, é uma operação recorrente que demanda uma função para isso, desta forma, a biblioteca string disponibiliza uma função para facilitar essa operação, strcmp(), que faz a comparação entre dois vetores devolvendo um inteiro 0 (zero), caso os dois textos sejam iguais e diferente de zero, no caso contrário (SCHILDT,1996). Veja a seguir a sintaxe:

116 Aula 7. Funções

1 //Sintaxe:

2 #include <string.h>

3 int strcmp(const char *str1, const char *str2);

A biblioteca string.h deve ser incluída para uso da função strcmp(). Veja que a função retorna um inteiro, se o retorno é igual a 0 (zero), os dois textos são iguais, se é

diferente de 0 (zero), os dois textos são diferentes. O primeiro argumento informado é

o primeiro vetor do tipo char que pretende-se comparar e o segundo argumento é o vetor a ser comparado com o primeiro. Veja a seguir um exemplo de uso da função.

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 void main() 6 {

7 char nome[30]={'t','e','s','t','e'}, novoNome[30];

8 printf("Informe o novo nome: \n");

9 scanf("%s", &novoNome);

10

11 //if (nome == novoNome) -- nao funciona!

12 if (strcmp(nome, novoNome) == 0)

13 printf("Os nomes sao iguais! \n");

14 else

15 printf("Os nomes sao diferentes! \n");

16 }

Na linha 3 do exemplo, a biblioteca string.h é incluída ao código-fonte. Veja o código comentado na linha 11, note que trata-se da comparação na forma tradicional, contudo esse código não funciona, pois nome e novoNome são vetores, assim, na linha 12 foi utilizada a função strcmp() para fazer a comparação, então o retorno da função é comparado com 0, se a condição retornar verdadeiro, a linha 13 será executada, se retornar falso, então a linha 15 será executada.

No documento Introdução ao C em 10 aulas (páginas 116-120)