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

Не получается сделать рандомный вывод ответа в классе "Предсказатель" - C++

Восстановить пароль Регистрация
 
Bald
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 7
29.05.2010, 20:32     Не получается сделать рандомный вывод ответа в классе "Предсказатель" #1
Нужно разработать класс предсказатель. Обязательные методы :
- Заполнение перечня ответов (да, нет, не знаю и т.д.)
- Ответ (выдает случайным образом) словом.
- Ответ выдает случайным образом буквами.

Представить тестовое приложение демонстрирующее работу с классом. В тестовом приложении должны объекты класса создаваться как статически, так и динамически. Предусмотреть конструктор и конструктор копирования.
Вообщем проблемма такая не могу сделать рандомный вывод ответа. Не знаю какую переменую и где прописать что ответ выдавался рандомно.
Также не понял пока как создать конструктор и деструктор.
Вот что у меня получилось:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <conio.h>
//#include <stdlib>
#include <string>
 
using namespace std;
 
class Pred{
public:
   void VvodPol (string);
   void VvodOtr (string);
   void VvodNet (string);
   void Vivod ();
private:
   string polozh;
   string otritz;
   string neznay;
};
 
void Pred::VvodPol (string s1)
{
   polozh=s1;
}
void Pred::VvodOtr (string s2)
{
   otritz=s2;
}
void Pred::VvodNet (string s3)
{
   neznay=s3;
}
void Pred::Vivod ()
{
cout << "Otvet " << polozh << endl; 
}
 
int MainMenu();
 
 
int main ()
{
Pred vanga;
string s1,s2,s3;
 
bool run = true;
while(run)
switch (MainMenu())
{
                case 0: run = false; break;
                case 1:
                {
                       // clrscr();
                        cout << "Vvedite polozhiteln otvet: ";
                        cin >> s1;
                        vanga.VvodPol(s1);
                        cout << "Vvedite otricateln otvet: ";
                        cin >> s2;
                        vanga.VvodOtr(s2);
                        cout << "Vvedite netraln otvet:  ";
                        cin >> s3;
                        vanga.VvodNet(s3);
                }
                break;
                case 2:
                    { 
                    string s4;
                    cout << "Skoncetriruetes i obdumayte vopros" << endl;
                    cout << "Teper vvedite voros i nazhmite enter" << endl;
                    cin >> s4;
                    vanga.Vivod();
                    }
break;
 
 
        }
return 0;
}
int MainMenu()
{      // clrscr();
    cout << "=====[ Main Menu ]=====" << endl;
    cout << " [1] Dobavit otvetu" << endl;
    cout << " [2] Zadat vopros" << endl;
    cout << " [0] EXIT" << endl;
    cout << "=======================" << endl;
    int em;
    cin >> em;
    return em;
}
Кто поможет заранее буду очень благодарен.

Добавлено через 8 минут
Также же есть еще один код, там вроде и рандом есть, и коструктор и деструктор. Компилируется без ошибок, но в отладке при добавлении ответов, вылетает с ошибкой cx0000000 в общем что то с указателем, а что понять не могу.
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <CONIO.H>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define randomize() srand((unsigned)time(NULL));
#define random(p) ((int)(rand()*p/RAND_MAX))
using namespace std;
 
class CPred {
int len;
char *data[50];
int b;
 
public:
 
void default_data(void){
  this->len = 3;
  /*this->data[0] = "Da";
  this->data[1] = "Net";
  this->data[2] = "Neznay";*/
}
 
CPred(){
 char c=' ';
 this->len  = -1;
 cout<<"Hotite izmenit otvet? (y|n) ";
 cin>>c;
 if(c == 'y' || c =='Y'){
  cout<<"Skolko otvetov hotite vnesti(<50)?\n";
  while(this->len <=0 || this->len >=50){
   cin>>this->len;
   if(this->len <=0 || this->len >=50)
    cout<<"\nNevernoe kolichestvo!!!\nVvedite novoe=> ";
  }
  this->add();
 } else {
   this->default_data();
 }
 cout<<"\nWrote answer by a Latter? (y|n): ";
 cin>>c;
 if(c == 'y' || c =='Y')
  this->b=1;
 else
  this->b=0;
}
 
void get(void){
 int i = random(this->len);
 char c = (char)(97+i);
 if(this->b==0)
 cout<<this->data[i];
 else
  cout<<c<<" ("<<this->data[i]<<")";
}
void add(void){
 cout<<"\nVvedite otvetu:\n";
 int i;
 i = 0;
 while(i< this->len){
  cout<<"Vvedite "<<i+1<<" otvet=> ";
  cin>>this->data[i];
  i++;
 }
}
 
CPred(const CPred &Ob){
  this->len = Ob.len;
  for(int i=0; i<this->len; i++)
   this->data[i] = Ob.data[i];
  this->b = Ob.b;
}
};
 
 
void main(void){
char c;
// clrscr();
  cout<<"Static:\n";
  randomize();
  CPred P;       //CREATE
// clrscr();
  cout<<"Vvedite vopros:\n";
  cin>>c;
  cout<<"Otvet na vash vopros: ";
  P.get();
  cout<<"\n";
  cin>>c;
 
// clrscr();
  cout<<"Dynamic:\n";
  CPred *Q = new CPred();//CREATE
// clrscr();
  cout<<"Vvedite vopros:\n";
  cin>>c;
  cout<<"Otvet na vash vopros: ";
  Q->get();
  cout<<"\n";
  cin>>c;
 
// clrscr();
  cout<<"Copy from the first method:\n";
  CPred *O = new CPred(*Q);//CREATE
// clrscr();
  cout<<"Vvedite vopros:\n";
  cin>>c;
  delete Q;
  cout<<"Otvet na vash vopros: ";
  O->get();
  cout<<"\n";
  cin>>c;
  getch();
}
Добавлено через 5 часов 13 минут
Как из этих двух кодов сделать 1 хорошо работающий?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2010, 20:32     Не получается сделать рандомный вывод ответа в классе "Предсказатель"
Посмотрите здесь:

C++ Перегрузка операторов в классе "Последовательность целых чисел"
C++ Невозможно обратиться к private член, объявленному в классе "Complex"
Имеется строка "AAABBCCAA", нужно вывести на экран "3A2B2C2A", и так же сделать обратное действие C++
C++ Не получается переопределить операторы "+" и "="
не получается передать массив из "void Vvod" в "void CalculatingEstimates" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.05.2010, 21:09     Не получается сделать рандомный вывод ответа в классе "Предсказатель" #2
Bald, вот так не устроит?
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
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <windows.h>
 
class Gadalka {
    std::vector<std::string> _answ;
public:
    Gadalka() {}
    ~Gadalka() {}
    void add(const std::string & s) { _answ.push_back(s); }
    std::string get() const {
        if ( _answ.empty() )
            return "";
        return _answ[rand() % _answ.size()];
    }
};
 
int main(){
    std::string buf;
    Gadalka g;
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    srand(time(NULL));
    
    std::cout << "Введите несколько ответов. Пустая строка - окончание ввода." << std::endl;
    while ( true ){
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        g.add(buf);
    }
    std::cout << std::endl;
    std::cout << "Вопросы (пустая строка - выход):" << std::endl;
    while ( true ){
        std::cout << "Вопрос: ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        std::cout << "Ответ: " << g.get() << std::endl;
    }
    
    return 0;
}
Не получается сделать рандомный вывод ответа в классе "Предсказатель"
Bald
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 7
30.05.2010, 07:45  [ТС]     Не получается сделать рандомный вывод ответа в классе "Предсказатель" #3
Cпасибо вроде то что надо. В понедельник узнаю
Че то после компиляции вместо русских букв, каракули какие то
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.05.2010, 09:57     Не получается сделать рандомный вывод ответа в классе "Предсказатель" #4
Цитата Сообщение от Bald Посмотреть сообщение
Че то после компиляции вместо русских букв, каракули какие то
Поменяй в свойствах консоли шрифт на Luicida Console.
Bald
0 / 0 / 0
Регистрация: 10.02.2010
Сообщений: 7
01.06.2010, 10:13  [ТС]     Не получается сделать рандомный вывод ответа в классе "Предсказатель" #5
easybudda а констуктора копирования у тебя нету? Для этой же проги

Добавлено через 17 минут
Все уже не надо.

Спасибо всем за помощь!
Yandex
Объявления
01.06.2010, 10:13     Не получается сделать рандомный вывод ответа в классе "Предсказатель"
Ответ Создать тему
Опции темы

Текущее время: 10:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru