Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] оптимизация программы

Ответить
Настройки темы
C/C++ - [решено] оптимизация программы

Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


вот сама программа( угадай число))) )

Код: Выделить весь код
#include <iostream>
#include <ctime>

int main()
{
	srand( (unsigned) time(0) );
	setlocale(LC_ALL, "Russian");

	int a, b, c, d; //генерация случайных чисел
	a = rand() % 9;
	b = rand() % 9;
	c = rand() % 9;
	d = rand() % 9;
	//std::cout << a << b << c << d;
	std::cout << "\t\tИгра числа\n\n";
	std::cout << "В этой игре нужно угадать 4х значное число число\n";
	std::cout << "генерируем число\n";
	int x, y , z , w ;
	std::cout << "Введите ваш выбор(цифры вводите через пробел)\n";
	
	do
	{
		std::cin >> x >> y >> z >> w;
		if(x == a)
			std::cout <<"Первое число = " << a << "\n";
		
		if(y == b)
			std::cout << "Второе число = " << b << "\n";
		
        if(z == c)
			std::cout << "Третье число = " << c << "\n";
		
		if(w == d)
			std::cout << "Четвертое число = " << d << "\n";
		}while( (a + b + c + d) != (x + y + z + w));
	std::cout << "Вы справились\n";
	
	std::cin.get();
	std::cin.get();

	return 0;
}
Она рабочая, интересно просто как её можно оптимизировать? Так чтоб цифры нужно было не через пробел вводить??
П.С. - сильно не горит, просто нужно для себя(разобраться)!!!

Отправлено: 22:59, 02-02-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


для начала напишите после инклудов

Код: Выделить весь код
using namespace std;
и можете писать просто cin и cout

Цитата virus8:
Так чтоб цифры нужно было не через пробел вводить?? »
непонятно

Отправлено: 23:37, 02-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата ferget:
Так чтоб цифры нужно было не через пробел вводить?? »
непонятно »
У него перегружен cin, соответственно приходится вводить: 2 3 4 5 и подтверждать ввод Enter.
Цитата virus8:
std::cin >> x >> y >> z >> w; »
Нужно так, после каждого ввода числа подтверждать ввод Enter.
Код: Выделить весь код
cin >> x;
cin >> y;
cin >> z;
cin >> w;
Я вот только это условие суммирования не пойму никак.
Цитата virus8:
while( (a + b + c + d) != (x + y + z + w)); »
Я когда-то на этапе изучения, писал программу угадайку чисел. Загадывается число программой от 1 до 1000 после чего отгадывающий пишет свой вариант, и на основе больше\меньше результат будет примерно так если использовать технику бинарного поиска, Х это искомое число.
Код: Выделить весь код
1 < X 1000
512 < X 1000
512 < X < 768
Исходник привёл также каким он был во время написания.
Угадай-ка
Код: Выделить весь код
// Задачи главы 3. Задача 3.38 и 3.39
//Угадай-ка число
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip>
using std::setw;

#include <cstdlib>

#include <ctime>
using std::time;

int main()
{
   int a=0,
       num,
       otvet,
       z,
       min = 1,
       max = 1000;
       
   cout<<"  DLIA PRODOLGENIA PRESS '0'. FINISH '-1':   ";	// Для продолжения введите '0'. Для завершения '-1':
   cin>>z;
   while(z != -1){
      srand(time(0));
      num = 1 + rand() % 1000;
      cout<<"\n  MY NUMBER IN DIAPAZON 1 - 1000: \n\n";		// Моё число находится в диапазоне 1 - 1000:
      cout<<setw(4)<<min<<" < "<<" X "<<" < "<<max;
      cout<<"  DOGADKA:  ";		// Введите пожалуйста Вашу догадку:
      cin>>otvet;
      while(otvet != num){
         if(otvet < num){
            cout<<"    MALOVATO\n\n ";	// Маловато пожалуй
            min = otvet;
            cout<<setw(4)<<min<<" < "<<" X "<<" < "<<max;
            cout<<"  DOGADKA:  ";	// Введите пожалуйста Вашу догадку:
            cin>>otvet;
            a++;
          }
      if(otvet > num){
        cout<<"    MNOGOVATO\n\n ";		// Многовато будет
        max = otvet;
        cout<<setw(4)<<min<<" < "<<" X "<<" < "<<max;
        cout<<"  DOGADKA:  ";		// Введите пожалуйста Вашу догадку:
        cin>>otvet;
        a++;
      }
    }
   if(otvet == num){
     a++;
     cout<<"\n"<<setw(10)<<min<<" < "<<otvet<<" < "<<max;
     cout<<"   URA VERNO !!! "<<"  OTGADAL ZA  "<<a<<"  POPITOK\n"<<endl;	// Ура Верно !!! Отгадано за  Х попыток
     a = 0;
     min = 0;
     max = 0;
   }
    cin>>z;
  }
  return 0;
}
//---------------------------------------------------------------------------


Цитата Drongo:
Я вот только это условие суммирования не пойму никак.
Цитата virus8:
while( (a + b + c + d) != (x + y + z + w)); » »
Всё, въехал, сумма загаданых и сумма вариантов не совпадают. Значит не угадано число.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 03-02-2012 в 03:18.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:12, 03-02-2012 | #3


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Ой извините условие не расписал!!! Получается так есть число 4х значное, нужно угадать 4 цифры, но когда ты угадываешь 1 цифру программка те пишет угадана 2 или 3 цифра. Вопрос у меня для того чтоб разобраться можно ли как нибудь сделать чтоб ввел 4х значное число - без пробела (cin не дает этого сделать ) может почитать про другие операторы вывода??? если чего хотябы намекните )))

Исходник привёл также каким он был во время написания.
Угадай-ка -------
веселая программка - многовато - маловато))
за исходник спасибо - почитал))

У меня сейчас этот период обучения проходит - тока я дома сам пыхчу и спросить кроме букваря некого!


для начала напишите после инклудов

Код:

using namespace std;

и можете писать просто cin и cout - друг посоветовал сразу себя к этому не приучать )))

Последний раз редактировалось virus8, 03-02-2012 в 11:37.


Отправлено: 11:29, 03-02-2012 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата virus8:
друг посоветовал сразу себя к этому не приучать »
Это почему же? Зачем писать полные именования.
Я бы посмотрел на твоего друга при создании приложения на C#. Как бы он постоянно писал нечто вроде System.Windows.Forms.MessageBox вместо простого usage в начале и в коде просто MessageBox.

Сокращенные имена это плюс, а не минус программирования.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 11:47, 03-02-2012 | #5


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


))) О_о приятно пообщаться с программером настояшим (если чего не поймите за издевку)! Я просто учу с++ мне так захотелось......

Друг говорит, что когда буду учить STL(что такое STL знаю пока не много) - пригодится --- если не прав поправьте (хотелось бы услышать побольше мнений) - просто говорит один человек - опыта почеркнуть больше не у кого !!!!

Отправлено: 17:13, 03-02-2012 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата virus8:
когда буду учить STL(что такое STL знаю пока не много) - пригодится »
мне кажется, что поставить два двоеточия, не такая сложная задача и вы сможете написать list<int>::, даже если сейчас не будете писать std::

Отправлено: 18:02, 03-02-2012 | #7


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


virus8, именовать переменные надо так, чтобы через месяц, открыв старый исходник, ты сразу понял, что это за переменные и что они делают. Однобуквенные и непонятные переменные исключаются(за исключением мелкого цикла вроде for(int i=0;i<10;i++)). В остальном как душе угодно.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:56, 06-02-2012 | #8


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Оке! спс я только над этим начал задумываться !!

Отправлено: 09:47, 06-02-2012 | #9


Аватара для virus8

Пользователь


Сообщения: 63
Благодарности: 4

Профиль | Отправить PM | Цитировать


Думаю может кому интересно будет!!
Решил я эту задачку таким вот образом, если кому интересно будет - вот код:

Код: Выделить весь код
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
	srand( (unsigned) time(0) );
	setlocale(LC_ALL, "Russian");

	int var_С, a, b, c, d, z, y, x, v; // генерация случайного числа
	var_С = rand() %10000;
	cout << var_С;
	cout << "\t\tИгра числа\n\n";
	cout << "В этой игре нужно угадать 4х значное число \n";
	cout << "генерируем число\n";
	cout << "Введите ваш выбор\n";
	
	int varС = var_С;
	a = varС/1000; // разбиваем var на числа
	varС = varС%1000;
	b = varС/100;
	varС = varС%100;
	c = varС/10;
	varС = varС%10;
	d = varС;
	
	int var_U; 
	
	
	int i = 0;
	do
	{
		cin >> var_U;

	    int varU = var_U;
	    x = varU/1000; // разбиваем var на числа
	    varU = varU%1000;
	    y = varU/100;
	    varU = varU%100;
	    z = varU/10;
	    varU = varU%10;
	    v = varU;
		
		if(x == a)
			cout <<"Угадали первое число = " << a << "\n";
				
		if(y == b)
			cout << "Угадали второе число = " << b << "\n";
		
        if(z == c)
			cout << "Угадали третье число = " << c << "\n";
		
		if(v == d)
			cout << "Угадали четвертое число = " << d << "\n";
		else
			cout << "нет совпадений\n";
		i++;
		}while( (x+y+z+v) != (a+b+c+d));
	cout << "Вы справились\n";
	
	cin.get();
	cin.get();

	return 0;
}

Отправлено: 21:46, 10-02-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] оптимизация программы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - оптимизация alik777 Microsoft Windows 2000/XP 1 24-07-2010 22:58
Службы - Оптимизация Malfatto Microsoft Windows Vista 2 06-09-2008 15:08
Оптимизация крнфигурации zigankov Выбор отдельных компонентов компьютера и конфигурации в целом 11 29-03-2008 21:57
Оптимизация файлов Slim-UB Автоматическая установка Windows 2000/XP/2003 7 13-06-2006 15:33
Оптимизация pashka-88 Хочу все знать 2 30-10-2005 20:49




 
Переход