Modularização: funções e procedimentos (continuação)

Slides:



Advertisements
Apresentações semelhantes
Programação II Licenciatura de Ciências da Computação Padoca Calado
Advertisements

Funções em C Prof. Fabiano Utiyama.
Técnicas de Programação II Revisão TP1 Parte2
Um programa em C Bibliotecas Variáveis globais
Recursividade Função recursiva é aquela que chama a si própria.
Linguagem de Programação VI Tipos de Dados Compostos - structs
Métodos, Parâmetros, Argumentos e Contratos
Recursividade Prof. Rosana Palazon.
Recursividade Prof. Alex F. V. Machado
Introdução à Programação
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Linguagem de Programação C++
Universidade Federal do Espírito Santo
Linguagem C Funções.
Estruturas de Dados Homogêneas Unidimensionais – Vetores e Strings
Linguagem C Estruturas de Seleção.
Matrizes e Funções - Continuação
Funções.
Modularização: funções e procedimentos
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Matrizes clássicas e vectores em C++
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
Aula 10 Tipos Abstractos de Dados I. 2003/2004 Introdução à Programação 2 Flashback Lembram-se da Aula 4?
Aula 6 Instruções de selecção e instruções condicionais.
Revisão da Linguagem C.
Iniciação à linguagem C++
Algoritmos e linguagens de programação 1 (aula 05)
Revisão /*======================================================*/
Introdução à Programação
Informática e Computação Estrutura de Repetição aula 13
Exercício 1 Faça um programa que receba como entrada o nome e o salário de um funcionário de uma empresa e que calcule o novo valor do salário do.
Aula 07.
PROGRAMAÇÃO ESTRUTURADA II
Professor: Bruno Moser de Alvarenga
Linguagem de Programação II
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Seminário 1: Revisão de C
VETORES Roteiro da aula Referência ao Programa: Estrutura de Dados
Programação de Computadores
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Introdução à linguagem C
Programação em C++ Compiladores
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
Técnicas de Desenvolvimento de Programas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Procedimentos e Funções
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Estruturas de Dados Aula 8: Tipos Abstratos de Dados 30/04/2014.
Informática e Computação Estrutura de Repetição aula 12
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 07) Prof. Alessandro Bernardo.
Introdução à Linguagem C
Declarando e Chamando Funções
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Revisão Luis Antonio Tavares
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 09) Prof. Alessandro Bernardo.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
VETORES AULA 01 Roteiro da aula Referência ao Programa: Estrutura de Dados.  Variáveis Compostas homogenias   Objetivo: apresentar VETOR.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguaguem de Programação II
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PRE 1002 Éverlin Marques 2015/1.
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
Fundamentos de Programação 1
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Funções definidas pelo usuário Escola Olímpio Professor Marcelo Josué Telles Linguagem de Programação I1 de 36.
Transcrição da apresentação:

Modularização: funções e procedimentos (continuação) Aula 4 Modularização: funções e procedimentos (continuação)

Somador de fracções #include <iostream> using namespace std; /** … */ int mdc(int const m, int const n) { ... } void escreveFracção(int const n, int const d) int main()

Máximo divisor comum /** Devolve o máximo divisor comum dos inteiros positivos passados como argumento. @pre 0 < m e 0 < n. @post o valor r devolvido é o mdc de m e n. */ int mdc(int const m, int const n) { assert(0 < m); assert(0 < n); int r; if(m < n) r = m; else r = n; while(m % r != 0 or n % r != 0) --r; assert(0 < r); assert(m % r == 0); assert(n % r == 0); return r; }

Escreve fracção /** Escreve no ecrã uma fracção, no formato usual, que lhe é passada na forma de dois argumentos inteiros positivos. @pre nenhuma. @post o ecrã contém n/d em que n e d são os valores de n e d em base decimal. */ void escreveFracção(int const n, int const d) { cout << n; if(d != 1) cout << ‘/’ << d; }

Principal: Ler fracções cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; int k = mdc(n1, d1); n1 /= k; d1 /= k; k = mdc(n2, d2); n2 /= k; d2 /= k;

Principal: Calcular fracção soma reduzida int n = d2 * n1 + d1 * n2; int d = d1 * d2; k = mdc(n, d); n /= k; d /= k;

Principal: Escrever resultado cout << "A soma de "; escreveFracção(n1, d1); cout << " com "; escreveFracção(n2, d2); cout << " é "; escreveFracção(n, d); cout << '.' << endl;

Redução de fracções // Reduz fracção: k = mdc(n, d); n /= k; d /= k;

Módulo reduzFracção() /** Reduz a fracção recebida como argumento. @pre 0 < n e 0 < d. @post mdc(n, d) = 1 (e n/d representa o mesmo racional que originalmente). */ void reduzFracção(int n, int d) { assert(0 < n); assert(0 < d); int const k = mdc(n, d); n /= k; d /= k; assert(mdc(n, d) == 1); }

Principal: Calcular fracção soma reduzida int n = d2 * n1 + d1 * n2; int d = d1 * d2; reduzFracção(n, d);

Principal: Ler fracções cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; reduzFracção(n1, d1); reduzFracção(n2, d2);

Principal: Ler fracções cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; reduzFracção(n1, d1); reduzFracção(n2, d2);

Traçado main() n1 : int ? d1 : int ?

Traçado main() reduzFracção() n : int n1 : int 6 6 d : int d1 : int 9 k : int {frozen} 3

Traçado main() reduzFracção() n : int n1 : int 2 6 d : int d1 : int 9 k : int {frozen} 3

Traçado main() reduzFracção() n : int n1 : int 2 6 d : int d1 : int 3 9 k : int {frozen} 3

Traçado main() n1 : int 6 d1 : int 9

Passagem por referência Parâmetros são sinónimos de argumentos Argumentos não podem ser literais Parâmetros referências servem de entradas e de saídas

Módulo reduzFracção() /** Reduz a fracção recebida como argumento. @pre 0 < n e 0 < d. @post mdc(n, d) = 1 (e n/d representa o mesmo racional que originalmente). */ void reduzFracção(int& n, int& d) { assert(0 < n); assert(0 < d); int const k = mdc(n, d); n /= k; d /= k; assert(mdc(n, d) == 1); } Parâmetro é referência!

Principal: Ler fracções cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; reduzFracção(n1, d1); reduzFracção(n2, d2);

Traçado main() n1 : int ? d1 : int ?

Traçado main() reduzFracção() n : int& n1 : int 6 d : int& d1 : int 9 k : int {frozen} 3

Traçado main() reduzFracção() n : int& n1 : int 2 d : int& d1 : int 9 k : int {frozen} 3

Traçado main() reduzFracção() n : int& n1 : int 2 d : int& d1 : int 3 k : int {frozen} 3

Traçado main() reduzFracção() n : int& n1 : int 2 d : int& d1 : int 3 k : int {frozen} 3

Traçado main() n1 : int 2 d1 : int 3

Blocos de instruções Âmbito e permanência

Bloco de instruções Bloco de instruções (ou instrução composta): Conjunto de instruções agrupadas Funcionam como uma só instrução { // Instruções: ... }

Exemplo int const j = 1; int main() { // Bloco 1. int i = 2; if(0 < i) { // Bloco 2. int j = i; int const i = 3; cout << i << j << endl; }

Tipos de instâncias (para já) Instâncias locais Definidas dentro de rotinas Pertencem ao contexto do bloco de instruções onde foram definidas Instâncias globais Definidas fora das rotinas Pertencem ao contexto global Dentro do mesmo contexto não podem ser definidas duas instâncias com o mesmo nome

Definições erradas int const j = 1; int j = 11; // erro! int main() { int i = 2; int i = 22; // erro! if(0 < i) int j = i; int const i = 3; int const i = 33; // erro! cout << i << ' ' << j << endl; }

Âmbito e permanência (I) Zona de programa na qual o nome da instância é visível Instância global Visível desde definição até fim do ficheiro Instância local Visível desde definição até fim do seu bloco, incluindo blocos embutidos

Linhas de visibilidade int const j = 1; int main() { // Bloco 1. int i = 2; if(0 < i) { // Bloco 2. int j = i; int const i = 3; cout << i << j << endl; }

Ocultação int const j = 1; int main() { // Bloco 1. int i = 2; if(0 < i) { // Bloco 2. int j = i; int const i = 3; cout << i << j << endl; } Ocultações

Âmbito e permanência (II) Período de tempo durante o qual a instância existe Instâncias globais Do princípio ao fim do programa: estáticas Instâncias locais Desde a execução da definição até saída do bloco: automáticas Diz-se que as instâncias são construídas e destruídas

Principal: Ler fracções cout << "Introduza duas fracções (numerador denominador): "; int n1, d1, n2, d2; cin >> n1 >> d1 >> n2 >> d2; reduzFracção(n1, d1); reduzFracção(n2, d2); int k = mdc(n1, d1);

Construção e destruição main() n1 : int ? d1 : int ? k : int ?

Construção e destruição main() mdc() n1 : int 6 m : int {frozen} 6 d1 : int 9 n : int {frozen} 9 k : int ? r : int ?

Construção e destruição main() mdc() n1 : int 6 m : int {frozen} 6 d1 : int 9 n : int {frozen} 9 k : int ? r : int 6

Construção e destruição main() mdc() n1 : int 6 m : int {frozen} 6 d1 : int 9 n : int {frozen} 9 k : int ? r : int 5

Construção e destruição main() mdc() n1 : int 6 m : int {frozen} 6 d1 : int 9 n : int {frozen} 9 k : int ? r : int 4

Construção e destruição main() mdc() n1 : int 6 m : int {frozen} 6 d1 : int 9 n : int {frozen} 9 k : int ? r : int 3

Construção e destruição main() n1 : int 6 d1 : int 9 k : int 3

Variáveis globais Vantagens Desvantagens Não há!!!!! Rotinas sem significado evidente Alterar nomes das variáveis implica alterar todo o programa Reaproveitamento de código mais difícil

Constantes globais Muito úteis! #include <iostream> using namespace std; double const π = 3.14159; double perímetroDeCircunferênciaCom(double const raio) { return 2.0 * π * raio; } int main() cout << "Insira o raio: "; double raio; cin >> raio; cout << "Perímetro: “ << perímetroDeCircunferênciaCom(raio) << endl; cout << “Área: “ << π * raio * raio << endl;

Constantes globais Muito úteis! #include <iostream> using namespace std; Double const pi = 3.14159; double perímetroDeCircunferênciaCom(double const raio) { return 2.0 * pi * raio; } int main() cout << "Insira o raio: "; double raio; cin >> raio; cout << "Perímetro: “ << perímetroDeCircunferênciaCom(raio) << endl; cout << “Área: “ << pi * raio * raio << endl;

Declarações Declaração Definição #include <iostream> using namespace std; int main() {     void escreveFracção(int n, int d); void reduzFracção(int& n, int& d); ... } void escreveFracção(int const n, int const d) void reduzFracção(int& n, int& d)     int mdc(int m, int n); int mdc(int const m, int const n) Declaração Definição

Nomes Instâncias Instâncias booleanas Procedimentos Funções Substantivo ou frase substantiva: aquilo que é guardado Instâncias booleanas Afirmação que pode ser verdadeira ou falsa Procedimentos Acção (verbo) no imperativo e complementos Funções Substantivo ou frase substantiva: aquilo que é devolvido Funções booleanas ou predicados

Nomes Instâncias Instâncias booleanas Procedimentos Funções Esta instância guarda … Instâncias booleanas Esta instância indica se … Procedimentos Este procedimento … Funções Esta função devolve … Funções booleanas ou predicados Esta função devolve um valor que indica se …

Grafismo Instâncias Rotinas Separar palavras com _ Não separar palavras Iniciar palavras excepto primeira com maiúsculas

Exemplos int número_de_alunos = 20; bool hoje_há_aulas = true; void escreveFracção(int const numerador, int const denominador) double quadradoDe(double const valor) bool sãoIguais(char const a, char const b)

Tamanho das rotinas Ideal Normal Em casos extremos Nunca mais! 1 a 3 linhas Normal até 10 linhas Em casos extremos até 60 linhas Nunca mais!

Aula 4: Sumário Passagem de argumentos por valor e referência. Blocos de instruções. Blocos embutidos. Instâncias locais e globais: âmbito, permanência e ocultação. Regra da definição única. Perigos das variáveis globais. Uso de constantes globais. Parâmetros como instâncias locais. Declaração vs. definição. Noções sobre nomes de instâncias, funções e procedimentos. Comprimento típico de rotinas.