Capitulo 04 - Instruções de Controle Parte 1

Antes de escrever um programa para resolver um problema, devemos ter um entendimento completo de como vamos resolve-lo. Neste capitulo vamos estudar as instruções de controle, if, else e while do C++.

Exemplos 01, 02 e 03:

//Figura 4.8: NotasLivro.h
#include <string>

using std::string;

class NotasLivro
{
     public:
          NotasLivro(string);                 //construtor inicializa o noime do curso
          void setNomeCurso(string);         //funcao para configurar o nome do curso
          string getNomeCurso();             //funcao para recuperar o nome do curso
          void telaMensagem();              //exibe uma mensagem de boas vindas
          void determinaClasseMedia();      //calcula a media das notas inseridas pelo usuario

     private:
          string nomeCurso;                 //nome do curso para esse NotasLivro

};

Na figura 4.8  do exemplo 01 criamos a classe de NotasLivro separada com o nome de NotasLivro.h que irei chamar no main do programa pela biblioteca #include "NotasLivroMain.cpp".

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

NotasLivro::NotasLivro(string nome)
{
    setNomeCurso(nome);    //valida e armazena nomeCurso
}


/*
funcao para configurar o nome do curso;
assegura que o nome do curso tenha no maximo 25 caracteres
*/

void NotasLivro::setNomeCurso(string nome)
{
    if(nome.length() <= 25)    //se o nome tiver 25 ou menos caracteres
       nomeCurso = nome;       //armazena o nome do curso no objeto
    else                      //se o nome mais que 25 caracteres
    {
        //configura nomeCurso com os primeiros 25 caracteres do nome de parametro
        nomeCurso = nome.substr(0, 25);   //seleciona os primeiros 25 caracteres
        cout << "Nome \"" << nome << "\" excede o comprimento maximo (25).\n"
        << "Limite nome do curso do primeiros dos 25 caracteres.\n" << endl;
    }

}

//funcao para recuperar o nome do curso
string NotasLivro::getNomeCurso()
{
    return nomeCurso;
}

//exibe uma mensagem de boas-vindas para o usuario de NotasLivro
void NotasLivro::telaMensagem()
{
    cout << "Bem vindo a notas livro\n" << getNomeCurso() << "!\n"
        << endl;
}


//determina a media da classe com base em 10 notas inseridas pelo usuario
void NotasLivro::determinaClasseMedia()
{
    int total;                  //soma das notas inseridas pelo usuario
    int notaContador;           //numero de notas a ser inserido a seguir
    int nota;                   //valor da nota inserida pelo usuario
    int media;                  //media das notas

    //fase de inicializacao
    total = 0;                  //inicializa o total
    notaContador = 1;           //inicializa o contador de loops

    //fase de processamento
    while(notaContador <= 5)
    {
        cout << "Entre com a nota: ";       //solicita entrada
        cin >> nota;                        //insere a proxima nota
        total = total + nota;               //adiciona nota a total
        notaContador = notaContador + 1;    //incrementa contador por 1

    }


    //fase de termino
    media = total / 5;

    //exibe o total e a media das notas
    cout << "\nTotal de 5 notas foi: " << total << endl;
    cout << "Classe notas foi: " << nota << endl;

}

Na figura 4.9 do exemplo 02 definimos uma função-membro para a classe NotasLivro que resolve o programa de média da classe com repetição controlado por controlador.


//Figura 4.10: NotasLivroMain.cpp
#include "NotasLivro.h"
#include "NotasLivro.cpp"

int main()
{
    /*
    cria o objeto minhaNotasLivro da classe Notaslivro e
    passa o nome do curso para o construtor
    */

    NotasLivro minhaNotasLivro("C++ Como Programar");

    minhaNotasLivro.telaMensagem();                //exibe a mensagem de boias vindas
    minhaNotasLivro.determinaClasseMedia();        //calcula a media das 10 notas
    return 0;                                    //indica terminacao bem sucedida

}

Na figura 4.10 do exemplo 03 criamos o objeto da classe NotasLivro que chama sua função determinaClasseMedia no qual vemos ser executada na tela abaixo:



Exemplos 04, 05 e 06:
Veremos os exemplos do programa de função-membro de classe que resolva a media de uma classe usando repetição controlada por sentinela;

//Figura 4.12: NotasLivro1.h
#include <string>

using std::string;

class NotasLivro
{
     public:
          NotasLivro(string);                 //construtor inicializa o nome do curso
          void setNomeCurso(string);         //funcao para configurar o nome do curso
          string getNomeCurso();             //funcao para recuperar o nome do curso
          void telaMensagem();              //exibe uma mensagem de boas vindas
          void determinaClasseMedia();      //calcula a media das notas inseridas pelo usuario

     private:
          string nomeCurso;                 //nome do curso para esse NotasLivro

};


//figura 4.13: NotasLivro1.cpp
#include <iostream>
#include <iomanip> //manipuladores de fluxo parametrizados

using std::cout;
using std::cin;
using std::endl;
using std::setprecision; //configura a precisao de saida numerica

//construtor incializa nomeCurso com
//string fornecida como argumento
NotasLivro::NotasLivro(string nome)
{
    setNomeCurso(nome);    //valida e armazena nomeCurso
}


/*
funcao para configurar o nome do curso;
assegura que o nome do curso tenha no maximo 25 caracteres
*/

void NotasLivro::setNomeCurso(string nome)
{
    if(nome.length() <= 25)    //se o nome tiver 25 ou menos caracteres
       nomeCurso = nome;       //armazena o nome do curso no objeto
    else                      //se o nome mais que 25 caracteres
    {
        //configura nomeCurso com os primeiros 25 caracteres do nome de parametro
        nomeCurso = nome.substr(0, 25);   //seleciona os primeiros 25 caracteres
        cout << "Nome \"" << nome << "\" excede o comprimento maximo (25).\n"
        << "Limite nome do curso do primeiros dos 25 caracteres.\n" << endl;
    }

}

//funcao para recuperar o nome do curso
string NotasLivro::getNomeCurso()
{
    return nomeCurso;
}

//exibe uma mensagem de boas-vindas para o usuario de NotasLivro
void NotasLivro::telaMensagem()
{
    cout << "Bem vindo a notas livro\n" << getNomeCurso() << "!\n"
        << endl;
}


//determina a media da classe com base em 10 notas inseridas pelo usuario
void NotasLivro::determinaClasseMedia()
{
    int total;                  //soma das notas inseridas pelo usuario
    int notaContador;           //numero de notas a ser inserido a seguir
    int nota;                   //valor da nota inserida pelo usuario
    double media;               //numero com pontos de fracao decimal para media

    //fase de inicializacao
    total = 0;                  //inicializa o total
    notaContador = 0;           //inicializa o contador de loops

    //fase de processamento
    //solicita entrada e le nota do usuario
    cout << "Entre com nota -1 para sair: ";
    cin >> nota; //insere nota ou valor de sentinela

    //faz um loop até ler o valor de sentinela inserido pelo usuario
    while(nota != - 1)  //enquanto a nota nao e -1
    {
        total = total + nota;               //adiciona nota a total
        notaContador = notaContador + 1;    //incrementa contador

        //solicita entrada e ele a proxima nota fornecida pelo usuario
        cout << "Entre com nota -1 para sair: ";
        cin >> nota;

    }

    //fase de termino
    if(notaContador != 0)  //se o usuario inseriu pelo menos uma nota...
    {
        //calcula a media de todas as notas inseridas
        media = static_cast<double>(total)/notaContador;

        //exibe o tal e a media (com dois digitos de precisao)
        cout << "\nTotal de todas " << notaContador << " notas inseridas foi: " << total << endl;
        cout << "Classe media foi: " << setprecision(2) << fixed << media <<  endl;
    }
    else  //nenhuma nota foi inserida, assim gera a saida da mensagem apropriada
        cout << "Nenhuma nota foi inserida" << endl;
}

Na figura 4.14 sera impelntado o main para criar o objeto da classe NotaslivroMain1 e invocar a função-membro determinaClasseMedia

//figura 4.14: NotasLivroMain1.cpp
#include "NotasLivro1.h"
#include "NotasLivro1.cpp"

int main()
{
    /*
    cria o objeto minhaNotasLivro da classe Notaslivro e
    passa o nome do curso para o construtor
    */

    NotasLivro minhaNotasLivro("C++ Como Programar");

    minhaNotasLivro.telaMensagem();                //exibe a mensagem de boias vindas
    minhaNotasLivro.determinaClasseMedia();        //calcula a media das 10 notas
    return 0;                                    //indica terminacao bem sucedida

}

ao executar o programa ficará assim:



Exemplo 07, 08 e 09

//Figura 4.16: Analise.h
//definicao da classe Analise
class Analise
{
     public:
          void processaExameResultados(); //processa os resultados do teste de 10 alunos
};

Definição de analise de classe que analisa resultados de exame.

//Figura 4.17: Analise.cpp
#include <iostream>
#include "Analise.h"

using std::cout;
using std::cin;
using std::endl;

//processa 10 alunos utilizando o loop controlado por contador
void Analise::processaExameResultados()
{
    //inicializando variaveis nas declaracoes
    int aprovado = 0; //numero de aprovacoes
    int reprovado = 0; //numero de reprovacoes
    int estudanteContador = 1; //contador de alunos
    int resultado;  //o resultado de um teste (1 = aprovado, 2 = reprovado)

    //processa 10 alunos utilizando um entrada e obtem valor fornecido pelo usuario
    while(estudanteContador <= 10)
    {
        cout <<  "Entre com resultado (1 = Aprovado, 2 = Reprovado): ";
        cin >> resultado; //le o resltado

        //if...else aninhado em while
        if(resultado == 1)                 //se resultado for 1,
           aprovado = aprovado + 1;       //incrementa aprovacoes
        else                             //senao resultado noa for 1, entao
           reprovado = reprovado + 1;    //incrementa reprovacoes

        //incrementa estudanteContador ate o loop terminar
        estudanteContador = estudanteContador + 1;

    }  //fim do while

    //fase de terminacao; exibe numero de aprovados e reprovados
    cout << "Aprovado " << aprovado << "\nReprovado " << reprovado <<  endl;

    //determina se mais de oito alunos passaram
    if(aprovado > 8)
       cout << "Levante aula " << endl;

}

Classe Analise.cpp  analisa os resultados do teste e usa como biblioteca o #include para chamar a classe Anlise.h


//Figura 4.18: AnaliseMain.cpp
#include "Analise.cpp"

int main()
{
    Analise aplicacao; //cria o objeto da classe Analise
    aplicacao.processaExameResultados();  //funcao de chamada para processar resultados
    return 0;   //indica terminacao bem sucedida
}

classe main para testar classe analise e o resultado na tela fica assim:


Exemplo 10
Nesta figura 4.12 o programa chamado PrePosIncremento.cpp usa variaveis de operadores de atribuição de Pre-Incremento e Pos-Incremento e decremento.

//Figura 4.21: PrePosIncremento.cpp
#include <iostream>
using std::cout;
using std::endl;

int main()
{
    int c;

    //demonstra pos-incremento
    c = 5; //atribui 5 a variavel c
    cout << c << endl;  //imprime 5
    cout << c++ << endl; //imprime 5 entao pos-incrementa
    cout << c << endl;   //imprime 6

    cout << endl;

    //demonstra pre-incremento
    c = 5; //atribui 5 a variavel c
    cout << c << endl;  //imprime 5
    cout << c++ << endl; //pre-incrementa e entao imprime 6
    cout << c << endl; //imprime 6
    return 0;
}

Ao executar o programa ficará assim na tela:


Bem, terminamos a 1ª parte do capitulo 4 e vimos os três tipos de instrução de controle que foi if, else e while e no próximo capitulo teremos continuação

até a proxima

Comentários

Postagens mais visitadas