Russian Qt Forum
Ноябрь 24, 2024, 23:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вычисление евклидовой нормы вектора  (Прочитано 11488 раз)
bochonok88
Гость
« : Июнь 17, 2012, 20:54 »

Здравствуйте, я совсем новичок в Qt, совсем, но мне нужно сделать программу которая бы вычисляла евклидову норму вектора, элементы которого вводятся пользователем. Первый способ реализации - вызвать внешнюю программу, которую я сделал в MinGW, только я не знаю как это сделать. Второй способ,я пытаюсь сделать это так - у меня один lineEdit для ввода элемента массива, после ввода одного элемента, нужно нажать кнопку, при нажатии этот элемент должен записаться в массив. Вторая кнопка отвечает за высчитывание нормы и выводит ее значение во второй lineEdit. Как это реализовать. И первый и второй способ.

вот .cpp
Код:
#include "norma.h"
#include "ui_norma.h"
#include "math.h"
#include <math.h>
#include <stdlib.h>

int dl=1;

float m[dl];
float *g=m[dl];

float n( float *x, int len ){
    int j;
    float cur, max, sum2;

    max = 0.0;
    for( j = 0; j < len; j++ ){
      cur = fabs(x[j]);
      if( cur > max )
        max = cur;
    }
    if( max == 0.0 )
      return 0.0;

    sum2 = 0.0;
    for( j = 0; j < len; j++ ){
      cur = x[j] / max;
      sum2 += cur * cur;
    }
    return max * sqrt(sum2);
  }


norma::norma(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::norma)
{
    ui->setupUi(this);
}

norma::~norma()
{
    delete ui;
}


void norma::vvmass()
{


    dl++;

   float m[dl];
    bool ok;
    float a=ui->elmass->text().toFloat(&ok);
    m[dl]=a;
   float *g=m;




}

void norma::on_pushButton_2_clicked()
{

    p=n(g,dl+1);
   ui->label->setNum(p);

}

вот .h
Код:
#ifndef NORMA_H
#define NORMA_H

#include <QDialog>

namespace Ui {
    class norma;
}

class norma : public QDialog
{
    Q_OBJECT

public:
    explicit norma(QWidget *parent = 0);
    ~norma();

   int dl;

   float m[dl];
 float *g=m[dl];

public slots:
    void vvmass();


private slots:
    void on_pushButton_2_clicked();

private:
    Ui::norma *ui;
};

#endif // NORMA_H

Сделать нужно сейчас, поэтому вариант прочитать книги и документацию не подходит, просто не успею., потом обязательно прочитаю. Прошу помочь с обоими способами, заранее спасибо.
Записан
bochonok88
Гость
« Ответ #1 : Июнь 17, 2012, 21:01 »

Вот, что выдает на это компилятор.

Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 17, 2012, 21:24 »

Этот код - полное ГоГнО и Qt тут совсем ни при чем.
Подучи C++, компилятор ясно тебе указал на твои ошибки.

ЗЫ: Доколе сюда на форум будут двоешники, которые не хотят разобраться сами, постить всякое говно?
ЗЫЗЫ: Форум скатился в.. , это уже не смешно.. Какая-то удручающая тенденция..
« Последнее редактирование: Июнь 17, 2012, 21:26 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
bochonok88
Гость
« Ответ #3 : Июнь 17, 2012, 21:32 »

Что нужно подучить тебе, что бы научиться читать? "Сделать нужно сейчас, поэтому вариант прочитать книги и документацию не подходит, просто не успею., потом обязательно прочитаю" В C++ мой опыт такой же как в Qt, около 4 дней. Если б было время, я бы не просил помощи, а прочитал сначала книги по C++ и Qt.
Записан
andrew.k
Гость
« Ответ #4 : Июнь 17, 2012, 23:07 »

Что нужно подучить тебе, что бы научиться читать? "Сделать нужно сейчас, поэтому вариант прочитать книги и документацию не подходит, просто не успею., потом обязательно прочитаю" В C++ мой опыт такой же как в Qt, около 4 дней. Если б было время, я бы не просил помощи, а прочитал сначала книги по C++ и Qt.
"Помогите. Мне надо сдать сессию. Опыт разработки в Qt и C++ небольшой, часа 4 примерно. Не понимаю как писать программы. Что делать?".
Найди того, кто сделает курсач за тебя. Как раз на этом форуме есть раздел объявлений о работе.
Зачем захламлять форум, мучить себя и других людей?
Записан
bochonok88
Гость
« Ответ #5 : Июнь 17, 2012, 23:48 »

Милейший, а причем тут сессия и курсач? Раздел называется вопросы новичков, вот я и спросил, либо как вызвать внешнюю программу, либо как разобраться с переменными, я не думаю, что это так сложно. Я же не прошу за меня норму вектора считать.
Записан
andrew.k
Гость
« Ответ #6 : Июнь 18, 2012, 00:06 »

Милейший, а причем тут сессия и курсач? Раздел называется вопросы новичков, вот я и спросил, либо как вызвать внешнюю программу, либо как разобраться с переменными, я не думаю, что это так сложно. Я же не прошу за меня норму вектора считать.
Если ты был бы более внимательным, ты бы не создавал этот топик, т.к. исправил бы ошибки компиляции сам.
Но даже если бы этой внимательности тебе не хватило, то ее должно было хватить на то, чтобы увидеть, что раздел "вопросы новичков" является подразделом Qt. Т.е. вопросы новичков в Qt, а не вообще полных новичков, которые 4 дня назад взялись писать курсовик.
« Последнее редактирование: Июнь 18, 2012, 00:31 от andrew.k » Записан
bochonok88
Гость
« Ответ #7 : Июнь 18, 2012, 00:32 »

Я не пишу курсовик. По поводу вопроса по Qt, это и есть он, как мне кажется, ведь я же сделал программу в MinGW и она прекрасно работает. Я не знаю исправить ошибки, пользовался поиском, написано, что нужно переменные объявить в заголовочном и в .cpp, я так и сделал, но не выходит, вот и прошу помощи. Я же не заставляю никого насильно помочь, кто хочет пусть поможет, я буду благодарен. Зачем изливать мне душу про то как вас достали глупые вопросы. Пусть админ удаляет тогда мою и другие глупые темы, я не обижусь.
Записан
andrew.k
Гость
« Ответ #8 : Июнь 18, 2012, 01:32 »

Я не пишу курсовик. По поводу вопроса по Qt, это и есть он, как мне кажется, ведь я же сделал программу в MinGW и она прекрасно работает. Я не знаю исправить ошибки, пользовался поиском, написано, что нужно переменные объявить в заголовочном и в .cpp, я так и сделал, но не выходит, вот и прошу помощи. Я же не заставляю никого насильно помочь, кто хочет пусть поможет, я буду благодарен. Зачем изливать мне душу про то как вас достали глупые вопросы. Пусть админ удаляет тогда мою и другие глупые темы, я не обижусь.
Твой вопрос к Qt имеет такое же отношение как и к евклидовой норме вектора, проще: никакого.
Проблема в незнании с++, поэтому и ответ нужно искать на соответствующем форуме.
Пример
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 18, 2012, 09:33 »

Я же не заставляю никого насильно помочь, кто хочет пусть поможет, я буду благодарен. Зачем изливать мне душу про то как вас достали глупые вопросы.
А что, умные? Прошлялись где-то, прогулевонили, а теперь "помогите". Ладно, по поводу "евклидовой нормы" (хз где Вы выдрали такой ракообразный термин). Есть просто "вектор" - массив чисел. В Евклидовом пространстве он имеет длину (корень из суммы квадратов). Если каждый элемент поделить на длину, вектор станет нормированным (длина = 1).

Код
C++ (Qt)
#include <math.h>
 
// вычисление длины вектора
float length( const float * x, int num )
{
float sum = 0.0f;
for (int i = 0; i < num; ++i)
 sum += x[i] * x[i];
return sqrt(sum);
}
 
// нормирование вектора
bool normalize( float * x, int num )
{
float len = length(x, num);
if (len == 0.0f) return false;
 
for (int i = 0; i < num; ++i)
 x[i] /= len;
 
return true;
}
 
Записан
Bepec
Гость
« Ответ #10 : Июнь 18, 2012, 20:09 »

Ответ Igors идеален. Прост и понятен даже мне, человеку далёкому от математики Улыбающийся

Только такое чуйство, что ТС не поймёт Веселый
Записан
Serr500
Гость
« Ответ #11 : Июнь 19, 2012, 07:59 »

по поводу "евклидовой нормы" (хз где Вы выдрали такой ракообразный термин)
Сэр, Вы оскорбляете своим замечанием всех профессиональных математиков, к которым, в силу своего образования, я имею наглость себя причислять!  Смеющийся
"Евклидова норма" - один из стандартных терминов высшей математики. Используется, например, в функциональном анализе. Определение элементарное - квадратный корень из суммы квадратов координат. Строгое определение требует только двух координат (плоскость), но допускается употребление этого термина и для пространств большей размерности, в том числе бесконечномерных. Всё дело в том, что бывают и неевклидовы нормы. Самый простой пример - максимум модулей координат.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июнь 19, 2012, 08:43 »

Сэр, Вы оскорбляете своим замечанием всех профессиональных математиков, к которым, в силу своего образования, я имею наглость себя причислять!  Смеющийся
Так это ж хорошо - нам математики нужны, есть работенка. Интересно - стукните в личку

"Евклидова норма" - один из стандартных терминов высшей математики. Используется, например,
Мне кажется прикладному программисту гораздо важнее понимать геометрический смысл (в данном случае длина) чем использовать формальное определение не понимая его. Говорит "Евклидова норма" - а сам делит на максимум
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 23.