Информация: Уважаемые посетители! В течение нескольких месяцев на форуме существовала проблема с регистрацией новых пользователей, о которой администрации стало известно недавно. Если вы ранее пытались зарегистрироваться на форуме, но не получили на ваш e-mail письмо с ссылкой для подтверждения регистрации, просим вас зарегистрироваться повторно. Приносим извинения за доставленные неудобства. Если вы все еще испытываете проблемы с регистрацией на форуме, обратитесь за помощью на e-mail: mr.angelo@railroadsim.net

Вопросы по языкам C,C#,С++

Всё о компьютерном железе и программах

Re: Вопросы по языкам C,C#,С++

Сообщение sciff » 24.11.2011, 07:23

Mita писал(а):int a[5][7]; - значит что у вас матрица элементов типа int с 5 столбцами и 7 строками.

Mita, вы когда представляете себя в роли всезнающего препода перед тупыми студентами, не боитесь ударить лицом в грязь? int a[5][7] это декларация матрицы типа int с 5 строками и 7 столбцами а не 5 столбцами и 7 строками :down:

Короче, не выпендривайтесь и разберитесь с цитированием ;)
Последний раз редактировалось sciff 24.11.2011, 07:56, всего редактировалось 1 раз.
Аватара пользователя
sciff
 
Сообщения: 900
Зарегистрирован: 21.12.2010, 01:51
Откуда: Дублин; Латвия
Благодарил (а): 391 раз.
Поблагодарили: 927 раз.
Блог: Просмотр блога (1)
Роль: Видео-оператор
Имя: Ян

Re: Вопросы по языкам C,C#,С++

Сообщение sciff » 24.11.2011, 07:54

maestro писал(а):Лучше сравнение строк вынести в отдельную функцию, из которой возвращать введённую команду как именованную константу (определённую через #define ).


Полностью с вами согласен. А константы определить можно и так (как вариант):

Код: Выделить всё
const int CMD_UNKNOWN = 0;
const int CMD_HELP = 1;
const int CMD_CALC = 2;
const int CMD_FORMULA = 3;


maestro писал(а):Полученное значение проверять в блоке switch. Если пишешь под Windows, то в kernel32.dll есть функция lstrcmpi(char*, char*), которая сравнивает строки без учёта регистра.


Объясните, пожалуйста, как мне подключить функцию lstrcmpi(char*, char*) к программе. У меня CodeBlocks 8.02 с компилятором GNU GCC.

И что за тип переменной "char*"? Это то же самое что и string, или это просто массив символов char[]?


maestro писал(а):Правда, при большом количестве команд следует использовать немного другой способ (могу описать, но для этого нужно на достаточном уровне понимать C++). Интерпретатор введённого выражения потребуется в любом случае.

Опишите, пожалуйста, разберёмся :)
Аватара пользователя
sciff
 
Сообщения: 900
Зарегистрирован: 21.12.2010, 01:51
Откуда: Дублин; Латвия
Благодарил (а): 391 раз.
Поблагодарили: 927 раз.
Блог: Просмотр блога (1)
Роль: Видео-оператор
Имя: Ян

Re: Вопросы по языкам C,C#,С++

Сообщение maestro » 24.11.2011, 08:28

sciff писал(а):Объясните, пожалуйста, как мне подключить функцию lstrcmpi(char*, char*) к программе. У меня CodeBlocks 8.02 с компилятором GNU GCC.

И что за тип переменной "char*"? Это то же самое что и string, или это просто массив символов char[]?


Функция lstrcmpi описана в заголовочном файле "windows.h" (требуется Windows SDK), находится в "kernel32.lib", реализована в "kernel32.dll" (ядро ОС Windows). http://msdn.microsoft.com/en-us/library/windows/desktop/ms647489.aspx

char * - указатель на последовательность элементов типа char (что-то типа массива, но не содержит никакой информации о размере массива). string реализуется как класс и часто содержит метод, позволяющий получить указатель на char.

sciff писал(а):Опишите, пожалуйста, разберёмся :)


Опишу позже.

Ещё немного о "возврате" значения типа void

Код: Выделить всё
void F(int a)
{
    printf("%d", a);
}

void G(int a)
{
    return F(a);
}


Пример того, как возвращать void. На деле, конечно, ничего из функции не возвращается.
maestro
 
Сообщения: 246
Зарегистрирован: 18.03.2011, 15:13
Благодарил (а): 0 раз.
Поблагодарили: 144 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Виталий

Re: Вопросы по языкам C,C#,С++

Сообщение kemal » 24.11.2011, 11:32

sciff писал(а):int a[5][7] это декларация матрицы типа int с 5 строками и 7 столбцами а не 5 столбцами и 7 строками :down:

Кто сказал?!
Я вижу массив размером 5 на 7 элементов. С 5 элементами по первой координате и 7 по второй, если хотите. Ну или массив из 5 элементов, элементами которого являются массивы из 7 элементов. Но вот строк или столбцов здесь нет. Их можно выбрать как угодно.
И да, откуда матрицы? Вы что, математик? Это у них есть привычка использовать векторы и матрицы где надо и не надо. (ничего личного, им так удобнее)
<kuid:216981:******>
куид.ру не нужен
Аватара пользователя
kemal
 
Сообщения: 375
Зарегистрирован: 10.02.2006, 18:21
Откуда: Казань
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Блог: Просмотр блога (4)
Играю в: Auran Trainz
Роль: Разработчик
Имя: Камиль

Re: Вопросы по языкам C,C#,С++

Сообщение ALSN » 24.11.2011, 18:19

Спасибо!

Я и не знал, что string - это переменная, ещё с первых курсов, я думал, что это аргумент <ugagaga>
Осталось написать формулы сокр. умножения и физические формулы, а то уже достали меня числа в 999 степени, у калькулятора разрядной сетки иногда не хватает :blink:

И ещё такой вопрос:
goto до сих пор считается не очень хорошей командой?
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Благодарил (а): 167 раз.
Поблагодарили: 122 раз.
Блог: Просмотр блога (6)
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь

Re: Вопросы по языкам C,C#,С++

Сообщение maestro » 24.11.2011, 18:41

sciff писал(а):
maestro писал(а):Правда, при большом количестве команд следует использовать немного другой способ (могу описать, но для этого нужно на достаточном уровне понимать C++). Интерпретатор введённого выражения потребуется в любом случае.

Опишите, пожалуйста, разберёмся :)

Полностью рабочий код (можно вставить и скомпилировать):
Код: Выделить всё
#include <windows.h>
#include <stdio.h>

typedef void (*Handler)(char *);

struct Command
{
    char * Stroke;
    Handler Handler;
};

extern void HelpHandler(char*);
extern void EchoHandler(char*);
extern void ExitHandler(char*);
extern void SumHandler(char*);

void HandleCommandLine(char *cmdLine, Command *cmds, int Count)
{
    char *s;
    for(s = cmdLine; (*s) && (*s != ' '); s++);
    *s = 0;
    for(int i = 0; i < Count; i++)
    {
        if(lstrcmpi(cmdLine, cmds[i].Stroke) == 0)
        {
            cmds[i].Handler(s+1);
            return;
        }
    }
    printf("Unknown command: \"%s\"\n", cmdLine);
}

void main()
{
    Command cmds[] = {
        {"help", HelpHandler},
        {"echo", EchoHandler},
        {"exit", ExitHandler},
        {"sum",  SumHandler }
    };
    char str[100];
    int Count = sizeof(cmds)/sizeof(Command);
    while (true)
    {
        printf("\n>");
        gets(str);
        HandleCommandLine(str, cmds, Count);
    }
}

void HelpHandler(char *param)
{
    puts("Help not present.");
}

void EchoHandler(char *param)
{
    puts(param);
}

void ExitHandler(char *param)
{
    exit(0);
}

void SumHandler(char *param)
{
    int a, b;
    if(sscanf(param, "%d %d", &a, &b) == 2)
        printf("%d + %d = %d\n", a, b, a+b);
    else
        puts("Incorrect parameters.");
}

Обрабатывает 4 команды: help, echo, sum, exit. Добавление дополнительных команд производится добавлением в массив имени команды и указателя на функцию-обработчик БЕЗ ИЗМЕНЕНИЯ ОСНОВНОГО КОДА ПРОГРАММЫ.

Метод позволяет даже динамически подключать обработчики команд (например, с помощью плагинов). Правда, похоже, я рано об этом пишу :beby:
maestro
 
Сообщения: 246
Зарегистрирован: 18.03.2011, 15:13
Благодарил (а): 0 раз.
Поблагодарили: 144 раз.
Играю в: Train Simulator Classic
Роль: Разработчик
Имя: Виталий

Re: Вопросы по языкам C,C#,С++

Сообщение kachsheev » 25.11.2011, 01:25

Игорь, во всех языках программирования goto является мерзким тоном.
1-2 раза использовать - если серьезно лень где-то что-то поправлять, и то, не желательно..
Но если 10 или более - код иногда просто может быть не читаемым.
Мечта идиота - писать программы и скрипты для всего, что движется и не движется, для TZ и RW
kachsheev
 
Сообщения: 15
Зарегистрирован: 10.03.2011, 00:41
Откуда: Санкт-Петербург
Благодарил (а): 23 раз.
Поблагодарили: 3 раз.
Играю в: Auran Trainz
Роль: Пассажир :)
Имя: Антон

Re: Вопросы по языкам C,C#,С++

Сообщение ALSN » 26.11.2011, 17:06

Начал писать часть программы, которая отвечает за подсчёт по формулам, вот как оно пока рабаотает:

Код: Выделить всё
int main ()
{
   int nom;
    cout << "" << endl;
   cout << "Список формул:" << endl;
    cout << "Формулы сокращённого умножения:" << endl;
   cout << "          2" << endl;
   cout << "1. (a + b)" << endl;
   cout << "          2" << endl;
   cout << "2. (a - b)" << endl;

    cout << "Введите номер формулы : ";
   cin >> nom;

   if (nom == 1)
   {
        long double a, b;
      cout << "Введите значение a: ";
        cin >> a;
        cout << "Введите значение b: ";
        cin >> b;
       
   long double c = a * a + 2 * a * b + b * b;
        cout << "Ответ: " << c << endl;
        main ();
   }
   else if (nom == 2)
   {
        long double a, b;
      cout << "Введите значение a: ";
        cin >> a;
        cout << "Введите значение b: ";
        cin >> b;
       
   long double c = a * a - 2 * a * b + b * b;
        cout << "Ответ: " << c << endl;
        main ();
   }

   else
   {
        cout << "Формулы под данным номером нет." << endl;
        main ();
       }
}


А можно ли сделать как-нибудь, что бы считались не только числа, но и одночелны (2ab или 74,3hdd например) по этой формуле?
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Благодарил (а): 167 раз.
Поблагодарили: 122 раз.
Блог: Просмотр блога (6)
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь

Re: Вопросы по языкам C,C#,С++

Сообщение Mita » 28.11.2011, 01:42

sciff писал(а):
Mita писал(а):int a[5][7]; - значит что у вас матрица элементов типа int с 5 столбцами и 7 строками.

Mita, вы когда представляете себя в роли всезнающего препода перед тупыми студентами, не боитесь ударить лицом в грязь? int a[5][7] это декларация матрицы типа int с 5 строками и 7 столбцами а не 5 столбцами и 7 строками :down:

Короче, не выпендривайтесь и разберитесь с цитированием ;)


А что вы мне тыкаете? Я мог и ошибится волне, перепутать строки со столбцами, не в этом суть.
А вы так довольны, что нашли ошибку, что тут же начинаете орать "Ура, я нашел ошибку у этого чела!!! Смотрите все!"
Аватара пользователя
Mita
 
Сообщения: 262
Зарегистрирован: 25.10.2006, 00:50
Откуда: Минск
Благодарил (а): 35 раз.
Поблагодарили: 44 раз.
Играю в: Train Simulator Classic

Re: Вопросы по языкам C,C#,С++

Сообщение ALSN » 24.12.2011, 14:54

(удалено)
Последний раз редактировалось ALSN 25.12.2011, 14:09, всего редактировалось 1 раз.
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Благодарил (а): 167 раз.
Поблагодарили: 122 раз.
Блог: Просмотр блога (6)
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь

Re: Вопросы по языкам C,C#,С++

Сообщение Mita » 25.12.2011, 02:14

Попугай писал(а):Вот решил сделать своей программе собственное окошко (вместо ДОСосвского):
Изображение
И хочется мне, чтобы вот это поле, работало как окошко доса. И надо сделать так, чтобы это поле работала по такому коду:

Код: Выделить всё
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
   
void SayForm ()//Говорим, какие есть у нас пакеты и команды
{
   cout << "Список формул:" << endl;
   cout << "1. Плотность, масса, объём (p, m, V)" << endl;
   cout << "2. Скорость, время, расстояние (v, t, S)" << endl;
   cout << "Команды:" << endl;
   cout << "calc - калькулятор степеней" << endl;
   cout << "conv - перевод единиц измерения" << endl;
   cout << "exit - выход" << endl;
   cout << "help - помощь" << endl;
}
void Help ()//Хэлп
{
   cout << "---------------------------------------------------------------------" << endl;
   cout << "Справочник по программе Физический калькулятор" << endl;
   cout << "Команды:" << endl;
    cout << "1 - вычисление плотности, объёма, массы (p, m, V)" << endl;
   cout << "2 - вычисление скорости, времени, расстояния (v, t, S)" << endl;
   cout << "calc - калькулятор степеней" << endl;
   cout << "conv - перевод единиц измерения" << endl;
   cout << "exit - выход" << endl;
   cout << "help - помощь" << endl;
   
   cout << "" << endl;
   cout << "В версию v 1.2.1 входят:" << endl;
    cout << "- Калькулятор степеней до 20" << endl;
   cout << "- Пакет плотность, объём, масса (p, m, V)" << endl;
    cout << "- Пакет скорость, время, расстояние (v, t, S)" << endl;
    cout << "- Пакет перевода единиц измерения" << endl;
    cout << "" << endl;
    cout << "Если вы получили ответ, который не подходит по смыслу," << endl;
    cout << "это значит, что одно из значений привысило допустимый размер." << endl;
    cout << "Если программа выдаёт ошибку, значит вы ввели несуществующую команду." << endl;
    cout << "Все данные надо вводить в указанных единицах измерения." << endl;
   cout << "" << endl;
   cout << "Программа написана на C++, код распространяется свободно." << endl;
   cout << "---------------------------------------------------------------------" << endl;
}

void FormDensity ()//Пакет плотность, объём, масса (p, m, V)
{
       cout << "---------------------------------------------------------------------" << endl;
      string searcha;
        cout << "Введите искомую величину (p, m, V): ";
        cin >> searcha;
        cout << endl;

      if (searcha == "p" || searcha == "P" )
      {
            long double m, v;
         cout << "Введите значение m (кг): ";
         cin >> m;
         cout << "Введите значение V (м3): ";
         cin >> v;
            long double p = m / v;
            cout << "P = " << p << " кг на м3" << endl;
           cout << "---------------------------------------------------------------------" << endl;
        }
      else if (searcha == "m" || searcha == "M" )
      {
            long double p, v;
         cout << "Введите значение V (м3): ";
         cin >> v;
         cout << "Введите значение p (кг на м3): ";
         cin >> p;
            long double m = p * v;
            cout << "m = " << m << " кг" << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
      else if (searcha == "v" || searcha == "V" )
      {
            long double m, p;
         cout << "Введите значение m (кг): ";
         cin >> m;
         cout << "Введите значение p (кг на м3): ";
         cin >> p;
            long double v = m / p;
            cout << "V = " << v << " м3" << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
      else
      {
         cout << "Ошибка, такой величины нет. Для получения справки наберите help." << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
}

void ConvDensity ()//Пакет конвера: плотность, объём, масса (p, m, V)
{
   cout << "Список перевода единиц измерения:" << endl;
   cout << "1. кг/м3 -> г/см3 (p)" << endl;
   cout << "2. г/см3 -> кг/м3 (p)" << endl;
   cout << "3. кг -> г (m)" << endl;
   cout << "4. г -> кг (m)" << endl;
   cout << "5. м3 -> см3 (V)" << endl;
   cout << "6. см3 -> м3 (V)" << endl;
    cout << "7. м3 -> л (V)" << endl;
   cout << "8. л -> м3 (V)" << endl;
   
   int trand;
    cout << "Номер: ";
    cin >> trand;
    cout << endl;

   if (trand == 1)
   {
      long double paca;
      cout << "p кг/м3: ";
      cin >> paca;

      long double pacb = paca / 1000;
        cout << "p = " << pacb << " г/см3" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (trand == 2)
   {
      long double paca;
      cout << "p г/см3: ";
      cin >> paca;

      long double pacb = paca * 1000;
        cout << "p = " << pacb << " кг/м3" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (trand == 3)
   {
      long double paca;
      cout << "m кг: ";
      cin >> paca;

      long double pacb = paca * 1000;
        cout << "m = " << pacb << " г" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (trand == 4)
   {
      long double paca;
      cout << "m г: ";
      cin >> paca;

      long double pacb = paca / 1000;
        cout << "m = " << pacb << " кг" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (trand == 5)
   {
      long double paca;
      cout << "V м3: ";
      cin >> paca;

      long double pacb = paca * 1000000;
        cout << "V = " << pacb << " см3" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
    else if (trand == 6)
   {
      long double paca;
      cout << "V см3: ";
      cin >> paca;

      long double pacb = paca / 1000000;
        cout << "V = " << pacb << " м3" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
    else if (trand == 7)
   {
      long double paca;
      cout << "V м3: ";
      cin >> paca;

      long double pacb = paca * 1000;
        cout << "V = " << pacb << " л" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
    else if (trand == 8)
   {
      long double paca;
      cout << "V л: ";
      cin >> paca;

      long double pacb = paca / 1000;
        cout << "V = " << pacb << " м3" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
}
void FormSpeed ()//Пакет скорость, время, расстояние (v, t, S)
{
       cout << "---------------------------------------------------------------------" << endl;
       string searchb;
        cout << "Введите искомую величину (v, t, S): ";
        cin >> searchb;
        cout << endl;

      if (searchb == "v" || searchb == "V" )
      {
            long double s, t;
         cout << "Введите значение s (м): ";
         cin >> s;
         cout << "Введите значение t (сек): ";
         cin >> t;
            long double v = s / t;
            cout << "v = " << v << " м/сек" << endl;
           cout << "---------------------------------------------------------------------" << endl;
        }
      else if (searchb == "t" || searchb == "T" )
      {
            long double v, s;
         cout << "Введите значение v (м/сек): ";
         cin >> v;
         cout << "Введите значение S (м): ";
         cin >> s;
            long double t = s / v;
            cout << "t = " << t << " сек" << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
      else if (searchb == "s" || searchb == "S" )
      {
            long double t, v;
         cout << "Введите значение t (сек): ";
         cin >> t;
         cout << "Введите значение v (м/сек): ";
         cin >> v;
            long double s = v * t;
            cout << "S = " << s << " м" << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
      else
      {
         cout << "Ошибка, такой величины нет. Для получения справки наберите help." << endl;
           cout << "---------------------------------------------------------------------" << endl;
      }
}

void ConvSpeed ()//Пакет конверат: скорость, время, расстояние (v, t, S)
{
   cout << "Список перевода единиц измерения:" << endl;
   cout << "1. км/ч -> м/сек (v)" << endl;
   cout << "2. м/сек -> км/ч (v)" << endl;
   cout << "3. км -> м (S)" << endl;
   cout << "4. м -> км (S)" << endl;
   cout << "5. мин -> сек (t)" << endl;
   cout << "6. сек -> мин (t)" << endl;
   cout << "7. ч -> мин (t)" << endl;
   cout << "8. мин -> ч (t)" << endl;
   cout << "9. ч -> сек (t)" << endl;
   cout << "10. сек -> ч (t)" << endl;

   int tran;
    cout << "Номер: ";
    cin >> tran;
    cout << endl;

   if (tran == 1)
   {
      long double paca;
      cout << "v км/ч: ";
      cin >> paca;

      long double pacb = paca * 1000 / 3600;
        cout << "v = " << pacb << " м/с" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (tran == 2)
   {
      long double paca;
      cout << "v м/с: ";
      cin >> paca;

      long double pacb = paca / 1000 * 3600;
        cout << "v = " << pacb << " к/ч" << endl;
        cout << "---------------------------------------------------------------------" << endl;
    }
   else if (tran == 3)
   {
      long double paca;
      cout << "S км: ";
      cin >> paca;

      long double pacb = paca * 1000;
        cout << "S = " << pacb << " м" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 4)
   {
      long double paca;
      cout << "S м: ";
      cin >> paca;

      long double pacb = paca / 1000;
        cout << "S = " << pacb << " км" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
    else if (tran == 5)
   {
      long double paca;
      cout << "t мин: ";
      cin >> paca;

      long double pacb = paca * 60;
        cout << "t = " << pacb << " сек" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 6)
   {
      long double paca;
      cout << "t сек: ";
      cin >> paca;

      long double pacb = paca / 60;
        cout << "t = " << pacb << " мин" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 7)
   {
      long double paca;
      cout << "t ч: ";
      cin >> paca;

      long double pacb = paca * 60;
        cout << "t = " << pacb << " мин" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 8)
   {
      long double paca;
      cout << "t мин: ";
      cin >> paca;

      long double pacb = paca / 60;
        cout << "t = " << pacb << " ч" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 9)
   {
      long double paca;
      cout << "t ч: ";
      cin >> paca;

      long double pacb = paca * 3600;
        cout << "t = " << pacb << " сек" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else if (tran == 10)
   {
      long double paca;
      cout << "t сек: ";
      cin >> paca;

      long double pacb = paca / 3600;
        cout << "t = " << pacb << " x" << endl;
        cout << "---------------------------------------------------------------------" << endl;
   }
   else
   {
      cout << "Ошибка, такой формулы перевода нет. Для получения справки наберите help." << endl;
       cout << "---------------------------------------------------------------------" << endl;
   }
}
void Calculator ()//Калькулятор степеней
{
   cout << "---------------------------------------------------------------------" << endl;
    long double mnoz, otv;
   int step;
   cout << "Введите число: ";
   cin >> mnoz;
   cout << "Введите степень: ";
   cin >> step;
    otv = pow(mnoz,step);
   cout << "Ответ: " << otv << endl;
   cout << "---------------------------------------------------------------------" << endl;
}
void GetCMD ()//Анализатор команд
{
    string cmd;
    cout << "Команда: ";
    cin >> cmd;
    cout << endl;

    if (cmd == "help" || cmd == "Help"  || cmd == "HELP" )
   {
      Help ();
      GetCMD ();
   }

   else if (cmd == "calc" || cmd == "Calc"  || cmd == "CALC" )
   {
      Calculator ();
       GetCMD ();
   }
    else if (cmd == "conv" || cmd == "Conv"  || cmd == "CONV" )
   {
      cout << "---------------------------------------------------------------------" << endl;
      cout << "Выберите пакет формул для перевода единиц измерения:" << endl;
      cout << "1. Плотность, масса, объём (p, m, V)" << endl;
       cout << "2. Скорость, время, расстояние (v, t, S)" << endl;
       int convert;
        cout << "Пакет формул: ";
        cin >> convert;
        cout << endl;

      if (convert == 1)
      {
         ConvDensity ();
      }
      else if (convert == 2)
      {
         ConvSpeed ();
      }
      else
      {
         cout << "Ошибка, такого пакета формул нет. Для получения справки наберите help." << endl;
      }
      
      GetCMD ();
   }
   
   else if (cmd == "exit" || cmd == "Exit"  || cmd == "EXIT" )
   {
       cout << "---------------------------------------------------------------------" << endl;
      exit(0);
   }

   else if (cmd == "1")
   {
      FormDensity ();
       GetCMD ();
   }

   else if (cmd == "2")
   {
      FormSpeed ();
       GetCMD ();
   }
    else
   {
      cout << "Ошибка, такой формулы или команды нет. Для получения справки наберите help." << endl;
      GetCMD ();
   }
}

int main () //Инт мэин
{
   setlocale(LC_ALL, "Russian");
   cout << "Физический калькулятор v 1.2.1" << endl;
   SayForm ();
   GetCMD ();
    return 0;
}


Сейчас в программе такой код:

Код: Выделить всё
#pragma once
namespace PhysicsCalcv13 {
    using namespace System;
   using namespace System::ComponentModel;
   using namespace System::Collections;
   using namespace System::Windows::Forms;
   using namespace System::Data;
   using namespace System::Drawing;
    public ref class Form1 : public System::Windows::Forms::Form
   {
   public:
      Form1(void)
      {
         InitializeComponent();
         //
         //TODO: добавьте код конструктора
         //
      }
    protected:
      /// <summary>
      /// Освободить все используемые ресурсы.
      /// </summary>
      ~Form1()
      {
         if (components)
         {
            delete components;
         }
      }

   protected:

   private: System::Windows::Forms::MenuStrip^  Меню;

   private: System::Windows::Forms::ToolStripMenuItem^  программаToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  справкаToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  инструкцииToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  оПрограммеToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  сообщитьОбОшибкеToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  задатьКомандуToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  плотностьМассаОбъёмpMVToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  скоростьВремяРасстояниеvTSToolStripMenuItem;
   private: System::Windows::Forms::ToolStripMenuItem^  калькуляторСтепенейToolStripMenuItem;
   private: System::Windows::Forms::TextBox^  Команднаяпанель;
   private: System::Windows::Forms::VScrollBar^  vScrollBar1;



   protected:
    protected:
   private: System::ComponentModel::IContainer^  components;
    private:
#pragma region Windows Form Designer generated code
        void InitializeComponent(void)
      {
         this->Меню = (gcnew System::Windows::Forms::MenuStrip());
         this->программаToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->справкаToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->инструкцииToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->оПрограммеToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->сообщитьОбОшибкеToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->задатьКомандуToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->плотностьМассаОбъёмpMVToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->скоростьВремяРасстояниеvTSToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->калькуляторСтепенейToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
         this->Команднаяпанель = (gcnew System::Windows::Forms::TextBox());
         this->vScrollBar1 = (gcnew System::Windows::Forms::VScrollBar());
         this->Меню->SuspendLayout();
         this->SuspendLayout();
         //
         // Меню
         //
         this->Меню->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->программаToolStripMenuItem,
            this->справкаToolStripMenuItem});
         this->Меню->Location = System::Drawing::Point(0, 0);
         this->Меню->Name = L"Меню";
         this->Меню->Size = System::Drawing::Size(585, 24);
         this->Меню->TabIndex = 4;
         this->Меню->Text = L"menuStrip1";
         //
         // программаToolStripMenuItem
         //
         this->программаToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->задатьКомандуToolStripMenuItem});
         this->программаToolStripMenuItem->Name = L"программаToolStripMenuItem";
         this->программаToolStripMenuItem->Size = System::Drawing::Size(84, 20);
         this->программаToolStripMenuItem->Text = L"Программа";
         //
         // справкаToolStripMenuItem
         //
         this->справкаToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->инструкцииToolStripMenuItem,
            this->оПрограммеToolStripMenuItem, this->сообщитьОбОшибкеToolStripMenuItem});
         this->справкаToolStripMenuItem->Name = L"справкаToolStripMenuItem";
         this->справкаToolStripMenuItem->Size = System::Drawing::Size(65, 20);
         this->справкаToolStripMenuItem->Text = L"Справка";
         //
         // инструкцииToolStripMenuItem
         //
         this->инструкцииToolStripMenuItem->Name = L"инструкцииToolStripMenuItem";
         this->инструкцииToolStripMenuItem->Size = System::Drawing::Size(196, 22);
         this->инструкцииToolStripMenuItem->Text = L"Инструкции";
         //
         // оПрограммеToolStripMenuItem
         //
         this->оПрограммеToolStripMenuItem->Name = L"оПрограммеToolStripMenuItem";
         this->оПрограммеToolStripMenuItem->Size = System::Drawing::Size(196, 22);
         this->оПрограммеToolStripMenuItem->Text = L"О программе";
         //
         // сообщитьОбОшибкеToolStripMenuItem
         //
         this->сообщитьОбОшибкеToolStripMenuItem->Name = L"сообщитьОбОшибкеToolStripMenuItem";
         this->сообщитьОбОшибкеToolStripMenuItem->Size = System::Drawing::Size(196, 22);
         this->сообщитьОбОшибкеToolStripMenuItem->Text = L"Сообщить об ошибке";
         //
         // задатьКомандуToolStripMenuItem
         //
         this->задатьКомандуToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(3) {this->плотностьМассаОбъёмpMVToolStripMenuItem,
            this->скоростьВремяРасстояниеvTSToolStripMenuItem, this->калькуляторСтепенейToolStripMenuItem});
         this->задатьКомандуToolStripMenuItem->Name = L"задатьКомандуToolStripMenuItem";
         this->задатьКомандуToolStripMenuItem->Size = System::Drawing::Size(160, 22);
         this->задатьКомандуToolStripMenuItem->Text = L"Задать команду";
         //
         // плотностьМассаОбъёмpMVToolStripMenuItem
         //
         this->плотностьМассаОбъёмpMVToolStripMenuItem->Name = L"плотностьМассаОбъёмpMVToolStripMenuItem";
         this->плотностьМассаОбъёмpMVToolStripMenuItem->Size = System::Drawing::Size(274, 22);
         this->плотностьМассаОбъёмpMVToolStripMenuItem->Text = L"Плотность, масса, объём (p, m, V)";
         //
         // скоростьВремяРасстояниеvTSToolStripMenuItem
         //
         this->скоростьВремяРасстояниеvTSToolStripMenuItem->Name = L"скоростьВремяРасстояниеvTSToolStripMenuItem";
         this->скоростьВремяРасстояниеvTSToolStripMenuItem->Size = System::Drawing::Size(274, 22);
         this->скоростьВремяРасстояниеvTSToolStripMenuItem->Text = L"Скорость, время, расстояние (v, t, S)";
         //
         // калькуляторСтепенейToolStripMenuItem
         //
         this->калькуляторСтепенейToolStripMenuItem->Name = L"калькуляторСтепенейToolStripMenuItem";
         this->калькуляторСтепенейToolStripMenuItem->Size = System::Drawing::Size(274, 22);
         this->калькуляторСтепенейToolStripMenuItem->Text = L"Калькулятор степеней";
         //
         // Команднаяпанель
         //
         this->Команднаяпанель->Location = System::Drawing::Point(12, 27);
         this->Команднаяпанель->Multiline = true;
         this->Команднаяпанель->Name = L"Команднаяпанель";
         this->Команднаяпанель->Size = System::Drawing::Size(561, 264);
         this->Команднаяпанель->TabIndex = 3;
         this->Команднаяпанель->TextChanged += gcnew System::EventHandler(this, &Form1::Команднаяпанель_TextChanged);
         //
         // vScrollBar1
         //
         this->vScrollBar1->Location = System::Drawing::Point(554, 27);
         this->vScrollBar1->Name = L"vScrollBar1";
         this->vScrollBar1->Size = System::Drawing::Size(19, 265);
         this->vScrollBar1->TabIndex = 5;
         //
         // Form1
         //
         this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
         this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
         this->ClientSize = System::Drawing::Size(585, 298);
         this->Controls->Add(this->vScrollBar1);
         this->Controls->Add(this->Команднаяпанель);
         this->Controls->Add(this->Меню);
         this->MainMenuStrip = this->Меню;
         this->Name = L"Form1";
         this->Text = L"Физический калькулятор";
         this->Меню->ResumeLayout(false);
         this->Меню->PerformLayout();
         this->ResumeLayout(false);
         this->PerformLayout();

      }
#pragma endregion
   private: System::Void maskedTextBox1_MaskInputRejected(System::Object^  sender, System::Windows::Forms::MaskInputRejectedEventArgs^  e) {
          }
   private: System::Void Команднаяпанель_TextChanged(System::Object^  sender, System::EventArgs^  e) {
          }
   private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {
          }
};
}


Куда его вставлять? И как подключить полосу прокрутки к текстовому полю?
И ещё: как подключить код к меню?


Если работаете с простым System::WIndows::Forms - просто поставь просто черный фон. Полоса прокрутки должна появляться автоматически, в зависимости от контента окна.
Вообще, все это задается в редакторе формы, если вы в вижле работаете, в том числе и контекстное меню, если вы его имете в виду.
Аватара пользователя
Mita
 
Сообщения: 262
Зарегистрирован: 25.10.2006, 00:50
Откуда: Минск
Благодарил (а): 35 раз.
Поблагодарили: 44 раз.
Играю в: Train Simulator Classic

Re: Вопросы по языкам C,C#,С++

Сообщение ALSN » 25.12.2011, 14:41

Mita, порылся в меню, прикрутил полосу прокрутки, но всё равно остались вопросы.
У меня есть консольная версия программы (в дос-окне), а я хочу сделать программу со своим интерфейсом.
Вверху - программа виндовс формс, винизу - консольная программа.
Изображение
И нужно, чтобы текстовое поле работало, как окно консольного приложения, код уже есть. Как прилепить этот код к тестовому полю?
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Благодарил (а): 167 раз.
Поблагодарили: 122 раз.
Блог: Просмотр блога (6)
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь

Re: Вопросы по языкам C,C#,С++

Сообщение Mita » 25.12.2011, 16:47

Попугай писал(а):.....И нужно, чтобы текстовое поле работало, как окно консольного приложения, код уже есть. Как прилепить этот код к тестовому полю?


Смотря какой код. Что он делает? Если он настраивает стили/виды окна формы (формат воода, цвета итд) - тогда в инициализацию формы. У каждого класса, связанного с формой он должен быть(там где объявлены все контролы формы). В принципе, вы можете задать в своем классе обработчики событий Init, load итд, которые будут срабатывать в момент загрузки формы - там то и проинициализировать нужное вам поведение вашего окноа. Обработчики задаются либо руками, либо прямо из редактора формы(вкладка events)
Если вы имеете в виду стиль работы консольного окна, то как оно у нас работает? ПРи вводе команды курсор всегда слева, что-то вводите и ажимаете энтер. Следователно, вам нужно ловить событие (event) ввода с клавиатруры. Насколько я помню, это OnKeyPressed или что-то такое. Там вы можете проверить, какая именно клавиша была нажата (придет как аргумент, в функцию обработчик события), а далее - сотрите что ввели до этого, обрабатываете ввод, чтото выводите и тсавите курсор обратно влево. Надеюсь, чтото поможет. Удачи!)

Только я все же одного не могу понять, а какой смысл реализовывать косольное окно средстами WIndow - контролов? Ведь последнее как раз и создано для того, чтобы пользователи могли избавится от не слишком удобного консольного ввода. Но если вам это уже так надо - то и используйте консольное окно настоящее, накой вам делать лишнюю работу, реализовывая это средствами WIndows Forms? На мой взгляд, это лишено смысла :)
Аватара пользователя
Mita
 
Сообщения: 262
Зарегистрирован: 25.10.2006, 00:50
Откуда: Минск
Благодарил (а): 35 раз.
Поблагодарили: 44 раз.
Играю в: Train Simulator Classic

Re: Вопросы по языкам C,C#,С++

Сообщение ALSN » 21.01.2012, 20:10

После сметрти ноутбука пришлось много работать в нортоне, и мне он очень понравился, захотелось написать свой.
Цель: сделать сначала программу, а потом попытаться реализовать в операционную систему вот такого образца (мечты...):
Изображениеъ

Ну для начала это будет простая программка в кмд.ехе, и вот такой вопрос: как прочитать из файла нужную мне строчку и записать её (одно слово, string сделаю) в переменную?
Аватара пользователя
ALSN
 
Сообщения: 227
Зарегистрирован: 09.08.2011, 11:35
Откуда: Москва
Благодарил (а): 167 раз.
Поблагодарили: 122 раз.
Блог: Просмотр блога (6)
Играю в: Train Simulator Classic
Роль: Фотограф
Имя: Игорь

Re: Вопросы по языкам C,C#,С++

Сообщение Mita » 22.01.2012, 00:13

Попугай писал(а):После сметрти ноутбука пришлось много работать в нортоне, и мне он очень понравился, захотелось написать свой.
Цель: сделать сначала программу, а потом попытаться реализовать в операционную систему вот такого образца (мечты...):
Изображениеъ

Ну для начала это будет простая программка в кмд.ехе, и вот такой вопрос: как прочитать из файла нужную мне строчку и записать её (одно слово, string сделаю) в переменную?

Хочу вас расстроить. Это не операционная система - это файловый менеджер с командной строкой.
Аватара пользователя
Mita
 
Сообщения: 262
Зарегистрирован: 25.10.2006, 00:50
Откуда: Минск
Благодарил (а): 35 раз.
Поблагодарили: 44 раз.
Играю в: Train Simulator Classic

Пред.След.

Вернуться в Компьютерные вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3