Ir ao conteúdo
  • Cadastre-se
pedro02

Cálculo de empréstimo (PASCAL)

Recommended Posts

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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×