Quebra de Laço, sobrecarga de funçao e Recursividade em C++

Quebra de Laço, sobrecarga de funçao e Recursividade em C++

Sub-Rotinas

  • Sub-Rotinas

    • Contextualização
    • Definição
    • Funções
      • Sem parâmetros e sem retorno
      • Com parâmetros e sem retorno
      • Sem parâmetros e com retorno
      • Com parâmetros e com retorno
    • Local das Funções
    • Passagem de parâmetro
        • Por valor
        • Por referência
    • Vetores e Matrizes com parâmetro

Interrupção de laços

  • Interrupção de laços

  • Recursividade

  • Sobrecarga de função

Um laço (for, while, do-while) pode ser interrompido durante sua execução:

  • Um laço (for, while, do-while) pode ser interrompido durante sua execução:

    • Interrupção da iteração: continue
    • Interrupção completa do laço: break
  • Exemplos:

Encontre os números primos (maiores que 2) do vetor

  • Encontre os números primos (maiores que 2) do vetor

  • #include <iostream>

  • using namespace std;

  • int main () {

  • int vNumeros[] = {13, 3, 10, 30, 10, 4, 50, 40, 45, 17};

  • bool vPrimo = true;

  • for(int i = 0; i < 10; i++) {

  • vPrimo = true;

  • for(int j = 2; j < vNumeros[i]; j++){

  • if(vNumeros[i] % j == 0){

  • vPrimo = false;

  • break;

  • }

  • }

  • if(vPrimo == true){

  • cout << vNumeros[i] << '\t';

  • }

  • }

  • return 0;

  • }

Encontre os números primos (maiores que 2) e coloque-os em outro vetor

  • Encontre os números primos (maiores que 2) e coloque-os em outro vetor

  • #include <iostream>

  • using namespace std;

  • int main () {

  • int vNumeros[] = {13, 3, 10, 30, 10, 4, 50, 40, 45, 17};

  • int vNumerosPrimos[10];

  • int vQuantidadePrimos = 0;

  • bool vPrimo = true;

  • for(int i = 0; i < 10; i++) {

  • vPrimo = true;

  • for(int j = 2; j < vNumeros[i]; j++){

  • if(vNumeros[i] % j == 0){

  • vPrimo = false;

  • break; // pára a verificação (for interno), pois o número não é primo

  • }

  • }

  • // Se o número não é primo, passa para a próxima iteração

  • if(vPrimo != true){

  • continue; // interrompe a iteração

  • }

  • // insere o numero primo no vetor

  • vNumerosPrimos[vQuantidadePrimos] = vNumeros[i];

  • // incrementa a quantidade de números primos

  • vQuantidadePrimos++;

  • }

  • for(int i = 0; i < vQuantidadePrimos; i++)

  • cout << vNumerosPrimos[i] << '\t';

  • return 0;

  • }

É uma forma de divisão e conquista, onde a solução final é dada por:

  • É uma forma de divisão e conquista, onde a solução final é dada por:

    • Solução de N associada à solução de N – 1. Isto se repete até que se chegue no primeiro passo
  • Exemplo:

    • Fatorial.
      • Sabe-se que fatorial (1) = 1. Assim podemos calcular o fatorial (3) da seguinte maneira:
        • Fatorial(3) = 3 * Fatorial (2);
        • Fatorial(2) = 2 * Fatorial (1);
        • Como se sabe calcular Fatorial(1), podemos encontrar o Fatorial(3), utilizando o próprio Fatorial(1) e o Fatorial(2)

O código da função fatorial recursiva fica assim:

  • O código da função fatorial recursiva fica assim:

  • #include <stdio.h>

  • int fatorial(int pNumero) {

  • // passo inicial

  • if(pNumero == 1) {

  • return 1;

  • }

  • else {

  • // recursividade

  • int vRetorno = pNumero * fatorial(pNumero -1);

  • return vRetorno;

  • }

  • }

  • int main () {

  • int vNumero = 0;

  • printf("Digite o número: ");

  • scanf("%d", &vNumero);

  • printf ("O fatorial de %d é: %d.\n”, vNumero, fatorial(vNumero));

  • return 0;

  • }

#include <stdio.h>

  • #include <stdio.h>

  • int minimo(int pNumero[], int pPosicao, int pMin) {

  • // passo inicial

  • if(pPosicao == 0) {

  • if(pNumero[0] < pMin)

  • return pNumero[0];

  • else

  • return pMin;

  • }

  • else {

  • // recursividade

  • if(pNumero[pPosicao] < pMin)

  • return minimo(pNumero, --pPosicao,pNumero[pPosicao]);

  • else

  • return minimo(pNumero, --pPosicao, pMin);

  • }

  • }

  • int minimo(int pNumero[], int pTamanho){

  • return minimo (pNumero, pTamanho-1, pNumero[pTamanho-1]);

  • }

  • int main () {

  • int vNumeros[] = {13, 2, 10, 30, 1, 4, 50, 40, 45, 36};

  • printf ("o menor número da sequencia é: %d.\n", minimo(vNumeros, 10));

  • return 0;

  • }

Funções diferentes podem ter um mesmo nome, desde que possuam assinaturas diferentes

  • Funções diferentes podem ter um mesmo nome, desde que possuam assinaturas diferentes

  • Ex.:

    • int minimo(int pNumero[], int pPosicao, int pMin);
    • int minimo(int pNumero[], int pTamanho);
  • O compilador identificará qual função será chamada, à partir dos parâmetros passados

Interrupção de laços

  • Interrupção de laços

  • Recursividade

  • Sobrecarga de função

Comentários