1.66k likes | 1.81k Views
Linguagens de Programação. Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel. Parte III. Introdução à Programação em C++ (Continuação). Relembrando da Última Aula. Classes e objetos Mais exemplos de programação orientada a objetos. Funções.
E N D
Linguagens de Programação Prof. Miguel Elias Mitre Campista http://www.gta.ufrj.br/~miguel Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Parte III Introdução à Programação em C++ (Continuação) Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Relembrando da Última Aula... Classes e objetos Mais exemplos de programação orientada a objetos Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Funções • Facilitam o projeto, a implementação, a operação e a manutenção de programas grandes • Podem empregar técnicas para redução do tempo de convergência • Técnica dividir para conquistar • Constrói um grande programa por meio de peças simples e pequenas • Funções da C++ Standard Library Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Componentes de um Programa em C++ • C++ Standard Library • É uma coleção de funções para a execução de operações comuns como: • Cálculos matemáticos • Manipulação de strings • Manipulação de caracteres • Entrada/Saída • Verificação de erros • É fornecida como parte do ambiente de programação do C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Componentes de um Programa em C++ • Funções • Também chamadas como métodos, procedimentos ou sub-rotinas • Utilizadas para modularizar um programa • Separam as tarefas em unidades prontas • A mesma função pode: • Ser reutilizada em vários locais em um programa • Ser ocultada de outras funções • Permitem a utilização do método dividir para conquistar • São reutilizáveis em outros programas • São definidas pelo usuário ou pelo programador Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Componentes de um Programa em C++ • Funções • Uma função é chamada por uma chamada de função • A função chamada retorna um resultado ou simplesmente retorna o controle ao chamador • As chamadas de função formam relacionamentos hierárquicos Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
função chefe função trabalhador 2 função trabalhador 1 função trabalhador 3 função trabalhador 4 função trabalhador 5 Componentes de um Programa em C++ • Funções • Uma função é chamada por uma chamada de função • A função chamada retorna um resultado ou simplesmente retorna o controle ao chamador • As chamadas de função formam relacionamentos hierárquicos Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Componentes de um Programa em C++ • As funções devem ser limitadas à realização de uma única tarefa bem definida • Programas simples são mais fáceis de escrever, testar, depurar e manter • Dica: O nome da função deve expressar essa tarefa efetivamente • Caso isso não seja possível, é provável que a função esteja tentando realizar um número muito grande de tarefas • Nesse caso, é melhor dividir essa função em funções menores Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Funções da Biblioteca de Matemática • Funções globais • Não pertencem a uma classe particular • Os protótipos de função são colocados nos arquivos de cabeçalho • Podem ser reutilizadas em qualquer programa que inclua o arquivo de cabeçalho e que possa se vincular ao código-objeto da função • Ex.: arquivo de cabeçalho sqrt in <cmath> • sqrt( 900.0 ) • Todas as funções em <cmath> são funções globais Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Funções da Biblioteca de Matemática Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Retorno das Funções • Duas maneiras de retornar o controle à sentença de chamada: • Se a função não retornar um resultado: • O fluxo do programa alcança o fim da chave direita da função ou • O programa executa a instrução return; • Se a função retornar um resultado: • O programa executa a instrução returnexpressão; • expressão é avaliada e seu valor é retornado ao chamador Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Funções com Múltiplos Parâmetros • Especificados tanto no protótipo quanto no cabeçalho da função • Parâmetros são listados e separados por vírgulas • O compilador usa o protótipo de função para: • Verificar se as chamadas para a função contêm o número correto e os tipos de argumento na ordem correta • Garantir que o valor retornado pela função está sendo usado corretamente na expressão que chamou a função Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Protótipo de função • Também chamado de declaração de função • Indica ao compilador: • O nome da função • O tipo de dados retornado à função • Os parâmetros que a função espera receber • O número de parâmetros • Os tipos de parâmetros • A ordem desses parâmetros int soma(int a , int b); Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Assinatura de função (ou simplesmente assinatura) • Parte de um protótipo de função que inclui o nome da função e os respectivos tipos de argumento • Não especifica o tipo de retorno da função • As funções no mesmo escopo devem ter assinaturas exclusivas • O escopo de uma função é a região de um programa em que a função é conhecida e acessível int soma(int a , int b); int soma(double a, double b); Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Assinaturas diferentes Protótipo de uma Função e Coerção de Argumentos • Assinatura de função (ou simplesmente assinatura) • Parte de um protótipo de função que inclui o nome da função e os respectivos tipos de argumento • Não especifica o tipo de retorno da função • As funções no mesmo escopo devem ter assinaturas exclusivas • O escopo de uma função é a região de um programa em que a função é conhecida e acessível int soma(int a , int b); int soma(double a, double b); Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Assinaturas iguais Protótipo de uma Função e Coerção de Argumentos • Assinatura de função (ou simplesmente assinatura) • É um erro de compilação se duas funções do mesmo escopo tiverem a mesma assinatura, mas diferentes tipos de retorno int soma(int a , int b); = void soma(int a, int b); Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Coerção de argumentos • Forçar argumentos aos tipos apropriados especificados pelos parâmetros correspondentes • Por exemplo, chamar uma função com um argumento inteiro, mesmo que o protótipo da função especifique um argumento double • A função ainda assim continuará a funcionar corretamente int a, b; double soma(double a , double b); Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Regras de promoção C++ • Indicam como converter de um tipo para outro sem perder dados • Aplicam-se a expressões que contenham valores de dois ou mais tipos de dados • Expressões desse tipo são também referidas como expressões de tipo misto • Cada valor na expressão é promovido ao tipo “mais alto” na expressão • Uma versão temporária de cada valor é criada e utilizada para a expressão • Os valores originais permanecem inalterados Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Regras de promoção C++ • A promoção ocorre também quando o tipo de um argumento de função não corresponde ao tipo de parâmetro especificado • A promoção é como se o valor do argumento tivesse sido atribuído diretamente ao tipo do parâmetro • A conversão de um valor em um tipo mais baixo • Pode provocar a perda de dados ou valores incorretos • Só pode ser executada explicitamente • Atribuindo o valor a uma variável ou tipo mais baixo (alguns compiladores emitirão um aviso nesse caso) Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos Tipo funda-mental mais alto Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Protótipo de uma Função e Coerção de Argumentos • Converter de um tipo de dados mais alto em um tipo mais baixo ou entre com sinal e sem sinal pode… • Corromper o valor dos dados, causando perda de informações • Constitui erro de compilação: • Passar argumentos em uma chamada de função que não correspondem ao número e aos tipos de parâmetros declarados no protótipo da função correspondente • Passar um número corretos de argumentos na chamada da função, mas passar argumentos que não possam ser implicitamente convertidos nos tipos esperados Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Arquivos de Cabeçalho da Biblioteca-padrão C++ • Cada um contém uma parte da Standard Library • Protótipos de função para as funções relacionadas • Definição de vários tipos de classes e funções • Constantes necessárias a essas funções • Instruem o compilador a interfacear com a biblioteca e os componentes escritos pelo usuário • Nomes de arquivos de cabeçalho finalizados em.h • São arquivos de cabeçalho de “estilo antigo” • Foram substituídos pelos arquivos de cabeçalho da biblioteca-padrão C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Arquivos de Cabeçalho da C++ Standard Library Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Arquivos de Cabeçalho da C++ Standard Library Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Arquivos de Cabeçalho da C++ Standard Library Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Arquivos de Cabeçalho da C++ Standard Library Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • Função rand na C++ Standard Library • Introduz o elemento de mudança nos aplicativos do computador • Ex.: i = rand(); • Gera um inteiro sem sinal entre 0 e RAND_MAX (uma constante simbólica definida no arquivo de cabeçalho <cstdlib>) • O protótipo de função para a função rand encontra-se em <cstdlib> Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • Para produzir inteiros em um intervalo específico • Use o operador módulo (%) com rand • Ex.: rand() % 6; • Produz números no intervalo de 0 a 5 • Isso é chamado de escalonamento e 6 é o fator de escalonamento • Um deslocamento pode mover o intervalo de 1 a 6 • 1 + rand() % 6; Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo utilizando Funções em C++ Cabeçalho para uso da funçãorand Função rand módulo 6 Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Primeiro Exemplo utilizando Funções em C++ shell>$ g++ exemplo.cpp –o ex1 shell>$ ./ex1 6 6 5 5 6 5 1 1 5 3 6 6 2 4 2 6 2 3 4 1 shell>$ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo utilizando Funções em C++ Escalonando e deslocando o valor produzido pela função rand Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Segundo Exemplo utilizando Funções em C++ shell>$ g++ exemplo.cpp –o ex2 shell>$ ./ex2 Face Frequency 1 999702 2 1000823 3 999378 4 998898 5 1000777 6 1000422 shell>$ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • Função rand • Gera números pseudo-aleatórios • A mesma sequência de números repete-se automaticamente toda vez que o programa executa • Randomização • Ato de condicionar um programa a produzir uma sequência diferente de números aleatórios a cada execução • Função srand da C++ Standard Library • Aceita um argumento inteiro sem sinal • Semeia a função rand para produzir uma sequência diferente de números aleatórios Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Terceiro Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Terceiro Exemplo utilizando Funções em C++ Tipo de dados sem sinal Passagem do seed para funçãosrand Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Terceiro Exemplo utilizando Funções em C++ shell>$ g++ exemplo.cpp –o ex3 shell>$ ./ex3 Entre com a semente: 67 6 1 4 6 2 1 6 1 6 4 Entre com a semente: 23 6 3 5 4 5 5 4 3 4 5 Entre com a semente: 67 6 1 4 6 2 1 6 1 6 4 shell>$ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • Para randomizar sem ter de toda vez inserir uma semente • srand(time(0)); • Isso faz com que o computador leia o respectivo relógio para obter o valor da semente • A função time (com o argumento 0) • Retorna a hora atual como o número de segundos desde 1º de janeiro de 1970, à meia-noite do Greenwich Mean Time (GMT) • O protótipo de função para time encontra-se em <ctime> Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • A chamada da função srandmais de uma vez em um programa pode… • Reiniciar a sequência de números pseudo-aleatórios • Afetar a aleatoriedade dos números produzidos pela função rand • Utilizar srand no lugar de rand para tentar gerar números aleatórios • Representa um erro de compilação • A função srand não retorna um valor! Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Estudo de Caso: Geração de Números Aleatórios • Escalonando e deslocando números aleatórios • Para obter números aleatórios em um intervalo desejado, use uma instrução do tipo • number =shiftingValue+ rand() %scalingFactor; • shiftingValue é igual ao primeiro número no intervalo desejado de inteiros consecutivos • scalingFactor é igual à amplitude do intervalo desejado de inteiros consecutivos • Número de inteiros consecutivos no intervalo Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Enumeração • Conjunto de constantes inteiras representadas por identificadores • Os valores das constantes de enumeração iniciam em 0, a menos que se especifique diferente, e incrementam por 1 • Os identificadores em uma enum devem ser exclusivos, mas constantes enumeradas separadas podem ter o mesmo valor inteiro • Definindo uma enumeração • Palavra-chave:enum • Um nome de tipo • Lista de nomes de identificadores separada por vírgulas entre chaves • Ex.:enum Months { JAN = 1, FEB, MAR, APR }; Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
c Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
c Uso da função time Enumeração para acompanhar o status do jogo Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
c Declaração de uma variável do tipo enumeração Função aleatória usa o tempo como seed Atribuição de uma constante enumerada a gameStatus Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista
Terceiro Exemplo utilizando Funções em C++ Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista