Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Верховный Тюлень
 Аватар для Speed Fighter
49 / 16 / 3
Регистрация: 29.03.2015
Сообщений: 208

Из texbox в функцию

19.03.2017, 10:34. Показов 1173. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здарова, мужики. Есть тут такая проблемка, я создал простенькую форму в VS 2015(с горем пополам, правда).
Её задача - по введенным трем параметрам рассчитать и записать в .txt файлик координаты x, y, z и расстояние от центра системы координат до центра масс спутника (т.е. таких записей идет N штук, в зависимости от того, сколько точек задано).

Сначала было написано консольное приложение, оно отрабатывало правильно, при переходе к форме - сбой, все значения зануляются.

Прикладываю сам проект в архиве, ну и важные участки кода.

Вычисление и запись:
Кликните здесь для просмотра всего текста

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
#pragma once
 
#include <iostream>
#include <cmath>
#include <cstdlib>
//#include "stdafx.h"
#include <fstream>
 
using namespace std;
 
 
double PI = 3.1415; // „исло ѕ», посто¤нна¤
double T = 86164.091; // «вездные сутки в секундах
double Tc = 5646.0; // ¬рем¤ вращени
double alpha = 68.915; // Начальный угол, на который уже повернута земл¤
 
double w = 150.23; // ”гол w в градусах
double M = 156.945; // ”гол M в градусах
double i = 97.272; // ”гол i в градусах
 
double CF1, CF2, CF3, F1, F2, F3;
 
void CalculateHelp();
void CalculateCoordinate(double tstart, double tend, int count);
 
void CalculateHelp() // –асчет параметров, не завис§щих от времени
{
    CF1 = -sin(w*PI/180)*cos(M*PI/180) - cos(w*PI/180)*sin(M*PI/180)*cos(i*PI/180);
    CF2 = -sin(w*PI/180)*sin(M*PI / 180) + cos(w*PI/180)*cos(M*PI/ 180)*cos(i*PI/180);
    CF3 = cos(w*PI/180)*sin(i*PI / 180);
 
    F1 = cos(w*PI/180)*cos(M*PI/180) - sin(w*PI/180)*sin(M*PI/180)*cos(i*PI/180);
    F2 = cos(w*PI/180)*sin(M*PI/180) + sin(w*PI/180)*cos(M*PI/180)*cos(i*PI/180);
    F3 = sin(w*PI/180)*sin(i*PI/180);
}
 
void CalculateCoordinate(double tstart, double tend, int count) // Рассчет необхомых 
{
    void CalculateHelp();
    double t, x, y, z, radius;
    double dz, r, eps, nu, step;
    step = (tend - tstart) / count;
    t = tstart;
    ofstream fout("tochki.txt"); // —оздаем файлик
    fout << "x, км       y, км       z, км       радиус, км" << endl;
    for (int j = 0; j < count; j++)
    {
        dz = 2 * PI*t/T; // Учет вращения Земли
        r = 6846.8 / (1 + 0.00104*cos(2 * PI*t/Tc)); // Уравнение движение спутника в плоскости орбиты
        eps = r*cos(2 * PI*t/Tc);
        nu = r*sin(2 * PI*t/Tc);
 
        x = (F1*eps + CF1*nu)*cos(dz + (alpha*PI/180)) - (F2*eps + CF2*nu)*sin(dz + (alpha*PI/180));
        y = (F1*eps + CF1*nu)*sin(dz + (alpha*PI/180)) + (F2*eps + CF2*nu)*cos(dz + (alpha*PI/180));
        z = F3*eps + CF3*nu;
        radius = sqrt(x*x + y*y + z*z); // Расстояние от начала координат(георцентрической) до центра масс спутника
        fout << x << "    " << y << "    " << z << "    " << radius << endl;
        t = t + step;
    }
    fout.close();
}

Считывание введенных значений:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
    if (Convert::ToDouble(TimeEndTB->Text) == 0 || Convert::ToDouble(TBCount->Text) == 0 || TBCount->Text == "" || TimeEndTB->Text == "") // Проверка на пустые строчки
    {
        MessageBox::Show("Введите число точек больше нуля!", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
    else
    {
        CalculateCoordinate(Convert::ToDouble(TimeStartTB->Text), Convert::ToDouble(TimeEndTB->Text), Convert::ToInt16(TBCount->Text));
        MessageBox::Show("Успешно создан и заполнен файлик", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
}


ссылка удалена модератором ссылка на проект, он весит 11 Мб, поэтому в rghost залил.
TestForm.zip

Так же, возникает след. проблема, если ничего не вводить и нажать расчет, то выйдет ошибка со след. содержанием: "Не обрабатываемое исключение в приложении...", хотя я делал проверку, чтобы не было пустых ячеек.

Кликните здесь для просмотра всего текста
************** Текст исключения **************
System.FormatException: Входная строка имела неверный формат.
в System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
в System.Convert.ToDouble(String value)
в CppWinForm1.MyForm.button1_Click(Object sender, EventArgs e) в c:\users\admin\desktop\testform\cppwinfo rm1\cppwinform1\myform.h:строка 179
в System.Windows.Forms.Control.OnClick(Eve ntArgs e)
в System.Windows.Forms.Button.OnClick(Even tArgs e)
в System.Windows.Forms.Button.OnMouseUp(Mo useEventArgs mevent)
в System.Windows.Forms.Control.WmMouseUp(M essage& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Mes sage& m)
в System.Windows.Forms.ButtonBase.WndProc( Message& m)
в System.Windows.Forms.Button.WndProc(Mess age& m)
в System.Windows.Forms.Control.ControlNati veWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNati veWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2017, 10:34
Ответы с готовыми решениями:

listbox и texbox
Уважаемые господа программисты помогите пожалусто... Не могу решить задачу: нужно считать из txt в listbox каждые две строчки, а затем...

Неравномерный texbox
Хочу попробовать сделать игру типа &quot;драки&quot;. Но вот столкнулся с проблемой: textbox может быть только прямоугольным, а мне этого не нужно, к...

Поиск из texbox'a
Подключил аксесовскую бд 2010, к vs2012 , перетащил таблицу на окно, все таблица отображается, вопрос, как из texbox'a выполнить поиск...

4
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,895
Записей в блоге: 1
19.03.2017, 16:36
Лучший ответ Сообщение было отмечено Speed Fighter как решение

Решение

Цитата Сообщение от Speed Fighter Посмотреть сообщение
C++
1
2
3
void CalculateCoordinate(double tstart, double tend, int count) // Рассчет необхомых 
{
    void CalculateHelp();
Нужно убрать void перед CalculateHelp(). В таком виде это означает forward declaration, без - вызов функции, без которого переменные CF1, CF2, CF3, F1, F2, F3 остаются равными нулю.

Цитата Сообщение от Speed Fighter Посмотреть сообщение
Так же, возникает след. проблема, если ничего не вводить и нажать расчет, то выйдет ошибка со след. содержанием: "Не обрабатываемое исключение в приложении...", хотя я делал проверку, чтобы не было пустых ячеек.
Это потому что проверка на пустое значение делается после вызова Convert::ToDouble который и падает из-за пустой строки или неверного значения. Лучше переписать код вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
    double tstart, tend;
    int count;
    if (!Double::TryParse(TimeStartTB->Text, tstart))
    {
        MessageBox::Show("Введите начальное время!", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
    else if (!Double::TryParse(TimeEndTB->Text, tend))
    {
        MessageBox::Show("Введите конечное время!", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
    else if (!Int32::TryParse(TBCount->Text, count))
    {
        MessageBox::Show("Введите число точек больше нуля!", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
    else
    {
        CalculateCoordinate(tstart, tend, count);
        MessageBox::Show("Успешно создан и заполнен файлик", "Сообщение", MessageBoxButtons::OK, MessageBoxIcon::Warning);
    }
}
Цитата Сообщение от Speed Fighter Посмотреть сообщение
ссылка на проект, он весит 11 Мб, поэтому в rghost залил
Надо всего лишь очистить папку от лишних файлов и размер архива волшебным образом уменьшится. На будушее - Как сделать архив с проектом Visual Studio занимающий мало места.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,895
Записей в блоге: 1
19.03.2017, 16:44
Забыл приложить исправленную версию программы. В твоем коде было еще несколько недостатков.
1) Две точки входа. Оставил одну и исправил настройки компиляции для Release конфигурации
2) Контр-интутивный порядок табуляции в форме - исправил
3) Исходные файлы сохранены в кодировке Utf-8
Вложения
Тип файла: zip TestForm-updated.zip (9.0 Кб, 4 просмотров)
0
Верховный Тюлень
 Аватар для Speed Fighter
49 / 16 / 3
Регистрация: 29.03.2015
Сообщений: 208
19.03.2017, 16:57  [ТС]
OwenGlendower, насчет void, так стыдно, в который раз на невнимательности погорел, хотя в старой все правильно сделал.
Спасибо, заработало, можно закрывать. =)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18292 / 14216 / 5368
Регистрация: 17.03.2014
Сообщений: 28,895
Записей в блоге: 1
19.03.2017, 17:00
Speed Fighter, бывает, ничего страшного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2017, 17:00
Помогаю со студенческими работами здесь

Вывод матрицы в texBox
Как вывести матрицу в textBox в нормальном виде? Этот отрывок кода выводит элементы матрицы в одну строку. String^ str =...

Вывод double в 2 texBox'a
Есть 2 текстбокса и double переменная. Как вывести целую часть в 1 текстбокс, дробную в другой? То ли на меня просто ступор напал, то ли я...

Контроль ввода в Texbox
если Texbox равен буквам, точкам и пр. кроме цифр то выдать ошибку в Messeg.Box иначе ....траляля.... напишите пожалуйста как это...

Трудности с настройкой TexBox
Делаю приложение для Windows Phone 7, в приложении есть три TextBoxа, в которые вводятся числа, в том числе и дробные, при нажатии на...

Не работают texbox с подключенной БД
Есть программа с подключенной бд (Access). Название из таблицы выводятся в listbox и при нажатии выводятся остальные элементы в texbox`ы....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru