Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2015, 02:45   #1
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию Подсчет введенных попыток

Все работает, но есть проблема, количество попыток нужно выводить не оставшихся, а которые я потратил. Как бы это можно было сделать? Попробовал разные способы
Код:
#include <iostream>
#include <locale.h>
#include <time.h>

using namespace std;

class Guess
{
public:
	int digit;
	char digit_char[3];
	int count;
	bool winner;
	Guess()
	{
		digit = 0; // загадываемое число
		count; // задаем количество возможных попыток
		cout << "Введите кол-во попыток: ";
		cin >> count;
		winner = false;
	}
	void set_digit()
	{
		srand(time(NULL));
		digit = rand() % (999 - 100 + 1) + 100; // генерация трехзначного числа
		sprintf(digit_char, "%d", digit);
	}
	int get_digit()
	{
		return digit;
	}
	void set_count(int i)
	{
		count = i;
	}
	int get_count()
	{
		return count;
	}
	bool get_winner()
	{
		return winner;
	}
	Guess operator()(int number)
	{
		if(digit == number) // если загадываемое число совпадает с предполагаемым введенным нами числом, то пользователь выигрывает
		{
			winner = true;
		}
		else
		{
			char str[10]; 
			sprintf(str, "%d", number); // вывод в массив
			for(int i = 0; i < 3; i++)
			{
				if(digit_char[i] == str[i]) // если угадываем цифру в числе то..
				{
					cout << "**Вы угадали "
						<< i + 1
						<< " цифру загаданного числа**"
						<< endl;
				}
			}
			count--; // отнимает одну попытку от заданного числа в count
			if(count == 0) // если кол-во попыток становится равным нулю, то 
			{
				cout << "\nВы исчерпали все попытки и не смогли угадать загаданное число\n" << endl
					<< "Загаданное число: " << digit
					<< endl;				

				cout << "\nКоличество попыток исчерпано, вы проиграли!!\n" << endl;

				system("pause");
				exit(0); // выход при привышении заданного кол-ва попыток
			}
			else
				cout << "\nОсталось попыток: "
				<< count
				<< endl;
		}
		return *this; // возврат копии себя
	}
};

int main()
{
	setlocale(0, "");
	cout << "\t\t\t\t\tЧисло сгенерированно, угадай его"
		<< endl;
	Guess g;
	g.set_digit();
	int number;
	while(true)
	{
		cout << "\nВведите число: ";
		cin >> number;
		g(number);
		if(g.get_winner())
		{
			cout << "Вы выиграли"

				<< endl;
			break;
		}
	}
	
	cout << "Число попыток: " <<  g.count << endl;
	
	system("pause");
	return 0;
}
tisit вне форума Ответить с цитированием
Старый 26.11.2015, 05:11   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А тут есть много способов?
1. Инициализируете каунт 0, а какой-нить макс_каунт н
2. Вместо дикремента каунта - инкремерт.
3. Вместо сравнения каунта с 0 - сравнение с макс_каунтом.
p51x вне форума Ответить с цитированием
Старый 26.11.2015, 17:05   #3
tisit
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 24
По умолчанию

Код:
#include <iostream>
#include <locale.h>
#include <time.h>

using namespace std;

class Guess
{
public:
	int digit;
	char digit_char[3];
	int count, countR;
	bool winner;
	Guess()
	{
		digit = 0; // загадываемое число
		count = 0; // задаем количество возможных попыток
		countR = 20; // задаем мааксимальное кол-во попыток
		cout << "Максимально возможное кол-во попыток: " << countR << endl;		
		//cout << "Введите кол-во попыток: ";
		//cin >> count;
		winner = false;
	}
	void set_digit()
	{
		srand(time(NULL));
		digit = rand() % (999 - 100 + 1) + 100; // генерация трехзначного числа
		sprintf(digit_char, "%d", digit);
	}
	int get_digit()
	{
		return digit;
	}
	void set_count(int i)
	{
		count = i;
	}
	int get_count()
	{
		return count;
	}
	bool get_winner()
	{
		return winner;
	}
	Guess operator()(int number)
	{
		if(digit == number) // если загадываемое число совпадает с предполагаемым введенным нами числом, то пользователь выигрывает
		{
			winner = true;
		}
		else
		{
			char str[10]; 
			sprintf(str, "%d", number); // вывод в массив
			for(int i = 0; i < 3; i++)
			{
				if(digit_char[i] == str[i]) // если угадываем цифру в числе то..
				{
					cout << "**Вы угадали "
						<< i + 1
						<< " цифру загаданного числа**"
						<< endl;
				}
			}
			count++; // отнимает одну попытку от заданного числа в count
			if(count == countR) // если кол-во попыток становится равным нулю, то 
			{
				cout << "\nВы исчерпали все попытки и не смогли угадать загаданное число\n" << endl
					<< "Загаданное число: " << digit
					<< endl;				

				cout << "\nКоличество попыток исчерпано, вы проиграли!!\n" << endl;

				system("pause");
				exit(0); // выход при привышении заданного кол-ва попыток
			}
			else
				cout << "\nИспользовано попыток: "
				<< count << " Осталось: " << countR - count 
				<< endl;
		}
		return *this; // возврат копии себя
	}
};

int main()
{
	setlocale(0, "");
	cout << "\t\t\t\t\tЧисло сгенерированно, угадай его"
		<< endl;
	Guess g;
	g.set_digit();
	int number;
	while(true)
	{
		cout << "\nВведите число: ";
		cin >> number;
		g(number);
		if(g.get_winner())
		{
			cout << "Вы выиграли"

				<< endl;
			break;
		}
	}
	
	cout << "Вы отгадали за: " <<  g.count << " попыток" << endl;
	
	system("pause");
	return 0;
}
спс :-)
tisit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет данных введенных в одной ячейке. Hagen83 Microsoft Office Excel 12 15.06.2013 12:31
процедуры и функции Им давалось M (M<10) попыток для прыжков. olchik1980 Паскаль, Turbo Pascal, PascalABC.NET 2 12.03.2013 14:30
Пароль с количеством попыток! viks1 Общие вопросы Delphi 19 20.04.2012 20:35
количество попыток входа в систему shananina-katya Помощь студентам 9 14.04.2012 21:24
Подсчет попыток запуска программы Jetro Общие вопросы Delphi 1 27.12.2010 17:25