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
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
Postar um comentário