Baixe o app para aproveitar ainda mais
Prévia do material em texto
2019.22020.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 ESTRUTURAS DE DADOS CCT0637 Aula 3 PROFESSOR: EDIBERTO MARIANO 1 2019.22020.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 MODULARIZAÇÃO (Funções e Procedimentos) 2 ESTRUTURAS DE DADOS 2019.22020.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 CONTEÚDOS: Definição (Funções e Procedimentos) Passagem de parâmetros - Passagem de parâmetros por valor - Passagem de parâmetros por referência Escopo de variáveis e Retorno de valores 3 ESTRUTURAS DE DADOS 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Definição: ✓ Conjunto de comandos agrupados em um bloco que recebe um nome e através deste pode ser ativado. Funções - procedimentos: ✓ São blocos de instruções que realizam tarefas específicas. ✓ Permitem o reaproveitamento de código já construído (por você ou por outros programadores); ✓ Evitam que um trecho de código que seja repetido várias vezes dentro de um mesmo programa; ✓ Permitem a alteração de um trecho de código de uma forma mais rápida. Com o uso de uma função é preciso alterar apenas dentro da função que se deseja; 3. Modularização (Funções e Procedimentos) 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados ✓ Evitar que os blocos do programa não fiquem grandes demais e, por consequência, mais difíceis de entender. ✓ Facilitar a leitura do programa-fonte de uma forma mais fácil. ✓ Separar o programa em partes(blocos) que possam ser logicamente compreendidos de forma isolada. ✓ Carregados uma vez, podem ser executado quantas vezes for necessário. ✓ Podem ser usados para economizar espaço e tempo de programação já que podem ser usadas várias vezes num mesmo programa. Modularização (Funções e Procedimentos) 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados ✓ Cada módulo, além de ter acesso às variáveis do programa que o chamou (são as variáveis globais), pode ter suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada. ✓ Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros Modularização (Funções e Procedimentos) 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Funções PARTES OBRIGATÓRIAS DE UMA FUNÇÃO: - Tipo - Nome - Corpo - Podem-se inserir módulos em um algoritmo. Para isso, pode-se utilizar "Procedimentos" ou "Funções". As ações das "Funções" e dos "Procedimentos" são hierarquicamente subordinadas a um módulo principal. - Cada "Função" ou "Procedimento" pode utilizar constantes ou variáveis do módulo principal ou definir suas próprias constantes ou variáveis. - Função pode retornar ou não valor. 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Funções Em C não existe uma distinção entre funções e subrotinas. Ou seja, todas as subrotinas, do ponto de vista de algoritmos, podem ser tratadas como funções que não retornam nenhum valor. Formato de declaração de funções: Tipo de retorno nome_da_função (tipo1 param1, tipo2 param2,..., tipoN paramN) { //corpo da função return valor de retorno; } //fim da função Tipo de retorno especifica o tipo do valor que será retornado para quem chamou a função. Quando o tipo de retorno for void isto significa que se trata de uma função que se comporta como uma subrotina; ou seja, a função não necessita retornar nenhum valor, apenas ser chamada. 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Funções sem retorno e sem parâmetros tipo_funcao nome_funcao() { //variáveis locais //corpo da função } #include<iostream> using namespace std; void mostra() //void é opcional { int a = 10; cout<<"Valor de a = "<<a; } int main(){ mostra(); return 0; //OPCIONAL } 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados tipo_funcao nome_funcao(parametros) { //variáveis locais //corpo da função //variável do mesmo tipo_funcao return = nome_de variavel } #include<iostream> using namespace std; void mostra(int x) { cout<<"Valor de x = "<<x; } int main(){ int a = 10; mostra(a); return 0; //OPCIONAL } Funções sem retorno e com parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Tipo especial de procedimento onde depois de executada a chamada, o valor calculado é retornado no nome da função que passa a ser uma variável da expressão. tipo_funcao nome_funcao(parametros) { //variáveis locais //corpo da função //variável do mesmo tipo_funcao return = nome_de variavel } #include<iostream> using namespace std; int mostra(int n) { return n; } int main() { cout<<mostra(23); return 0; //OPCIONAL } Funções com retorno e com parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Função Recursiva – são aquelas que chamam a si próprias. função fatorial(n) { se (n <= 1) retorne 1; senão retorne n * fatorial(n-1); } Funções com retorno e com parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Funções - Exemplo Declaração da função no programa int soma(int a, int b); int produto(int a, int b); Implementação: int soma(int a, int b){ return a+b; } int produto(int a, int b){ return a*b; } 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Procedimentos São estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. operador nome_procedimento(parametros) { // variáveis locais //corpo do procedimento // //não retorna valores } Os procedimentos (procedures) diferem das funções apenas por não retornarem resultado, imagine um procedimento que envia e-mail, precisa retornar resultado? Sintaxe: 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Procedimentos - exemplo Declaração do procedimento no programa void soma(int a, int b); void produto(int a, int b); Implementação: void soma(int a, int b){ … } void produto(int a, int b){ … } 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Funções e procedimentos podem ou não receber parâmetros. Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros. Parâmetros - são valores que, na linha de chamada, ficam entre os parênteses e que estão separados por vírgulas. Variável global é vista pelo programa principal e por todos os módulos pertencentes a ele. Variável local é visível ao módulo em que ela foi declarada e aos módulos hierarquicamente inferiores. Estruturas de Dados Parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 - Modularização em C++ Os parâmetros param1 a paramN identificam os parâmetros que se deseja passar para a função. Cada um destes parâmetros passa a ser uma variável local da função de tipo tipo1 a tipoN e é inicializado com o valor que foi passado para si no momento da chamada da função. Funções que não recebem nenhum valor como parâmetro devem ser declaradas com a Palavra void entre os parênteses. Tipo de retorno nome_da_função (tipo1 param1, tipo2 param2,..., tipoN paramN) { //corpo da função return valor de retorno; } //fim da função Estruturas de Dados Parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula03 2020.2 Estruturas de Dados Passagens de Parâmetros por valor Parâmetros 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Parâmetros Atenção!!! • Os parâmetros atuais (aqueles chamados pela função) devem ser dos mesmos tipos dos parâmetros formais. • Entretanto, ter cuidado se as três condições a seguir se verificarem: ✓ Usar um compilador que não exige a declaração da função antes de usar. ✓ Usar uma função antes de tê-la declarado. ✓ Os parâmetros formais e reais não forem exatamente do mesmo tipo. • Se as três condições se verificarem o resultado da execução da função é imprevisível! 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Escopo de Variáveis • Escopo de uma variável é a parte de um programa em que ela é referenciada ou o bloco de código onde a variável é válida. • O escopo de uma variável declarada na lista de parâmetros de um método é o corpo do método. • Uma variável local é visível no bloco de instruções em que é declarada desde o ponto da declaração até o final do bloco. • Uma variável declarada no cabeçalho de um for tem seu escopo apenas no corpo do for. • O escopo de um campo de classe (atributo) é toda a classe (variável global). 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Escopo de Variáveis Protótipo da função Variável global Variável local 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Exemplo de declaração e uso de variáveis globais: 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Passagens de Parâmetros por Referência com ponteiros • Em C++, os programadores podem utilizar ponteiros e o operador de indireção (*) para realizar a passagem por referência. Ao chamar uma função com um argumento que deve ser modificado, o endereço do argumento é passado. Isso normalmente é realizado aplicando o operador de endereço (&) ao nome da variável cujo valor será modificado. • Quando o endereço de uma variável é passado para uma função, o operador de indireção (*) pode ser utilizado na função para formar um sinônimo para o nome da variável – isso por sua vez pode ser utilizado para modificar o valor da variável naquela localização na memória do chamador. 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Passagens de Parâmetros por Referência com ponteiros Com uso de Passagem por Referência com um argumento de ponteiro. O programa ao lado possue uma função que eleva um inteiro ao cubo. 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Aula 3 - Exercícios EXERCÍCIO 01 – Codifique um programa em C++ que invoque (chame) uma função passando um valor como parâmetro, retorne o mesmo e o exiba na tela o valor passado/retornado. EXERCÍCIO 02 – Codifique um programa em C++ que invoque (chame) uma função passando um valor como parâmetro, retorne o valor passado adicionando dele mais ele mesmo, a seguir exiba a soma na tela. EXERCÍCIO 03 – Codifique a função main() em C++, que invoque (chame) uma função passando um valor como parâmetro da função descrita abaixo, a seguir exiba o resultado na tela. int mostra(int n) { int a = 20 return n + a; } 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Aula 3 - Exercícios EXERCÍCIO 04 – Analise o código abaixo e informa o que será exibido na tela após a execução do mesmo. #include<iostream.h> // PARA USAR O COUT #include<conio.h> int m(int n) { int i; for(i=0; i<3; i++) n+=1; return n; } int main() { cout<<m(8); //SO COM A DECLARAÇÃO DA BIBLIOTECA IOSTREAM.H // C++ getch(); return 0; //OPCIONAL } EXERCÍCIO 05 – Codifique a função main() em C++, que invoque (chame) a função descrita abaixo, passando valores para a mesma via teclado(console). #include<iostream> using namespace std; void func1(int numero, char carac[30], float valor) { cout <<"Valores Informados = "<< numero <<" "<<carac<<" "<<valor; } 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Aula 3 - Exercícios EXERCÍCIO 06 – Codifique um programa em C++ que: a - possua uma função que eleva um inteiro ao cubo. b - observe que a função chamadora tem a oportunidade de examinar o resultado da chamada de função antes de modificar o valor da variável numero. 2019.2 Professor: Ediberto Mariano - Estrutura de Dados - Aula 03 2020.2 Estruturas de Dados Aula 3 - Exercícios EXERCÍCIO 07 – Analise o código em C a seguir: //#include<iostream.h> #include <stdio.h> #include<conio.h> int f(int n) { if(n>10) return 3+f(n-2); if(n<10) return 1; return 0; } int m(int n) { int i; for(i=0; i<3; i++) n+=f(15); return n; } int main() { //cout<<m(1500); //´SO COM A DECLARAÇÃO DA BIBLIOTECA IOSTREAM.H // C++ printf("%d",m(1500)); getch(); return 0; //OPCIONAL } Que resultado é impresso por esse código? A[ ] 0 B[ ] 1530 C[ ] 1521 D[ ] 1528 E[ ] 1540
Compartilhar