Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 710

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста.
Я пишу дипломку на Delphi.
Программа должна находить обратную матрицу, произведение матриц, произведение матрицы на вектор и интегралы от введенных матриц. Ввод матрицы осуществляется поэлементно нажатием на кнопку(не через таблицу).
Тип элементов массива - Extended. На другие типы программа ругается и не хочет работать.
Когда пыталась перемножить матрицу на вектор, программа выдала ошибку про переполнение стека. В интернете нашла, что лучше использовать указатель на массив при выполнении таких операций, тем более, что Extended - самый "тяжелый" тип.
И теперь я не могу корректно работать с указателями на массив, программа выдает:project project1.exe raised exception class EAccessViolation with message 'Access violation at address in module' и т.д.
Помогите преодолеть эту ошибку, пожалуйста.
Заранее благодарю всех экспертов

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit11;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, ExtCtrls, ComCtrls, jpeg, det_txt,math;
  6.  
  7. type
  8. Float = Double;
  9. /////////////
  10. matr1 = array[1..poryadok_matr] of Float;
  11. matr2 = array[1..poryadok_matr,1..poryadok_matr] of Float;
  12. ////////////
  13.  
  14. TFunc = record
  15. Ffunc_t:string;
  16. Fkoef_t:string;
  17. Fkoef:Float;
  18. Fstep_t:string;
  19. Fstep:integer;
  20. end;
  21. TMatr1_func = array{[1..poryadok_matr]} of TFunc;
  22. TMatr2_func = array[1..poryadok_matr,1..poryadok_matr] of TFunc;
  23. {..................................}
  24. private
  25. { Private declarations }
  26. procedure CreateParams(var Params: TCreateParams); override;
  27. public
  28. { Public declarations }
  29. end;
  30. var
  31. Form_raschet_x: TForm_raschet_x;
  32. code,razmer_sist,i,j,i_x_1:integer;
  33. x,f,x_1,umn_rez,vekt_rez:^matr1;
  34. str,vektor_t,buf_B:^matr1_t;
  35. b_dop,b_1,b,a:^matr2;
  36. razmer_i, razmer_j, razmer_i_1,razmer_j_1,im,jm:integer;
  37. x_t,f_t:^TMatr1_func;
  38. a_t:^TMatr2_func;
  39. b_t:^matr2_t;
  40. implementation
  41. {$R *.dfm}
  42. procedure TForm_raschet_x.FormCreate(Sender: TObject);
  43. begin
  44. PageControl1.ActivePageIndex:=0;
  45. end;
  46. procedure TForm_raschet_x.CreateParams(var Params: TCreateParams);
  47. begin
  48. inherited CreateParams(Params);
  49.  
  50. Params.Style := Params.Style or ws_popup xor ws_dlgframe;
  51. end;
  52.  
  53. procedure TForm_raschet_x.Button_fClick(Sender: TObject);
  54.  
  55. begin
  56. if (StrToInt(Edit_step2.Text)>=0) and (StrToInt(Edit_step2.Text)<=3) then
  57. begin
  58. GetMem(f,SizeOf(Matr1));//new(f);
  59. GetMem(f_t,SizeOf(TMatr1_func));//new(f_t);
  60. j:=j+1;
  61. // inc(f);
  62. // inc(f_t);
  63. t:=0.5;
  64. label32.Caption:=IntToStr(j);
  65. if RadioButton3.Checked=true then
  66. begin
  67. f^[j]:=StrToFloat(Edit_koef2.text)*IntPower(sin(t),StrToInt(Edit_step2.Text));
  68. f_t^[j].Ffunc_t:=RadioButton3.Caption;
  69. end;
  70. if RadioButton4.Checked=true then
  71. begin
  72. f^[j]:=StrToFloat(Edit_koef2.text)*IntPower(cos(t),StrToInt(Edit_step2.Text));
  73. f_t^[j].Ffunc_t:=RadioButton4.Caption;
  74. end;
  75.  
  76. f_t^[j].Fstep_t:=Edit_step2.Text;
  77. f_t^[j].Fkoef_t:=Edit_koef2.Text;
  78. f_t^[i].Fkoef:=StrToInt(Edit_koef2.Text);
  79. f_t^[i].Fstep:=StrToInt(Edit_step2.Text);
  80.  
  81. if j=razmer_j then Button_f.Visible:=false;
  82. end
  83.  
  84.  
  85. freeMem(f,SizeOf(Matr1));
  86. freeMem(f_t,SizeOf(TMatr1_func));
  87.  
  88.  
  89. end;
  90.  
  91. end.
  92.  
  93.  
  94.  


Татьяна Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Татьяна (статус: Посетитель)
Вопрос отправлен: 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]

Паровоз

Паровоз (статус: 10-ый класс), 1 июля 2008, 15:22 [#21]:

to Валим К:
Выше отношение - элементарное заблуждение. В этом легко убедиться, открыв любой словарь. Основное значение слова "результат" - итог некоторой деятельности. В том числе математический результат - это итог деятельности математика, представленный на обсуждение математического сообщества и этот итог (результат) может быть не только верным и неверным, а известным сообществу или неизвестным (новым).

То, что Вы понимаете под словом "результат" - в математике называется иначе (утверждение, теорема и т.п.). В том, что Ваше утверждение несостоятельно, можно увидеть, взяв положение ВАК о защите диссертаций, где вполне определенно используется термин "результат" как итог деятельности, а не как математическое утверждение. И Ваша попытка "выстроить" всех по своему ранжиру (в том числе профессоров и академиков, которые пользуются этим термином) просто абсурдна.

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 21:45
Выполнено за 0.02 сек.