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

Тест в С++ - C++

Восстановить пароль Регистрация
 
LaFlame
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 18
05.04.2013, 13:23     Тест в С++ #1
Как сделать что бы выдавал результат по общим ответам..ну 100-90% правильно то оценка 5 и т.д. ??? проблемный кусок ниже выделил

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
#include "iostream"
#include "time.h"
#include "iomanip"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
  setlocale(LC_ALL,"");
cout<<"\t\tПРОВЕРКА"<<setw(9)<<"БАЗОВЫХ"<<setw(8)<<"ЗНАНИЙ"<<setw(12)<<"УЧЕНИКА !"<<endl;
    cout<<"\n\n";
 
cout<<"Если тест сделан на 100-90%"<<setw(10)<<" оценка 5"<<endl;
cout<<"Если тест сделан на  89-70%"<<setw(10)<<" оценка 4"<<endl;
cout<<"Если тест сделан на  69-30%"<<setw(10)<<" оценка 3"<<endl;
cout<<"Если тест сделан менее  30%"<<setw(10)<<" оценка 2"<<endl;
cout<<"\n\n";
cout<<"\t\tПриступим к тесту!"<<endl;
cout<<"\n\n"<<endl;
 
   int var1, var2, answer, label= 0, ok= 0;
   bool variant;   
   srand(time(NULL));
   while (label !=5)
   {
      var1 = rand() % 9;
      var2 = rand() % 9;
      
      cout << "Сколько будет " << var1 << " * " << var2 << "?: " ;
      cin >> answer;
      
      if (var1 * var2 == answer)
      { cout << "Очень хорошо! Ты гений!!!" << endl;
      label++;
      ok++;
      }
      else
      {
         do
         {
             label++;
            cout << "Нет. Сиди думай!" << endl;
            cout << "Сколько будет " << var1 << " * " << var2 << "?:" ;
            cin >> answer;
         }
         while (var1 * var2 != answer);
      }
      if (label == 5)
      {                                               //походу вот тут что то напутал...
          if((double)ok/label <= 100 && ok/label >= 90)
          {
              cout<<"\n\n\tВаша оценка 5 ! ! !"<<endl;
              break;
          }
          else  if ((double)ok/label <= 89 && ok/label >= 80)
            {
              cout<<"\n\n\tВаша оценка 4 ! ! !"<<endl;
              break;
          }
          else if((double)ok/label <= 79 && ok/label >= 70)
          {
              cout<<"\n\n\tВаша оценка 3 ! ! !"<<endl;
              break;
          }       
           else if((double)ok/label <= 69 && ok/label >= 60)
               {
              cout<<"\n\n\tВаша оценка 2 ! ! !"<<endl;
              break;
          }                                                                    //...
 
      cout << "Продолжим или ты устал? (1 - далее, 0 - устал): ";
      cin>>variant;
      if (variant == 1)
      {
          label = 0;
          ok = 0;
      }
     }
   cout<<endl;
   }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2013, 13:23     Тест в С++
Посмотрите здесь:

C++ Тест по С++
C++ C++ тест
C++ Тест!
Тест на C++ C++
Тест по С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
05.04.2013, 13:42     Тест в С++ #2
Цитата Сообщение от LaFlame Посмотреть сообщение
походу вот тут что то напутал...
Ага.
Изначально у нас: ok==0, label==0.
Ответили один раз: ok==1, label==1.
Проверяем: ok/label==1/1==1. Единица меньше ста? Да. Единица больше девяносто? Нет. Вот и все.

Количество правильных ответов (ok) всегда будет меньше или равно количества попыток (label). То есть соотношение ok/label всегда будет меньше или равно единице: 1/1, 1/2, 6/666...
Попробуйте вот так: ok/label * 100

Далее. Скорее всего в приведении типов косяк:
C++
1
if((double)ok/label <= 100 && ok/label >= 90)
Не знаю на сколько это верно. Лучше наверняка:
C++
1
if((double)(ok/label) <= 100 && (double)(ok/label) >= 90)
И третье.
Вот этот кусок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      if (var1 * var2 == answer)
      { cout << "Очень хорошо! Ты гений!!!" << endl;
      label++;
      ok++;
      }
      else
      {
         do
         {
             label++;
            cout << "Нет. Сиди думай!" << endl;
            cout << "Сколько будет " << var1 << " * " << var2 << "?:" ;
            cin >> answer;
         }
         while (var1 * var2 != answer);
      }

можно переписать вот так:
C++
1
2
3
4
5
6
7
8
9
         while (var1 * var2 != answer);
         {
            label++;
            cout << "Нет. Сиди думай!" << endl;
            cout << "Сколько будет " << var1 << " * " << var2 << "?:" ;
            cin >> answer;
         }
         cout << "Очень хорошо! Ты гений!!!" << endl;
         ok++;
LaFlame
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 18
05.04.2013, 14:34  [ТС]     Тест в С++ #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Попробуйте вот так: ok/label * 100
вот так ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 if((double)(ok/label) * 100 > 90)
          {
              cout<<"\n\n\tВаша оценка 5 ! ! !"<<endl;
              break;
          }
          else  if ((double)(ok/label) * 100 < 80)
            {
              cout<<"\n\n\tВаша оценка 4 ! ! !"<<endl;
              break;
          }
          else if((double)(ok/label) * 100 < 60)
          {
              cout<<"\n\n\tВаша оценка 3 ! ! !"<<endl;
              break;
          }       
           else if((double)(ok/label) * 100 < 30)
               {
              cout<<"\n\n\tВаша оценка 2 ! ! !"<<endl;
              break;
          }
только вот проблема далее,если вводим без ошибки то пишет оценку 5,если 2-3 то 4,а если делаем больше то вообще не выводит...задаёт примеры и задаёт...а и вот ещё,когда пишет ваша оценка 5,то почему то пропадает продолжить или выйти? сразу на выход идёт
pi_X_el
Заблокирован
05.04.2013, 17:53     Тест в С++ #4
Знаки поменял:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if((double)(ok/label) * 100 > 90)
{
  cout<<"\n\n\tВаша оценка 5 ! ! !"<<endl;
  break;
}
else  if ((double)(ok/label) * 100 > 80)
{
  cout<<"\n\n\tВаша оценка 4 ! ! !"<<endl;
  break;
}
else if((double)(ok/label) * 100 > 60)
{
  cout<<"\n\n\tВаша оценка 3 ! ! !"<<endl;
  break;
}       
else if((double)(ok/label) * 100 > 30)
{
  cout<<"\n\n\tВаша оценка 2 ! ! !"<<endl;
  break;
}
Добавлено через 2 минуты
if((double)(ok)/label) * 100 > 90)
LaFlame
0 / 0 / 0
Регистрация: 21.12.2012
Сообщений: 18
05.04.2013, 18:18  [ТС]     Тест в С++ #5
5 и 4 оценку выводит,а на 3 и 2 просто пропускает вывод оценки и делает запрос продолжить или выход..
Цитата Сообщение от pi_X_el Посмотреть сообщение
if((double)(ok)/label) * 100 > 90)
ругается если (ok) в скобке
pi_X_el
Заблокирован
05.04.2013, 18:24     Тест в С++ #6
Цитата Сообщение от LaFlame Посмотреть сообщение
ругается если (ok) в скобке
тогда вот так:
C++
1
if((double(ok)/label) * 100 > 90)
И остальные if-ы тоже надо заменить чтобы правильно считал

Добавлено через 1 минуту
без лишних скобок
C++
1
if(double(ok)/label * 100 > 90)
Yandex
Объявления
05.04.2013, 18:24     Тест в С++
Ответ Создать тему
Опции темы

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