Modularidade - Funções e Procedimentos

Documentos relacionados
Modularidade - Fun ções e Procedimentos

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

MC-102 Aula 13. Instituto de Computação Unicamp. 29 de Setembro de 2016

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Introdução à Programação Aula 09. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Explicação do programa:

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Aula 12: Funções. CI208 - Programação de Computadores. Prof. MSc. Diego Roberto Antunes

Aula 07 Introdução à Programação Subprogramas

Programação: Vetores

Aula 8 Oficina de Programação Vetores. Profa. Elaine Faria UFU

Aula 15 - Aula sobre Funções e Procedimentos

ponteiros INF Programação I Prof. Roberto Azevedo

Variáveis, Tipos de Dados e Operadores

Algoritmos e Programação

Linguagem C: Introdução

Algoritmos e Programação

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

DAS5102 Fundamentos da Estrutura da Informação

1ª Lista de Exercícios

Aula 7: Sub-rotinas e Funções

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

ALGORITMOS I. Procedimentos e Funções

Linguagem C. Programação Estruturada. Modularização (Funções) Prof. Luis Nícolas de Amorim Trigo

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Conhecendo a Linguagem de Programação C

Introdução a Programação de Jogos

Computação 2. Aula 2. Profª. Fabiany Vetores e Matrizes

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Ponteiros de Variáveis

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

1) Operadores de auto incremento ++ e auto decremento --

Algoritmos e Programação

Programação em Linguagem C

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Linguagem C. André Tavares da Silva.

Linguagem C vetores. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

Algoritmos e Programação. Linguagem C Procedimentos e. Eliane Pozzebon

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Linguagem C Funções. André Tavares da Silva.

Introdução a Computação

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Aula 7 Oficina de Programação Estruturas de Repetição no C. Profa. Elaine Faria UFU

12 - Dados Estruturados Vetores, Matrizes e Strings

LISTA DE EXERCÍCIOS MÊS 04

Ponteiros e Tabelas. K&R: Capítulo 5

Métodos Computacionais. Funções, Escopo de Variáveis e Ponteiros

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Programação Básica. Estrutura de um algoritmo

Transcrição:

Modularidade - Funções e Procedimentos José Gustavo de Souza Paiva Problema Em diversas situações, é preciso executar uma tarefa específica diversas vezes em um programa, variando apenas os dados de entrada dessa tarefa Exemplo: Combinação simples C n, p n! p!( n p)! 1

Problema Outros exemplos : Mostrar mensagens na tela Ler os elementos que preenchem um vetor Zerar um vetor Fazer uma operação matricial Modularização: divisão de um programa em módulos responsáveis por tarefas específicas Sub-rotinas Blocos de instruções que realizam alguma tarefa específica Seu código é carregado uma vez, e pode ser utilizado diversas vezes no programa Motivações Evitar repetição de código Dividir e estruturar melhor a resolução de um problema Aumentar a legibilidade do código 2

Sub-rotinas Vantagens Evitar que os blocos do programa fiquem grandes demais e, por conseq uência, mais difíceis de entender Facilitar a leitura do programa-fonte Separar o programa em partes (blocos) que possam ser logicamente compreendidos de forma isolada Permitir o reaproveitamento de código já construído (por você ou por outros programadores) Evitar que um trecho de código seja repetido várias vezes dentro de um mesmo programa Permitir a alteração (manutenção) de um trecho de código de uma forma mais rápida (é preciso alterar apenas dentro d a sub-rotina que se deseja) Sub-rotinas O fluxo de um programa é normalmente sequencial, e o programa é executado no estilo top-down A utilização de uma sub-rotina pode, entretanto, desviar o fluxo do programa O programa pára o que está fazendo, executa o código correspondente ao código da sub-rotina, e depois volta para a primeira instrução subsequ ente 3

Sub-rotinas em C Todo programa escrito na linguagem C tem pelo menos uma sub-rotina Ela se chama main, e representa o programa principal Toda vez que um programa escrito em C é executado, a primeira sub-rotina a ser executada é a função main Dentro da sub-rotina main, é possível chamar outras sub-rotinas que realizem tarefas relativas ao programa Sub-rotinas em C A linguagem C possui muitas sub-rotinas prédefinidas em bibliotecas que acompanham o compilador Exemplos printf scanf pow sqrt Os códigos destas sub-rotinas estão definidos dentro de bibliotecas, chamadas com o comando #include O programador pode criar novas sub-rotinas, e utilizá-las dentro do código onde foram definidas 4

Sub-rotinas em C As sub-rotinas dividem-se em Funções: retornam um valor, uma resposta ao programa Esse valor pode ser usado posteriormente NO CÓDIGO Procedimentos: não retornam valores para o programa Uma resposta ao usuário nem sempre é uma resposta de uma sub-rotina! Na linguagem C, ambas as sub-rotinas são definidas como funções Sub-rotinas em C Construção de sub-rotinas em C O tipo de retorno da sub-rotina define se ela é uma função ou um procedimento Procedimentos possuem sempre tipo void Funções possuem sempre tipos definidos, tais como int, float, char, etc. 5

Sub-rotinas em C Pode-se atribuir qualquer nome para uma função/procedimento em C, desde que não seja um nome reservado da linguagem Duas funções não podem ter o mesmo nome no mesmo programa Uma função pode possuir parâmetros Parâmetros são informações necessárias para a realização da tarefa definida na função Os parâmetros são definidos como uma lista na função Para cada parâmetro, especifica-se um tipo e um nome qualquer Exemplo de função em C Definição Chamada 6

Funções em C O resultado de uma função é sempre uma expressão Como tal, uma função pode ser chamada dentro de outra Exemplo de Procedimento em C Definição Chamada 7

Função int main() O programa principal é uma função especial, que possui um tipo fixo (int) e é invocada automaticamente pelo sistema operacional quando este inicia a execução do programa Quando utilizado, o comando return informa ao sistema operacional se o programa funcionou corretamente ou não O padrão é que um programa retorne zero caso tenha funcionado corretamente ou qualquer outro valor caso contrário Exercícios Escreva uma função C chamada media, que recebe três notas e calcula a média Faça uma função em C que receba um conjunto de valores e retorne o maior entre eles Faça uma função que mostre na tela os elementos de um vetor, que é passado como parâmetro Faça uma função que recebe um vetor X(15) de inteiros, por parâmetro, e retorna a quantidade de valores pares em X Faça uma função que recebe, por parâmetro, uma matriz A(6,6) e retorna a soma dos elementos da sua diagonal principal 8

Variáveis Globais e Locais Uma variável é chamada local se ela foi declarada dentro de uma função ou bloco de código Nesse caso, ela existe somente dentro desse escopo, e após o término da execução d o mesmo, a variável deixa de existir Uma variável é chamada global se ela for declarada fora de qualquer função ou bloco de código (ou seja, no mesmo lugar onde registros, tipos enumerados e funções são declarados) Essa variável é visível em todas as funções, qualquer função pode alterá-la e el a existe durante toda a execução do programa Variáveis Globais 9

Variáveis Globais e Locais É possível declarar variáveis locais com o mesmo nome de variáveis globais Neste caso, a variável local esconde a variável global Exemplo [2] int quadrado(){ int num, quad; scanf("%d", &num); quad = num * num; return (quad); int main(){ int result; printf("digite o numero: "); result = quadrado(); printf("quadrado do numero: %d", result); return 0; 10

Exemplo [2] int quadrado(){ int num, quad; scanf("%d", &num); quad = num * num; return (quad); Erro! int main(){ printf("digite o numero: "); quad = quadrado(); printf("quadrado do numero: %d", quad); return 0; Parâmetros Chamada por valor: é passado uma cópia da variável para a subrotina Qualquer alteração feita no parâmetro não reflete em alteração no argumento Chamada por referência: é passado o endereço da variável para a subrotina Ambas as variáveis apontam para o mesmo endereço de memória Todas as alterações realizadas no parâmetro refletem em alterações no argumento 11

Parâmetros Parâmetros passados por valor são declarados como variáveis comuns float f1(int a, float b, int c) Parâmetros a, b, c são passados por valor Parâmetros passados por referência devem ser passados como ponteiros, utilizando o símbolo * antes do nome do parâmetro float f2(int *a, float b, double *c) Parâmetros a e c são passados por referência, parâmetro b é passado por valor void p2(int *n, float a[]) Parâmetros n, a são passados por referência Vetores são sempre passados por referência Nesse caso, o acesso dentro das funções deve ser feito respeitando a notação de ponteiro Exemplo - Parâmetros por Valor [2] #include <stdio.h> int quadrado(int x){ int q = x * x; return (q); int main(){ int num, result; printf( Digite um numero: ); scanf( %d, &num); result = quadrado(num); printf( \nresultado: %d, result); return 0; 12

Exemplo - Parâmetros por Valor [2] #include <stdio.h> void quadrado(int x){ x = x * x; int main(){ int num; printf( Digite um numero: ); scanf( %d, &num); printf( \nvalor antes: %d, num); quadrado(num); printf( \nvalor depois: %d, num); return 0; Exemplo - Parâmetros por Valor [2] #include <stdio.h> float media(float a, float b){ return ((a+b)/2); int main(){ float x, y, med; printf("digite dois valores:"); scanf("%f %f", &x, &y); med = media(x,y); printf("a media eh %f :,med); return 0; 13

Exemplo - Parâmetros por Referência Parâmetros: Comparação [3] 14

Arrays como parâmetros [2] Para utilizar arrays como parâmetros de funções alguns cuidados simples são necessários Arrays são sempre passados por referência para uma função A passagem de arrays por referência evita a cópia desnecessária de grandes quantidades de dados para outras áreas de memória durante a chamada da função Arrays como parâmetros [2] Geralmente utiliza-se um segundo parâmetro (variável inteira) para passar para a função o tamanho do array separadamente Quando passamos um array por parâmetro, independente do seu tipo, o que é de fato passado é o endereço do primeiro elemento do array Ex: void imprime (int m[5], int n); Observação: Ao passar um elemento de um array, ele é passado por valor 15

Exercícios [3] Considere o código abaixo usando passagem por referência. Analise-o e explique o resultado mostrando passo a passo as alterações ocorridas no vetor a void incrementa(int *x, int *y){ *x = *x + (*y); (*y)++; int main(){ int i,a[] = {1,2,3; for (i=0; i<3; i++){ incrementa(&a[i],&a[1]); printf("\n %d",a[i]); Exercícios Escreva o que será mostrado na tela pelo seguinte programa 16

Exercícios Escreva uma função C chamada media2, que recebe quatro parâmetros, sendo os três primeiros as notas e o último um parâmetro de retorno, contendo o resultado. Este último parâmetro deve ser passado como referência Crie um programa em C que contenha um procedimento que recebe como entrada uma nota e imprime na tela se o aluno passou ou foi reprovado (nota menor que 7). O programa principal deverá fazer a leitura da nota informada pelo usuário Exercícios Escreva uma função chamada find_abs que aceite um número real do tipo double passado para ela, calcule seu valor absoluto, e mostre o valor absoluto. O valor absoluto é o próprio número se for positivo, e o negativo do número se o número for negativo Faça um programa com duas variáveis globais inicializadas com 0: número e precentual (21% do valor de número). O programa deve ler número, enviar como parâmetros número e percentual, e através de um procedimento calcular o novo valor de percentual, retornando-o alterado para o programa principal, para depois mostrá-lo na tela 17

Referências 1. Baranauskas, J. A., Notas de Aula de Sub-algoritmos: Funções e Procedimentos, disponível em: http://dcm.ffclrp.usp.br/~augusto/teaching/ici/funcoese-procedimentos.pdf 2. Paiva, E. R., Slides de Modularização da disciplina de Oficina de Programação, Faculdade de Computação, Universidade Federal de Uberlândia 3. Vidigal, M. A., Slides de Programação Procedimental, Faculdade de Computação, Universidade Federal de Uberlândia, disponível em http://www.facom.ufu.br/~madriana/ 18