Показать полную графическую версию : [решено] оптимизация программы
вот сама программа( угадай число))) )
#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;
}
Она рабочая, интересно просто как её можно оптимизировать? Так чтоб цифры нужно было не через пробел вводить??
П.С. - сильно не горит, просто нужно для себя(разобраться)!!!
для начала напишите после инклудов
using namespace std;
и можете писать просто cin и cout
Так чтоб цифры нужно было не через пробел вводить?? »
непонятно
Так чтоб цифры нужно было не через пробел вводить?? »
непонятно »У него перегружен cin, соответственно приходится вводить: 2 3 4 5 и подтверждать ввод Enter.
std::cin >> x >> y >> z >> w; »Нужно так, после каждого ввода числа подтверждать ввод Enter.
cin >> x;
cin >> y;
cin >> z;
cin >> w;
Я вот только это условие суммирования не пойму никак. :dont-know
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;
}
//---------------------------------------------------------------------------
Я вот только это условие суммирования не пойму никак.
Цитата virus8:
while( (a + b + c + d) != (x + y + z + w)); » »Всё, въехал, сумма загаданых и сумма вариантов не совпадают. Значит не угадано число. :)
Ой извините условие не расписал!!! Получается так есть число 4х значное, нужно угадать 4 цифры, но когда ты угадываешь 1 цифру программка те пишет угадана 2 или 3 цифра. Вопрос у меня для того чтоб разобраться можно ли как нибудь сделать чтоб ввел 4х значное число - без пробела (cin не дает этого сделать ) может почитать про другие операторы вывода??? если чего хотябы намекните )))
:) Исходник привёл также каким он был во время написания.
Угадай-ка -------
веселая программка - многовато - маловато))
за исходник спасибо - почитал))
У меня сейчас этот период обучения проходит - тока я дома сам пыхчу и спросить кроме букваря некого!
для начала напишите после инклудов
Код:
using namespace std;
и можете писать просто cin и cout - друг посоветовал сразу себя к этому не приучать )))
Delirium
03-02-2012, 11:47
друг посоветовал сразу себя к этому не приучать »
Это почему же? Зачем писать полные именования.
Я бы посмотрел на твоего друга при создании приложения на C#. Как бы он постоянно писал нечто вроде System.Windows.Forms.MessageBox вместо простого usage в начале и в коде просто MessageBox.
Сокращенные имена это плюс, а не минус программирования.
))) О_о приятно пообщаться с программером настояшим (если чего не поймите за издевку)! Я просто учу с++ мне так захотелось......
Друг говорит, что когда буду учить STL(что такое STL знаю пока не много) - пригодится --- если не прав поправьте (хотелось бы услышать побольше мнений) - просто говорит один человек - опыта почеркнуть больше не у кого !!!!
когда буду учить STL(что такое STL знаю пока не много) - пригодится »
мне кажется, что поставить два двоеточия, не такая сложная задача и вы сможете написать list<int>::, даже если сейчас не будете писать std::
Delirium
06-02-2012, 02:56
virus8, именовать переменные надо так, чтобы через месяц, открыв старый исходник, ты сразу понял, что это за переменные и что они делают. Однобуквенные и непонятные переменные исключаются(за исключением мелкого цикла вроде for(int i=0;i<10;i++)). В остальном как душе угодно.
Оке! спс я только над этим начал задумываться !!
Думаю может кому интересно будет!!
Решил я эту задачку таким вот образом, если кому интересно будет - вот код:
#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;
}
virus8, 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; »
int varС = var_С;
a = varС/1000; // разбиваем var на числа
varС = varС%1000;
b = varС/100;
varС = varС%100;
c = varС/10;
varС = varС%10;
d = varС; »Много лишнего, посмотрите тему - Разбить число с перестановкой разрядов числа по убыванию (http://forum.oszone.net/thread-227275.html) на предмет лучшего разбивания числа на разряды.
virus8, правильная формулировка задачи - уже половина решения.
Вы путаете понятия число и цифра.
Я бы в этой задаче работал со строками, а не числами.
И проверка на правильность решения в вашем случае должна выглядеть так:
while( (a * 1000 + b * 100 + c * 10 + d) != (x *1000 + y * 100 + z * 10 + w))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.