Ir para conteúdo

POWERED BY:

Arquivado

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

Camila Campos

Caixa Eletrônico C++

Recommended Posts

Preciso fazer um programa que simule um Caixa Eletrônico onde existem depósitos e saques. O saque deve ocorrer utlizando o menor número possível de notas.

Assim que sacado ele fornece o número de notas disponíveis, bem como o valor do saldo. Porém para a nota de valor 1 aparece um número gigante e as vezes os números de notas ficam negativos. Onde estou errando?

 

Estou postando as imagens num album de um Orkut. Pelo que percebi aqui só deixa postar imagens da Web. Estou desenvolvendo na escola pelo Linux (vim) e estou acessando de casa pelo Windows, e não sei como copiar arquivos do vim para notepad. Portanto achei mais fácil dar um PrintScreen na tela e postar no Orkut.

 

Obrigada!

 

http://www.orkut.com.br/Main#Album.aspx?ui...71126&aid=1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Camila, você não precisa passar do vim para o notepad, basta dar um ctrl+c ctrl+v e postar aqui.

Ler o código por imagens vai ser complicado... :P :P

 

você também pode postar o código em um serviço de postagens, como o paste.la, codepad, etc... e deixar o link para nós darmos uma olhada!

=D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como disse, estou acessando via SSH. Ctrl+c ctrl+v não funciona para Vim.

 

Em todo caso refiz e segue.

 

Ele compila sem nenhum erro e roda normalmente. Só dá aqueles probleminhas que eu coloquei anteriormente.

 

#include <iostream>
using namespace std;

int checaQtdeNota (int ValorNota, int qtdSaldoNota, int saque, int valorReservado)
{
	int retorno;
	retorno = (saque - valorReservado) / valorNota;
	
	if (retorno > qtdSaldoNota)
		retorno = qtdSaldoNota;
	
	return retorno;
}

int main ()
{
	int nota100,
		nota50,
		nota10,
		nota5,
		nota1;

	int numOp; // numero de operacoes
	int codigo; //codigo da operacao
	int saque;
	int saldo;
	int valorReservado;

	cout << "Entre com o numero de notas disponiveis separadas por espaco ente cada valor. ";
	cin >> nota100
		>> nota50
		>> nota10
		>> nota5
		>> nota1;
	
	cout << "Numero de operacores: ";
	cin >> numOp;

	cout << endl << "voce ira realizar" << numOp << "operacoes."<< endl
		 << "Utilize: "<< endl
		 << "0 para saque "<< endl
		 << "1 para realizar depositos."<endl << endl;

	int saqueNota100,
		saqueNota50,
		saqueNota10,
		saqueNota5,
		saqueNota1,
		var;

	var = 0;

	while (numOp > var) // o programa encerrará quando fizer o numero de operacoes escolhidas pelo usuario
	{
		var = var + 1;
		
		cout << "Digite o codigo da operacao: ";
		cin >> codigo;

		if (codigo == 0)
		{
			cout << "Digite o valor do saque: ";
			cin >> saque;
			valorReservado = 0;

			saldo = (nota100*100) + (nota100*50) + (nota10*10) + (nota5*5) + (nota1);

			if (saldo > saque)
			{
				if (saque > valorReservado)
				{
					saqueNota100 = checaQtdeNota(100, nota100, saque, valorReservado);
					valorReservado = valorReservado + (saqueNota100 * 100);
				}
				
				if (saque > valorReservado)
				{
					saqueNota50 = checaQtdeNota(50, nota50, saque, valorReservado);
					valorReservado = valorReservado + (saqueNota50 * 50);
				}
				
				if (saque > valorReservado)
				{
					saqueNota10 = checaQtdeNota(10, nota10, saque, valorReservado);
					valorReservado = valorReservado + (saqueNota10 * 10);
				}
	
				if (saque > valorReservado)
				{
					saqueNota5 = checaQtdeNota(5, nota5, saque, valorReservado);
					valorReservado = valorReservado + (saqueNota5 * 5);
				}
				
				if (saque > valorReservado)
				{
					saqueNota1 = checaQtdeNota(1, nota1, saque, valorReservado);
					valorReservado = valorReservado + (saqueNota1 * 1);
				}

				if (valorReservado ==saque)
				{
					nota100 = nota100 - saqueNota100;
					nota50 = nota50 - saqueNota50;
					nota10 = nota10 - saqueNota10;
					nota5 = nota5 - saqueNota5;
					nota1 = nota1 - saqueNota1;

					cout << "Saque de " << saque << "efetuado." << endl;
				}
				
				else
				{
					saque = 0;
					cout << "Nao ha notas suficientes para o saque." << endl;
				}
			}
			
			else
			{
				saque = 0;
				cout << "Nao ha dinheiro suficiente para o saque" << endl;
			}

			saldo = saldo - saque;
			cout << "Situacao atual: | "
				 << nota100 << " | "
				 << nota50 << " | "	
				 << nota10 << " | "
				 << nota5 << " | "
				 << nota1 << " | "
				 << saldo << " | " << endl;

			saque = 0

		}
	}
	
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o.O

Ao dar um ctrl+C no vim, o texto selecionado vai para ~/.vbuf não é?

Quero dizer, eu acho que era assim, depois vou esperimentar!

 

Eu compilei o seu código, mas não conseguir reproduzir o erro...

mudei algumas coisas...

Essencialmente divdi a sua função main, estava muito grande, fica confuso.

(não sei se o seu professor pediu para que fosse tudo feito na função main...mas não é bom fazer isso)

 

#include <iostream>
#include <string>

using namespace std;

void Depositar(int); //função que depositará "qtde" de dinheiro no caixa
void Sacar(int); //função usada para sacar o dinheiro do caixa
int ContarNotas(int, int, int, int, int); //contabiliza a situação das notas
void verSaldo();

//com essas variáveis guardaremos o número de notas no caixa
//poderiamos usar um array, e passar como parametro nas funções
//acho que com arrays era mais fácil
int n100, n50, n10, n5, n1;

int main ()
{
char op, cont='s';

	cout << "Entre com o numero de notas disponiveis de 100, 50, 10, 5 e 1 real. \n";
	cin >> n100 >> n50 >> n10 >> n5 >> n1;

	//enquanto o usuário quiser efetuar uma operação
	while (cont == 's' || cont == 'S')
	{
		cout << "O que deseja fazer?\n"
			 << "\t1 - Saque\n"
			 << "\t2 - Deposito\n"
			 << "\t3 - Ver Saldo\n\n";

		cout << "Digite o codigo da operacao: ";
		cin >> op;

		int valor;

		if (op == '1')
		{
			cout << "Quanto deseja sacar? ";
			cin >> valor;

			Sacar(valor);
		}
		else if (op == '2')
		{
			cout << "Quanto deseja depositar? ";
			cin >> valor;

			Depositar(valor);
		}
		else if (op == '3')
		{
			verSaldo();
		} else
			cout << "Operacao invalida. ";

		cout << "Deseja efetuar outra operacao? (s/n)\n";
		cin >> cont;
	}


	return 0;
}

void Depositar(int vl)
{
	cout << "Em construção" << endl;

}


void Sacar(int vl)
{
int saldo = ContarNotas(n100, n50, n10, n5, n1);
int tmp;
int n100_, n50_, n10_, n5_;

	//vamos fazer um backup dos dados
	n100_ = n100;
	n50_ = n50;
	n10_ = n10;
	n5_ = n5;

	if (vl > saldo)
	{
		cout << "Nao ha dinheiro suficiente para o saque" << endl;
		return;
	}

	tmp = vl/100;
	//se houverem mais notas de 100 do que o que precisamos para o saque.
	//sacamos algumas dessas notas
	if (tmp < n100)
	{
		vl = vl%100;
		n100 = n100 - tmp;
	} else
	{
		vl = vl - 100*n100;
		n100 = 0;
		cout << "Nao ha mais notas de 100 reais" << endl;
	}

	tmp = vl/50;

	if (tmp < n50)
	{
		vl = vl%50;
		n50 = n50 - tmp;
	} else
	{
		vl = vl - 50*n50;
		n50 = 0;
		cout << "Nao ha mais notas de 50 reais" << endl;
	}

	tmp = vl/10;

	if (tmp < n10)
	{
		vl = vl%10;
		n10 = n10 - tmp;
	} else
	{
		vl = vl - 10*n10;
		n10 = 0;
		cout << "Nao ha mais notas de 10 reais" << endl;
	}

	tmp = vl/5;

	if (tmp < n5)
	{
		vl = vl%5;
		n5 = n5 - tmp;
	} else
	{
		vl = vl - 5*n5;
		n5 = 0;
		cout << "Nao ha mais notas de 5 reais" << endl;
	}

	tmp = vl/1;

	if (tmp < n1)
	{
		vl = vl%1;
		n1 = n1 - tmp;
	} else
	{
		cout << "Não há notas para evetuar o saque. Desculpe" << endl;
		n100 = n100_;
		n50 = n50_;
		n10 = n10_;
		n5 = n5_;
	}

}

void verSaldo()
{
	cout << "Ha " << ContarNotas(n100, n50, n10, n5, n1) << " reais na conta" << endl
		 << n100 << " notas de 100" << endl
		 << n50 << " notas de 50" << endl
		 << n10 << " notas de 10" << endl
		 << n5 << " notas de 5" << endl
		 << n1 << " notas de 1" << endl << endl;
}

int ContarNotas(int _100, int _50, int _10, int _5, int _1)
{
	return _100*100 + _50*50 + _10*10 + _5*5 + _1;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficou muito bom!

 

Mas caiu no meu problema inicial. Coloquei as seguintes notas 7 2 1 1 5 e tentei sacar 370. Ele deveria puxar 3 notas de 100, uma de 50 e duas de 10. Como só tenho uma nota de 10, ele deveria puxar uma nota de 10 e correr para a próxima nota, no caso duas de 5. Mas também só tenho uma de 5. Então ele puxaria uma de 5 e o restante de 1.

 

Quando ele não tem quantidade de nota suficiente de um certo valor ele não saca.

 

Esse seria o problema:

http://www.ime.usp.br/~egbirgin/courses/2009/mac115/ep1.pdf

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmmm...

Então todo o nosso código está errado.

O problema pede para fazer um programa em C e não C++

 

será preciso traduzir os códigos...

 

 

ahhhh, esse erro que você mencionou, arrumei!

O problema estava na função 'Sacar', as comparações do valor com a quantidade de notas eram feitas com '<' onde era preciso '<='

 

http://codepad.org/vJLd5vm5

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.