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.

Passo 1

O enunciado pede um programa em C que gerencie saldos de 10 projetos numerados de 0 a 9. Cada entrada consiste em um código de projeto, um valor e um tipo de lançamento: receita ( R) ou despesa ( D). Quando o código for -1, o programa encerra a leitura e imprime o saldo final de cada projeto. Para isso, vamos usar um vetor de 10 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 (char tipo) e atualiza o saldo:
  • Se tipo \(==\) 'R', faz saldo[projeto] \(+=\) valor;
  • Se tipo \(==\) 'D', faz saldo[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\);
}

Exercícios relacionados