Programação imperativa. 3. Mais funções

Documentos relacionados
Programação Imperativa. Lição n.º 3 Operações aritméticas

Declarações. C diferencia letras maiúsculas de minúsculas! int n, N; n é diferente de N!

LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO

Algoritmos e Técnicas de Programação. Professora: Luciana Faria

Algoritmos RESUMO - LINGUAGEM C

Aula 04: Fluxogramas e condicionais

Introdução à Linguagem C. Adaptado de Deise Saccol

Aula 08: Repetição (Parte 3)

Introdução a Linguagem C

Introdução à Linguagem C

Introdução à Linguagem C. Adaptado de slides das Profas. Patrícia Jaques, Mônica Py, Deise Saccol e Vania Bogorny

CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: C

Introdução à Linguagem C

Programação de Computadores III

Introdução à Computação - Linguagem C: aulas 03, 04 e 05. Mauro Cesar Bernardes 03/Junho/2014

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA AMBIENTE DE PROGRAMAÇÃO. Prof. Dr. Daniel Caetano

Programação de Computadores III

Introdução à Programação

PCI- Operadores, Expressões e Funções. Profa. Mercedes Gonzales Márquez

Programação de Computadores:

LP2 Laboratório de Programação 2 Ciência da Computação. Problema proposto

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA AMBIENTE DE PROGRAMAÇÃO. Prof. Dr. Daniel Caetano

Informática Aplicada. Aula 4 UNIDADE II. Prof. Cleanderson Lobo

Algoritmos; Introdução à linguagem C

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA AMBIENTE DE PROGRAMAÇÃO. Prof. Dr. Daniel Caetano

5 Funções. Site: BAC004 at Source page: 5 Funções at

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Vírgula flutuante. Tipos float, double, long double. Uso de funções. Exercícios

Aula 12- Variáveis e valores reais

INF1005 Programação I. Pontifícia Universidade Católica Departamento de Informática

Capítulo 2. Funções. Flexibilização de um programa; Reutilização de código (OO); Evitar o retrabalho;

Introdução à Computação

Introdução à Computação

Programação de Computadores. Primeiro contato

Seguindo em frente. 2.1 A biblioteca matemática. 2.2 Estruturas condicionais

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Programação Introdução

Introdução a Programação de Jogos

Programação de Computadores

Revisão. Classe e objeto Construtores Polimorfismo Sobrecarga Pacote padrão

Computação eletrônica: Operadores, expressões e funções

INF1005: Programação 1. Condicionais. 08/03/10 (c) Rogério Rodrigues 1

Capítulo 4: Condicionais

Introdução da Linguagem C

= = = = = = = = = = = = = = = =

Disciplina: Introdução a Programação. IPRJ/UERJ Professora: Sílvia Mara da Costa Campos Victer. Índice: Aula1 - Introdução Programa Algoritmo

Módulo 3. Métodos e String. Programação Orientada a Objetos I Java (Rone Ilídio)

Programação Estruturada

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

Aula 01. Tipos de Dados Saída de Dados Entrada de Dados Programação sequencial

Laboratório de Programação 02

Linguagem C. Prof.ª Márcia Jani Cícero

Capítulo 2: Condicionais. Pontifícia Universidade Católica Departamento de Informática

CCO 016 / COM 110 Fundamentos de Programação

Aula 13 - Somas de Séries

Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Prof. Alessandro Zimmer Introdução à Linguagem C

Utilização da Linguagem C

CCO 016 / COM 110 Fundamentos de Programação

Modulo 7: Programação com funções predefinidas pela linguagem

MAC 2166 Introdução à Computação para Engenharia

Conceitos básicos de programação

Controle de Fluxo - Condicionais. INF1005 Programação I Profa. Simone D.J. Barbosa sala 410 RDC

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

Programação estruturada

Segundo programa: media.c

Introdução à Programação

Programação Imperativa. Lição n.º 1 Preliminares

Módulo 7. Funções. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Programação de Computadores

Introdução ao R. Gualberto Agámez Montalvo. 16 de Março de Análise de Dados e Simulação Departamento de Estatística Universidade de São Paulo.

Introdução ao Scilab

Minicurso MATLAB BÁSICO MÓDULO 1

1. Múltiplos e divisores

CCM0118 Computação I

Programação. MEAer. Expressões e Instruções. Bertinho Andrade da Costa. Instituto Superior Técnico. 2011/2012 1º Semestre

controle de fluxo - condicionais

a) Defina uma função para obter o máximo entre dois números

Linguagem Haskell. Riocemar S. de Santana

public void setdata(data d) { data = d;

Programação Orientada a Objetos

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Programação modular. Função

Programação Imperativa. Lição n.º 12 Arrays ordenados

Tipo de argumentos. valor. argumentos

Algoritmos: Conceitos Fundamentais

02 - Introdução ao Scilab

MC102 Algoritmos e Programação de Computadores

Aula 15: Repetição (Parte 3)

Conceitos Básicos Linguagem C

Introdução à Programação em C Input / Output

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano

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

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

Introdução ao SciLab. SciLab O que é? Onde obter o programa:

5 Operações e Funções Matemáticas. Unesp Campus de Guaratinguetá

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

Transcrição:

Programação imperativa 3. Mais funções

3. Mais funções Funções. Escolha binária. Números inteiros. 2

3. Mais funções Funções. Escolha binária. Números inteiros. 3

As funções de cálculo As funções de cálculo calculam um resultado a partir dos argumentos, tal como na matemática. O tipo do resultado. O nome da função. A lista de argumentos, cada argumento com o seu tipo. double weighted_average(double lab, double exam) return lab * 0.4 + exam * 0.6; A instrução return. A expressão que descreve os cálculos. 4

Distância entre dois pontos Eis uma função que calcula a distância entre dois pontos (x1, y1) e (x2, y2): double distance (double x1, double y1, double x2, double y2) return sqrt(pow(x1-x2, 2) + pow(y1-y2, 2)); sqrt(x), a raiz quadrada de x. pow(x, y), x elevado a y. 5

As funções de teste Tipicamente, as funções de teste não têm argumentos nem resultado, declaram variáveis para os dados e para os resultados do problemas, leem os dados, calculam os resultados e escrevem os resultados, repetidamente, até não haver mais dados: void test_distance(void) double x1, y1; double x2, y2; double d; while (scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2)!= EOF) d = distance(x1, y1, x2, y2); printf("%f\n", d); 6

As funções matemáticas Função Significado sin(x) Seno de x. cos(x) Cosseno de x. tan(x) Tangente de x. atan2(y, x) exp(x) Exponencial de x. Arcotangente de y/x, no intervalo [-π, π]. log(x) Logaritmo natural de x. pow(x, y) x elevado a y. sqrt(x) Raiz quadrada de x. floor(x) Maior número inteiro menor ou igual a x. ceil(x) Menor número inteiro maior ou igual a x. fabs(x) Valor absoluto de x. Para usar, fazer #include <math.h> 7

3. Mais funções Funções. Escolha binária. Números inteiros. 8

Escolha binária Por vezes, a expressão dos cálculos envolve a escolha entre duas possibilidades: a nota final é a média ponderada ( ) se a nota do exame for maior ou igual a 8.5; caso contrário, é a nota do exame ( ). double grade_exact(double lab, double exam) return exam < 8.5? exam : weighted_average(lab, exam); 9

Expressão condicional x? y : z O valor de x? y : z é y, se x for verdadeiro, e é z, se x for falso. Se x for verdadeiro, z não é avaliado; se x é falso, y não é avaliado. double grade_exact(double lab, double exam) return exam < 8.5? exam : weighted_average(lab, exam); 10

Arredondamento rx ( ) x 0.5, se x 0.0 x 0.5, se x 0.0 double round(double x) return x < 0.0? ceil(x-0.5) : floor(x+0.5); void test_round(void) double x; double z; while (scanf("%lf", &x)!= EOF) z = round(x); printf("%f\n", z); 11

Instrução if-else Podemos usar a instrução if-else em vez da expressão condicional: double grade_exact(double lab, double exam) if (exam < 8.5) return exam; else return weighted_average(lab, exam); double round(double x) if (x < 0.0) return ceil(x-0.5); else return floor(x+0.5); 12

Instrução if-else, significado if (B) true B false S else R S R 13

Decomposição funcional double grade_final(double lab, double exam) return round(grade_exact(lab, exam)); A função grade_final chama as funções round e grade_exact. A função round chama as funções floor e ceil. A função grade_exact chama a função weighted_average. 14

Formatação dos números double A nota final deve ser escrita sem parte decimal: void test_grade_final(void) double lb; double ex; double ge; double gf; while (scanf("%lf%lf", &lb, &ex)!= EOF) ge = grade_exact(lb, ex); gf = grade_final(lb, ex); printf("%.1f %.1f %f %.0f\n", lb, ex, ge, gf); Usar uma casa decimal. Usar seis casas decimais, por defeito. Não usar nenhuma casa decimal, nem sequer o ponto. 15

3. Mais funções Funções. Escolha binária. Números inteiros. 16

Números inteiros O tipo double representa os números reais; o tipo int representa os números inteiros. O intervalos dos números inteiros representáveis é [-2 31..2 31-1], isto é, [-2147483648.. 2147483647]. 2147483647 é um pouco mais do que dois mil milhões. Para os reais o intervalo vai de 1.7*10-308 a 1.7*10 308 (tanto positivos como negativos), com precisão até 15 algarismos decimais. Convém distinguir bem int e double. 17

Problema da potência minorante A potência minorante de um número inteiro positivo, para uma certa base, é a maior potência dessa base que é menor ou igual ao número. Para a base 10, calcula-se de cabeça: pm(3781) = 1000; pm(91) = 10; pm(100) = 100; pm(8) = 1. Como programar? 18

Como não programar Não vale fazer uma análise por casos exaustiva: int powerless10_very_bad(int x) if (x < 10) return 1; else if (x < 100) return 10; else if (x < 1000) return 100; else if (x < 10000) return 1000; else...; 19

Aproveitando a ideia Na verdade só há dois casos. Se x é menor do que 10, o resultado é 1; se não, o resultado é 10 vezes mais do que o resultado que se obteria para um número 10 vezes menor do que x: int powerless10(int x) if (x < 10) return 1; else return 10 * powerless10(x / 10); 20

Base 2 Em programação interessa-nos a base 2: int powerless(int x) if (x < 2) return 1; else return 2 * powerless(x / 2); Variante, com expressão condicional: int powerless(int x) return x < 2? 1 : 2 * powerless(x / 2); 21

Calculando à mão powerless10(3785) = 10 * powerless10(378) = 10 * (10 * powerless(37)) = 10 * (10 * (10 * powerless(3))) = 10 * (10 * (10 * 1))) = = 1000 powerless (161) = 2 * powerless(80) = 2 * (2* powerless(40)) = 2 * (2 * (2 * powerless(20))) = 2 * (2 * (2 * (2 * powerless(10)))) = 2 * (2 * (2 * (2 * (2 *powerless(5))))) = 2 * (2 * (2 * (2 * (2 * (2 * powerless(2)))))) = 2 * (2 * (2 * (2 * (2 * (2 * (2 * powerless(1))))))) = 2 * (2 * (2 * (2 * (2 * (2 * (2 * 1)))))) = = 128 22

Função de teste void test_powerless(void) int x; int z; while (scanf("%d", &x)!= EOF) z = powerless10(x); printf("%d\n", z); z = powerless(x); printf("%d\n", z); 23

Concatenação de números Queremos, dados dois números, calcular o número que se obtém concatenando as representações decimais desses números. Por exemplo concat(356, 1278) vale 3561278; concat(95, 6) vale 956; concat(81, 0) vale 810; concat(0, 672) vale 672. Como programar? 24

Como programar a concatenação Se o segundo número for menor do que 10, é fácil: multiplica-se o primeiro por 10 e soma-se o segundo. E se não? Se não, podemos começar por concatenar o primeiro número e número que se obtém do segundo eliminando o último algarismo; e depois acrescentamos o último algarismo do segundo número ao resultado. Nota: o último algarismo é o resto da divisão por 10. Nota: eliminar o último algarismo é dividir por 10. Nota: Estamos a trabalhar com números inteiros: a divisão é a divisão inteira. 25

Função de concatenação Observe: int concat(int x, int y) if (y < 10) return x * 10 + y; else return concat(x, y / 10) * 10 + y % 10; Quociente da divisão inteira de y por 10. Resto da divisão inteira de y por 10. 26

Função de teste void test_concat(void) int x; int y; int z; while (scanf("%d%d", &x, &y)!= EOF) z = concat(x, y); printf("%d\n", z); 27

Os operadores aritméticos Operador Significado + Soma. Diferença. * Produto. / Quociente da divisão inteira, se ambos os operandos forem de tipo int; quociente da divisão exata, se algum deles (ou os dois) forem de tipo double. % Resto da divisão inteira. Ambos os operandos têm de ser de tipo int. 28

Os operadores de comparação Operador Significado == Igualdade.!= Não igualdade. < Menor. <= Menor ou igual. > Maior. >= Maior ou igual. 29