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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AkaDo.XD
3 / 3 / 0
Регистрация: 10.03.2010
Сообщений: 52
#1

Организация меню в консоли - C++

17.10.2012, 16:03. Просмотров 847. Ответов 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
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
// lab10_var8.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include<iostream>   //Progr. with menu and using ykazatel na massiv funkcii
#include<conio.h>
#include<math.h>
#include<stdlib.h>
 
 
static int menu()
{char ch;
do {
       printf("\n");
       printf(" 1. Metod deleniya otrezka 50-50\n");
       printf(" 2. Metod Xord\n");
       printf(" 3. Metod Nutona\n");
       printf(" 4. Exit\n");
       printf(" You must choose...\n");
       ch=getche();printf("\n");
       }
    while(!strchr("1234", ch));
return(ch-49);
}
static float func(float _x) {
    return (0.5*_x-log(fabs(_x)));
}
float dif(float _x){
return (0.5- 1/fabs(_x));
}
 
static float search_B(float _a, float _h)
{
    //float _h;
    float _b,_x;
    bool btrue = true;
    while (true == btrue)   { 
                    _x=_a+_h;
                    func(_a); func(_x); 
                        if ((func(_a) * func(_x) < 0)){
                            _b=_x; btrue = false;       }
                                            }
    return _b;
}
static void f1(float _a, float _b,float _e)
{    printf("You have chosen 1st method\n");
    unsigned int _n50_50=0;
    float _c=0.0;
    while(fabs(_b - _a) > _e) { 
        _n50_50++;
     func(_a);  func(_b);   _c = (_a + _b) / 2;      func(_c);
             if(func(_c) == 0)  {
                      _a = _c;  _b = _c;     }
    if(func(_a) * func(_c) >= 0) _a = _c;
             if(func(_c) * func(_b) >= 0) _b = _c;
                                         }
 printf("x = %f\n",_c);
 printf("kol-vo iteracii = %d\n",_n50_50);
 printf("\n\n");
}
static void f2 (float _a,float _b,float _e)
{ printf("You have chosen 2nd method\n");
    float _x1=0;
    
    unsigned int n_xord=0;
    while(fabs(_b - _a) > _e)
 {  n_xord++;
     func(_a);
    func(_b);
    _x1 = _b - (    (_b*func(_b)-_a*func(_b))   /   (func(_b) - func(_a))   ) ;
        if (func(_x1)==0)   _a=_b= _x1;
    if (func(_x1)*func(_a)>0)   _a=_x1;
    if (func(_x1)*func(_b)>0)   _b=_x1;
}
 printf("x = %f\n", _x1);
  printf("kol-vo iteracii = %d\n",n_xord);
 printf("\n\n");
}
 
static void f3(float _a,float _b,float _e)
{float _xk,_xk_1;
 printf("You have chosen 3d method\n");
      _xk_1=_b;
      unsigned int n_nuton=0;
      do {n_nuton++;
          _xk=_xk_1;
        _xk_1=_xk-func(_xk_1)/dif(_xk);
         }
     while(fabs(_xk_1-_xk)<_e);
     printf("reshenie x=%f\n",_xk_1);
     printf("iteracii = %f\n",n_nuton);
      }
 
int _tmain(int argc, _TCHAR* argv[])
{
    double a=-0.9,  e=0.0001;
    printf("Enter step...\n");
    float h = scanf("%f",&h);
    float B= search_B(a,h);
    int n; 
    do { n=menu();
            // тут застрял            
            }
      while(1);
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2012, 16:03     Организация меню в консоли
Посмотрите здесь:

Организация меню и создание функции C++
C++ Организация Меню в С++
C++ Меню в консоли
C++ Оригинальное меню в консоли
Работа с меню в консоли C++
Меню в консоли C++
Организация меню в программе C++
C++ Меню в консоли
C++ Меню на консоли
C++ Организация меню
C++ Организация кода, вывод строки в консоли, использование extern
C++ Организация заполнения вектора с консоли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
17.10.2012, 16:23     Организация меню в консоли #2
В начале создаёшь массив указателей на функции. Затем заполняешь его. Запрашиваешь ввод № пункта меню, который также будет являться индексом функции в массиве указателей на функции, ну и вызываешь нужную функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typedef void(*Func)(float, float, float);
Func funcArr[N];
 
int main()
{
    funcArr[0] = func1;
    funcArr[1] = func2;
    // etc.
    int n;
    while (n != exit)
    {
        cin >> n;
        funcArr[n](// params);
    }
}
Ну и конечно там проверки всякие, чтобы за пределы массива не вылезти, и прочее.
AkaDo.XD
3 / 3 / 0
Регистрация: 10.03.2010
Сообщений: 52
17.10.2012, 16:45  [ТС]     Организация меню в консоли #3
можно это описать применительно к моему коду?
не понимаю как это сделать
John Prick
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
17.10.2012, 17:12     Организация меню в консоли #4
printf(" 1. Metod deleniya otrezka 50-50\n");
printf(" 2. Metod Xord\n");
printf(" 3. Metod Nutona\n");
Какая функция за какой метод отвечает в вашем коде?
AkaDo.XD
3 / 3 / 0
Регистрация: 10.03.2010
Сообщений: 52
17.10.2012, 21:45  [ТС]     Организация меню в консоли #5
f1 - 1 метод
f2 - 2 метод
f3 - 3 метод
для выхода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int menu()
{char ch;
do {
       printf("\n");
       printf(" 1. Metod deleniya otrezka 50-50\n");
       printf(" 2. Metod Xord\n");
       printf(" 3. Metod Nutona\n");
       printf(" 4. Exit\n");
       printf(" You must choose...\n");
       ch=getche();printf("\n");
       }
    while(!strchr("1234", ch));
    if(ch=='4') exit(0);
return(ch-49);
вот так написал

Добавлено через 4 часа 29 минут
нужно завтра к 4 часам дня(
AkaDo.XD
3 / 3 / 0
Регистрация: 10.03.2010
Сообщений: 52
19.10.2012, 19:44  [ТС]     Организация меню в консоли #6
сам разобрался
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
#include "stdafx.h"
#include<iostream>   //Progr. with menu and using ykazatel na massiv funkcii
#include<conio.h>
#include<math.h>
#include<stdlib.h>
 
 
 
 
 int menu()
{char ch;
do {
       printf("\n");
       printf(" 1. Metod deleniya otrezka 50-50\n");
       printf(" 2. Metod Xord\n");
       printf(" 3. Metod Nutona\n");
       printf(" 4. Exit\n");
       printf(" You must choose...\n");
       ch=getche();printf("\n");
       }
    while(!strchr("1234", ch));
    if(ch=='4') exit(0);
return(ch-49);
}
 float func(float _x) {
 
    return (0.5*_x-log(fabs(_x)));
}
float dif(float _x){
return (0.5- 1/(_x));
}
 void f1(float _a, float _b,float _e)
{    printf("You have chosen 1st method\n");
    unsigned int _n50_50=0;
    float _c=0.0;
    while(fabs(_b - _a) > _e) { 
        _n50_50++;
     func(_a);  func(_b);   _c = (_a + _b) / 2;      func(_c);
             if(func(_c) == 0)  {
                      _a = _c;  _b = _c;     }
    if(func(_a) * func(_c) >= 0) _a = _c;
             if(func(_c) * func(_b) >= 0) _b = _c;
                                         }
 printf("x = %f\n",_c);
 printf("kol-vo iteracii = %d\n",_n50_50);
 printf("\n\n");
}
 void f2 (float _a,float _b,float _e)
{ printf("You have chosen 2nd method\n");
    float _x1=0;
    
    unsigned int n_xord=0;
    while(fabs(_b - _a) > _e)
 {  n_xord++;
     func(_a);
    func(_b);
    _x1 = _b - (    (_b*func(_b)-_a*func(_b))   /   (func(_b) - func(_a))   ) ;
        if (func(_x1)==0)   _a=_b= _x1;
    if (func(_x1)*func(_a)>0)   _a=_x1;
    if (func(_x1)*func(_b)>0)   _b=_x1;
}
 printf("x = %f\n", _x1);
  printf("kol-vo iteracii = %d\n",n_xord);
 printf("\n\n");
}
 
 void f3(float _a,float _b,float _e)
{float _xk,_xk_1;
 printf("You have chosen 3d method\n");
      _xk_1=_b;
      unsigned int n_nuton=0;
      do {n_nuton++;
          _xk=_xk_1;
        _xk_1=_xk-func(_xk)/dif(_xk);
         }
     while(fabs(_xk_1-_xk)>_e);
     printf("reshenie x=%f\n",_xk_1);
     printf("iteracii = %d\n",n_nuton);
      }
 float search_B(float _a, float _h)
{
    //float _h;
    float _b,_x;
    bool btrue = true;
    while (true == btrue)   { 
                    _x=_a+_h;
                    func(_a); func(_x); 
                        if ((func(_a) * func(_x) < 0)){
                            _b=_x; btrue = false;       }
                                            }
    return _b;
}
 
void (*p2arr[])(float,float,float) = {f1,f2,f3};
int _tmain(int argc, _TCHAR* argv[])
{
    double a=-0.9,  e=0.0001;
    printf("Enter step...\n");
    float h=0; 
        scanf("%f",&h);
    float B= search_B(a,h);
    int n1;
    n1=0;
    while (n1 != 4)
    {
        n1=menu();
        p2arr[n1](a,B,e);
    }
    
    return 0;
}
Yandex
Объявления
19.10.2012, 19:44     Организация меню в консоли
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru