Baixe o app para aproveitar ainda mais
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,
Compartilhar