#include #include #include #include #include #include #include "as-funcoes.h" // Alguns exemplos de funcoes // Programa principal int main(int, char *[]) { // Chamando algumas funcoes inuteis nada(); calcula_10_fatorial(); // Escrevendo uma mensagem saudacao(); // Calculando o fatorial de 10 auto fat_10 = fatorial_de_10(); std::cout << "Fatorial de 10: " << fat_10 << std::endl; std::cout << "Deve ser o mesmo que " << fatorial(10) << std::endl; std::cout << "E o mesmo que " << fat_rec(10) << std::endl; // Calculando o numero de combinacoes de 10 elementos 2 a 2 std::cout << "Numero de combinacoes de 10 elementos dois a dois " << combinacoes(10, 2) << std::endl; // Isto e um erro. Viola pre-condicao da funcao. std::cout << "Surpresa! " << fatorial(-1) << std::endl; // Sequencia de Fibonacci auto fib_10 = fibonacci(10); std::cout << "Primeiros 10 de Fibonacci\n"; for (auto fi: fib_10) { std::cout << fi << " "; } std::cout << std::endl; // Retornando dois valores (quociente e resto) // A funcao get(t) pega o i-esimo elemento da tupla t auto dm = div_mod(11, 3); std::cout << "Quociente: " << std::get<0>(dm) << ", resto: " << std::get<1>(dm) << std::endl; // Outra forma (exige usar -std=c++17 na compilacao) auto [q, r] = div_mod(11, 3); std::cout << "Quociente: " << q << ", resto: " << r << std::endl; // Alterando os valores dos elementos de um vetor std::vector primeiros{1, 2, 4, 8, 16}; // O copy abaixo copia do vetor primeiros para o cout, // elementos a elemento. std::copy(primeiros.begin(), primeiros.end(), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; // Multiplicando cada elemento por 10. escala(primeiros, 10); std::copy(primeiros.begin(), primeiros.end(), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; // Somatoria de elementos do vetor std::cout << "A soma vale: " << soma(primeiros) << std::endl; // Algumas combinacoes lineares de dois vetores std::vector v1{1, 2, 3}; std::vector v2{1, 2, 4}; auto res23 = comb_lin(v1, v2, 2, 3); std::copy(res23.begin(), res23.end(), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; auto res11 = comb_lin(v1, v2); std::copy(res11.begin(), res11.end(), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; auto res21 = comb_lin(v1, v2, 2); std::copy(res21.begin(), res21.end(), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; // Usando funcoes distintas de mesmo nome. if (muito_grande(12)) { std::cout << "12 e muito grande.\n"; } else { std::cout << "12 nao e muito grande.\n"; } if (muito_grande(12.0)) { std::cout << "12.0 e muito grande\n"; } else { std::cout << "12.0 nao e muito grande.\n"; } std::string mensagem{"A galinha do vizinho bota um ovo amarelinho"}; if (muito_grande(mensagem)) { std::cout << "\"" << mensagem << "\" tem muitos caracteres\n"; } else { std::cout << "\"" << mensagem << "\" e OK.\n"; } return 0; }