quarta-feira, 6 de junho de 2012

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");
}

2 comentários:

  1. Tem como fazer esse codigo em C??

    ResponderExcluir
  2. Oiii
    Alguem poderia mandar esse codigo em C normal?
    Ajudaria muito, desde ja agradeço.

    ResponderExcluir