quarta-feira, 6 de junho de 2012

Registros - Exercício Complementar 2

Resolução dos Problemas da Apostila de Registros




Exercício Complementar 2


1.   Uma indústria faz a folha de pagamentos de seus empregados baseado em uma tabela que corresponde a estrutura de um vetor onde cada posição representa um funcionário que contém os seguintes dados:

·      inscrição;
·      nome;
·      classe (1 ou 2);
·      horas normais ;
·      horas extras;

Fazer um programa que processe a tabela e emita para cada funcionário seu contracheque, cujo formato é dado a seguir:


NÚMERO DE INSCRIÇÃO:                                    NOME:
SALÁRIO HORAS NOMAIS:
SALÁRIO HORAS EXTRAS:
DEDUÇÃO  INSS:
          SALARIO LIQUIDO:

O salário de referência deverá ser lido do teclado.
O salário referente às horas extras é calculado acrescentando 30% ao salário-hora normal. O desconto do INSS é de 8% do salário bruto (salário correspondente às horas normais trabalhadas + salário correspondente  às horas extras.
Para o cálculo do salário, considerar que existem duas classes de funcionários, a classe, cujo salário é 1,3 vezes o salário de referência, e a classe 2, cujo salário é 1,9  vezes o salário de referência.

Observação: realize uma boa interface com o usuário utilizando as funções de cores e posicionamento na tela.

Algoritmo


Programa Contracheque
Tipo
      ficha = registro
            classe: literal
            nome: literal[20]
            inscricao: inteiro
            hnormal: inteiro
            hextra: inteiro
      fim_registro
Var
      Declare cadastro: vetor[1..50] de ficha
      Declare i, q: inteiro
      Declare op: literal
      Declare salreferencia, salclasse, inss, salnormal, salextra, salbruto, salliquido: real
Inicio
      q ß 0
      Repita
      Inicio_repita
            Leia (cadastro[q].inscricao)
            Leia (cadastro[q].nome)
            Leia (cadastro[q].classe)
            Enquanto (cadastro[q].classe <> ‘1’) OR (cadastro[q].classe <> ‘2’) Faça
            Inicio_enquanto
                  Escreva (“CLASSE INVALIDA”)
                  Leia (cadastro[q].classe)
            Fim_enquanto
            Leia (cadastro[q].hnormal)
            Leia (cadastro[q].hextra)
            q ß q + 1
            Escreva (“Existem outros (s/n)?”)
            Leia (op)
      Enquanto (op = ‘s’)
      Fim_repita
      salreferencia ß 0
      Leia (salreferencia)
      Para i ß 1 até q Faça
      Inicio_para
            salclasse ß 0
            salnormal ß 0
            salextra ß 0
            salbruto ß 0
            salliquido ß 0
            inss ß 0
            Se cadastro[i].classe = ‘1’
            Entao salclasse ß salreferencia * 1.3
            Senao salclasse ß salreferencia * 1.9
            Fim_se
            salnormal ß salclasse * cadastro[i].hnormal
            salnormal ß (1.3 * salclasse) * cadastro[i].hextra
            salbruto ß salnormal + salextra
            inss ß 0.08 * salbruto
            salliquido ß salbruto – inss
            Escreva (“NUMERO DE INSCRICAO: “, cadastro[i].inscricao , “NOME: “ , cadastro[i].nome)
            Escreva (“SALARIO HORAS NORMAIS: “, salnormal)
            Escreva (“SALARIO HORAS EXTRAS: “, salextra)
            Escreva (“DEDUCAO INSS: “, inss)
            Escreva (“SALARIO LIQUIDO: “, salliquido)
      Fim_para
Fim

Código implementado no Dev-C++ 4.9.9.2


#include <iostream>
#include <stdio.h>

using namespace std;

struct ficha //declaração do tipo registro
       {
       char classe, nome[20];
       int inscricao, hnormal, hextra;
       };

int main()
{
    ficha cadastro[50]; //declaração do vetor cadastro do tipo ficha
    float salreferencia, salclasse, inss, salnormal, salextra, salbruto, salliquido;
    int i, q, len;
    char op;
    q = 0;
    do //leitura dos dados dos funcionários
        {
        cout << " >>>>>>>>>>>>> PROGRAMA FOLHA DE PAGAMENTO <<<<<<<<<<<<< " << "\n\n";
        cout << "\t\t" << "CADASTRO DE FUNCIONARIOS" << "\n\n";
        cout << "Inscricao: ";
        cin >> cadastro[q].inscricao;
        cin.sync();
        cout << "Nome: ";
        gets(cadastro[q].nome);
        cout << "Classe (1 ou 2): ";
        cin >> cadastro[q].classe;
        while (!((cadastro[q].classe == '1') || (cadastro[q].classe == '2'))) //verificação de classe inválida
              {
              cout << "\n" << "CLASSE INVALIDA" << endl;
              cout << "\n" << "Classe (1 ou 2): ";
              cin >> cadastro[q].classe;
              }
        cout << "Horas normais: ";
        cin >> cadastro[q].hnormal;
        cout << "Horas extras: ";
        cin >> cadastro[q].hextra;
        q = q + 1;
        cout << "\n" << "Existem outros funcionarios (s/n)?";
        cin >> op;
        system("cls");
        }
    while (op == 's');
    cout << " >>>>>>>>>>>>> PROGRAMA FOLHA DE PAGAMENTO <<<<<<<<<<<<< " << "\n\n";
    salreferencia = 0;
    cout << "Salario por hora trabalhada em R$: "; //leitura do salário de referência
    cin >> salreferencia;
    cout << "\n\n" << "\t\t" << "EMISSAO DO CONTRACHEQUE";
    for (i = 0; i < q; i++) //emissão do contracheque
        {
        salclasse = inss = salnormal = salextra = salbruto = salliquido = 0;
        if (cadastro[i].classe == '1') //verificação da classe
           {
           salclasse = (salreferencia * 1.3);
           }
        else
            {
            salclasse = (salreferencia * 1.9);
            }
        salnormal = salclasse * cadastro[i].hnormal; //cálculo do salário horas normais
        salextra = (1.3 * salclasse) * cadastro[i].hextra; //cálculo do salário horas extras
        salbruto = salnormal + salextra; //cálculo do salário bruto
        inss = (0.08 * salbruto); //cálculo da dedução do inss
        salliquido = salbruto - inss; //cálculo do salário líquido
        cout << "\n\n";
        cout << " NUMERO DE INSCRICAO: " << cadastro[i].inscricao << "\t" << "NOME: ";
        cout << cadastro[i].nome << endl;
        cout << " SALARIO HORAS NORMAIS: R$ " << salnormal << endl;
        cout << " SALARIO HORAS EXTRAS: R$ " << salextra << endl;
        cout << " DEDUCAO INSS: R$ " << inss << endl;
        cout << "\t" << "SALARIO LIQUIDO: R$ " << salliquido << endl;
        cout << "\n";
        system("PAUSE");
        }
    system("cls");
    cout << "\n";
    cout << " ********** OBRIGADO POR ESCOLHER ESTE SOFTWARE ********** ";
    cout << "\n\n";
    system("PAUSE");
}

Registros - Exercício Complementar 1

Resolução dos Problemas da Apostila de Registros

Repare que este problema é semelhante ao exercício 4 resolvido no post: Vetores - Aula de Programação de 15/05. A diferença está em como se armazena a tabela em uma estrutura do tipo registro.

Exercício Complementar 1



1.   Um armazém trabalha com 10 mercadorias diferentes identificadas pelos números inteiros de 1 a 10. O dono do armazém anota a quantidade vendida de cada mercadoria durante o mês. Ele tem uma tabela que indica para cada mercadoria o preço de vendida. Escrever o programa para ler e depois imprimir os dados de cada mercadoria em uma linha diferente e depois  o faturamento mensal do armazém. O preço de cada mercadoria é fornecido seguido pelos números das mercadorias e as quantidades vendidas. Quando uma mercadoria não tiver nenhuma vendida, é informado o valor zero no lugar de quantidade vendida.

Algoritmo


Programa Armazem
Tipo
      estoque = registro
            quantidade: inteiro
            preco: real
      Fim_registro
Var
      Declare mercadoria: vetor[1..10] de estoque
      Declare faturamento: real
      Declare i: inteiro
Inicio
      faturamento ß 0
      Para i ß 1 até 10 Faça
      Inicio_para
            Leia (mercadoria[i].quantidade)
            Leia (mercadoria[i].preco)
      Fim_para
      Para i ß 1 até 10 Faça
      Inicio_para
            Escreva (mercadoria[i].preco, “ - “ , i+1 , “ - “ , mercadoria[i].quantidade)
            faturamento ß faturamento + (mercadoria[i].quantidade * mercadoria[i].preco)
      Fim_para
      Escreva (“Faturamento: “, faturamento)
Fim

Código implementado no Dev-C++ 4.9.9.2


#include <iostream>
#include <stdio.h>

using namespace std;

struct estoque //declaração do tipo estoque
       {
       int quantidade;
       float preco;
       };

int main()
{
    estoque mercadoria[10]; //declaração do vetor mercadoria do tipo estoque
    float faturamento;
    int i;
    faturamento = 0;
    cout << " >>>>>>>>>> PROGRAMA ARMAZEM <<<<<<<<<< " << "\n\n";
    cout << "TABELA DE VENDAS" << "\n\n";
    for (i = 0; i < 10; i++) //leitura dos dados de entrada da tabela
        {
        cout << "MERCADORIA " << i + 1 << "\n";
        cout << "Digite a quantidade da vendida: ";
        cin >> mercadoria[i].quantidade;
        cout << "Digite o preco em R$: ";
        cin >> mercadoria[i].preco;
        cout << "\n";
        }
    system("cls");
    cout << " >>>>>>>>>> PROGRAMA ARMAZEM <<<<<<<<<< " << "\n\n";
    cout << "RELATORIO MENSAL DE VENDAS" << "\n\n";
    for (i = 0; i < 10; i++) //impressão dos dados da tabela
        {
        cout << "R$ " << mercadoria[i].preco << " - MERCADORIA " << i + 1;
        cout << " - " << mercadoria[i].quantidade << " UNIDADES VENDIDAS." << endl;
        faturamento = faturamento + (mercadoria[i].quantidade*mercadoria[i].preco);
        }
    cout << "\n\n" << "O faturamento mensal foi de R$ " << faturamento << "\n\n";   
    system("PAUSE");
}

Registros - Exercício 3

Resolução dos Problemas da Apostila de Registros


Exercício 3


Em certo município vários proprietários de imóveis estão em atraso com o pagamento  do imposto predial. Escreva um programa que calcule e escreva o valor da multa a ser paga por estes proprietários considerando que:
·      os dados de cada imóvel: identificação (literal), valor do imposto e número de meses em atraso;
·      as multas devem ser calculadas a partir do valor do imposto e de acordo com a seguinte tabela:

Valor do imposto
% por mês em atraso
até R$ 500
1
de R$ 501   até R$ 1800
2
de R$ 1801 até R$ 5000
4
de R$ 5001 até R$ 12000
7
acima de R$ 12000
10


·      o último registro, que não deve ser considerado, contém identificação do imóvel igual a vazio;
·      na saída deverão ser impressos: identificação do imóvel, valor do imposto, meses em atraso e a multa a ser paga.

Algoritmo


Programa Imposto;
Tipo
    registro = REGISTRO            {DEFINICAO DO TIPO REGISTRO}
             limiteinf : inteiro;           {QUE REPRESENTA A TABELA}
             limitesup : inteiro;         { DE MULTAS}
             perc : inteiro;
          FIM;
    propriedade = REGISTRO            {DEFINICAO DO TIPO PROPRIEDADE}
             ident: literal[8];                   {QUE REPRESENTA OS DADOS DE CADA}
             imposto : real;                    {IMOVEL}
             mesesat : inteiro;
          FIM;
Var
    tabela: vetor [1..5] de registro;
    imovel : propriedade;
    i,j : inteiro;
    multa : real;
INICIO
    escreva ('LEITURA DA TABELA PARA A APLICACAO DE MULTAS');
    Para iß1 até 5 faça
    Inicio_para
        escreva('Limite inferior :');
        leia (tabela[i].limiteinf);
        escreva('Limite superior :');
        leia (tabela[i].limitesup);
        escreva('Percentual :');
        leia (tabela[i].perc);   
    Fim_para;
    escreva ('LEITURA DO IMOVEL');
    escreva('Identificacao : ');
    leia (imovel.ident);
    Se imovel.ident <> ' ' então
    Inicio_se
            escreva('Imposto : ');
            leia (imovel.imposto);
            escreva('Meses em Atraso : ');
            leia (imovel.mesesat);
    Fim_se;
    Enquanto (imovel.ident <> ' ') faça
    Inicio_enquanto
        i ß5;
        Enquanto (imovel.imposto < tabela[i].limiteinf) AND (i>=0) faça
            ißi-1;
        multa<--tabela[i].perc/100 * (imovel.imposto) * (imovel.mesesat);
        escreva ('Identificacao  : ',imovel.ident);
        escreva ('Imposto : ',imovel.imposto);
        escreva ('Multa : ',multa);
        escreva ('LEITURA DO IMOVEL');
        escreva('Identificacao : ');
        leia (imovel.ident);
        Se imovel.ident <> ' ' entao
        Inicio_se
            escreva('Imposto : ');
            leia (imovel.imposto);
            escreva('Meses em Atraso : ');
            leia (imovel.mesesat);
       Fim_se;
    Fim_se;
FIM.

Código implementado no Dev-C++ 4.9.9.2


#include <iostream>
#include <stdio.h>

using namespace std;

struct multas //estrutura do tipo registro que representa a tabela de multas
       {
       float limiteinf, limitesup, perc;
       };
       
struct propriedade //estrutura do tipo propriedade que representa dados do imóvel
       {
       char ident[15];
       float imposto;
       int mesesat;
       };
      
int main()
{
    multas tabela[5]; //declaração do vetor tabela do tipo multas
    propriedade imovel; //declaração da variável imóvel do tipo propriedade
    int i;
    float multa;
    cout << "PROGRAMA CALCULO DE IMPOSTO PREDIAL DEVIDO" << "\n\n";
    for (i = 0; i < 5; i++) //leitura da tabela de multas
        {
        cout << i + 1 << "o. FAIXA DE TRIBUTACAO" << "\n\n";
        cout << "Limite inferior em R$: ";
        cin >> tabela[i].limiteinf;
        cout << "Limite superior em R$: ";
        cin >> tabela[i].limitesup;
        cout << "Percentual por mes em atraso: ";
        cin >> tabela[i].perc;
        cout << "\n";
        }
    system("cls");
    cout << "\n" << "TABELA DE TRIBUTACAO" << "\n\n";
    for (i = 0; i < 5; i++) //impressão da tabela de multas para referência
        {
        cout << " De R$ " << tabela[i].limiteinf << " ate R$ ";
        cout << tabela[i].limitesup << " = ";
        cout << tabela[i].perc << "% por mes." << endl;
        }
    cin.sync(); //sincronização do buffer de entrada de dados
    cout << "\n" << "LEITURA DO IMOVEL" << "\n\n";
    cout << "Identificacao do imovel: ";
    gets(imovel.ident);
    while (strcmp(imovel.ident,"\0")) //enquanto (identidade do imóvel ≠ de vazio) faça
          {
          cout << "Valor do imposto em R$: ";
          cin >> imovel.imposto;
          for (i = 0; i < 5; i++) //comparação dos valores do imóvel com valores da tabela
              {
              if ((imovel.imposto >= tabela[i].limiteinf) && (imovel.imposto <= tabela[i].limitesup))     
                 {
                 cout << "Meses em atraso: ";
                 cin >> imovel.mesesat;
                 multa = (tabela[i].perc/100)*imovel.imposto*imovel.mesesat; //cálculo multa
                 cout << "\n\n" << "SITUACAO DO IMOVEL " << imovel.ident << "\n\n";
                 cout << "Imposto devido: R$ " << imovel.imposto << endl;
                 cout << "Mese em atraso: " << imovel.mesesat << endl;
                 cout << "Multa pagar: R$ " << multa << "\n\n";
                 }
              }
          system("PAUSE");
          cin.sync();
          cout << "\n\n" << "LEITURA DO IMOVEL" << "\n\n";
          cout << "Identificacao do imovel: ";
          gets(imovel.ident);
          }
    cout << "\n\n";
    system("PAUSE");
}

Registros - Exercícios 1 e 2

Resolução dos Problemas da Apostila de Registros


Exercício 1


1 - Faça um programa que leia as informações (iguais a do exemplo acima) de 1 funcionário e as imprima na tela. Obs. Leia as informações de um funcionário, limpe a tela e imprima as suas informações;

Algoritmo


Programa Registro;
Tipo
ficha = registro                          {DECLARACAO DO REGISTRO}
                inscrição : inteiro;
               nome : literal[30];
                rua : literal[45];
                numero : inteiro;
                cep : inteiro;
                cpf : literal[15];
                sexo : char;
                data_nasc : literal[8];
                depfimente : char;
                horas_trab : real;
             fim_registro;
Inicio
    escreva('Inscricao: '); leia (ficha.inscricao);
    escreva('Nome: '); leia (ficha.nome);
    escreva('Rua: '); leia (ficha.rua);
    escreva('Numero: '); leia (ficha.numero);      {LEITURA DOS CAMPOS}
    escreva('CEP: '); leia (ficha.cep);                  { DO REGISTRO}
    escreva('CPF: '); leia (ficha.CPF);
    escreva('Sexo: '); leia (ficha.sexo);
    escreva('Data de Nascimento: '); leia (ficha.data_nasc);
    escreva('Tem depfimentes (S/N): '); leia (ficha.depfimente);
    escreva('Horas Trabalhadas: '); leia (ficha.horas_trab);

    escreva ('FICHA LIDA');
    escreva ('Inscricao: ',ficha.inscricao);
    escreva ('Nome: ',ficha.nome);                     {IMPRESSAO}
    escreva ('Rua: ',ficha.rua);               
    escreva ('Numero: ',ficha.numero);
    escreva ('CEP: ',ficha.cep);
    escreva ('CPF: ',ficha.CPF);
    escreva ('Sexo: ',ficha.sexo);
    escreva ('Data de Nascimento: ',ficha.data_nasc);
    escreva ('Tem depfimentes (S/N): ',ficha.depfimente);
    escreva ('Horas Trabalhadas: ',ficha.horas_trab);
Fim.

Código implementado no Dev-C++ 4.9.9.2


#include <iostream>
#include <stdio.h>

using namespace std;

struct cadastro //declaração do tipo registro
       {
       char sexo, dep, nome[30], rua[45], cpf[15], nascimento[8];
       float htrabalhadas;
       int inscricao, numero, cep;
       };

int main()
{
    cadastro ficha; //variável ficha do tipo registro
    cout << "Inscricao: "; //leitura dos campos do registro ficha
    cin >> ficha.inscricao;
    cin.sync(); //sincronização do buffer de entrada de dados
    cout << "Nome: ";
    gets(ficha.nome);
    cout << "Rua: ";
    gets(ficha.rua);
    cout << "Numero: ";
    cin >> ficha.numero;
    cout << "CEP: ";
    cin >> ficha.cep;
    cout << "CPF: ";
    cin >> ficha.cpf;
    cout << "Sexo: ";
    cin >> ficha.sexo;
    cout << "Data de nascimento: ";
    cin >> ficha.nascimento;
    cout << "Dependentes(s/n): ";
    cin >> ficha.dep;
    cout << "Horas trabalhadas: ";
    cin >> ficha.htrabalhadas;
    system("cls");
    cout << "FICHA LIDA" << "\n\n"; //impressão dos campos do registro ficha
    cout << "Inscricao: " << ficha.inscricao << endl;
    cout << "Nome: " << ficha.nome << endl;
    cout << "Rua: " << ficha.rua << endl;
    cout << "Numero: " << ficha.numero << endl;
    cout << "CEP: " << ficha.cep << endl;
    cout << "CPF: " << ficha.cpf << endl;
    cout << "Sexo: " << ficha.sexo << endl;
    cout << "Data de nascimento: " << ficha.nascimento << endl;
    cout << "Dependentes: " << ficha.dep << endl;
    cout << "Horas trabalhadas: " << ficha.htrabalhadas << "\n\n";
    system("PAUSE");
}

Exercício 2


2 - Escrever um programa que, dados 20 CÓDIGOS DE PROFISSÃO, emita o NOME das profissões correspondentes. Como estrutura de dados, devemos ter um vetor com 20 posições, onde cada posição refere-se à um registro com dois campos: CODIGO e NOME.

Algoritmo


Programa Profissoes;
Tipo
            registro = REGISTRO                {TIPO QUE REPRESENTA}
                        codigo: inteiro;                {A TABELA DE CODIGOS E PROFISSOES}
                        nome: literal[8];
            FIM;
Var
     tabela: vetor[1..20] de registro;
     codigodesejado, i, k: inteiro;
Inicio
    Escreva('LEITURA DOS CODIGOS DAS PROFISSOES');
    Para iß1 até 20 Faça
    Inicio
        escreva('codigo  : ');
        leia (tabela[i].codigo);
        escreva('nome    : ');
        leia (tabela[i].nome);
    Fim;
    escreva ('IDENTIFICACAO DE CODIGOS DAS PROFISSOES');
    Para iß1 até 10 Faça
    Inicio
        escreva('codigo  desejado: ');
        leia (codigodesejado);
        kß1;
        Enquanto (tabela[k].codigo <> codigodesejado) AND (k<20) do
            k<--k+1;
        Se tabela[k].codigo = codigodesejado então
        Inicio
            escreva ('nome: ',tabela[k].nome);
        Fim
        Senão
        Inicio
            escreva ('CODIGO INVALIDO');
        Fim;
    Fim;
Fim.

Código implementado no Dev-C++ 4.9.9.2


#include <iostream>
#include <stdio.h>

using namespace std;

struct profissao //declaração do tipo registro
       {
       int codigo;
       char nome[15];
       };

int main()
{
    profissao tabela[20]; //vetor tabela do tipo profissão
    int i, k, codigodesejado;
    char codigocerto;
    cout << "LEITURA DOS CODIGOS DAS PROFISSOES" << "\n\n";
    for (i = 0; i < 20; i++) //leitura dos dados das profissões
        {
        cout << "Codigo: ";
        cin >> tabela[i].codigo;
        cout << "Nome: ";
        cin >> tabela[i].nome;
        }
    cout << "\n" << "IDENTIFICACAO DE CODIGOS DAS PROFISSOES" << "\n\n";
    for (i = 0; i < 20; i++) //identificação dos códigos das profissões
        {
        cout << "Codigo desejado: ";
        cin >> codigodesejado;
        cout << "\n";
        codigocerto = 'n';
        k = 0;
        while (k < 20)
            {
            if (tabela[k].codigo == codigodesejado) //impressão dos resultados
               {
               codigocerto = 's';
               cout << "Nome: " << tabela[k].nome;
               }
            k = k + 1;
            }
        if (codigocerto == 'n') //verificação de código inexistente
           {
           cout << "CODIGO INVALIDO";
           }
        cout << "\n\n";
        }
    system("PAUSE");
}