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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: максимальное количество елементов в двумерном масиве  (Прочитано 27816 раз)
alexman
Гость
« Ответ #30 : Апрель 10, 2010, 10:37 »

Разделяй и властвуй Смеющийся
Записан
Ubuntu_linux
Гость
« Ответ #31 : Апрель 29, 2010, 00:58 »

Вот сделал истчо и так для a[10][10]:

Код
C++ (Qt)
QVector <QVector <double> > a(10,QVector <double>(10));

 Но возникла проблемка!
Когда пишеш это в заголовочном файле, то система ругается.
Цитировать
matrix3diagonal.h:19: error: expected identifier before numeric constant
Как это обойти? Шокированный
« Последнее редактирование: Апрель 29, 2010, 01:07 от Ubuntu_linux » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #32 : Апрель 29, 2010, 01:08 »

Цитировать
Но возникла проблемка!
Когда пишеш это в заголовочном файле, то система ругается.
Цитировать
matrix3diagonal.h:19: error: expected identifier before numeric constant
Как это обойти?
Не писать это в заголовочном файле))

Ну или на худой конец можно так:
static QVector <QVector <double> > a(10,QVector <double>(10));

На сколько я понял, Вы решаете двумерную краевую задачу..
Можно подробней? Алгоритм опишите, плз)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Ubuntu_linux
Гость
« Ответ #33 : Апрель 29, 2010, 12:59 »

Дело в том, что так не получается, если сделать static. Компилятор начинает жаловаться когда во время декларирования появляется "(100). Проблему получилось обойти другим методом, а именно декларируем в matrix3diagonal.h так
Код
C++ (Qt)
QVector <QVector <double>> a;
а затем в matrix3diagonal.cpp в функции matrix3diagonal ()
Код
C++ (Qt)
matrix3diagonal () {
            a.resize (M);
   for (int i = 0; i <M; + + i){
     a [i]. resize (M);}

Также нашел другой метод, но так у меня не получается (уже получаєтся), надо просто удалить  с matrix3diagonal.cpp функцию которая там по дефолту matrix3diagonal () {}
Код
C++ (Qt)
class Grid
{
   private:
       vector<vector<Token*> > grid;
   public:
      Grid() : grid ( 6, vector<Token*>(7) ) {}
};
а также так:
Код
C++ (Qt)
class Grid
{
public:
 Grid()  // default ctor
 {
   // set size of grid
   grid.resize(6);
   for(int i = 0; i < 6; ++i)
     grid[i].resize(7);
 }
 
private:
 vector< vector<Token*> > grid;
};
Но вылез новый баг, далее расскажу подробнее.
Алгоритм, там нет ничего секретного, все делается по стандартному. Я переписываю уравнения в частных производных в разносное уравнения, а затем решаю это уравнение. Нужно подробно?
« Последнее редактирование: Апрель 29, 2010, 13:25 от Ubuntu_linux » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #34 : Апрель 29, 2010, 13:39 »

Цитировать
Дело в том, что так не получается, если сделать static. Компилятор начинает жаловаться когда во время декларирования появляется "(100).
Что у Вас за компилятор? У меня всё работает.. (исходники приатачены) Хотя так делать, действительно, не стоит - заголовочный файл: он на то и заголовочный))

Цитировать
Алгоритм, там нет ничего секретного, все делается по стандартному. Я переписываю уравнения в частных производных в разносное уравнения, а затем решаю это уравнение. Нужно подробно?
   
Ясненько) И большая там у вас сетка получается?
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Ubuntu_linux
Гость
« Ответ #35 : Апрель 29, 2010, 14:12 »

Получается какая-понятка, Вы не создавали класс в заголовочному файле, а если поместить объявление вектора в середину класса, то компилятор ругается.
Но у меня появился другой баг, у меня матрица не хочет выводиться второй раз (после решения), причем программа не ругается, но матрицу второй раз не выводит.

Сетка получается 1000 * 1000 при средней точности. К тому же так называемая "явная" схема не дает требуемой точности для моих уравнений, поэтому мне нужно использовать "не явную" схему т.е. по ходу решения решать систему из N алгебраических уравнений, там получается трех диагональная матрица, которую я решаю методом прогонки.
Записан
Ubuntu_linux
Гость
« Ответ #36 : Апрель 29, 2010, 14:20 »

А еще я не могу понять, почему у меня в консоль ничего не выводится, хотя она запускается. У меня QT под линукс. Непонимающий
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #37 : Апрель 29, 2010, 14:43 »

Цитировать
Вы не создавали класс в заголовочному файле, а если поместить объявление вектора в середину класса, то компилятор ругается.
Вот создал в классе)) Никто не ругается)) (исходники приатачены) (Тока не вздумайте ентот изврат использовать в программе)

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

Цитировать
А еще я не могу понять, почему у меня в консоль ничего не выводится, хотя она запускается. У меня QT под линукс
А вы как программу запускаете?




Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Ubuntu_linux
Гость
« Ответ #38 : Апрель 29, 2010, 15:55 »

вот исходники (ниже):
Если поставить вместо Q-векторов, просто матрицу a[100][100] то все работает нормально, а если поставить векторы, то матрица после ришения не выводится. Непонимающий


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

Так сделать так как вы предложили не получается, вылезает ошибка "multiple definition of` matrix3diagonal:: _row '"хотя вроде все правельно Непонимающий
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #39 : Апрель 29, 2010, 16:07 »

Цитировать
консоль сама запускается, если выполняешь программу в QT, хотя когда пойти в папку с программой и попробовать запустить программу, то ничего не получается, даже никак не реагирует.
Ахахаа)) Реагирует, можете убедиться в этом посмотрев в системном мониторинге (ну или как он у вас там называется) Прога Ваша загружается на самом деле и выполняется.. Вы наверно её "мышкой" запускали) Попробуйте так: (у вас, разумеется, путь и название другое будет)
Код
C++ (Qt)
max@T1000:~/Qt-projects/TestMatrix_v2$ ./TesrMatrix
 

Пойду взгляну на ваши исходники) Мне, кстати тож скоро нужно будет писать что-то подобное, но я склоняюсь к функциям Грина..

 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Ubuntu_linux
Гость
« Ответ #40 : Апрель 29, 2010, 16:19 »

Цитировать
консоль сама запускается, если выполняешь программу в QT, хотя когда пойти в папку с программой и попробовать запустить программу, то ничего не получается, даже никак не реагирует.
Ахахаа)) Реагирует, можете убедиться в этом посмотрев в системном мониторинге (ну или как он у вас там называется) Прога Ваша загружается на самом деле и выполняется.. Вы наверно её "мышкой" запускали) Попробуйте так: (у вас, разумеется, путь и название другое будет)
Код
C++ (Qt)
max@T1000:~/Qt-projects/TestMatrix_v2$ ./TesrMatrix
 


Пойду взгляну на ваши исходники) Мне, кстати тож скоро нужно будет писать что-то подобное, но я склоняюсь к функциям Грина..

 
Кстати в исходниках, реализация метода прогонки, а не решения PDE.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #41 : Апрель 29, 2010, 16:28 »

Ох Майн гот!

Вам повезло, что niXman Ваших исходников не видел)

Я же Вам говорил не используйте тот приём что я приводил (со статическими членами)..

Цитировать
Кстати в исходниках, реализация метода прогонки, а не решения PDE.
Ну я уж понял)

Сейчас покажу, как бы я сделал эту хрень))
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Ubuntu_linux
Гость
« Ответ #42 : Апрель 29, 2010, 16:33 »

Ох Майн гот!

Вам повезло, что niXman Ваших исходников не видел)

Я же Вам говорил не используйте тот приём что я приводил (со статическими членами)..

Цитировать
Кстати в исходниках, реализация метода прогонки, а не решения PDE.
Ну я уж понял)

Сейчас покажу, как бы я сделал эту хрень))

так я просто для пробы Смеющийся
Записан
Ubuntu_linux
Гость
« Ответ #43 : Апрель 29, 2010, 18:32 »

А я тем временем нашел ошибку, которая приводила к не выполнению части кода с использованием QVector, хотя если использовать обычные массивы, то проблемы не было, как я уже говорил.
Суть проблемы заключалась как всегда в "1", а именно в части кода:
Код
C++ (Qt)
.........
void matrix3diagonal::back(){ j=N-1;
   x[j]=(b[j]-a[j][j-1]*beta[j])/(a[j][j-1]*alpha[j]+a[j][j]);
   for(i=N-1;i>-1;i--){x[i-1]=alpha[i]*x[i]+beta[i]; } //xn розвязок
}//back
...........
 
надо в цикле вместо i>-1 поставить i>0

робочий исходник:
« Последнее редактирование: Апрель 29, 2010, 18:46 от Ubuntu_linux » Записан
Ubuntu_linux
Гость
« Ответ #44 : Апрель 29, 2010, 18:50 »

Интересно посмотреть на  вашу реализацию  Непонимающий
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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