You are on page 1of 8

Lgica de Programao para Engenharia

Atualizao: 06/09/2011

Unidade 6: Ambiente de Programao


Prof. Daniel Caetano

Objetivo: Apresentar o uso de funes prontas do Portugol e do C/C++ para efeturar clculos mais complexos. Bibliografia: ASCENCIO, 2007; MEDINA, 2006; SILVA, 2010; SILVA, 2006.

INTRODUO Nas aulas anteriores tomamos contato com a base das linguagens Portugol e C/C++. Nesta aula, veremos algumas funes matemticas mais avanadas do Portugol e do C/C++, que propiciam clculos mais complexos e, portanto, tornam o computador mais interessante para o engenheiro. Ao final desta aula, voc saber como usar o resto da diviso para executar tarefas teis, alm de aprender a utilizar diversas funes matemticas pr-programadas nas linguagens.

1. O RESTO DE DIVISO Muitos alunos, em um primeiro momento, se questionam sobre a utilidade do resto de diviso ( operador % ). Parece um clculo sem muita lgica, j que pouco usado em nosso dia-a-dia, em que no fazemos clculos de "diviso inteira". Entretanto, na programao, a diviso inteira tem um papel muito importante, em especial na determinao "par/mpar" e no clculo de converso entre bases ou escalas numricas. Vejamos cada um destes casos.

1.1. DETERMINAO "PAR/MPAR" Determinar a paridade significa determinar se um valor par ou mpar. Matematicamente, pode-se dizer que um nmero par sempre que ele divisvel por 2. Ora, ser divisvel por 2 significa que o resto da diviso por 2 zero! Assim, um algoritmo para determinar se um nmero par ou mpar pode ser descrito conforme o fluxograma a

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

seguir. Se ele imprimir "0" significa que o nmero par; se, por outro lado, ele imprimir "1", significa que o nmero mpar!

Em portugol, o algoritmo tem a seguinte forma:

Em C/C++, este mesmo cdigo tem a seguinte forma:


#include <stdio> #include <iostream> using namespace std; int main(void) { int valor, resto; cout << "Digite um valor: "; cin >> valor; resto = valor % 2; cout << "O resto (0=par;1=mpar): " << resto << endl; getchar(); }

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

1.2. CLCULOS DE CONVERSO Vejamos agora como calcular uma converso. Suponhamos que nos seja fornecido um nmero de segundos qualquer, por exemplo: 54346. Queremos representar este nmero em termos de horas : minutos : segundos. Sabendo que: a) Uma hora tem 3600 segundos; b) Um minuto tem 60 segundos. Podemos fazer essa converso da seguinte forma: Passo 1: Obter o nmero de horas com a diviso inteira por 3600 Passo 2: Calcular os segundos restantes com o resto de diviso por 3600 Passo 3: Calcular o nmero de minutos com a diviso inteira por 60 Passo 4: Calcular os segundos restantes com o resto de diviso por 60 Vejamos: segundos_a = 54346 horas = segundos_a \ 3600 segundos_b = segundo_a % 3600 minutos = segundos_b \ 60 segundos = segundos_b % 60 Assim, o 54346s = 15h : 5min : 46s O fluxograma deste algoritmo o seguinte:

=> 15 (horas) => 346 (segundos) => 5 (minutos) = > 46 (segundos)

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

Em portugol, o algoritmo fica como descrito a seguir. Observe a declarao das variveis e a sequncia de clculos.

Em C/C++, este mesmo cdigo tem a seguinte forma:


#include <stdio> #include <iostream> using namespace std; int main(void) { int segundos_restantes, segundos_totais, segundos; int minutos; int horas; cout << "Digite um valor (em segundos): "; cin >> segundos_totais;

cout cout cout cout getchar(); }

<< << << <<

"Resultado: "; horas << "h : "; minutos << "min : "; segundos << "s" << endl;

Por que que eu posso usar a diviso tradicional? Na verdade, o ideal seria usar a diviso inteira; uma vez que o C/C++ no tem esse operador, usamos a diviso tradicional. Isso funciona porque as variveis com que estamos trabalhando so inteiras, isto , elas no armazenam a parte fracionria dos clculos. Isso significa que, quando guardamos um nmero fracionrio em uma varivel inteira, a parte fracionria perdida! NOTE que isso no o mesmo que arredondar!

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

2. FUNES MATEMTICAS Muitas vezes precisamos usar operaes matemticas na linguagem C/C++ para que possamos implementar algoritmos que solucionem nossos problemas de engenharia. Funes como seno e cosseno, por exemplo, esto diposnveis para nosso uso. Abaixo, segue uma lista de funes, com seus nomes na verso Portugol e C/C++: Portugol cos( x ) abs( x ) logn( x ) log( x ) exp( x, y ) sen( x ) raizq( x ) tan( x ) Pi C/C++ ceil( x ) cos( x ) exp( x ) abs( x ) floor( x ) log( x ) log10( x ) pow( x, y ) sin ( x ) sqrt( x ) tan( x ) 4.0 * atan(1.0) Comentrio Devolve o valor de x arredondado para cima Devolve o cosseno de x (com x em radianos) Devolve o valor de ex Devolve o valor absoluto (sem sinal) de x Devovle o valor de x arredondado para baixo Devolve o logaritmo natural de x Devolve o logaritmo em base 10 de x Devolve o valor de xy Devolve o seno de x (com x em radianos) Devolve a raiz quadrada de x Devolve a tangente de x (com x em radianos) Devolve o valor de PI (3,141592...)

Como usamos estas "funes" pr-programadas? Podemos us-las de vrias formas. Observe o seguinte fluxograma:

(A operao do retngulo verde desnecessria no Portugol!)

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

Observe o cdigo abaixo, em portugol:

O mesmo cdigo em C/C++ fica assim:


#include <stdio> #include <iostream> #include <math> using namespace std; int main(void) {

getchar(); }

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

OBSERVE a necessidade de incluir a linha: #include <math.h> Esta linha serve para indicar linguagem C/C++ que iremos utilizar as funes matemticas. Sem essa linha, o programa no vai ser gerado. Essas linhas "include" (que significa "incluir") so necessrias porque a linguagem C/C++ uma linguagem extensvel, isto , ela permite que eu acrescente funes a ela. Veremos futuramente como fazer isso.

3. FUNO DE ARREDONDAMENTO Ainda que em Portugol no exista uma funo pronta para arredondamento, ela existe no C/C++. Entretanto, o C/C++ s tem funes de arredondamento para baixo ( floor ) e para cima ( ceil ). Por exemplo: Nmero 1,4 1,5 floor 1,0 1,0 ceil 2,0 2,0

Elas podem ser usadas da seguinte forma:


#include <stdio> #include <iostream> #include <math> using namespace std; int main(void) {

getchar(); }

Lgica de Programao para Engenharia


Atualizao: 06/09/2011

4. BIBLIOGRAFIA ASCENCIO, A.F.G; CAMPOS, E.A.V. Fundamentos da Programao de Computadores. 2ed. Rio de Janeiro, 2007. MEDINA, M; FERTIG, C. Algoritmos e Programao: Teoria e Prtica. 2ed. So Paulo: Ed. Novatec, 2006. SILVA, I.C.S; FALKEMBACH, G.M; SILVEIRA, S.R. Algoritmos e Programao em Linguagem C. 1ed. Porto Alegre: Ed. UniRitter, 2010.

You might also like