Uma empresa comercial possui um programa para controle das receitas e despesas em seus 10 projetos. Os projetos são numerados de 0 até 9 . Faça um programa C que controle a entrada e saída de recursos dos projetos. O programa deverá ler um conjunto de informações contendo: Número do projeto, valor, tipo despesa (“R” - Receita e “D” - Despesa). O programa termina quando o valor do código do projeto for igual a -1. Sabese que a Receita deve ser somada ao saldo do projeto e Despesa subtraída do saldo do projeto. Ao final do programa, imprimir o saldo final de cada projeto.
Use uma estrutura de dados para armazenar cada projeto, considere um vetor de projetos de 10 posições.
Use uma estrutura de dados para armazenar cada projeto, considere um vetor de projetos de 10 posições.
Passo 1
O enunciado pede um programa em C que gerencie saldos de
projetos numerados de
a
. Cada entrada consiste em um código de projeto, um valor e um tipo de lançamento: receita (
) ou despesa (
). Quando o código for
, o programa encerra a leitura e imprime o saldo final de cada projeto. Para isso, vamos usar um vetor de
posições para armazenar o saldo acumulado de cada projeto.
Passo 2
Declarar e inicializar o vetor de saldos. Como precisamos armazenar valores que podem ter casas decimais, usaremos
double
. Inicializamos todos os saldos com zero.double saldo[\(10\)] = {\(0.0\)};
Passo 3
Fazer um laço de leitura que só termina quando o usuário digitar projeto
.
Dentro do laço:
. Leitura do código de projeto.
. Se for
, sai do laço.
. Se for entre
e
, lê o valor e o tipo (
Dentro do laço:
char tipo
) e atualiza o saldo:- Se
tipo \(==\) 'R'
, fazsaldo[projeto] \(+=\) valor;
- Se
tipo \(==\) 'D'
, fazsaldo[projeto] -\(=\) valor;
- Caso contrário, imprime mensagem de tipo inválido.
. Se o código não estiver em nem for , avisa que o projeto é inválido e continua.
No
scanf
de char
, usamos um espaço antes de %c
para ignorar eventual \n
deixado no buffer.Passo 4
Depois que o laço terminar, percorrer o vetor
saldo
e imprimir o saldo de cada projeto, indicando o número do projeto e o valor final com duas casas decimais.Resposta
#include <stdio.h>
int main(void) {
double saldo[\(10\)] = {\(0.0\)};
int projeto;
double valor;
char tipo;
while (\(1\)) {
printf("Digite codigo do projeto (\(0\)-\(9\), ou -\(1\) para sair): ");
if (scanf("%d", &projeto) != \(1\)) {
// Em caso de leitura inválida, limpa o buffer e continua
scanf("%*s");
printf("Entrada invalida. Tente novamente.\n");
continue;
}
if (projeto == -\(1\)) {
break;
}
if (projeto < \(0\) || projeto > \(9\)) {
printf("Projeto invalido! Deve ser de \(0\) a \(9\).\n");
continue;
}
printf("Digite valor e tipo (R para receita, D para despesa): ");
if (scanf("%lf %c", &valor, &tipo) != \(2\)) {
// Limpa o buffer em caso de erro
scanf("%*s");
printf("Entrada invalida. Tente novamente.\n");
continue;
}
if (tipo == 'R' || tipo == 'r') {
saldo[projeto] += valor;
} else if (tipo == 'D' || tipo == 'd') {
saldo[projeto] -= valor;
} else {
printf("Tipo invalido! Use 'R' ou 'D'.\n");
}
}
printf("\nSaldo final de cada projeto:\n");
for (projeto = \(0\); projeto < \(10\); projeto++) {
printf("Projeto %d: R$ %.2f\n", projeto, saldo[projeto]);
}
return \(0\);
}