• Nenhum resultado encontrado

Programação Aplicada à Engenharia

N/A
N/A
Protected

Academic year: 2021

Share "Programação Aplicada à Engenharia"

Copied!
30
0
0

Texto

(1)

Programação Aplicada à Engenharia

Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais

Silvio Fernandes 2009.1

(2)

Introdução

• A melhor maneira de desenvolver e manter um grande programa é construí-lo a partir de pequenas partes ou componentes

• Técnica “Dividir para Conquistar” • Técnica “Dividir para Conquistar”

• Os módulos em C++ são chamados funções e classes

• Combinação entre funções novas que o programador escreve e “funções

pré-empacotadas” da biblioteca padrão

(3)

Introdução

• Funções definem tarefas específicas que

podem ser usadas em muitos pontos de um programa

• Um função é invocada (executar a tarefa • Um função é invocada (executar a tarefa designada por ela) por uma chamada de função

• Uma chamada de função especifica o nome da função e fornece informações (argumentos)

(4)

Introdução

• Uma analogia: o chefe (chamador de função) pede para um funcionário (função chamada) executar uma tarefa e retornar (devolver) os resultados

resultados

4

main

worker1 worker2 worker3

(5)

Funções da biblioteca matemática

• Permitem o programador executar cálculos

matemáticos comuns

• As funções normalmente são chamadas

escrevendo o nome da função seguido pelo escrevendo o nome da função seguido pelo parêntese esquerdo, depois pelo argumento (ou uma lista separados por vírgula) e o

parêntese direito

(6)

Funções da biblioteca matemática

• A função sqrt é chamada para calcular a raiz

quadrada de 900.0. Essa função recebe um double e retorna um double

• Todas as funções da biblioteca matemática • Todas as funções da biblioteca matemática

retornam double

• Para usar as funções da biblioteca

matemática, inclua o arquivo de cabeçalho <cmath> ou <math.h>

(7)

Funções da biblioteca matemática

• Os argumentos de funções podem ser

constantes, variáveis ou expressões

• Se c1 = 13.0, d = 3.0 e f = 4.0, o comando cout << sqrt(c1+d*f);

cout << sqrt(c1+d*f);

• Calcula e imprime a raiz quadrada de 25, ou seja, 5

• A seguir alguma funções da biblioteca matemática, onde as variáveis x e y são double

(8)

Funções da biblioteca matemática

Método Descrição Exemplo

ceil( x ) arredonda x para o menor inteiro não menor que x

ceil( 9.2 ) é 10.0 ceil( -9.8 ) é -9.0 cos( x ) co-seno trigonométrico de x (radianos) cos( 0.0 ) é 1.0

exp( x ) função exponencial ex exp( 1.0 ) é 2.71828

fabs( x ) valor absoluto de x fabs( 5.1 ) é 5.1 fabs( -8.6 ) é 8.6 fabs( -8.6 ) é 8.6 floor( x ) arredonda x para o maior inteiro não maior

que x

floor( 9.2 ) é 9.0 floor( -9.8 ) é -10.0

fmod( x, y ) resto de x/y como ponto flutuante fmod(13.657, 2333) é 1.992 log( x ) logaritmo natural de x (base e) log (2.718282 ) é 1.0

log10( x ) logaritmo de x (base 10) log10( 100.0 ) é 2.0 pow( x, y ) x elevado à potência de y pow( 2, 7 ) é 128 sin( x ) seno trigonométrico de x (em radianos) sin( 0.0 ) é 0

sqrt( x ) raiz quadrada de x sqrt( 900.0 ) é 30.0

(9)

Definições de funções

• Todas as variáveis declaradas em definições de função são variáveis locais – elas só são

conhecida na função na qual são definidas • A maioria das funções tem uma lista de • A maioria das funções tem uma lista de

parâmetros que provêem os meios para transferir informações entre funções

• Os parâmetros de uma função também são variáveis locais

(10)

Definições de funções

• Cada programa consiste em uma função main que chama as funções da biblioteca padrão ou definidas pelo programador para realizar as

tarefas tarefas

10

#include <iostream>

int square( int ); //protótipo da função int main(){ for ( int x = 1; x <= 10; x++ ) cout << square( x ) << " “; cout << endl; return 0; } // Definição da função int square( int y ){

return y * y; }

(11)

Definições de funções

• O formato de uma definição de função é

tipo do valor de retorno nome da função(lista de parâmetros){ declarações e comandos //corpo da função ou bloco

}}

• Um tipo de retorno void indica que a função não retorna um valor

• A lista de parâmetros é separada por vígula, incluindo o tipo de cada parâmetro. Se a

função não possui parâmetros a lista é void ou simplesmente vazia

(12)

Definições de funções

• Há três maneiras de retornar o controle para o ponto no qual a função foi chamada

– return; //para funções void

– Se a função não retorna nenhum valor o “}” indica – Se a função não retorna nenhum valor o “}” indica

fim da função então é retornado

– return expressao; // quando a função retorna algum valor como resultado

(13)

Protótipos de Funções

• Diz ao compilador o nome da função, o tipo dos dados retornados pela função, o número de parâmetros que a função espera receber, os tipos dos parâmetros e a ordem na qual os tipos dos parâmetros e a ordem na qual esses parâmetros são esperados

• Ex:

(14)

Protótipos de Funções

• Os protótipos permitem o compilador

converter tipos automaticamente

• A tabela a seguir classifica os tipos do “maior tipo” para “menor tipo”

tipo” para “menor tipo”

(15)

Protótipos de Funções

Tipos de Dados

long double double

float

unsigned long int sinônimo de unsigned long

long int sinônimo de long

unsigned int sinônimo de unsigned

int

unsigned short int sinônimo de unsigned short

short int sinônimo de short

unsigned char char

(16)

Arquivos de cabeçalho

• Cada biblioteca padrão tem um arquivo de cabeçalho correspondente contendo os

protótipos de todas as funções daquela biblioteca e definições dos vários tipos de biblioteca e definições dos vários tipos de dados e constantes necessários por elas

• Os arquivos de cabeçalho terminam com .h • Os arquivos de cabeçalho definidos pelo

programador deve terminar com .h

(17)

Principais arquivos de cabeçalho

Arquivo de cab. Explicação

<cassert> Contém macros e informações para adicionar diagnósticos que ajudam o programador a realizar depuração. Ver. antiga <assert.h> <cctype> Contém protótipos para funções que examinam caracteres em

busca de determinadas propriedades dos caracteres e para funções que podem ser usadas para converter letras maiúsculas em

minúsculas e vice-versa. Ver. antiga <ctype.h>

<cfloat> Contém limites do sistema para o tamanho dos números de ponto <cfloat> Contém limites do sistema para o tamanho dos números de ponto

flutuante. Ver. antiga <float.h>

<climits> Contém os limites do sistema para os tamanhos dos números inteiros. Ver. antiga <limits.h>

<cmath> Contém protótipos de funções da biblioteca matemática. Ver. antiga <math.h>

<cstdio> Contém proptótipos de funções de entrada/saída e as informações utilizadas por elas. Ver. antiga <stdio.h>

<cstdlib> Protótipos de funções para conversão de números em texto e texto em números, alocação de memória, números aleatórios e outras funções

(18)

Principais arquivos de cabeçalho

Arquivo de cab. Explicação

<cstring> Protótipos de funções para processamento de strings. Ver. antiga <string.h>

<ctime> Funções para manipular horários e datas. Ver. antiga <time.h> <iostream> Funções padrão de entrada e saída. Ver. antiga <iostream.h> <iomanip> Funções para os manipuladores de stream que permitem a

formatação de dados. Ver. antiga <iomanip.h> formatação de dados. Ver. antiga <iomanip.h>

<fstream> Funções que executam operações de entrada e saída de arquivos em disco. Ver. antiga <fstream.h>

<utility> Contém classes e funções que são usadas por muitos arquivos de cabeçalho da biblioteca padrão

<vector>, <list>, <deque>, queue>, <stack>, <zmap>, <set>, <bitset>

Contém classes que implementam contêineres, usados para armazenar dados durante a execução de um programa.

(19)

Principais arquivos de cabeçalho

Arquivo de cab. Explicação

<functional> Contém classes e funções usadas por algoritmos da biblioteca padrão

<memory> Contém classes e funções usadas para alocar memória para os contêineres da biblioteca padrão

<iterator> Contém classes para acessar dados nos contêineres da biblioteca padrão

<algorthm> Contém funções para manipular dados nos contêineres <exception>

<stdexcept>

Estes arquivos contêm classes que são usadas para tratamento de exceções (erros)

<string> Contém a definição da classe string

<sstream> Funções que realizam operações de entrada e saída para strings na memória

(20)

Geração de números aleatórios

• Considere o seguinte comando

i = rand();

• A função rand() gera um inteiro entre 0 e

RAND_MAX (constante definida em <cstdlib>) • Quando a função rand() é chamada, todos os

números entre 0 e RAND_MAX terão a mesma probabilidade

• Para produzir inteiros no intervalo de 0 a 5 usamos o operador módulo (%) junto com rand()

rand() % 6

(21)

Geração de números aleatórios

• Isso é chamado ajuste de escala e o 6 o fator de escala

• Ex: Simular 20 lançamentos de um dado de 6 faces

#include <iostream.h> #include <iostream.h> #include <iomanip.h> #include <cstdlib.h> int main(){

for ( int i = 1; i <= 20; i++ ) {

cout << setw( 10 ) << ( 1 + rand() % 6 ); if ( i % 5 == 0 )

cout << endl; }

return 0; }

(22)

Geração de números aleatórios

• A função rand() gera números pseudo-aleatórios

• A função srand da biblioteca padrão utiliza um argumento como semente da função rand de forma a produzir uma

seqüência diferentes de números aleatórios a cada execução do programa

do programa

• O protótipo de srand é encontrado em<cstdlib>

• Se desejássemos randomizar sem necessidade de fornecer uma semente cada vez, poderíamos usar srand( time (0) ); Isso faz com que o computador leia seu relógio para obter automaticamente o valor da semente.

• A função time retorna a “hora de calendário” atual e está na biblioteca <ctime>

(23)

Enum

• Cria um tipo definido pelo usuário chamado de enumeração

enum nome_novo_tipo {valor1, valor2, valor3};

• Os valores são constantes inteiras • Os valores são constantes inteiras

representados pelos idetificadores (valor1,...) • Ex:

enum Meses {JAN = 1, FEV, MAR, ABR, MAI, JUN, JUL, AGO, SET, OUT, NOV, DEZ};

(24)

Regras de Escopo

• A parte do programa na qual um identificador tem significado é conhecida como seu escopo • Escopo de arquivo

– Identificadores declarados fora de qualquer – Identificadores declarados fora de qualquer

função. Eles são conhecidos por todas as funções (variáveis globais, definições e protótipos de

funções)

• Escopo de bloco

– Identificadores declarados entre {} (variáveis locais, vistas só dentro do bloco)

(25)

Regras de Escopo

• Escopo de função

– Identificadores declarados dentro de funções

• Escopo de protótipo de função

– Se identificadores forem usados no protótipo de – Se identificadores forem usados no protótipo de

uma função (lista de parâmetros), será ignorado pelo compilador. O protótipo de função necessita apenas dos tipos dos parâmetros.

(26)

Recursão

• Função recursiva é uma função que chama a si mesma, direta ou indiretamente

• Quando uma função chama a si mesma, essa nova chamada pode chamar uma terceira e nova chamada pode chamar uma terceira e assim por diante

• Quando a última cópia da função retorna o

resultado (através de return), para aquela que chamou. E assim por diante até a primeira

chamada

(27)

Fatorial iterativo (não recursivo)

• Fatorial de um inteiro não-negativo n (n!) é

n * (n-1) * (n-2) * ... * 1

• Com 1! e 0! Igual a 1, por definição

• O fatorial de number pode ser calculado como • O fatorial de number pode ser calculado como

• Chega-se a definição recursiva n! = n*n(n-1)!

fatorial = 1;

for(int counter = number; counter >= 1; counter-- ){ fatorial *= counter;

(28)

Fatorial recursivo

• Função recursiva do fatorial

unsigned long factorial ( unsigned long number){

if (number <= 1) //caso base

return 1;

else

28

return number * factorial(number -1);

(29)

Fatorial recursivo

• Calculo recursivo de 5! 5! 5 * 4! 5! 5 * 4! 5! = 5*4*3*2*1=120 é o valor retornado 120 é o valor final 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 1 é o valor retornado 2! = 2*1 é o valor retornado 3! = 3*2*1=6 é o valor retornado 4! = 4*3*2*1=24 é o valor retornado

(30)

Referência

• DEITEL, H. M.; DEITEL, P. J. C++ como

programar. 3 ed. Porto Alegre: Bookman, 2001.

Referências

Documentos relacionados

O presente documento pretende registar a análise efectuada pela equipa gestora do Portal CampingCar Portugal (Portal Português de Autocaravanismo) ao estudo de

Climate change in coastal areas Consequences of climate change in sandy coasts, estuaries and lagoons, and rocky shores Changes on coastal risk as a result of climate change

Fernandes, morador no lugar de Ourentã, termo da Vila de Cantanhede e de Francisco Afonso, morador no lugar de Fornos, termo da cidade de Coimbra, para fornecimento de

Na questão que abordou o conhecimento sobre a localização da doença, o deficiente saber quanto à percepção sobre a saúde bucal foi comprovado quando somente 30 indivíduos

Portanto, deve-se reconhecer que o tipo de movimento ortodôntico pode influenciar no risco de desenvolvimento de recessão óssea e gengival, como nos casos de movimento

REDES INSTALACAO E COMERCIO DE REDES

Haveria agora algo que dizer -e haverá muito mais que estudar, pois não têm sido regiões que tenham merecido particular atenção por parte dos historiadores- sobre certas

[r]