• Nenhum resultado encontrado

Aula06-Modularização–ParteI

N/A
N/A
Protected

Academic year: 2021

Share "Aula06-Modularização–ParteI"

Copied!
5
0
0

Texto

(1)

Modularização – Parte I

À medida que vamos resolvendo problemas mais complexos, o tamanho dos nossos programas vai crescendo, assim, fica difícil acompanhar as funcionalidades dos trechos de programas. Para que os programas fiquem organizados e fáceis de manter, e até mesmo para que seja possível implementar a lógica definida para o programa, precisamos muitas vezes executar partes de códigos em vários pontos do programa.

No C como em outras linguagens existe a possibilidade de agrupar trechos de programas em funções. Esta técnica de decomposição em unidades funcionais é conhecida como modularização. Uma função é um subprograma que executa uma série de instruções e pode retornar ou não um valor como resultado.

Por que modularizar?

• Dividir um problema em subproblemas;

• Módulos menores facilitam a depuração (em outras palavras: encontrar erros); • Dividir o desenvolvimento entre vários programadores;

• “Reutilização” de trechos de programas.

Ferramentas para modularização

Dentre as ferramentas de modularização podem-se destacar as funções e procedimentos.

Função: Conjunto de instruções, com interface bem definida, que efetua um dado cálculo.

Procedimento: Conjunto de instruções, com interface bem definida, que faz qualquer coisa.

Note-se, no entanto, que esta distinção não é feita pelo C, que trata funções e procedimentos de igual forma. A linguagem C é baseada no conceito de blocos de construção chamados de funções. Um programa em C é uma coleção de uma ou mais funções, onde cada função deve realizar uma tarefa bem específica.

Uma função é uma sub-rotina que contém uma ou mais declarações e realiza uma ou mais tarefas, podendo atuar sobre dados e retornar um valor. Cada função tem seu próprio nome. Quando um nome é encontrado, a execução do programa é desviada para a função e, quando retorna, a execução recomeça na próxima linha da função que tiver feito a chamada.

Exemplo:

Figura 1 – Esquema de execução programas com diversas funções

A chamada de uma função é feita através da citação do seu nome no programa seguido opcionalmente de seus argumentos iniciais entre parênteses, separados por vírgulas. Toda função inicia com abre chaves “{“ e é encerrada com fecha chaves “}”e, então, a execução retorna para a instrução seguinte à chamada da função.

(2)

Exemplo

Considerando um programa que necessita imprimir a mensagem "Pressione a tecla ENTER" várias vezes durante sua execução e, a cada vez, tenha que esperar o usuário teclar ENTER. Caso o usuário tecle algo diferente o programa deve emitir um BEEP.

Neste caso, pode ser feito um laço de WHILE sempre que isto seja necessário e, uma alternativa é criar uma função. Com o uso de funções, este processo de repetição fica simplificado.

#include <stdio.h> #include <windows.h>

void EsperaEnter() // Definição da função "EsperaEnter" {

int tecla; // variável local da função "EsperaEnter" printf("Pressione ENTER\n");

do // início do laço {

tecla = getch(); //função predefinida if (tecla !=13) // Se não for ENTER {

Beep(587,500); // Ativa a emissão de um BEEP Sleep(5); //Mantém a emissão do som por 5 ms }

} while(tecla != 13); // 13 é o código ASCII do ENTER }

void main() {

EsperaEnter(); // Chamada da função EsperaEnter();

EsperaEnter(); }

Declarando e definindo funções

A definição da função informa ao compilador o nome da função, o tipo de retorno, os parâmetros e como ela trabalha. A única exigência é que a função seja definida antes de ser utilizada, que pode causar problemas, uma vez que a maioria dos usuários prefere que o programa principal main( ) esteja no início do programa. A solução é declarar a função separadamente no início do programa. Portanto, inicialmente a função deve ser declarada e depois definida no local desejado.

Conforme mencionado anteriormente, a definição da função informa ao compilador o nome da função, o tipo de retorno, os parâmetros e como ela trabalha. Sua forma geral é:

<tipo de retorno> <identificador> (lista de parâmetros) {

<código da função> }

Onde:

Identificador: nome da função sempre seguido pro parêntesis

Tipo de retorno: (opcional) determina o tipo de valor que a função retorna através da declaração return. Pode ser qualquer tio válido. Se um tipo for especificado a função retorna um resultado inteiro, que é o tipo padrão do C.

Lista de parâmetros: lista de todos s tipos e nomes das variáveis que recebem valores dos argumentos quando a função for chamada.

Alguns programadores preferem que o início do programa seja a primeira parte de seu programa. Para isto a linguagem C permite que se declare uma função, antes de defini-la. Esta declaração é feita através do protótipo da função. O protótipo da função é o trecho de código que especifica o tipo de retorno, o nome e os parâmetros da função. Por ser uma instrução, deve ser encerrada com ponto e vírgula.

Em geral, pode-se dar qualquer nome a uma função, com exceção de main(). Os tipos de retorno podem ser os tipos básicos, com modificadores de tipos da linguagem C, ou ainda, tipos definidos pelo usuário. Sintaxe do protótipo de uma função:

<tipo de retorno> nome da função ( <lista de parâmetros>);

(3)

#include <stdio.h> #include <windows.h>

void SOMA(int a, int b); // Protótipo da função SOMA( ) void main()

{

int total;

SOMA(14,15); // Chamada da função SOMA antes de sua definição, mas após sua prototipação

system("pause"); }

void SOMA(int a, int b) // Definição da função SOMA( ) {

int total; // a declaração de variáveis é igual ao que se faz na função main( ) total = a + b;

printf("A soma %i \n",total); }

Parâmetros e argumentos das funções

O uso de parâmetros torna mais amplo o uso de uma função,pois possibilitam que seja definida sobre quais dados a função deve operar. A função sleep(tempo), por exemplo, recebe como parâmetro o tempo de espera desejado, permitindo que se defina seu comportamento a partir deste valor.

Para definir os parâmetros de uma função o programador deve explicitá-los como se estive declarando uma variável, entre os parênteses do cabeçalho da função. Caso precise declarar mais de um parâmetro, basta separá-los por vírgulas. Um parâmetro, portanto, é uma declaração de que tipo de valor será passado para função, o verdadeiro valor passado pela função que fez a chamada é denominado argumento. No exemplo acima, a função SOMA( ) possui dois parâmetros, sendo que o primeiro o segundo são um int. Os parâmetros da função na sua declaração são chamados parâmetros formais. Através dos argumentos na chamada da função são passados valores para os parâmetros da função, de acordo com a posição de cada parâmetro. Ou seja, o primeiro argumento (da chamada) define o valor o primeiro parâmetro (na definição da função), o segundo argumento define o valor do segundo parâmetro e assim por diante. Os nomes dos argumentos na chamada não têm relação com os nomes dos parâmetros na definição da função. Exemplo: Cálculo do Produto

Neste exemplo, é a função produto( ) é definida com três parâmetros inteiros A, B e C, e retorna um inteiro. Na função main( ) é feita uma chamada para a função produto ( ), sendo passado os argumentos X=12, Y=3 e 7. Esses valores são copiados nas variáveis A, B e C, respectivamente. Uma vez efetuado o produto, o valor é retornado para a variável SAIDA. O argumento de função é simplesmente um valor que é passado para a função no momento em que ela é chamada (12, 3 e 7).

(4)

Resumindo, argumento refere-se ao valor que é usado para chamar uma função. A variável que recebe o valor dos argumentos usados na chamada da função é um parâmetro da função. As funções que levam argumentos são chamadas de funções parametrizadas, como por exemplo as funções printf( ) e scanf( ).

Declaração RETURN

Existem duas maneiras de uma função terminar a execução e retornar ao seu chamado. A primeira forma é quando a última instrução na função é executada e o finalizador da função

}

é encontrado. Por exemplo, a função SOMA, imprime a soma dos números na tela e é encerrada com o fecha chaves

}

.

void SOMA(int a, int b) // Definição da função SOMA( ) {

int total; // a declaração de variáveis é igual ao que se faz na função main( ) total = a + b;

printf("A soma %i \n",total); }

Uma vez que a mensagem é exibida, não há nada para a função fazer a seguir, então ela retorna ao lugar de onde foi chamada. A segunda maneira é quando a declaração return é encontrada. Esta declaração tem dois importantes usos:

• provoca uma saída imediata da função corrente, isto é, faz com que a execução do programa retorne para o código chamador assim que a declaração return é encontrada.

• pode ser usada para retornar um valor.

Em C, uma função pode retornar um valor para uma rotina chamadora usando a palavra reservada return. Para uma função com retorno, o tipo de retorno da função deve ser declarado. Muitas das funções de biblioteca pré-definidas retornam valores. A função produto da figura Cálculo do Produto é um exemplo disso.

Um outro tipo seria uma função que não retorna um inteiro. O programa abaixo calcula a área de um círculo, dado o seu raio. A função retorna um valor do tipo float, dado o argumento do tipo float. Neste caso, é declarado o protótipo da função área( ), permitindo que esta seja definida o main( ).

Exemplo:

#include <stdio.h>

float area(float raio); //protótipo da função area( ) void main() { float r,res; printf("Informe o raio: "); scanf("%f", &r); res = area(r);

printf("A área é: %f\n", res); }

float area(float raio) // definição da função area( ) {

return 3.1416 * raio * raio; }

Também podemos ter uma função que não retorna nada. Funções que não retornam valor podem sem declaradas como void, que impede o seu uso em qualquer expressão e ajuda a evitar um uso incorreto acidental. Funções do tipo void são puramente procedimentos.

Por exemplo, as funções func1( ) e func2( ) imprimem em cem linhas, uma seqüência de nove caracteres. Uma vez que não retornam valores, as funções são declaradas como void.

#include <stdio.h>

void func1(void), func2(void); // protótipos das funções func1( ) e func2( ) void main()

{

func1(); getch(); }

(5)

void func1(void) {

int count;

for (count = 1; count < 100; count++) func2(); }

void func2(void) {

int count;

for (count = 1; count < 10; count++) printf ("*"); printf("\n");

}

Exercícios

Veja como você está.

1. Fazer um programa, para cada um dos itens abaixo, para criar a função main( ) que testa cada uma das funções: a. Fazer uma função para mostrar na tela a seguinte saída:

********************** * FELIZ ANIVERSÁRIO * **********************

b. Criar uma função para converter a temperatura de Fahrenheit para Celsius. A temperatura em ºF é fornecida como entrada e passada como parâmetro para a função que retorna a temperatura em ºC, que deve ser mostrada no programa principal. C = ( F - 32 ) * 5 / 9

c. Elaborar uma função para ler a base e a altura de um retângulo, calcular e retornar a sua área. Na função principal é apresentado o valor da área. Area = base * altura.

d. Criar uma função que receba como parâmetro o ano e retorne 1 se for um ano bissexto e 0 se não for um ano bissexto. A função main( ) deve mostrar a mensagem apropriada.

Dicas: Um ano é bissexto se for divisível por 400. Um ano também é bissexto se for divisível por 4, mas não por 100.

Assim, o ano 2000 foi bissexto (2000 : 400 = 5). Já o ano 1900 não foi bissexto (1900 : 400 = 4 e resto 3), pois 1900 não é divisível por 400.

Desafio

2. Elaborar um programa para ler um número (N) e chamar uma função que calcula e mostra o somatório dos N primeiros números inteiros: (1 + 2 + 3 + ... + N).

3. Escrever um programa para ler um número (N) e chamar uma função que mostra a série de Fibonacci dos N termos. A série de Fibonacci é formada pela seqüência: 1, 1, 2, 3, 5, 8, 13, 21,....

4. Desenvolver um programa para ler dois números e chamar uma função que retorna a potência do 1º número elevado ao 2º número. Mostrar o retorno da função no programa principal. Por exemplo, se forem informados os valores 2 e 3 a função deverá ser retornado o valor 8.

Referências

Documentos relacionados

Considerando a importância da produção de mudas no território brasileiro e o conhecimento de fertilizantes foliares, o objetivo desse trabalho foi avaliar o

Funções são tão comuns e intuitivas provavelmente você já usou funções no Excel, que mesmo sem definir o que elas são, nós já utilizamos funções nas seções anteriores:

Portanto, a inclusão das metodologias ativas é uma alternativa eficaz para auxiliar o estudante a sanar as possíveis dúvidas no decorrer da disciplina e ao mesmo

A teoria das filas de espera agrega o c,onjunto de modelos nntc;máti- cos estocásticos construídos para o estudo dos fenómenos de espera que surgem correntemente na

(2019) Pretendemos continuar a estudar esses dados com a coordenação de área de matemática da Secretaria Municipal de Educação e, estender a pesquisa aos estudantes do Ensino Médio

No sentido de verificar a estabilidade do efeito corona, foram preparadas 2 amostras de tecido engomado de algodão para cada tempo de tratamento corona (1 a 25 min.), sendo que

Alteração geométrica no teto a jusante de comporta do sistema de en- chimento e esvaziamento para eclusa de na- vegação: simulação numérica do escoamento e análise das pressões

5.- ¿Cómo se clasifican los sistemas termodinámicosá... ÿÿ.- Escribe el teorema