Buscar

MATEMATICA-PROGRAMACAO-umaParceriaPerfeita

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 48 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
1 
 
 
Se a Matemática é a ciência da lógica e, se para programar precisamos 
de lógica, então...(Anita Lopes, 2006) 
 
Desde 1987 que sou professora universitária e ministro disciplinas de Linguagens de 
Programação nos cursos de Sistemas de Informação e de Engenharia. Durante todos esses 
anos, sempre permeou uma questão: por que é necessário saber Matemática para programar? 
 
Esse projeto se tornou concreto a partir de 2006 quando decidi que precisava tentar 
esclarecer essa questão, procurando relacionar cada tópico selecionado da Matemática com 
comandos/ funções das linguagens de programação. Para que pudesse exemplificar, escolhi a 
linguagem C++. 
 
Começo na Teoria dos Conjuntos e termino com Álgebra das Matrizes, passando por 
conceitos básicos tais como: sistemas de numeração, operações aritméticas, conceito de 
número primo, número quadrado perfeito, MDC, MMC, frações, porcentagem, expressões 
relacionais, entre outros. 
 
Um dos meus objetivos do presente trabalho é mostrar que tanto a Matemática quanto a 
Programação têm linguagens próprias que precisam ser bem aprendidas para que possamos 
fazer uso delas sem nenhuma dificuldade. 
 
Tenho também a pretensão de fazê-los “adorar” a Matemática, pois como afirma Devlin 
(2004,p 2): ”A matemática tornou-se o estudo dos números, da forma, do movimento, da 
mudança e do espaço.” 
 
 A ordem apresentada será a dos conceitos Matemáticos e, por essa razão, muitos 
trechos de programas poderão apresentar estruturas que você ainda não aprendeu quando 
estiver lendo, em seqüência, esse estudo, mas isto não importa, pois você retornará a eles 
quando dominar todas as estruturas. 
 
 Os exemplos serão apresentados na linguagem C++. Em alguns momentos, farei 
referência à linguagem Pascal porque muitos livros de algoritmos fazem uso do ”portugol” que 
é uma linguagem descritiva, em português, baseada entre outras, na linguagem Pascal. 
 
 Não conseguirei abranger todo o conteúdo de Matemática que aprendemos até 
chegarmos à universidade, mas tentarei recordar os conteúdos mais usados como exemplos 
nos exercícios de programação. 
 
Anita Lopes 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
2 
1. Número 
 
 
• É a idéia de quantidade. 
• Sua representação depende do sistema. 
• No sistema decimal hindo-arábico, todos os números são formados pelos algarismos de 
0 até 9. 
• No sistema romano, todos os números são formados pelas letras: I(1), V(5), X(10), 
L(50), C(100), D(500) e M(1000). 
 
Aplicação: Suponha que você deseje fazer um programa que entre com umas letras 
básicas do sistema romano e mostre o número correspondente no sistema decimal. 
#include <iostream> 
#include <cstring> 
using namespace std; 
int main() 
{ char romano; 
 cout<<"\nDigite uma letra do sistema romano: "; 
 cin>>romano; 
 romano=toupper(romano); 
 cout<<"\nNo sistema decimal: "; 
 switch(romano) 
 { 
 case 'I': cout<<"1\n\n"; break; 
 case 'V': cout<<"5\n\n"; break; 
 case 'X': cout<<"10\n\n "; break; 
 case 'L': cout<<"50\n\n "; break; 
 case 'C': cout<<"100\n\n "; break; 
 case 'D': cout<<"500\n\n "; break; 
 case 'M': cout<<"1000\n"; break; 
 default: printf(" nao corresponde a nenhum numero porque nao eh uma letra do 
sistema Romano\n\n "); 
 } 
 system("pause"); 
} 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
3 
2. Os conjuntos 
 
 
• N(Natural) = {0,1,2 ... }. 
• Z(Inteiro) = {... –2 –1 0 1 2 ...}. 
• Q(Racional) = { x | x=a/b, com a ∈ Z, b ∈ Z e b ≠ 0}. 
• R(Real) = { x | x ∈ Q ou x ∈ I} 
Observação: Não inclui o conjunto dos complexos. 
 As linguagens de programação procuram, dentro do possível, criar tipos de dados 
primitivos que suportem os conjuntos acima, com limitação, pois não poderemos chegar ao 
infinito. 
 Não tenho como objetivo, nesse estudo, um aprofundamento de todos os tipos de dados 
usados na linguageM C++, mas fazer a associação com o conceito da Matemática sobre os 
conjuntos inteiro e real. Logo, só apresentarei os tipos básicos e que possuem 
correspondência nas três linguagens. 
 
Linguagem C++ 
Z - int 
R - float 
 
 
3. As operações 
 
 
• Relembrando os termos das quatro operações básicas: 
ADIÇÃO Parcela, parcela, soma ou total 
SUBTRAÇÃO Minuendo, subtraendo e resto 
MULTIPLICAÇÃO Multiplicando, multiplicador e produto(fator, fator e produto) 
DIVISÃO Dividendo, divisor, quociente e resto 
POTENCIAÇÃO Base e expoente 
RADICIAÇÃO Radicando e índice. 
 
• Hierarquia das operações: 1a) potenciação/radiciação; 2a) multiplicação/divisão 3a) 
adição e subtração. 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
4 
 
Se você precisar que uma operação de hierarquia menor seja executada 
primeira, use parênteses. Observe os exemplos abaixo. 
 
 
 
• Somar(+), subtrair(-) ou multiplicar(*) dois inteiros, pela propriedade do fechamento, 
o resultado é um inteiro, mas nem sempre acontece isso quando dividimos dois inteiros, 
logo a divisão(/) sempre retornará um resultado no conjunto dos reais. 
 
• Somar(+), subtrair(-), multiplicar(*) ou dividir(/) dois reais(ou um inteiro e um real), 
pela propriedade do fechamento, o resultado é um real. 
 
 
Agora você me confundiu. 
Quando dividimos dois 
inteiros, retornou inteiro. 
Calma! As linguagens de programação 
fazem algumas adaptações. Leia a 
nota abaixo. 
 
Nas linguagens de programação C/ C++/ Kenya, o operador de divisão(/) 
retornará um número inteiro se o dividendo e o divisor forem inteiros, mas, 
se desejarmos que a operação seja realizada como real, acrescente .0 em um 
dos números. 
 
 Aplicação: Exibe o quociente inteiro e o real da divisão de 23 por 2. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 cout<<"\nDivisao inteira: "<<23/2; 
 cout<<"\nDivisao real: "<<23.0/2<<endl; 
 system("pause"); 
} 
 
 
 
• A potênciação é a multiplicação de um fator que se repete e tem a seguinte notação: 
baseexpoente , onde a base é o fator que se repete e o expoente é a quantidade de 
vezes que a base se repete. Tanto a base quanto o expoente são números que 
pertencem ao conjunto dos reais. Algumas linguagens de programação apresentam o 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
5 
operador de potenciação: ** ou ^, mas na linguagem C++ não existe operador para 
potenciação. Entretanto, a linguagem C++ disponibiliza a função pow(base,expoente). 
 
™ Quando não existir a função pow(base,expoente), poderemos usar a expressão que 
será deduzida a seguinte expressão, usando funções que estão presentes em todas 
as linguagens, exp( ) e log( ) mesmo que, algumas vezes, a notação seja diferente. 
 
¾ Função exp() - calcula a potência da base e(neperiana) 
 
¾ Função log( ) 
ƒ É uma função inversível cuja função inversa é a exponenciação. 
ƒ Sua representação: onde x é o número que devemos elevar b 
para obter N. 
xlogNb =
ƒ É bom ressaltar que x é um número real(racional ou irracional). 
ƒ O logaritmo natural(logaritmo neperiano) é o logaritmo cuja base é: e, 
aproximadamente 2,71828...Na Matemática usamos ln quando desejamos 
calcular o logaritmo na base e. 
ƒ Conversão entre base logarítmicas: b
x
a
xa
b log
loglog= 
ƒ Em programação: log(a)/log(b). 
 
 
Restrições: 
 N(logaritmando) precisa ser maior do que 0 e a b(base) precisa ser 
maior do que 0 e diferente de 1 
 
Deduzindo a expressão que substitui o operador de potenciação ou a função pow(,) 
 
logo, e, se substituirmos o valor de x, teremos 
 
se desejarmos uma potência representada por então 
 por uma das propriedade dos logaritmos 
se b é a base neperiana(e), então 
 
Como a função logaritmo neperiano é representada na Matemática por ln, então 
 
As linguagens de programação sempre disponibilizam duas funções: exponenciação e 
logaritmo, ambas na base neperiana, com as seguintes sintaxes: 
log( argumento) ou ln( argumento) e exp( argumento) 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
6 
Após essa demonstração Matemática, podemos construir nossa expressão final: 
 
 
 
Reconheço que li muitas 
vezes para entender e 
admito que achei muito 
interessante, mas quando 
vou precisar usá-la? 
 
Acho que já estou lhe convencendo 
que a Matemática é fantástica. 
Essa expressão deverá ser usada 
nas linguagens que não possuírem 
operadores/funções de potenciação. 
 
Aplicação: Entra com a base e o expoente e exibe a potência usando exp() e log(). 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ float base, expoente, potencia; 
 cout<<"\nDigite base: "; 
 cin>>base; 
 cout<<"\nDigite expoente: "; 
 cin>>expoente; 
 potencia= exp(expoente * log(base)); 
 cout<<"\nPotencia: " << potencia<<endl; 
 system("pause"); 
} 
 
 
 
 
 
Então, na linguagem C++ 
poderemos usar essa 
expressão ou usar a função 
pow(base,expoente). 
Perfeito! Acredito será mais 
simples usar a função 
pow(base,expoente), mas, no 
Pascal, teríamos que usar essa 
expressão. 
 
Aplicação: Entra com a base e o expoente e exibe a potência usando pow(,). 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
 float base, expoente, potencia; 
 cout<<"\nDigite base: "; 
 cin>>base; 
 cout<<"\nDigite expoente: "; 
 cin>>expoente; 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
7 
 potencia= pow(base,expoente); 
 cout<<"\nPotencia: " << potencia<<endl; 
 system("pause"); 
} 
 
• A radiciação é o inverso da potenciação logo, poderemos usar a expressão que foi 
deduzida para a potenciação com algumas modificações ou, usar a função 
pow(base,expoente) quando a linguagem disponibilizá-la. 
 
 
 
 
 Aplicação: Entra com radicando e o expoente e exibe a potência usando exp() e log(). 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
 float radicando, indice,raiz, raizExp; 
 cout<<"\nDigite o radicando: "; 
 cin>>radicando; 
 cout<<"\nDigite o indice: "; 
 cin>>indice; 
 if(radicando > 0 && índice >1) 
 { 
 raiz= pow(radicando,1/indice); 
 raizExp=exp(1/indice * log(radicando)); 
 cout<<"\nRaiz: " << raiz<<endl; 
 cout<<"\nRaiz usando a expressao: " << 
raizExp<<endl; 
 } 
 else 
 cout<<” 
 system("pause"); 
} 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
8 
 
™ Número Quadrado Perfeito é um número que se extrairmos sua raiz quadrada, 
obteremos um número inteiro. 
 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
float rad,raiz;int indice; 
 cout<<"\nDigte Radicando: "; cin>>rad; 
 cout<<"\nDigte Indice: "; cin>>indice; 
 if(indice < 2) cout<<"\nNao existe raiz 
para indice menor que 2\n"; 
 else if( rad >=0 ) 
 { 
 raiz=pow(rad, (float)1./indice); 
 if(raiz==floor(raiz)) 
 cout<<"\nQuadrado perfeito\n"; 
 else 
 cout<<"\nNAO eh Quadrado 
perfeito\n"; 
 } 
 else 
 cout<<"\nNao existe Raiz no conjunto 
dos Reais\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
 
 
4. O sistema decimal 
 
 
• É um sistema posicional. 
• A base desse sistema é o número 10. 
• Cada algarismo tem um valor absoluto e um valor relativo: 
™ Valor absoluto – valor do algarismo. 
™ Valor relativo – valor do algarismo multiplicado pela potência de 10 da posição em 
que ele se encontra dentro do número. 
• Observe a figura abaixo: 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
9 
 
 
• Observe um número posicionado nesse quadro e entenda os conceitos de valor absoluto 
e valor relativo. 
 
• Agora vamos aprender como conseguimos fazer isso em programação: 
 
™ Na linguagem Pascal, temos dois operadores que efetuam a divisão inteira entre 
dois números inteiros: div(retorna o quociente inteiro) e mod(retorna o resto). Na 
linguagem C++, por definição, o operador de divisão / retorna um quociente inteiro 
se o numerador(dividendo) e o denominador(divisor) forem inteiros e, para retornar 
o resto de uma divisão de inteiros, existe o operador % que tem a mesma finalidade 
de mod do Pascal. 
 
™ Se trabalharmos com as potências de 10, poderemos descobrir o valor absoluto e o 
valor relativo de cada algarismo. Vamos descobrir do algarismo 7 no número 32758. 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
10 
 
 
 
Vamos agora praticar. 
 
 
Como vou saber se acertei? 
 
Calma! Vamos fazer juntos. 
 
™ Tente agora montar as expressões que representam os valores absoluto e relativo 
do algarismo da casa das unidades de milhar do número 32758. 
Valor absoluto (32758 / 1000) % 10 
Valor relativo (32758 / 1000 % 10) * 1000 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
11 
™ Tente agora montar as expressões que representam os valores absoluto e relativo 
do algarismo da casa das centenas de milhar do número 4352768. 
Valor absoluto (4352768 / 100000) % 10 
Valor relativo ((4352768 / 100000) % 10) * 100000 
 
™ Tente agora montar as expressões que representam os valores absoluto e relativo 
do algarismo da casa das unidades de milhão do número 8123982. 
Valor absoluto 8123982 / 1000000 (para o algarismo mais à esquerda, só 
esta operação é suficiente) 
Valor relativo (8123982 / 1000000) * 1000000 
 
™ Tente agora montar as expressões que representam os valores absoluto e relativo 
do algarismo da casa das unidades simples do número 8123982. 
Valor absoluto 8123982 % 10 (para o algarismo mais à direita, só esta 
operação é suficiente) 
Valor relativo 8123982 % 10 ( multiplicar por 1, é desnecessário) 
 
™ Tente agora montar a expressão que retira a classe das unidades de milhar do 
número 8123982. 
Classe das unidades de milhar (8123982 / 1000) % 1000 
 
™ Tente agora montar a expressão que retira o dia da data 230389. 
Dia 230389 / 10000 
 
™ Tente agora montar a expressão que retira o mês da data 230389. 
Mes (230389 / 100) % 100 
 
™ Tente agora montar a expressão que retira o ano da data 230389. 
Ano 230389 % 100 
 
™ Você tem um disco com 4 setores, numerados de 0-3. Quando você escolhe um 
número, sua aposta é no seguinte. Faça um programa, sem usar if, que possibilite 
este jogo. 
 
#include <iostream> 
using namespace std; 
int main(){ 
 int numero, aposta; 
 cout<<"\nDigite numero de 0-3: "; 
 cin>>numero; 
 while(numero<0 || numero > 3) 
 { 
 cout<<"\nSo numeros de 0 ate 3. 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
12 
 
Digite novamente: "; 
 cin>>numero; 
 } 
 aposta=(numero + 1) %4; 
 cout<<"\nSua aposta: "<<aposta<<endl; 
 system("pause"); 
} 
 
 
Acho que esses dois 
operadores(/ e %) poderão 
resolver meu problema do 
número capicua. 
Ual! Estou gostando de ver. O 
número capicua é muito 
interessante. 
Estou me lembrando da data 
20022002 
 
• Número capicua é um número que, lido da esquerda para direita, é igual ao lido da 
direita para esquerda. Exemplo: 2332 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int num,numC, inv; 
 cout<<"\nNumero: "; 
 cin>>num; 
 numC=num; // para nao perder o valor 
inicial 
//inicio do trecho que inverte o numero 
 inv=0; 
 while(numC > 0) 
 { 
 inv = inv * 10 + numC%10; 
 numC /= 10; 
 } 
//fim do trecho 
 if(num == inv) 
 cout<<"\nEh CAPICUA\n"; 
 else 
 cout<<"\nNAO eh CAPICUA\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
13 
5. Alguns conceitos 
 
 
• Módulo de um número inteiro 
 
 
Na linguagem C++, temos a função abs(argumento) 
 
• Números inteiros opostos ou simétricos 
 
 
Para obtermos o simétrico, multiplique o número por –1. 
 
 
• Inverso de um número inteiro 
 
1 / num , mas, na linguagem C++, você precisa colocar .0 no 1: 1.0 / num. 
 
 
Gostei, pois sempre me 
confundia quando falavam 
em inverso e simétrico. 
Então, sorria. Você está sempre com 
uma expressão tão desconfiada! 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
14 
6. Divisores/ Múltiplos 
 
 
• As regras da divisibilidade são mais complicadas de se usar em programação do que o 
operador % (mod ). Através de um simples teste, poderemos verificar se um número é, 
ou não, múltiplo de outro: 
 
C++ 
if(num1 % num2 == 0 ) 
Pascal 
if num1 mod num2 = 0 then 
 
• Intervalos 
 
 
Nunca entendi bem essa 
história de aberto e 
fechado. Pode explicar? 
Claro! Vou mostrar na figura abaixo. 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
15 
™ Como identificar, em um intervalo, qual o menor e o maior múltiplo de um número? 
 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
int li, ls, num; 
 cout<<"\nDigte limite inferior: "; cin>>li; 
 cout<<"\nDigte limite superior: "; cin>>ls; 
 cout<<"\nDigte numero: "; cin>>num; 
 if(li % num == 0) 
 cout<<"\nMenor: "<<li; 
 else 
 cout<<"\nMenor: "<<li + (num - li % num); 
 cout<<"\nMaior: "<< ls - ls % num; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
™ Como descobrir os divisores de um número? 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
16 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, num; 
 cout<<"\nDigte numero: "; cin>>num; 
 for(x=1;x<=num;x++) 
 if( num % x == 0) 
 cout<<x<<"\t"; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
O programa dos divisores será base de muitos outros programas que, 
embora tenham outras soluções melhores, você poderá usá-lo para 
descobrir se um número é primo ou se dois números são primos entre si 
ou se um número é perfeito, entre outros. 
 
• Número Primo é um número que só tem dois divisores: 1 e o próprio número, logo 1 não é 
primo e 2 é o único número par que é primo. 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, num, contaDivisores=0; 
 cout<<"\nDigte numero: "; cin>>num; 
 for(x=1; x<=num && contaDivisores <=2 ; 
x++) 
 if( num % x == 0) 
 contaDivisores++; 
 if(contaDivisores == 2) 
 cout<<"\nPrimo\n"; 
 else 
 cout<<"\nNAO Primo\n"; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
• MDC significa o maior divisor comum de dois, ou mais números. Nós podemos achar o 
MDC pelo método da fatoração ou pelo algoritmo de Euclides: 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
17 
 
 
Apresentarei duas soluções, sendo que a primeira será fiel ao Algoritmo de Euclides e a 
segunda, não fará o teste para ordenar. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int dividendo, divisor,aux,resto; 
 cout<<"\ndigite 1o numero: "; 
 cin>>dividendo; 
 cout<<"\ndigite 2o numero: "; 
 cin>>divisor; 
 if( dividendo < divisor ) 
 { 
 aux=dividendo; 
 dividendo=divisor; 
 divisor=aux; 
 } 
 resto= dividendo % divisor; 
 while( resto != 0) 
 { 
 dividendo = divisor; 
 divisor = resto; 
 resto = dividendo % divisor; 
 } 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int dividendo, divisor,resto; 
 cout<<"\ndigite 1o numero: "; 
 cin>>dividendo; 
 cout<<"\ndigite 2o numero: "; 
 cin>>divisor; 
 resto= dividendo % divisor; 
 while( resto != 0) 
 { 
 dividendo = divisor; 
 divisor = resto; 
 resto = dividendo % divisor; 
 } 
 cout<<"\nMDC: "<<divisor; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
18 
 cout<<"\nMDC: "<<divisor; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
• Números primos entre si são números cujo único divisor comum é o número 1. Para a 
construção desse programa, faremos uso do programa do MDC: 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int dividendo, divisor,resto; 
 cout<<"\ndigite 1o numero: "; 
 cin>>dividendo; 
 cout<<"\ndigite 2o numero: "; 
 cin>>divisor; 
 resto= dividendo % divisor; 
 while( resto != 0) 
 { 
 dividendo = divisor; 
 divisor = resto; 
 resto = dividendo % divisor; 
 } 
 if( divisor ==1 ) 
 cout<<"\nPrimos entre si"; 
 else 
 cout<<"\nNAO sao Primos entre si"; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
19 
• Número Perfeito é um número cuja soma de seus divisores, exceto ele, é igual a ele 
(exemplos: 6, 28,...). 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, num, soma=0; 
 cout<<"\nDigte numero: "; 
 cin>>num; 
 for(x=1;x<num;x++) 
 if( num % x == 0) 
 soma+=x; 
 if( soma == num ) 
 cout<<"\nPerfeito"; 
 else 
 cout<<"\nNAO Perfeito"; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
• Números Amigos são dois números cuja soma dos divisores de um dos números, exceto 
ele, é igual ao outro número e, vice-versa. 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, num1, num2, soma1=0, soma2=0; 
 cout<<"\nDigte 1o numero: "; 
 cin>>num1; 
 cout<<"\nDigte 1o numero: "; 
 cin>>num2; 
 for(x=1;x<num1;x++) 
 if( num1 % x == 0) 
 soma1+=x; 
 for(x=1;x<num2;x++) 
 if( num2 % x == 0) 
 soma2+=x; 
 if( soma1== num2 && soma2 == num1 ) 
 cout<<"\nNumeros Amigos";else 
 cout<<"\Nao sao amigos"; 
//Solucao com funçao 
 
#include <iostream> 
using namespace std; 
int amigos(int n) 
{ 
 int x, s=0; 
 for(x=1;x<n;x++) 
 if( n % x == 0) 
 s+=x; 
 return s; 
 } 
int main() 
{ 
 int num1, num2, soma1, soma2; 
 cout<<"\nDigte 1o numero: "; 
 cin>>num1; 
 cout<<"\nDigte 1o numero: "; 
 cin>>num2; 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
20 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 soma1=amigos(num1); 
 soma2=amigos(num2); 
 if( soma1== num2 && soma2 == num1 ) 
 cout<<"\nNumeros Amigos"; 
 else 
 cout<<"\Nao sao amigos"; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
Gostei dessa história de 
números amigos. São muitos? 
 
Não, mas a busca não acabou. 
 
• MMC significa o menor múltiplo comum de dois ou mais números. Nós podemos achar o 
MMC pelo método da fatoração ou pela soma: 
 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int a,b,aux,mmc; 
 cout<<"\ndigite primeiro numero: "; 
 cin>> a; 
 cout<<"\ndigite segundo numero: "; 
 cin>>b; 
 if( a < b ) 
 { 
 //troca os valores de a e b 
 aux=a; a=b; b=aux; 
 } 
 mmc=a; 
 while( mmc % b != 0) 
 mmc= mmc+a; 
 cout<<"\nMMC: "<<mmc<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
21 
6. Médias 
 
• Média aritmética é uma fração cujo numerador é a soma dos valores e, no denominador 
a quantidade de valores somados. 
 
• Média ponderada é uma fração cujo numerador é somatório de vários produtos(valor x 
peso1) e, no denominador, a soma dos pesos. 
 
• Média Geométrica é a raiz enésima do produto dos n valores. 
 
 
 
Aplicação: Entra com a nota da prova, a nota do trabalho e com os respectivos pesos. 
Exibe a média ponderada. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 float nota, trab, pesoN, pesoT, mp; 
 cout<<"\nDigte nota da prova: "; 
 cin>>nota; 
 cout<<"\nDigte nota do trabalho: "; 
 cin>>trab; 
 cout<<"\nDigte peso da prova: "; 
 cin>>pesoN; 
 cout<<"\nDigte peso do trabalho: "; 
 cin>>pesoT; 
 mp= (nota*pesoN + trab*pesoT) /(pesoN 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
22 
+ pesoT); 
 cout<<"\nMedia Ponderada: "<< mp; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
7. Porcentagem 
 
• Muitos de nossos programas irão precisar desse conceito. 
• O símbolo de porcentagem é %. 
• É uma forma de se comparar dois números e resulta de uma regra de três simples. A 
primeira fração terá como denominador o número que representa uma parte do outro 
número e, como denominador, o maior número. A segunda fração terá como 
denominador 100 e no numerador, uma incógnita porque é o que desejamos calcular. 
 
 
Confuso. Você pode dar 
um exemplo? 
 
Claro! Observe a aplicação abaixo. 
 
Aplicação 
Suponha que você tenha um conjunto de 40 alunos e, nesse conjunto, existem 15 alunos 
que estão com média igual ou superior a 9,0 em Algoritmos. Você gostaria de saber que 
percentual esse grupo representa. 
 
 
 
Essa, eu entendi, mas, 
37,5%, acho demais. 
 
Claro que não.Se você fizer todos os 
exercícios propostos, fará parte 
desse grupo. 
 
 
 
Você pode relembrar como 
transformo 30% em número? 
 
Com certeza! 
 
30%: Você fala trinta por cento. Substitua o ”por” pela divisão e o cento, por 100. 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
23 
 
• Porcentagem é usada em expressões que representam acréscimos em salários ou 
aluguéis, deduções em compras, etc. 
Aplicação: Suponha que o salário será reajustado em 7%: 
Matemática C++ 
Acréscimo = salario x
100
7 Acrescimo = salario * 7/100 ; 
Acréscimo = salario x 0,07 Acrescimo = salario * 0.07 ; 
Novo salario = salario + salario x 
100
7 NovoSalario = salario + salario * 7/100; 
Novo salario = salario + salario x 0,07 NovoSalario = salario + salario * 0.07; 
Se usássemos a propriedade distributiva: salario(1 + 0,07) = salario x 1,07 
 Novo salario = salario x 1,07 NovoSalario = salario * 1.07; 
 
 
Lembre-se de que na linguagem C++ quando dividimos um número inteiro por 
um inteiro, o resultado será um inteiro. Sendo assim não se esqueça de 
converter para real: 7.0/100 ou (float) 7/100 se você inverter a 
expressão: 7/100 * salário, ficando assim: 
7.0/100 * salário ou (float) 7/100 * salario 
 
Se o percentual de reajuste for desconhecido, então teríamos que usar a expressão: 
Matemática Novo salario= salario + salario x 
100
indice 
C++ NovoSalario = salario + salário * indice /100; 
 
Desconto em uma compra: O desconto será de 12% se a compra for a vista. 
Matemática C++ 
Desconto = valor x
100
12 Desconto = valor * 12/100 ; 
Desconto = valor x 0,12 Desconto = valor * 0.12 ; 
Novo valor = valor - valor x 
100
12 NovoValor = valor - valor * 12/100 ; 
Novo valor = valor - valor x 0,12 NovoValor = valor - valor * 0.12; 
Se usássemos a propriedade distributiva: valor(1 - 0,12) = valor x 0,88. 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
24 
 Novo valor = valor x 0,88 NovoValor = valor * 0.88; 
 
Se índice do desconto for desconhecido, então teríamos que usar a expressão: 
Matemática 
 
C++ NovoValor = valor – valor * indice /100; 
 
 
Não se esqueça que o índice, expresso em percentual, é sempre um valor 
real. 
 
Aplicação: Entrar com o salário e o índice de reajuste. Exibir o novo salário. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 float salario, novoSalario, indice; 
 cout<<"\nDigite o salario: "; 
 cin>>salario; 
 cout<<"\nDigite o indice de reajuste em 
porcentagem: "; 
 cin>>indice; 
 novoSalario=salario+ salario*indice/100; 
 cout<<"\nNovo salario R$ " << 
novoSalario<<endl; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
25 
8. Triângulos 
 
 
• Triângulo é um polígono que tem três lados 
• A condição para que três números possam ser lados de um triângulo é: 
 
 
No C++: if(a<b+c && b<a+c & c<a+b) 
 
• A classificação dos triângulos quanto aos lados: 
 
 
 
• A classificação dos triângulos quanto aos ângulos: 
 
 
 
• O teorema de Pitágoras: ”O quadrado da hipotenusa é igual à soma dos quadrados dos 
catetos”. 
• Pelo teorema de Pitágoras e sua extensão, podemos classificar os triângulos quantos 
aos ângulos, tendo em vista os lados: 
 
Triângulo Retângulo Triângulo Obtusângulo Triângulo Acutângulo 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
26 
 Aplicação: Entrar com três números que representam os lados de um triangulo e 
classificá-lo segundo os lados. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 float a,b,c; 
 cout<<"\nDigite o primeiro lado: "; 
 cin>>a; 
 cout<<"\nDigite o segundo lado: "; 
 cin>>b;cout<<"\nDigite o terceiro lado: "; 
 cin>>c; 
 if(a<b+c && b<a+c & c<a+b) 
 if(a==b && a==c) 
 cout<<"\nEQUILATERO\n"; 
 else if(a==b || a==c || b==c) 
 cout<<"\nISOSCELES\n"; 
 else 
 cout<<"\nESCALENO\n"; 
 else 
 cout<<"\nNao formam um triangulo\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
Aplicação: Entrar com três números que representam os lados de um triangulo e 
classificá-lo segundo os ângulos. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 float a,b,c,hip, cat1,cat2; 
 cout<<"\nDigite o primeiro lado: "; 
 cin>>a; 
 cout<<"\nDigite o segundo lado: "; 
 cin>>b; 
 cout<<"\nDigite o terceiro lado: "; 
 cin>>c; 
 if(a<b+c && b<a+c & c<a+b) 
 { 
 if(a>b && a>c) 
 { hip=a; cat1=b; cat2=c; } 
 else if(b > c) 
 
 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
27 
 { hip=b; cat1=a; cat2=c; } 
 else 
 { hip=c; cat1=a; cat2=b; } 
 if(hip*hip == cat1*cat1 + cat2*cat2) 
 cout<<"\nRETANGULO\n"; 
 else 
 if(hip*hip > cat1*cat1 + cat2*cat2) 
 cout<<"\nOBTUSANGULO\n"; 
 else 
 cout<<"\nACUTANGULO\n"; 
 } 
 else 
 cout<<"\nNao formam um triangulo\n"; 
 system("pause"); 
} 
 
 
 
 
9. Áreas e Perímetros das Figuras Básicas 
 
 
 
 
 
Você não vai dar nenhum 
exemplo? 
 
Está bem.Vou fazer um exemplo com 
retângulo. 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
28 
Aplicação: Entrar com a largura e o comprimento de uma sala e exibir quantos metros 
quadrados serão necessários para revestir o chão de granito e quantos metros lineares 
serão necessários para o rodapé sem considerar os arremates. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 float largura, comprimento; 
 cout<<"\nDigite a largura da sala: "; 
 cin>>largura; 
 cout<<"\nDigite o comprimento da sala: "; 
 cin>>comprimento; 
 cout<<"\nVoce precisara comprar "<<largura * comprimento<<" metros quadrados de 
granito para o chao\n "; 
 cout<<"\nVoce precisara comprar "<<2*(largura + comprimento)<<" metros lineares de 
rodape\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
10. Relações Trigonométricas 
 
 
1cossen 22 =+ 
cos
sengentetan = gentetan
1angentecot = 
cos
1antesec = sen
1anteseccos = 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
29 
 
Não se esqueça que as funções sin( ), cos( ) e tan( ) exigem que o ângulo seja 
dado em radianos, ou convertido para radiano. 
 
 
Como é mesmo que se 
converte de graus para 
radianos? 
Simples: multiplique o ângulo em 
graus por PI e divida por 180. 
 
 
Você falou muito rápido. Vá 
mais devagar, por favor, 
pois tem mais de dez anos 
que não estudo. 
 
Temos duas unidades para medir os 
ângulos: grau, do seu transferidor, e 
radiano. Leia a nota para saber 
porque a medida radiano é escolhida. 
 
 
O radiano (símbolo: rad) é a unidade de medida do Sistema Internacional de 
Unidades (sigla: SI) que é um conjunto de definições utilizado na maioria 
dos países, visando uniformizar. 
 
Aplicação 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
 float angulo, rang; 
 cout<<"\nangulo: "; 
 cin>>angulo; 
 rang= angulo*M_PI/180; 
 cout<<"\nseno : "<<sin(rang)<<"\n"; 
 cout<<"\nco-seno : "<<cos(rang)<<"\n"; 
 cout<<"\ntangente : "<<tan(rang)<<"\n"; 
 cout<<"\nco-secante : "<<1/sin(rang)<<"\n"; 
 cout<<"\nsecante : "<<1/cos(rang)<<"\n"; 
 cout<<"\nco-tangente: 
"<<1/tan(rang)<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
30 
 
No exemplo anterior, 
apareceu M_PI. O que 
significa isso? 
Percebo que você está começando a se 
preocupar com detalhes que 
simplificam nossos programas. 
Muitas linguagens de programação 
disponibilizam a constante PI como 
nomes diferentes. 
 
 
Essa constante pode ser 
usada em qualquer 
compilador? 
Infelizmente, não. Sugiro que você, 
nesses casos, defina sua constante PI 
cujo valor é: 3.14159265358979323846 
 
 
 
11. Equação do 2o grau - ”fórmula de Baskara” 
 
 
Seja a equação: . 0acom0cbxax2 ≠=++
A “fórmula de Baskara” garante que suas raízes podem ser calculadas através das 
fórmulas abaixo desde que e sendo 0≥Δ
 
 
 
 
 
A única restrição é que o coeficiente a não seja 0, pois não seria uma equação 
do 2o grau. 
Dependendo do valor de , podemos concluir que: 
• > 0: obteremos duas raízes reais 
• = 0: obteremos uma raiz igual a 0 e a outra, real 
• < 0: obteremos duas raízes complexas 
 
 
Complexas! O que significa isso? 
 
Agora vou lhe dar razão. O conjunto 
dos complexos foi retirado do ensino 
médio, mas não se preocupe, pois é 
só fazer o teste com . 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
31 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
 float a, b, c, X1, X2, delta; 
 cout<<"\n a: "; 
 cin>>a; 
 cout<<"\n b: "; 
 cin>>b; 
 cout<<"\n c: "; 
 cin>>c; 
 delta = b*b - 4*a*c; 
 if(delta >= 0) 
 { 
 X1 = (-b+sqrt(delta))/(2*a); 
 X2 = (-b-sqrt(delta))/(2*a); 
 cout<<"\nX1= "<<X1<<"\n\n"; 
 cout<<"\nX2= "<<X2<<"\n\n"; 
 } 
 else 
 cout<<"\nA equacao nao possui raizes no 
conjunto dos reais\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
 
 
12 Progressão Aritmética(PA) e Progressão Geométrica(PG) 
 
 
• PA é uma seqüência de números cujos termos crescem com uma razão constante, 
podendo ser crescente ou decrescente(soma-se, ou subtrai-se, a razão). 
 
™ Fórmula do termo geral da PA: )r1(naa 1n −+= . 
 
™ Soma dos termos de uma PA : 
2
n).aa(
S n1n
+= . 
 
• PG é uma seqüência de números cujos termos crescem com uma razão constante, 
podendo ser crescente ou decrescente (multiplica-se, ou dividi-se, a razão). 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
32 
™ Fórmula do termo geral da PG: . 
1n
1n q.aa
−=
™ Soma dos termos de uma PG : 1q
)1q(aS
n
1
n −
−= 
. 
 
Esse conceito de séries é 
igual a dos parâmetros da 
estrutura do for. 
Com certeza. Você está ficando 
cada vez melhor! 
 
Aplicação. 
#include <iostream> 
#include <cmath> 
using namespace std; 
int main() 
{ 
 int x, somaPA=0,somaPG=0; 
 float SPA,SPG; 
 
 cout<<"\nPA - decrescente\n"; 
 for(x=10; x>=1; x--) 
 { 
 cout<<x<<"\t"; somaPA+=x; 
 } 
 cout<<"\n\n"; 
 
cout<<"\nPG - crescente\n"; 
 for(x=3; x<=20000; x*=3) 
 { 
 cout<<x<<"\t"; somaPG+=x; 
 } 
 cout<<"\n\n"; 
 SPA=((10+1)*10)/2; 
 SPG=(3*(pow(3.,9.)-1))/(3-1); 
 cout<<"\nPA\tPG\n"; 
 cout<<"\nUsando acumulaor\n"; 
 cout<<"\n"<<somaPA<<"\t"<<somaPG; 
 cout<<"\nUsando a formula\n"; 
 cout<<"\n"<<SPA<<"\t"<<SPG; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
33 
13. Fatorial• O fatorial de um número n, sendo n ≥ 0, é o produto de todos inteiros positivos 
desde um até o número, sabendo-se que o fatorial de 0 e de 1 é igual a 1. 
• Sua representação na matemática é: o número seguido do ponto de exclamação. 
Exemplo: fatorial de seis: 6! . 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, num,fatorial; 
 cout<<"\nNumero: "; cin>>num; 
 fatorial=1; 
 for(x=1; x<=num; x++) 
 fatorial *=x; 
 cout<<"\nFatorial: "<< fatorial; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
14. Arranjo e Combinação 
 
• Arranjos são agrupamentos de p elementos onde p < n, sendo n o número total de 
elementos. 
™ Sua representação é: , lendo-se: Arranjo de n, p a p. 
n
pA
™ Podem ser com repetição ou sem repetição (simples). 
 
 
 
™ Arranjos são gerados com estruturas de repetição aninhadas (Exemplo: for dentro 
de for para arranjos 2 a 2). 
™ Um exemplo de Arranjo com repetição é a geração das 10 tabuadas de multiplicar. 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
34 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 for(x=1; x<=10; x++) 
 { 
 cout<<"\nTabuada do "<<x; 
 for(y=1; y<=10; y++) 
 cout<<"\n"<<x<<" x "<<y<<" = "<<x*y; 
 cin.get(); 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
™ Um exemplo de Arranjo sem repetição é a geração de uma tabela para um torneio 
de dois turnos no futebol, i.é, cada time joga com outro duas vezes. 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\nArranjos Simples 2 a 2\n"; 
 for(x=1; x<=10; x++) 
 { 
 for(y=1; y<=10; y++) 
 if(x!=y) 
 cout<<x<<" - "<<y<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
35 
 
 
 
• Combinações são agrupamentos de p elementos onde p < n, sendo n o número total de 
elementos e os agrupamentos são distintos, isto é, a ordem não importa(exemplo: ab 
e ba são iguais). 
™ Sua representação é: , lendo-se: Combinação de n, p a p. 
n
pC
 
™ Um exemplo de combinação é a geração de uma tabela para um torneio de um turno 
no futebol, i.é, cada time joga com outro uma vez. Nesse exemplo, é a metade do 
arranjo simples 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\nCombinacao 2 a 2\n"; 
 for(x=1; x<=10; x++) 
 { 
 for(y=1; y<=10; y++) 
 if(x<y) 
 cout<<x<<" - "<<y<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
36 
 
 
™ O jogo do dominó é uma combinação de sete(0 até 6), 2 a 2, mais a diagonal 
principal. 
 
//1a solucao 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x,y; 
 //gera os iguais 
 for(x=0; x<=6; x++) 
 cout<<x<<"-"<<x<<"\t"; 
 cout<<"\n"; 
 
 //combinacao de 7, 2 a 2/ 
 for(x=0; x<=5; x++) 
 { 
 for( y= x+1; y<=6; y++) 
 cout<<x<<"-"<<y<<"\t"; 
//2a solucao 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x,y; 
 for(x=0; x<=6; x++) 
 { 
 for(y=0; y<=6; y++) 
 if( x<=y ) 
 cout<<x<<"-"<<y<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
37 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
14. Álgebra das Matrizes 
 
 
• O domínio desse conteúdo é fundamental para programação e, por essa razão, vamos 
explorar um pouco mais o assunto. 
• Matriz é um arranjo de elementos dispostos em linhas e colunas. Na matemática, 
normalmente, números reais, mas, na Programação, poderão ser números 
inteiros/reais e caracter. 
• A matriz tem um nome que é uma letra maiúscula. E, de forma subscrita, sua 
dimensão(linhas e colunas) separadas pela letra x minúsucla. Os elementos se 
apresentam entre um par de colchetes, ou de parênteses, e cada elemento é 
representado pela letra minúscula correspondente ao nome da matriz e sua posição 
linha/coluna. 
 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
=
mn
n2
n1
3m
23
13
2m
22
12
1m
21
11
xnm
a
.
a
a
.
.
.
.
a
.
a
a
a
.
a
a
a
.
a
a
A 
Sendo assim, podemos dizer que: 
ƒ A numeração das linhas varia de 1 até m crescendo de 1 
em 1. 
ƒ A numeração das colunas varia de 1 até n crescendo de 
1 em 1. 
 
 
Nossa! O que aconteceu? 
Já começo a ver um sorriso 
e sua sobrancelha está 
menos arqueada. 
De repente, deu um “estalo” e já 
estou juntando todas as peças de 
um quebra-cabeça.Estou vendo um 
for dentro do for para representar 
as linhas e as colunas. 
 
Percebo que o programa 
que gerou todos os 
arranjos de 1 até 10, com 
repetição, servirá para as 
matrizes bidimensionais. 
Perfeito, mas teremos que fazer 
adaptações para algumas linguagens. 
Na linguagem C++, a numeração das 
linhas /colunas começa com 0.Veja a 
nota abaixo. 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
38 
 
 ⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
=
33
23
3,1
03
32
22
12
02
31
21
11
01
30
20
10
00
4x4
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
A 
Sendo assim, podemos dizer que: 
ƒ A numeração das linhas varia de 0 até m-1 
crescendo de 1 em 1. 
A numeração das colunas varia de 0 até n -1 
crescendo de 1 em 1. 
 
 
Para que possamos ficar mais próximos da programação, passaremos a usar 
a mesma numeração linha/coluna da linguagem C++. 
 
• A matriz pode ter também só uma dimensão como poderá ser observado nas figuras 
abaixo: 
 
[ ]13132A 4x1 = 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
=
13
1
3
2
A 1x4
 
Matriz linha ou vetor linha 
 
 
Matriz coluna ou vetor coluna 
 
 
™ Matriz quadrada – é uma matriz onde o número de linhas é igual ao número de 
colunas. 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
=
33
23
3,1
03
32
22
12
02
31
21
11
01
30
20
10
00
4x4
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
A 
™ Matriz unidade ou identidade – é uma matriz de ordem n, isto é , uma matriz 
quadrada onde os elementos da diagonal principal são iguais a 1 e os demais, 
iguais a 0. 
⎥⎥
⎥⎥
⎦
⎤
⎢⎢
⎢⎢
⎣
⎡
=
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
I 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
39 
 
Fazendo uma pequena modificação no programa arranjoSemRepeticao(arranjo 
simples), obteremos uma saída diferente. Isto lhe lembra o quê? 
 
Aplicação: Exiba todas as posições da matriz de ordem 4. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\n"; 
 for(x=0; x<4; x++) 
 { 
 for(y=0; y<4; y++) 
 
 cout<<x<<","<<y<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
Aplicação: Exiba todas as posições da matriz de ordem 4 que estão na DP. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\n"; 
 for(x=0; x<4; x++) 
 { 
 for(y=0; y<4; y++) 
 if(x==y) 
 cout<<x<<","<<y<<"\t"; 
 else 
 cout<<"\t"; 
 cout<<"\n";} 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
40 
 
Aplicação: Exiba todas as posições da matriz de ordem 4 que estão fora da DP. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\n"; 
 for(x=0; x<4; x++) 
 { 
 for(y=0; y<4; y++) 
 if(x!=y) 
 cout<<x<<","<<y<<"\t"; 
 else 
 cout<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
 
 
 
Aplicação: Exiba todas as posições da matriz de ordem 4 que estão no triângulo 
superior da DP. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\n"; 
 for(x=0; x<4; x++) 
 { 
 for(y=0; y<4; y++) 
 if(x<y) 
 cout<<x<<","<<y<<"\t"; 
 else 
 cout<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
41 
Aplicação: Exiba todas as posições da matriz de ordem 4 que estão no triângulo 
inferior da DP. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x, y; 
 cout<<"\n"; 
 for(x=0; x<4; x++) 
 { 
 for(y=0; y<4; y++) 
 if(x>y) 
 cout<<x<<","<<y<<"\t"; 
 else 
 cout<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
 
 
™ Matriz transposta – Dada uma Matriz Am,n, dizemos que AT se o número de linhas 
dela for igual ao número de colunas de A e se o número de colunas dela for igual ao 
número de linhas de A logo, a transposta de A e será da seguinte ordem: An,m. 
⎥⎦
⎤⎢⎣
⎡=
12
02
11
01
10
00
3x2 a
a
a
a
a
a
A 
⎥⎥
⎥
⎦
⎤
⎢⎢
⎢
⎣
⎡
=
21
11
01
20
10
00
2,3
a
a
a
a
a
a
A 
Aplicação: Entrar com valores para uma matriz de ordem 2 x 3. Gerar e exibir a 
transposta. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x,y;float a[2][3], at[3][2]; 
 for(x=0; x<2; x++) 
 for(y=0; y<3; y++) 
 { 
 cout<<"Entrar com elemento linha" <<x+1 
<<" coluna " <<y+1<<": "; 
 cin>>a[x][y]; 
 at[y][x]=a[x][y]; 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
42 
 } 
 // saida 
 cout<<"\nMatriz a\n"; 
 for(x=0; x<2; x++) 
 { 
 for(y=0; y<3; y++) 
 cout<<a[x][y]<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\nMatriz Transposta de a\n"; 
 for(x=0; x<3; x++) 
 { 
 for(y=0; y<2; y++) 
 cout<<at[x][y]<<"\t"; 
 cout<<"\n"; 
 } 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
Realmente, tenho que admitir 
que a Álgebra das Matrizes é 
muito fascinante, 
Calma. Você ainda não viu nada. 
 
• Operações com matrizes 
 
™ Soma de duas matrizes colunas 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x; 
 float A[3], B[3], SOMA[3]; 
//Entrada de A 
 for(x=0; x<3; x++) 
 { 
 cout<<"Entrar com elemento da 
matriz A "<<x+1 <<"a coluna: "; 
 cin>>A[x]; 
 } 
//Entrada de B 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
43 
 for(x=0; x<3; x++) 
 { 
 cout<<"Entrar com elemento da 
matriz B "<<x+1<<"a coluna: "; 
 cin>>B[x]; 
 } 
//Gera a matriz Soma 
 for(x=0; x<3; x++) 
 SOMA[x]=A[x] + B[x]; 
 // saida 
 cout<<"\nA\tB\tSOMA\n"; 
 for(x=0; x<3; x++) 
cout<<"\n"<<A[x]<<"\t"<<B[x]<<"\t"<<SO
MA[x]; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
 
™ Subtração de duas matrizes colunas 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x; 
 float A[3], B[3], DIF[3]; 
//Entrada de A 
 for(x=0; x<3; x++) 
 { 
 cout<<"Entrar com elemento da 
matriz A "<<x+1<<"a coluna: "; 
 cin>>A[x]; 
 } 
//Entrada de B 
 for(x=0; x<3; x++) 
 { 
 cout<<"Entrar com elemento da 
matriz B "<<x+1<<"a coluna: "; 
 cin>>B[x]; 
 } 
//Gera a matriz Diferenca 
 for(x=0; x<3; x++) 
 DIF[x]=A[x] - B[x]; 
 // saida 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
44 
 cout<<"\nA\tB\tDiferenca\n"; 
 for(x=0; x<3; x++) 
 
cout<<"\n"<<A[x]<<"\t"<<B[x]<<"\t"<<DI
F[x]; 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
™ Multiplicação de uma matriz bidimensional por uma escalar. 
Aplicação. Dada uma matriz A2 x 3, gerar a matriz triplo e exibi-la. 
#include <iostream> 
using namespace std; 
int main() 
{ 
 int x,y; 
 float A[2][3], MultEscalar[2][3]; 
//Entrada de A e geracao da matriz 
triplo 
 for(x=0; x<2; x++) 
 for(y=0;y<3;y++) 
 { 
 cout<<"Entrar com elemento da 
matriz A "<<x+1<<"a coluna: "; 
 cin>>A[x][y]; 
 MultEscalar[x][y]=A[x][y] * 3; 
 } 
 
 // saida 
 cout<<"\nMatriz A\n"; 
 for(x=0; x<2; x++) 
 { 
 for(y=0;y<3;y++) 
 cout<<A[x][y]<<"\t"; 
 cout<<"\n"; 
} 
 cout<<"\nMatriz Triplo\n"; 
 for(x=0; x<2; x++) 
 { 
 for(y=0;y<3;y++) 
 cout<<MultEscalar[x][y]<<"\t"; 
 cout<<"\n"; 
} 
 
 
 
 
 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
45 
 cout<<"\n\n"; 
 system("pause"); 
} 
 
™ Multiplicação de duas matrizes 
 
 
O que é isso? Voltou com 
aquela cara carrancuda? 
 
Desculpe-me, mas sempre achei 
esse tópico muito difícil, 
 
Para que possamos multiplicar duas matrizes, o número de colunas da 
primeira tem que ser igual ao número de linhas da segunda. 
A multiplicação de matrizes é de maior importância em vários aplicativos. 
 
Aplicação: 
Uma bordadeira cearense trabalha com três tipos de bordados em toalhas: 
renascença, richelieu e rendendê. Faça um programa que armazene a produção 
mensal dos meses de outubro, novembro e dezembro em uma matriz e o preço de 
custo e o lucro de cada tipo de toalha em outra matriz. Calcule e exiba o custo total 
por mês e o lucro total por mês da bordadeira. Ao final, o lucro total. 
 Tipos de bordados Custo/Lucro 
 Renascença Richelieu Rendendê Custo Lucro 
out 6 20 20 Renascença 150 80 
nov 5 10 30 Richelieu 135 65 
dez 12 15 40 Rendendê 95 55 
 
#include <iostream> 
using namespace std; 
int main() 
{ 
 char bordado[][20]={"Rensacenca", "Richelieu", "Rendende"}; 
 float custoLucro[3][2], Resultado[3][2], soma; 
 int qtdade[3][3],L,c,m; 
 cout<< "\nProducao das toalhas\n"; 
 for(L = 0; L<3; L++) 
 for(c = 0; c<3; c++) 
 { 
 cout<< "\ndigite numero de toalhas no mes "<<L+1<< " do tipo "<<bordado[c]<<": "; 
 cin>>qtdade[L][c]; 
 } 
 
 for(L = 0; L<3; L++) 
 { 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
46 
 cout<<"\ndigite custo da toalha de "<<bordado[L]<< ": "; 
 cin>>custoLucro[L][0]; 
 cout<<"\ndigite lucro da toalha de "<<bordado[L]<< ": "; 
 cin>>custoLucro[L][1]; 
 } 
 for(L = 0; L<3; L++) 
 for(c = 0; c<2; c++) 
 { 
 Resultado[L][c] =0; 
 for(m = 0; m<3; m++) 
 Resultado[L][c] +=qtdade[L][m] * custoLucro[m][c]; 
 } 
 
 cout<<"\n\nCUSTO\tLUCRO\n\n"; 
 for(L = 0; L<3; L++) 
 { 
 for(c = 0; c<2; c++) 
 cout<<Resultado[L][c]<< "\t"; 
 cout<<"\n\n"; 
 } 
 soma= 0; 
 for(L = 0; L<3; L++) 
 soma += Resultado[L][1]; 
 cout<<"\n\nLucro anual: "<< soma; 
 cout<<"\n"; 
 
 cout<<"\n\n"; 
 system("pause");} 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
47 
 
 
 
 
 
Matemática && Programação – uma parceria perfeita 
Autora: Anita Lopes 2006 
 
48 
BIBLIOGRAFIA 
FARRER, H., BECKER, C. G., FARIA, E. C. et al. Algoritmos estruturados. 2. ed. 
 Rio de Janeiro: LTC, 1998. 
 
GIOVANNI,J.R., BONJORNO, J.R. Matemática 2o grau. vol.1/vol.2/vol.3.São Paulo:FTD. 
 
GROSSI, E. Só ensina quem aprende. In: GROSSI , E. P., BORDIN, J. (org.). 
 Paixão de aprender.5. ed. Petrópolis: Vozes, 1992a. p. 69-75. 
 
GUIMARÃES, A. de M., LAJES, N. A. de C. Algoritmos e estruturas de dados. Rio 
 de Janeiro: LTC, 1985. 
 
IEZZI, G., DOLCE, O., MACHADO, A. Matemática e realidade-5a série/6a série/7a série/ 
 8a série. Rio de Janeiro:Atual.1997. 
 
LOPES, Anita, GARCIA, Guto. Introdução à Programação - 500 Algoritmos. 6a ed. Rio de 
 Janeiro: Campus, 2002. 
 
MANZANO, J. A. N. G., OLIVEIRA J. F. Algoritmos. Lógica para desenvolvimento 
 de programação. São Paulo: Erica, 1996. 
 
SALVETTI, D. D., BARBOSA L. M.. Algoritmos. São Paulo: Makron Books, 1998. 
 
SOUZA, J.C.de M. (Malba Tahan). Matemática divertida e curiosa. 15a ed. Rio de Janeiro: 
 Record, 2001. 
STEINBRUCH, A. Matrizes, determinantes e sistemas de equações lineares. São Paulo: 
 McGraw-Hill,1989. 
TREMBLAY,J.P., BUNT, R.B. Ciência dos computadores: uma abordagem algorítmica. 
 São Paulo: Mc Graw Hill do Brasil, 1983. 
 
VILLAS, M.V., VILLASBOAS, L. F. P. Programação: conceitos, técnicas e linguagens. 
 Rio de Janeiro Campus, 1997. 
 
 
 
 
 
 
	Agora você me confundiu.
	 
	Calma! As linguagens de programação fazem algumas adaptações. Leia a nota abaixo.
	 
	Acho que já estou lhe convencendo que a Matemática é fantástica. Essa expressão deverá ser usada nas linguagens que não possuírem operadores/funções de potenciação.
	 
	Perfeito! Acredito será mais simples usar a função pow(base,expoente), mas, no Pascal, teríamos que usar essa expressão.
	Como vou saber se acertei?
	 
	Calma! Vamos fazer juntos.
	Acho que esses dois operadores(/ e %) poderão resolver meu problema do número capicua.
	 
	Ual! Estou gostando de ver. O número capicua é muito interessante.
	Estou me lembrando da data 20022002 
	 
	Então, sorria. Você está sempre com uma expressão tão desconfiada!
	 
	Claro! Vou mostrar na figura abaixo.
	 
	Não, mas a busca não acabou. 
	 
	Claro! Observe a aplicação abaixo.
	 
	Claro que não.Se você fizer todos os exercícios propostos, fará parte desse grupo.
	 
	Com certeza!
	C++
	 
	Está bem.Vou fazer um exemplo com retângulo.
	 
	Simples: multiplique o ângulo em graus por PI e divida por 180.
	 
	Temos duas unidades para medir os ângulos: grau, do seu transferidor, e radiano. Leia a nota para saber porque a medida radiano é escolhida. 
	 
	Percebo que você está começando a se preocupar com detalhes que simplificam nossos programas.
	Muitas linguagens de programação disponibilizam a constante PI como nomes diferentes.
	 
	Infelizmente, não. Sugiro que você, nesses casos, defina sua constante PI cujo valor é: 3.14159265358979323846
	Complexas! O que significa isso?
	 
	Agora vou lhe dar razão. O conjunto dos complexos foi retirado do ensino médio, mas não se preocupe, pois é só fazer o teste com .
	Esse conceito de séries é igual a dos parâmetros da estrutura do for.
	 
	Com certeza. Você está ficando cada vez melhor!
	Nossa! O que aconteceu? Já começo a ver um sorriso e sua sobrancelha está menos arqueada.
	 
	De repente, deu um “estalo” e já estou juntando todas as peças de um quebra-cabeça.Estou vendo um for dentro do for para representar as linhas e as colunas.
	Percebo que o programa que gerou todos os arranjos de 1 até 10, com repetição, servirá para as matrizes bidimensionais.
	 
	Perfeito, mas teremos que fazer adaptações para algumas linguagens.
	Na linguagem C++, a numeração das linhas /colunas começa com 0.Veja a nota abaixo.
	Realmente, tenho que admitir que a Álgebra das Matrizes é muito fascinante, 
	 
	Calma. Você ainda não viu nada.
	O que é isso? Voltou com aquela cara carrancuda?
	 
	Desculpe-me, mas sempre achei esse tópico muito difícil,

Outros materiais