Форум программистов, компьютерный форум CyberForum.ru

помогите понять (генератор чисел) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задачка по С++ http://www.cyberforum.ru/cpp-beginners/thread400734.html
Программа вычисления стоимости покупки с учетом скидки.Скидка предоставляется, если сумма>1000(5%), более 5000(?%), а так же дополнит скидка 3%- в выходные дни. Информация о том является ли день выходным, программа должна получать на основе анализа текущей даты... c = StrToFloat(Edit1->Text); if (c > 1000) c = c * 5/100; else if (c>5000) c = c * 7/100; Label2->Caption="скидка...
C++ Нужна упращенная модель разделения текста по указательным символам Доброго времени суток. Нужна упращенная модель разделения текста (массива) по указательным символам, допустим у нас имеется комманда #run%text.txt - где # указатель что следующий символ что будет командой, и % конец команды начало параметра команды. можно это сделать с помощью цикла и обработчика bool Cycle = true; int x; while(Cycle) { if(buff=='#') Так приблизительно... но есть... http://www.cyberforum.ru/cpp-beginners/thread400732.html
Сформировать массив из элементов исходного массива, располагающихся по возрастанию C++
например из массива (3 2 4 5 1 3 7 3 4 9 2) должен получиться массив (3 4 5 7 9) т.е. из возрастающих элементов. не могу понять как делать=( Добавлено через 10 минут если можно то на языке начинающих))) за ранее спс:)
С++ структура даных очередь C++
привет всем, помогите плиз з кодом С++ , необходимо написать программу на основе абстрактного типа даных очереди. В магазине стоит очередь из m покупателей. Время обслуживания покупателя из очереди - это случайное целое число в диапазоне от 1 до t1. При добавлении нового покупателя в очередь - это случайное целое число в диапазоне от 1 до t2. Промоделировать состояние очереди: а) вывести...
C++ Модули/двоичная система счисления http://www.cyberforum.ru/cpp-beginners/thread400705.html
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в двоичной системе счисления: сложения; вычитания; умножения; деления; перевода из двоичной системы счисления в десятичную; функций, реализующих операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше).
C++ написать 2 программы на С++ Описать рекурсивную функцию Root(X, K, N) вещественного типа, находящую приближенное значение корня K-ой степени из числа X по формуле: Y(0)=1 y(n+1)=y(n)-(y(n)-x/(y(n))^k-1)/k Параметры функции – X>0 – вещественное число; K>1, N>0 – целые числа. Найти приближенное значение корня K-ой степени из числа X с использованием цикла. подробнее

Показать сообщение отдельно
Bers
Заблокирован
07.12.2011, 01:00
Nuckelavee, проверил.
Ты не правильно проверяешь условия выиграша:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int raschet(int &rUN, int &rmin, int &rmax)
{ * 
* * * * * * * cout<<"Enter a number: ";
* * * * * * if (rUN < CompNumber)
* * * * * * {
* * * * * * * * rmin = ++rUN;
* * * * * * * * //rmax = rmax;
 
               //В этой точке программы игрок уже
              // может иметь правильный ответ на загадку
* * * * * * * * menshe(rUN, rmin, rmax);
* * * * * * }
* * * * * * if (rUN > CompNumber)
* * * * * * {
* * * * * * * * *//rmin = rmin;
* * * * * * * * *rmax = --rUN;
 
               //В этой точке программы игрок уже
              // может иметь правильный ответ на загадку
 
* * * * * * * * bolshe(rUN, rmin, rmax);
* * * * * * }
* * * * * * if (rUN == CompNumber)
* * * * * * {
* * * * * * * * gotcha(rUN);
* * * * * * }
Добавлено через 3 минуты
Я немножко подредактировал твой код.
Теперь он корректно проверяет условие успешного отгадывания числа))


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <stdio.h>
#include <stdlib.h>             //для exit(1) || doid exit(int exitstatus) 1 - выход
#include <conio.h>              //для getch()
#include <ctime>                //библиотека с генератором чисел
#include <windows.h>            //для Sleep()
using namespace std;
 
int CompNumber;
int rnd(int rmin,int rmax)   {    return (rand()%(rmax - rmin + 1) + rmin);      }
void gotcha(int &rUN)        { cout<<"Загадка: Ты угадал!!!\n"<<endl;  exit(1); }
void CheckVictory(int rUN) {  if (rUN == CompNumber)  {   gotcha(rUN);  }       }
 
void GenerateNewNumber(int &rUN, int &rmin, int &rmax);
void CheckVictory(int rUN);
 
void menshe(int &UN, int &min, int &max);
void bolshe(int &UN, int &min, int &max);
int raschet(int &UN, int &min, int &max);
int main()
{
    srand( time(NULL)|clock());         //генератор случайных чисел!
    console<<"привет";
    
    int min = 0; int max = 100; int UN;
    CompNumber= rnd(min,max);  
    std::cout<< "Загадка: Я загадала число..."<< CompNumber<<endl;
    GenerateNewNumber(UN, min, max);
    return 0;
}
 
void menshe(int &rUN, int &rmin, int &rmax)
{
    cout<<"Загадка: твоё число слишком маленькое!\n"<<endl;
    GenerateNewNumber(rUN, rmin, rmax);
}
void bolshe(int &rUN, int &rmin, int &rmax)
{
    cout<<"Загадка: твоё число слишком большое!\n"<<endl;
    GenerateNewNumber(rUN, rmin, rmax);
}
 
int raschet(int &rUN, int &rmin, int &rmax)
{   
    if (rUN < CompNumber)  { rmin = ++rUN;  menshe(rUN, rmin, rmax); }
    if (rUN > CompNumber)  { rmax = --rUN;  bolshe(rUN, rmin, rmax);  }
    CheckVictory(rUN);
    return rUN;
}
 
void GenerateNewNumber(int &rUN, int &rmin, int &rmax)
{
    rUN =  rnd(rmin, rmax);  
    std::cout << "Эрудит: Ты загадала число...: "<<rUN<<std::endl;
    CheckVictory(rUN);
 
    raschet(rUN, rmin, rmax);
}
Добавлено через 5 минут
да и ещё. Твой код написан таким образом... у тебя функция вызывает другую функцию, и эта другая - опять первую же функцию.

То есть, у тебя рекурсия через посредника.
А это значит, что если задать слишком большой диапазон значений, то стек может и не выдержать. И программа покрошится в рантайме.

Добавлено через 39 минут
Да, вот ещё на заметку:

1. У меня программулька свалилась от переполнения стека, когда количество попыток отгадать число превысило 1500 с чем то раз.

2. Если загадать число, которое весит больше 16 бит, то твой алгоритм отгадывания станет крайне не эффективным. Это связанно с тем, что сам по себе рандом выдает числа из диапазона signed short

Поэтому, сужение диапазона поиска чисел будит не больше чем 32 767
Таким образом, если загадать 1000000, то компьютерный игрок будит больше заниматься соплежуйством, нежели реальным отгадыванием)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru