Autor Tópico: Aula 4 - Modularização de Códigos  (Lida 2465 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Aula 4 - Modularização de Códigos
« Online: Março 17, 2019, 08:43:14 pm »
Citar
Faça uma calculadora com soma, divisão, multiplicação e subtração. Permita ao usuário calcular quantas vezes ele quiser até que ele digite uma opção para sair no menu do seu programa.

Código: C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
#include <iostream>#include <locale.h>#include <strings.h>#include <sstream> //usado na validação de números using std::cout;using std::cin;using std::stof;using std::string;using std::stringstream;  float somar (float a, float b);float subtrair (float a, float b);float dividir (float a, float b);float multiplicar (float a, float b); int main (){    setlocale (LC_ALL,"");    char opcao=' ';    string temp="";    float num1=0, num2=0;            cout << "Este programa realiza operações matémáticas simples\n";        cout << "Com dois números reais.\n";            while (true){         cout << "\nEscolha uma operação:\n\n";        cout << "1 - Somar\n";        cout << "2 - Subtrair\n";        cout << "3 - Dividir\n";        cout << "4 - Multiplicar\n";        cout << "s - Sair do programa\n";                cin >> opcao;        if (opcao=='s') {            cout << "Finalizado pelo usuário.";            break;        };                 cout << "Digite 'm' para voltar ao menu\n";        cout << "Use vírgula como separador decimal.\n";        while (true){            while (true){                cout << "Digite o primeiro número real: ";                cin >> temp;                if (temp=="m") break; //saio do primeiro                stringstream myStream(temp);                if (myStream >>num1) break; //sucesso na conversão                else                cout << "\nNúmero inválido. Tente de novo." << '\n';            };            if (temp=="m") break; //saio do segundo while                        while (true){                cout << "Digite o segundo número real: ";                cin >> temp;                if (temp=="m") break;                stringstream myStream(temp);                if (myStream >>num2) break; //sucesso na conversão                else                cout << "\nNúmero inválido. Tente de novo." << '\n';            };            if (temp=="m") break;             if (opcao=='1') somar(num1, num2);            if (opcao=='2') subtrair(num1, num2);            if (opcao=='3') dividir(num1, num2);            if (opcao=='4') multiplicar(num1, num2);        };            };     return 0;}  float somar (float a, float b){  cout << "O resultado da soma de " << a << " e " << b << " é: " << a+b <<"\n\n"; };float subtrair (float a, float b){  cout << "O resultado da subtração de " << a << " e " << b << " é: " << a-b <<"\n\n"; };float dividir (float a, float b){  if (b==0) cout << "Não é possível dividir por zero. \n";     else  cout << "O resultado da divisão de " << a << " e " << b << " é: " << a/b <<"\n\n"; };float multiplicar (float a, float b){  cout << "O resultado da multiplicação de " << a << " e " << b << " é: " << a*b <<"\n\n";};
« Última modificação: Março 18, 2019, 01:13:31 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 4 - Modularização de Códigos
« Responder #1 Online: Março 18, 2019, 01:13:44 am »

Citar
Escreva um programa em C++ que determine se um dado número inteiro é par ou ímpar. Você deve usar a função parOuImpar, cujo protótipo a seguir é apresentado e que escreve na tela "O número é par" ou "O número é ímpar"conforme o inteiro passado como parâmetro seja par ou ímpar, respectivamente:
void parOuImpar (int);

Código: C++
1234567891011121314151617181920212223242526
#include <iostream>#include <locale.h> using std::cout;using std::cin; void parOuImpar(int num); int main (){                setlocale(LC_ALL,"");                int numero=0;        cout << "digite um número inteiro\n";        cin >> numero;        parOuImpar (numero);                } void parOuImpar(int num){         int resto = num%2;        if (resto==0) cout << "O número é par";        else        cout  << "O número é impar";}



Citar
Codifique também as funções par e impar e resolva o exercício com elas: 
int par (int);
Retorna 1 se o inteiro passado como parâmetro for par e 0 caso contrário. 
int impar (int);
Retorna 1 se o inteiro passado como parâmetro for ímpar e 0 caso contrário.

Código: C++
123456789101112131415161718192021222324252627282930313233343536
#include <iostream>#include <locale.h> using std::cout;using std::cin; int par(int num);int impar(int num); int main (){                setlocale(LC_ALL,"");                int numero=0;        cout << "digite um número inteiro\n";        cin >> numero;        if (par (numero) )cout << "O número é par";        if (impar (numero)) cout << "O número é ímpar";        return 0;               } int par(int num){         int resto = num%2;        if (resto==0) return 1;        else        return 0;} int impar(int num){         int resto = num%2;        if (resto==0)return 0;        else        return 1;}

« Última modificação: Março 18, 2019, 01:15:40 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

FORUM.RYAN.COM.BR

Re:Aula 4 - Modularização de Códigos
« Responder #1 Online: Março 18, 2019, 01:13:44 am »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 4 - Modularização de Códigos
« Responder #2 Online: Março 18, 2019, 01:17:44 am »
Citar
Escreva um programa em C++ que determine o maior de três números inteiros.
Você deve usar a função maiorDeTres, cujo protótipo a seguir é apresentado e que devolve o maior dos inteiros passado como parâmetro
int maiorDeTres (int, int, int);

Código: C++
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
#include <iostream>#include <locale.h>#include <sstream> using std::cout;using std::cin;using std::string;using std::stringstream; int maiorDeTres(int a, int b, int c); int main (){        char opcao= ' ';    setlocale(LC_ALL,"");    string temp="";    int a=0, b=0, c=0;    cout <<"Este programa calcula o maior entre três\n";    cout <<"números inteiros fornecidos pelo usuário.\n\n";    while (opcao!='s'){        while (true){            cout << "Digite o primeiro inteiro: ";            cin >> temp;            stringstream myStream(temp);            if (myStream >>a) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';        };         while (true){            cout << "Digite o segundo inteiro: ";            cin >> temp;            stringstream myStream(temp);            if (myStream >>b) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';        };         while (true){            cout << "Digite o terceiro inteiro: ";            cin >> temp;            stringstream myStream(temp);            if (myStream >>c) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';        };     cout << "O maior é: " << maiorDeTres(a,b,c) <<"\n\n";    cout << "Digite 's' para sair e 'c' para tentar de novo.\n\n"; //apenas 's' me interesa    cin >> opcao;        if (system("CLS")) system("clear"); //apago a tela. Este método é simples mas tem problemas de segurança}        return 0;               } int maiorDeTres(int a, int b, int c){  int maior=a;  if (b>a) maior = b;  if (c>maior) maior=c;    return maior;    }

A versão abaixo modulariza ainda mais código usando uma função para fazer as três validações.

Código: C++
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
#include <iostream>#include <locale.h>#include <sstream> using std::cout;using std::cin;using std::string;using std::stringstream; int maiorDeTres(int a, int b, int c);int receberValor(string texto); int main (){        char opcao= ' ';    setlocale(LC_ALL,"");    int a=0, b=0, c=0;    cout <<"Este programa calcula o maior entre três\n";    cout <<"números inteiros fornecidos pelo usuário.\n\n";    while (opcao!='s'){     a=receberValor("primeiro");    b=receberValor("segundo");    c=receberValor("terceiro");     cout << "O maior é: " << maiorDeTres(a,b,c) <<"\n\n";    cout << "Digite 's' para sair e 'c' para tentar de novo.\n\n"; //apenas 's' me interesa    cin >> opcao;        if (system("CLS")) system("clear"); //apago a tela. Este método é simples mas tem problemas de segurança    }        return 0;               } int maiorDeTres(int a, int b, int c){  int maior=a;  if (b>a) maior = b;  if (c>maior) maior=c;    return maior;    }int receberValor(string texto){    string temp="";    int num=0;    while (true){        cout << "Digite o "<< texto << " inteiro: ";        cin >> temp;        stringstream myStream(temp);        if (myStream >>num) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';    };   return num;}
« Última modificação: Março 18, 2019, 01:50:17 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 4 - Modularização de Códigos
« Responder #3 Online: Março 18, 2019, 01:24:04 am »
Citar
Repita o exercício anterior usando simplesmente a função maior que retorna o maior de dois números

int maior (int, int);

Código: C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
#include <iostream>#include <locale.h>#include <sstream> using std::cout;using std::cin;using std::string;using std::stringstream; int maior(int a, int b); int main (){        char opcao= ' ';    setlocale(LC_ALL,"");    string temp="";    int a=0, b=0;    cout <<"Este programa calcula o maior entre dois\n";    cout <<"números inteiros fornecidos pelo usuário.\n\n";    while (opcao!='s'){        while (true){            cout << "Digite o primeiro inteiro: ";            cin >> temp;            stringstream myStream(temp);            if (myStream >>a) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';        };         while (true){            cout << "Digite o segundo inteiro: ";            cin >> temp;            stringstream myStream(temp);            if (myStream >>b) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';        };      cout << "O maior é: " << maior(a,b) <<"\n\n";    cout << "Digite 's' para sair e 'c' para tentar de novo.\n\n"; //apenas 's' me interesa    cin >> opcao;        if (system("CLS")) system("clear"); //apago a tela. Este método é simples mas tem problemas de segurança}        return 0;               } int maior(int a, int b){  int maior=a;  if (b>a) maior = b;  return maior;    }

E a versão com a função receberValor():

Código: C++
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
#include <iostream>#include <locale.h>#include <sstream> using std::cout;using std::cin;using std::string;using std::stringstream; int maior(int a, int b);int receberValor(string texto); int main (){        char opcao= ' ';    setlocale(LC_ALL,"");    int a=0, b=0;    cout <<"Este programa calcula o maior entre dois\n";    cout <<"números inteiros fornecidos pelo usuário.\n\n";    while (opcao!='s'){                a=receberValor("primeiro");        b=receberValor("segundo");         cout << "O maior é: " << maior(a,b) <<"\n\n";        cout << "Digite 's' para sair e 'c' para tentar de novo.\n\n"; //apenas 's' me interesa        cin >> opcao;         if (system("CLS")) system("clear"); //apago a tela. Este método é simples mas tem problemas de segurança    }        return 0;               } int maior(int a, int b){  int maior=a;  if (b>a) maior = b;  return maior;    } int receberValor(string texto){    string temp="";    int num=0;    while (true){        cout << "Digite o "<< texto << " inteiro: ";        cin >> temp;        stringstream myStream(temp);        if (myStream >>num) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';    };   return num;}
« Última modificação: Março 18, 2019, 01:55:58 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 4 - Modularização de Códigos
« Responder #4 Online: Março 18, 2019, 02:57:38 am »
Citar
Tendo em conta a seguinte estrutura, bem como o respectivo tipo de dados, que permite representar o tempo no formato de horas (hh), minutos (mm) e segundos (ss.sss). Um exemplo de tempo neste formato é, por exemplo, 12:34:56.123.

struct TIME {
int hh;
int mm;
double seconds;
};

Escreva a função convertTime que converta o tempo que lhe é passado em segundos no formato ss.sss para o tempo no formato hh:mm.ss.sss. O tempo neste formato deverá ser devolvido pela função como uma struct do tipo TIME. Escreva depois um pequeno programa para testar a conversão. O protótipo da função anterior é o seguinte:
TIME convertTime(double secs);

Código: C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
#include <iostream>#include <strings.h>#include <sstream>#include <locale.h> using std::cout;using std::cin;  struct TIME {    int hh;    int mm;    double seconds;}; TIME convertTime(double secs);double receberValor(); int main(){    setlocale(LC_ALL,"");    cout << "Este programa converte um número no formato ss,ss\n";    cout << "Em um número no formato hh:mm:ss.ss\n\n";    cout << "NOTA: ss pode ter bem mais que dois dígitos\n\n";     while (true){        cout << "Digite o valor em segundos ('0' para sair): ";        double secs= receberValor();        if (secs==0) break;         TIME tempo=convertTime(secs);         cout <<"Resultado da conversão: " << tempo.hh << ":" << tempo.mm << ":" << tempo.seconds <<"\n\n";    }               return 0;} TIME convertTime(double secs){    TIME tempo;    tempo.hh= secs / 3600;    tempo.mm= (secs - tempo.hh*3600)/60;    tempo.seconds= secs - tempo.hh*3600 - tempo.mm*60;    return tempo;}; double receberValor(){    std::string temp="";    double num=0;    while (true){        cin >> temp;        std::stringstream myStream(temp);        if (myStream >>num) break; //sucesso na conversão            else            cout << "\nNúmero inválido. Tente de novo." << '\n';    };   return num;}
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 4 - Modularização de Códigos
« Responder #5 Online: Março 18, 2019, 05:14:32 am »
Citar
Escreva a função addTime que toma dois tempos do tipo TIME como argumentos, e que depois devolve a soma dos tempos numa estrutura do tipo TIME. Escreva depois um pequeno programa para testar a conversão. O protótipo da função anterior é o seguinte:
TIME addTime(TIME a, TIME b);

Código: C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
#include <iostream>#include <strings.h>#include <sstream>#include <locale.h> using std::cout;using std::cin;using std::string;  struct TIME {    int hh;    int mm;    double seconds;}; TIME convertTime(double secs);TIME addTime(TIME a, TIME b);void printTimeln(TIME a);TIME stringToTIME (string texto); int main(){    setlocale(LC_ALL,"");    string tempo1="", tempo2="";    cout << "Este programa soma dois tempos no formato hh:mm:ss.ss\n";     TIME tempo1 = stringToTIME ("primeiro");    TIME tempo2 = stringToTIME ("segundo");    TIME resultado = addTime (tempo1,tempo2);    //printTimeln(tempo1);    //printTimeln(tempo2);    cout <<"Resultado da soma: ";    printTimeln (resultado);     return 0;} TIME addTime(TIME a, TIME b){   double tempo1=a.hh*3600+a.mm*60+a.seconds;   double tempo2=b.hh*3600+b.mm*60+b.seconds;    return convertTime(tempo1+tempo2);} TIME convertTime(double secs){    TIME tempo;    tempo.hh= secs / 3600;    tempo.mm= (secs - tempo.hh*3600)/60;    tempo.seconds= secs - tempo.hh*3600 - tempo.mm*60;    return tempo;}; void printTimeln(TIME a){   cout << a.hh << ":" << a.mm << ":" << a.seconds <<"\n";} TIME stringToTIME (string texto){    string temp="";    TIME tempo;        while (true){        bool erro=false;        cout << "\nDigite o "<< texto << " tempo: ";        cin >> temp;         int pos1=temp.find(':');        int pos2=temp.find(':',pos1+1);        int pos3=temp.find('.');                //cout <<"pos1: " <<pos1;        //cout <<"\npos2: " <<pos2;        //cout <<"\npos3: " <<pos3;                 //Na validação eu não exigo que cada valor de hora ,minutos e segfundos tenha dois algarismo                if (pos1<1 || pos2<2) erro=true; // a presença do ponto é opcional        if (pos2-pos1<2) erro=true;        if (pos3 >-1 &&  pos3-pos2<2) erro=true; //mas se estiver presente tem que ser o terceiro símbolo                for (int i=0; i< temp.length();i++){            if (!isdigit( temp.at(i))){              if(temp.at(i)!=':' && temp.at(i)!='.') erro=true;            };        };                //Eu pretendia separar validação e conversão em funções distintas, mas como ambas        //dependem das variáveis pos* eu desisti        if (!erro){            // cout << "\nhoras: " << temp.substr(0,pos1);            // cout << "\nminutos: " << temp.substr(pos1+1,pos2-pos1-1);            // cout << "\nsegundos: " << temp.substr(pos2+1,temp.length()-pos2-1) << '\n';            tempo.hh = stoi(temp.substr(0,pos1));            tempo.mm = stoi(temp.substr(pos1+1,pos2-pos1-1));            temp.at(pos3)=','; //gambiarra: a função stof() requer vírgula no meu SO. Se deixar o ponto ela descarta a parte fracionária            tempo.seconds = stof(temp.substr(pos2+1,temp.length()-pos2-1));             break;        } else          cout << "\nFormato inválido. Tente de novo." << '\n';    };   return tempo;    };
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

FORUM.RYAN.COM.BR

Re:Aula 4 - Modularização de Códigos
« Responder #5 Online: Março 18, 2019, 05:14:32 am »