| 
| 
 | Вопрос # 1 710/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Помогите, пожалуйста.
 Я пишу дипломку на Delphi.
 Программа должна находить обратную матрицу, произведение матриц, произведение матрицы на вектор и интегралы от введенных матриц. Ввод матрицы осуществляется поэлементно нажатием на кнопку(не через таблицу).
 Тип элементов массива - Extended. На другие типы программа ругается и не хочет работать.
 Когда пыталась перемножить матрицу на вектор, программа выдала ошибку про переполнение стека. В интернете нашла, что лучше использовать указатель на массив при выполнении таких операций, тем более, что Extended - самый "тяжелый" тип.
 И теперь я не могу корректно работать с указателями на массив, программа выдает:project project1.exe  raised exception class EAccessViolation with message 'Access violation at address in module'  и т.д.
 Помогите преодолеть эту ошибку, пожалуйста.
 Заранее благодарю всех экспертов
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим unit Unit11;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls, ComCtrls, jpeg, det_txt,math; typeFloat = Double;/////////////matr1 = array[1..poryadok_matr] of Float;matr2 = array[1..poryadok_matr,1..poryadok_matr]  of Float;////////////     TFunc = record          Ffunc_t:string;          Fkoef_t:string;          Fkoef:Float;          Fstep_t:string;          Fstep:integer;    end;TMatr1_func = array{[1..poryadok_matr]} of TFunc;TMatr2_func = array[1..poryadok_matr,1..poryadok_matr] of TFunc;{..................................} private    { Private declarations }     procedure CreateParams(var Params: TCreateParams); override;  public    { Public declarations }  end;var  Form_raschet_x: TForm_raschet_x;  code,razmer_sist,i,j,i_x_1:integer;  x,f,x_1,umn_rez,vekt_rez:^matr1;  str,vektor_t,buf_B:^matr1_t;  b_dop,b_1,b,a:^matr2;  razmer_i, razmer_j, razmer_i_1,razmer_j_1,im,jm:integer;  x_t,f_t:^TMatr1_func;  a_t:^TMatr2_func;  b_t:^matr2_t;implementation{$R *.dfm}procedure TForm_raschet_x.FormCreate(Sender: TObject);begin     PageControl1.ActivePageIndex:=0;end; procedure TForm_raschet_x.CreateParams(var Params: TCreateParams);  begin  inherited CreateParams(Params);   Params.Style := Params.Style or ws_popup xor ws_dlgframe;end;  procedure TForm_raschet_x.Button_fClick(Sender: TObject); begin      if (StrToInt(Edit_step2.Text)>=0) and (StrToInt(Edit_step2.Text)<=3) then      begin      GetMem(f,SizeOf(Matr1));//new(f);      GetMem(f_t,SizeOf(TMatr1_func));//new(f_t);      j:=j+1;     // inc(f);    //  inc(f_t);      t:=0.5;      label32.Caption:=IntToStr(j);  if RadioButton3.Checked=true then  begin        f^[j]:=StrToFloat(Edit_koef2.text)*IntPower(sin(t),StrToInt(Edit_step2.Text));        f_t^[j].Ffunc_t:=RadioButton3.Caption;  end;  if RadioButton4.Checked=true then  begin       f^[j]:=StrToFloat(Edit_koef2.text)*IntPower(cos(t),StrToInt(Edit_step2.Text));       f_t^[j].Ffunc_t:=RadioButton4.Caption;   end;   f_t^[j].Fstep_t:=Edit_step2.Text;  f_t^[j].Fkoef_t:=Edit_koef2.Text;  f_t^[i].Fkoef:=StrToInt(Edit_koef2.Text);  f_t^[i].Fstep:=StrToInt(Edit_step2.Text);   if j=razmer_j then  Button_f.Visible:=false;  end    freeMem(f,SizeOf(Matr1));  freeMem(f_t,SizeOf(TMatr1_func));  end; end.   
|  |   Вопрос задала: Татьяна (статус: Посетитель)Вопрос отправлен: 19 июня 2008, 17:59
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Мережников Андрей Здравствуйте, Татьяна!В строке TMatr1_func = array{[1..poryadok_matr]} of TFunc; у Вас объявляется динамический массив - это так задумано? размерность массива Вы оформили как комментарий, поставив фигурные скобки. Если да, то где инициализируется его размер?
 Попробуйте их убрать. Да, еще, в приложении к вопросу Вы прикрепили .exe файл. Он то как-раз меньше всего нужен для поиска ошибок в программе. В другой раз отправляйте сам проект (*.dpr, *.pas, *.dfm и т.д.), а exe не надо
 
|  | Ответ отправил: Мережников Андрей (статус: Абитуриент)Время отправки: 19 июня 2008, 19:11
 
 |  Ответ #2. Отвечает эксперт: Шичко Игорь Здравствуйте, Татьяна!В строке Float = Double; нет ли у Ва конфликта, ведь это разные типы данных.
 Попробуйте формировать матрицу без указателей (может с использованием промежуточного массива).
 Т.е. построчное преобразование элементов.
 Я бы попробовал использовать динамический массив с определением размерности через SetLength(имя массива).
 Если не получится, то прикрепите вместо *.exe файл *.pas
 
|  | Ответ отправил: Шичко Игорь (статус: 9-ый класс)Время отправки: 20 июня 2008, 07:52
 
 |  
 Мини-форум вопросаВсего сообщений: 21; последнее сообщение — 1 июля 2008, 15:22; участников в обсуждении: 5. Страницы: [1] [2] [Следующая »]  
|   | Мережников Андрей (статус: Абитуриент), 19 июня 2008, 19:14 [#1]:Несколько сумбурный получился ответ. Следует читать так: где инициализируется размер динамического массива (переменных, имеющих тип TMatr1_func? Попробуйте в указанной строке убрать фигурные скобки |  
|   | Татьяна (статус: Посетитель), 19 июня 2008, 19:26 [#2]:Спасибо за ответ.Убрала скобки - также не работает. Как вам можно выслать .pas файл? |  
|   | Вадим К (статус: Академик), 19 июня 2008, 23:21 [#3]:а зачем в программе используются указатели, если можно и без них обойтись? просто хочеться проблем на свою голову? Если не понимаете, что такое указатели, как выделяется и освобождается память - не используйте их. Помните простое правило - для начала надо сделать, что бы работало, а потом оптимизировать.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 20 июня 2008, 08:37 [#4]:Посмотрел кусок твоего кода. Жуть какая! И ни одного комментария по делу. Как ты в нём разбираешься - ума не разложу. ИМХО, выкинь эту страсть и напиши всё заново, без всяких указателей и прочей ненужной фигни, иначе сама запутаешься ещё больше. Начни, хотя бы, с описания типов, например:
 
 
 type
  TVector: array of Extended; // Вектор 
  TMatrix: array of array of Extended; // Матрица Затем разбей задачу не несколько подзадач-функций, каждая из которых будет делать одну операцию над матрицей (матрицами): произведение, нахождение обратной и т.д.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Паровоз (статус: 10-ый класс), 21 июня 2008, 22:52 [#5]:"Программа должна находить ... интегралы от введенных матриц" Очень интересная задача.
 |  
|   | Мережников Андрей (статус: Абитуриент), 22 июня 2008, 21:23 [#6]:to Паровоз. В высшей математике действительно существует понятие интегрирование матриц. |  
|   | Паровоз (статус: 10-ый класс), 26 июня 2008, 12:05 [#7]:to Мережников Андрей: В высшей математике существует понятие интегрирования не матриц, а
 матричных фунций (о которых никакой речи в вопросе нет).
 |  
|   | Мережников Андрей (статус: Абитуриент), 26 июня 2008, 18:34 [#8]:Видимо высшую математику нам преподавали в разных институтах   |  
|   | Татьяна (статус: Посетитель), 26 июня 2008, 18:46 [#9]:У меня каждый элемент матрицы представляет собой периодическую функцию и я беру интеграл матрицы поэлементно. 
 Всем спасибо за советы.
 Я убрала указатели.
 
 Программа великолепно у меня работает и находит правильное решение. И вообще, я запрограммировала метод, который в математике еще не применялся для того класса уравнений, который я рассматривала. Как сказала мой научный руководитель, мы получили совершенно новый результат.
 Я на днях получаю красный диплом и меня также рекомендовали для поступления в магистратуру.
 |  
|   | Вадим К (статус: Академик), 26 июня 2008, 23:39 [#10]: мы получили совершенно новый результат Насколько я помню математику, в ней не бывает "совершенно новых результатов". Бывает правильный и неправильные.
 Напрашивается вопрос - за что дали диплом.
 Возможно хотели написать "получили новый метод решения", тем более, что это более коррелировано с первой частью высказывания. Но тогда я опять не понимаю, за что дали диплом.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Татьяна (статус: Посетитель), 27 июня 2008, 13:39 [#11]:Да у вас, Вадим К, обыкновенная зависть. Вы уже и математику всю позабыли, и от времени вы немного приотстали, потому как в нынешнеее время девушкам незазорно учиться на матфаке, да еще и получать новые результаты в математике. Новый метод решения я не получала. Я его адаптировала для класса дифференциально-разностных уравнений с запаздывающим аргументом. А этого пока никто не делал.
 
 Кроме того, сейчас девушки не только не сидят дома, но и зарабатывают больше своих мужей и также более успешны в жизни, чем мужчины.
 В связи с тем вопросом, который вы мне задали (за что мне дали диплом) у меня возник вопрос: за что у вас на этом сайте статус: Кандидат наук?
 А насчет указателей я бы хотела добавить, что в университете преподаватели мне порекомендовали использовать указатели в программе.
 |  
|   | Вадим К (статус: Академик), 27 июня 2008, 21:35 [#12]:Я абсолютно не против девушек, которые учаться на матфаке. Я не против тех, кто открывает новые методы решений. Но вы написали, что преподаватель сказал, что вы  получили новый результат - значит старый был неправильный? Вот это меня и смутило. В математике 2+2 будет 4, как не крути (если мы конечно в десятичной системе находимся). все другие результаты выражения 2+2 идут лесом по известной причине. Мой статус на сайте  - это идея Андрея (администратора и создателя сего сайта). Он расчитывается на основании количества ответов, которые я дал. Можете заглянуть в профиль и убедиться, что кол-во их не мало.
 В реальной жизни - я окончил магистратуру, инженер связи.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Татьяна (статус: Посетитель), 28 июня 2008, 17:12 [#13]:Ну теперь я вижу, что вы нормальный  ) А то сразу в атаку бросились - за что дали мне диплом.
 За знания! Я ведь еще и преподаю математику (с 17-ти лет!) в частном порядке.
 |  
|   | Вадим К (статус: Академик), 28 июня 2008, 18:21 [#14]:Я ведь сразу написал, с чем я не согласен в вашем высказывании, но вы напали на меня. Ведь достаточно было сказать  - да, тут чуточку описалась, последипломная радость/праздник/алкоголь (вычеркнуть лишнее). А нет, сразу о феминизме, о равноправии полов... 
 Хотя всё это уже оффтоп.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Паровоз (статус: 10-ый класс), 28 июня 2008, 19:48 [#15]:to Вадим К. "вы получили новый результат - значит старый был неправильный"
 
 Вы совершено не в курсе научной терминологии. Если получен новый результат, то это не означает, что старый результат неправильный. Это просто означает, что старого результата нет. Это общепринятая терминология в математической науке, в которой "совершенно новые результаты" получают постоянно.
 |  
|   | Вадим К (статус: Академик), 29 июня 2008, 00:52 [#16]:Я в курсе научной терминологии. Получен новый результат - в математике - это конщунство. В спорте новый результат может быть получен - спортсмен пробежал на секунду быстрее. А вот в математике результат может быть правильным или неправильным. Может быть получен новый метод нахождения результата (решения). Но не результат! Но в некоторых случаях новый результат может быть получен. если старый и новый есть неверным. Но это больше характерно для физики, но не для математики. Хотя, у вас в России всё не так как в людей. Я к этому привык и не обижаюсь.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 30 июня 2008, 12:44 [#17]:Вопрос: какова вероятность, выйдя на улицу, встретить живого динозавра? Ответ: 50%: или встречу, или не встречу.
 
 И, ведь, хрен опровергнешь!
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 30 июня 2008, 16:47 [#18]:не надо ругаться. живого динозавра? 0%. Его точно не встречу.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Паровоз (статус: 10-ый класс), 30 июня 2008, 21:05 [#19]:"Я в курсе научной терминологии" Нет, Вы не в курсе научной терминологии в математике. "Новый результат" - это общепринятый в математических исследованиях термин. И возражаете Вы против него или нет - от этого ничего не изменится. Этот термин применялся, применяется и будет применяться.
 |  
|   | Вадим К (статус: Академик), 1 июля 2008, 09:41 [#20]:Хватит оффтопить, мое отношение к этому выражению вы дал выше. Галочка "подтверждения прочтения" - вселенское зло. |  Страницы: [1] [2] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |