Ir ao conteúdo
  • Cadastre-se

Cálculo de empréstimo (PASCAL)


pedro02

Posts recomendados

A Financeira Seu Dinheiro oferece empréstimos considerando a idade de cada cliente, e por isto, solicitou que você desenvolva um programa para ajudá-la nessa tarefa, observando as seguintes condições:

IDADE VALOR MÁXIMO DE EMPRÉSTIMO

0 – 17 -> Empréstimo negado

18 – 45 -> R$10.000,00

46 – 60 -> R$5.000,00

61 – 80 -> R$2.000,00

Acima de 80 -> R$1.000,00

Pede-se, portanto:

1. Escreva um programa que receba via teclado o nome, a idade e o valor

solicitado para empréstimo.

2. O programa deverá verificar se o valor solicitado ultrapassa o valor máximo

permitido para a idade do cliente, se ultrapassar, considerar que o valor

solicitado será igual ao valor máximo permitido.

3. Exibir mensagem informando o nome e o valor de empréstimo para cada

cliente.

4. Como não se sabe o número correto de clientes que solicitarão empréstimos, adote o flag NOME="FIM" para encerrar a digitação de dados.

Consistências:

1. Só aceitar idades entre 0 e 100 (inteiras), exibir mensagens informando, se a

idade for inválida;

2. Não conceder empréstimos para menores de 18 anos, exibir mensagens

informando que não existe valor disponível para a idade do cliente (estes

clientes não devem ser considerados para o cálculo da média);

3. O valor mínimo para empréstimo será R$300,00;

Ao final, imprimir:

1. A média geral (não permitir divisão por zero)

2. Quantas pessoas acima de 80 anos adquiriram empréstimos com a financeira

3. O nome do cliente que adquiriu o maior valor de empréstimo

4. A idade do cliente que adquiriu o menor valor de empréstimo

Estou com um problema quando vou por pra compilar ele me pergunta o nome idade e valor minimo para empréstimo faz o calculo da média geral, a quantidade de pessoas acima de 80 anos, nome do cliente c/ maior valor e idade do cliente c/ menor valor. Mas após isso, em vez dele voltar para perguntar o nome novamente e contar como mais 1 ele finaliza o programa. Alguém pode me ajudar?

:D

Program ex ;
USES CRT;
var
VALOR_MAX, VALOR, SOMA, MAIOR, MENOR, MEDIA : real;
NOME, NOME_MAIOR : string ;
IDADE, CONT, CONT_80, IDADE_MENOR : integer ;
Begin
CONT := 1;
CONT_80 := 0;
SOMA := 0;
MAIOR := 0;
MENOR := 999999 ;
repeat
writeln ('NOME (PARA ABANDONAR DIGITE FIM');
readln (NOME);
if (NOME='FIM') then
begin
break;
end;
repeat
writeln ('Digite a idade');
readln (IDADE);
if (IDADE <0) or (IDADE > 100) then
begin
writeln ('Invalido');
end;
until (IDADE >= 0) and (IDADE <=100);
until (NOME <> 'FIM');
if (IDADE < 18) then
begin
writeln ('Emprestimo negado')
end
else
begin
repeat
writeln ('Emprestimo minimo R$ 300,00');
readln (VALOR);
if (VALOR < 300) then
begin
writeln ('Invalido');
end;

until (VALOR >= 300);

end;

if (IDADE <= 45) then
begin
VALOR_MAX := 10000;
end
else if (IDADE <= 60) then
begin
VALOR_MAX := 5000;
end
else if ( IDADE <= 80) then
begin
VALOR_MAX := 2000;
end
else
begin
VALOR_MAX := 1000;
CONT_80 := CONT_80 +1;
end;

if (VALOR>VALOR_MAX) then
begin
VALOR := VALOR_MAX;
end;

SOMA := SOMA + VALOR;
CONT := CONT +1;

writeln (NOME, 'o valor liberado é R$,', VALOR);

if (VALOR > MAIOR) then
begin
MAIOR := VALOR;
NOME_MAIOR := NOME;
end;

if (VALOR < MENOR) then
begin
MENOR := VALOR;
IDADE_MENOR := IDADE;
end;


if (CONT > 0) then
begin
MEDIA := SOMA / CONT;
end;




writeln (' A media geral é' , MEDIA);

writeln (CONT_80 , 'foram o numero de pessoas acima de 80 que adquiriram emprestimo');

writeln (NOME_MAIOR , 'é o nome do cliente que adquiriu maior valor que é', MAIOR);

writeln (IDADE_MENOR , 'é a idade do cliente que adquiriu o menor valor que é', MENOR);





end.

Link para o comentário
Compartilhar em outros sites

Muda a condição


until (NOME <> 'FIM');

Para


until (NOME = 'FIM');

Porque aí quando o NOME for igual a FIM o programa parará a repetição e enquanto o NOME for diferente de FIM ele continuará a repetição.

E coloca essa linha lá no final, antes do último end.

Aqui comigo deu certo.

Link para o comentário
Compartilhar em outros sites

valeu felipe mudei a condição e compilou certo aqui..

tenho mais algumas dúvidas

agora com a estrutura de repetição enquanto acho mais complicado lidar com a estrutura dentro da estrutura me confunde demais a cabeça por isso deixei sem terminar totalmente mas vou por o enunciando da questão aqui.

Escreva um programa que receba o salário e sexo dos funcionários da

empresa X , sabe-se que os funcionários receberão um aumento

considerando a tabela abaixo:

Salário <= R$ 1.500,00 - 20% de aumento

R$1500,00 < Salário <= R$5.000,00 - 10% de aumento

R$5000,00 < Salário<= R$15.000,00 - 5% de aumento

Salário > R$15.000,00 - Não haverá aumento

Observações:

A empresa possui 500 funcionários

Para os resultados finais considere todos os salários, mesmo aqueles

que não tiverem direito ao aumento.

Consistência:

Salário - Positivo (não aceitar nulos ou negativos)

Sexo - F – Feminino e M – Masculino

Resultado intermediário:

Exibir novo salário do funcionário e o percentual de aumento.

Resultados finais:

Total da folha de pagamento (antes do aumento)

Total da folha de pagamento (após o aumento)

Média salarial feminina (após aumento)

Total dos pagamentos masculino (após aumento)

Exiba o sexo do maior e o menor salário (após aumento)

Program estrutura_enquanto ;

USES CRT;

var

sal, novo_sal, totalm, media, sal_maior, sal_menor, aumento : real;

sexo, sexo_maior, sexo_menor : string ;

cont, soma, soma1 : integer ;

Begin

CONT := 1;

MAIOR := -1;

MENOR := 999999;

SOMA := 0;

repeat

// onde eu finalizaria o repita e o contador ?

begin

writeln ('Digite o salario (SALARIO MENOR QUE 0 NAO SERA ACEITO)');

readln (sal);

while (sal < 0) do

begin

writeln ('Salario invalido');

readln (sal);

end;

while (sexo <> 'F') and (sexo <> 'M') do

begin

writeln;

writeln ('Digite o sexo (M/F)');

readln (sexo);

end;

if (sal <= 1500) then

begin

aumento := 0.2;

novo_sal := sal + (sal*aumento)

end

else if ( sal <= 5000) then

begin

aumento := 0.1;

novo_sal := sal + (sal*aumento)

end

else if ( sal <= 15000) then

begin

aumento := 0.05;

novo_sal := sal + (sal*aumento)

end

else

begin

aumento := 0;

novo_sal := sal + (sal*aumento)

end;

writeln;

writeln;

writeln;

end;

aumento := aumento*100;

writeln ('O salario do funcionario é R$ ',novo_sal, ' e o aumento é de ', aumento,'%');

// aqui por exemplo nao sei como transformaria o aumento em porcentagem sem ter multiplicado o proprio aumento por 100.

CONT := CONT + 1;

// nao sei se o incremento do contador está no lugar correto.

SOMA := SOMA + NOVO_SAL;

// por ter dois salarios com aumento e sem aumento eu teria que ter duas somas?

SOMA1 := SOMA1 + SAL;

writeln (SOMA1, ' é a soma do total de pagamento antes do aumento');

writeln;

writeln;

writeln (SOMA, ' é a soma do total de pagamento após o aumento');

writeln;

writeln;

if (sexo='F') then

begin

SOMA := SOMA + NOVO_SAL;

MEDIA := SOMA / CONT;

writeln ('A media feminina é, ', MEDIA);

end;

if (sexo='M') then

begin

TOTALM := TOTALM + NOVO_SAL;

writeln (SOMA, ' é a soma do total de pagamento masculino após o aumento');

if (sexo>sexo_maior) then

begin

sexo_maior := sexo;

sal_maior := novo_sal;

writeln ('O sexo do maior salario é, ', SEXO_MAIOR);

end;

if (sexo<sexo_menor) then

begin

sexo_menor := sexo;

sal_menor := novo_sal;

writeln ('O sexo do menor salario é, ', SEXO_MENOR);

end;

End.

é isso ai.. valeu :D

Link para o comentário
Compartilhar em outros sites

Olá, percebi algumas alterações que podem ser feitas no seu código.

- Tira o begin e o end que você colocou para o repeat. Termina o repeat no final do código (antes do End.). Como no problema diz que são 500 funcionários, acredito que a melhor forma de terminar o repeat seria:


until (CONTADOR = 500);

Mas pra testar o programa é melhor usar um número menor, por exemplo:


until (CONTADOR = 3);

- Faltou fechar o seguinte if:


if (sexo='M') then
begin

- As variáveis MENOR e MAIOR não foram declaradas.

- As variáveis SOMA e SOMA1 têm que ser float porque vão armazenar somas de salários e SALARIO é float.

- O CONT deve começar valendo 0, porque se começar valendo 1 vai armazenar a contagem errada. Por exemplo, quando tiver 2 funcionários, o CONT vai estar valendo 3.

- Tem que criar uma variável para contar a quantidade de funcionárias (sexo feminino) e o total dos salários delas pra poder calcular a média. Média dos salários das mulheres = somas dos salários das mulheres / quantidade de mulheres.

- A variável TOTALM deve começar valendo 0.

- Na hora de verificar o sexo do funcionário que tem o maior salário você tá comparando duas strings:


if (sexo>sexo_maior) then

Acredito que o melhor a fazer é iniciar a variável SAL_MAIOR com 0 e fazer o seguinte:


if (NOVO_SAL > SAL_MAIOR) then
begin
SAL_MAIOR := NOVO_SAL;
SEXO_MAIOR := SEXO;
writeln ('O sexo do maior salario é, ', SEXO_MAIOR);
end;

- No final, antes do until, o valor de SEXO tem que ser alterado, por exemplo:


SEXO:='A';

É uma "gambiarra" pra na próxima repetição o programa entrar no laço


while (sexo <> 'F') and (sexo <> 'M') do

Espero ter ajudado!

Dica: quando for postar um código aqui use a tag CODE que aí fica mais fácil de entendê-lo.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...