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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 535

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Снова я обращаюсь к Вам за помощью... написала программку - она работает, но код очень громадный и мне кажется нерациональный. Можно ли как-то эту задачу сократить, чтобы код был не такой огромный? Вот условие задачи:
C помощью подпрограммы поменять местами первый и последний столбцы матриц A(12,9), C(7,11), и третий и пятый столбц матрицы B(8,15). Исходные и преобразованные матрицы вывести на экран дисплея. Элементы входных матриц вычисляются по формулам:
A(c индексом i,j)=tg(j)+e^cos(i);
B(c индексом i,j)=sin(3.2j+4.2)+e^tg(1.5i);
C(c индексом i,j)=cos(12.4j+1).
Данные стрингридов чтобы можно было схранять в файл и выводить из из него.
Вот мой огромный код. Спасибо!

Приложение:
  1. unit Unit6;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Grids, Math, Buttons;
  8.  
  9. type
  10. TForm6 = class(TForm)
  11. Button1: TButton;
  12. StringGrid1: TStringGrid;
  13. Button6: TButton;
  14. Button10: TButton;
  15. Label9: TLabel;
  16. Label10: TLabel;
  17. StringGrid2: TStringGrid;
  18. StringGrid3: TStringGrid;
  19. StringGrid4: TStringGrid;
  20. StringGrid5: TStringGrid;
  21. StringGrid6: TStringGrid;
  22. Label1: TLabel;
  23. Label2: TLabel;
  24. Label3: TLabel;
  25. Label4: TLabel;
  26. Label5: TLabel;
  27. Label6: TLabel;
  28. BitBtn1: TBitBtn;
  29. BitBtn2: TBitBtn;
  30. BitBtn3: TBitBtn;
  31. BitBtn4: TBitBtn;
  32.  
  33. procedure Button1Click(Sender: TObject);
  34. procedure Button6Click(Sender: TObject);
  35.  
  36.  
  37.  
  38. procedure Button10Click(Sender: TObject);
  39. procedure BitBtn1Click(Sender: TObject);
  40. procedure BitBtn2Click(Sender: TObject);
  41. procedure BitBtn3Click(Sender: TObject);
  42. procedure BitBtn4Click(Sender: TObject);
  43.  
  44.  
  45.  
  46. private
  47. { Private declarations }
  48. public
  49. { Public declarations }
  50. end;
  51.  
  52. var
  53. Form6: TForm6;
  54. Y:array of array of real;
  55. C:array of array of real;
  56. A:array of array of real;
  57. B:array of array of real;
  58. n:integer;
  59. m:integer;
  60. k:integer;
  61. l:integer;
  62.  
  63. implementation
  64.  
  65. uses Unit1;
  66.  
  67. {$R *.dfm}
  68.  
  69. procedure TForm6.Button1Click(Sender: TObject);
  70. begin
  71. Form1.Show;
  72. Form6.Close;
  73. end;
  74.  
  75. procedure TForm6.Button6Click(Sender: TObject);
  76. var i,j,t:integer;
  77. tmp:real;
  78. begin
  79. begin
  80. n:=7;
  81. m:=11;
  82. setlength(C,n,m);
  83. stringgrid3.RowCount:=n;
  84. stringgrid3.ColCount:=m;
  85. for i:=0 to n-1 do
  86. for j:=0 to m-1 do
  87. begin
  88. C[i,j]:=cos(14*j+1);
  89. stringgrid3.Cells[j,i]:=FormatFloat('0.00',C[i,j]);
  90. end;
  91. end;
  92. begin
  93. m:=stringgrid3.ColCount;
  94. k:=0;
  95. l:=10;
  96. for i:=0 to n-1 do
  97. begin
  98. tmp:=C[i,k];
  99. C[i,k]:=C[i,l];
  100. C[i,l]:=tmp;
  101. end;
  102. for t:=0 to n-1 do
  103. for j:=0 to m-1 do
  104. stringgrid6.Cells[j,t]:=FormatFloat('0.00',C[t,j]);
  105. end;
  106. begin
  107. n:=8;
  108. m:=15;
  109. setlength(B,n,m);
  110. stringgrid2.RowCount:=n;
  111. stringgrid2.ColCount:=m;
  112. for i:=0 to n-1 do
  113. for j:=0 to m-1 do
  114. begin
  115. B[i,j]:=sin(3.2*j+4.2)+power(exp(1),tan(i));
  116. stringgrid2.Cells[j,i]:=FormatFloat('0.00',B[i,j]);
  117. end;
  118. end;
  119. begin
  120. m:=stringgrid2.ColCount;
  121. k:=2;
  122. l:=4;
  123. for i:=0 to n-1 do
  124. begin
  125. tmp:=B[i,k];
  126. B[i,k]:=B[i,l];
  127. B[i,l]:=tmp;
  128. end;
  129. for t:=0 to n-1 do
  130. for j:=0 to m-1 do
  131. stringgrid5.Cells[j,t]:=FormatFloat('0.00',B[t,j]);
  132. end;
  133. begin
  134. n:=12;
  135. m:=9;
  136. setlength(A,n,m);
  137. stringgrid1.RowCount:=n;
  138. stringgrid1.ColCount:=m;
  139. for i:=0 to n-1 do
  140. for j:=0 to m-1 do
  141. begin
  142. A[i,j]:=sin(j)/cos(j)+exp(cos(i));;
  143. stringgrid1.Cells[j,i]:=FormatFloat('0.00',A[i,j]);
  144. end;
  145. end;
  146. begin
  147. m:=stringgrid1.ColCount;
  148. k:=0;
  149. l:=8;
  150. for i:=0 to n-1 do
  151. begin
  152. tmp:=A[i,k];
  153. A[i,k]:=A[i,l];
  154. A[i,l]:=tmp;
  155. end;
  156. for t:=0 to n-1 do
  157. for j:=0 to m-1 do
  158. stringgrid4.Cells[j,t]:=FormatFloat('0.00',A[t,j]);
  159. end;
  160. end;
  161. procedure TForm6.Button10Click(Sender: TObject);
  162. var
  163. i,j:integer;
  164. begin
  165. begin
  166. for i:=0 to StringGrid6.ColCount-1 do
  167. for j:=0 to StringGrid6.RowCount-1 do
  168. StringGrid6.Cells[i,j]:='';
  169. end;
  170. begin
  171. for i:=0 to StringGrid5.ColCount-1 do
  172. for j:=0 to StringGrid5.RowCount-1 do
  173. StringGrid5.Cells[i,j]:='';
  174. end;
  175. begin
  176. for i:=0 to StringGrid4.ColCount-1 do
  177. for j:=0 to StringGrid4.RowCount-1 do
  178. StringGrid4.Cells[i,j]:='';
  179. end;
  180. begin
  181. for i:=0 to StringGrid3.ColCount-1 do
  182. for j:=0 to StringGrid3.RowCount-1 do
  183. StringGrid3.Cells[i,j]:='';
  184. end;
  185. begin
  186. for i:=0 to StringGrid2.ColCount-1 do
  187. for j:=0 to StringGrid2.RowCount-1 do
  188. StringGrid2.Cells[i,j]:='';
  189. end;
  190. begin
  191. for i:=0 to StringGrid1.ColCount-1 do
  192. for j:=0 to StringGrid1.RowCount-1 do
  193. StringGrid1.Cells[i,j]:='';
  194. end;
  195. end;
  196.  
  197. procedure TForm6.BitBtn1Click(Sender: TObject);
  198. var
  199. s :TStringlist;
  200. j:Integer;
  201. Str:String;
  202. posy, posx, i : Integer;
  203.  
  204. Begin
  205. with TSaveDialog.Create(Owner) do
  206. begin
  207. DefaultExt:='.txt';
  208.  
  209. if not Execute then exit;
  210. s:=TStringList.Create;
  211. s.Clear;
  212. for i:=0 to StringGrid1.RowCount-1 do
  213. begin
  214. Str := '';
  215. for j:=0 to StringGrid1.ColCount-1 do
  216. str:=str+StringGrid1.Cells[j, i]+' ';
  217. s.Add(Str);
  218. end;
  219. s.Add('T2');
  220. for i:=0 to StringGrid2.RowCount-1 do
  221. begin
  222. Str := '';
  223. for j:=0 to StringGrid2.ColCount-1 do
  224. str:=str+StringGrid2.Cells[j, i]+' ';
  225. s.Add(Str);
  226. end;
  227. s.Add('T3');
  228. for i:=0 to StringGrid3.RowCount-1 do
  229. begin
  230. Str := '';
  231. for j:=0 to StringGrid3.ColCount-1 do
  232. str:=str+StringGrid3.Cells[j, i]+' ';
  233. s.Add(Str);
  234. end;
  235.  
  236. S.SaveToFile(FileName);
  237. end;
  238. s.Free;
  239. end;
  240.  
  241. procedure TForm6.BitBtn2Click(Sender: TObject);
  242. var
  243. s :TStringlist;
  244. i,j,yd:Integer;
  245. Str:String;
  246. posy, posx, py: Integer;
  247. t1,t2,t3:boolean;
  248.  
  249.  
  250. Begin
  251. t1:=true;
  252. t2:=false;
  253. t3:=false;
  254. with TOpenDialog.Create(Owner) do
  255. begin
  256. py:=0;
  257. DefaultExt:='.txt';
  258.  
  259. if not Execute then exit;
  260. s:=TStringList.Create;
  261. S.LoadFromFile(FileName);
  262. For posy := 1 to S.Count do
  263. begin
  264. posx := 0;
  265. Str := '';
  266. For i := 1 to Length(S.Strings[posy-1]) do
  267. begin
  268. if S.Strings[posy-1][i] <> ' ' then
  269. begin
  270. Str := Str + S.Strings[posy-1][i];
  271. if Str = 'T2' then
  272. begin
  273. t1:=false;
  274. t2:=true;
  275. py:=posy;
  276. end;
  277. if Str = 'T3' then
  278. begin
  279. t1:=false;
  280. t2:=false;
  281. t3:=true;
  282. py:=posy;
  283. end;
  284. end
  285. else
  286. begin
  287. if t1= true then StringGrid1.Cells[posx, posy-1] := Str;
  288. if t2 = true then StringGrid2.Cells[posx, posy-1-py] := Str;
  289. if t3 = true then StringGrid3.Cells[posx, posy-1-py] := Str;
  290. Str := '';
  291. inc(posx);
  292. end;
  293. end;
  294. end;
  295. end;
  296. S.Free;
  297. end;
  298.  
  299. procedure TForm6.BitBtn3Click(Sender: TObject);
  300. var
  301. s :TStringlist;
  302. j:Integer;
  303. Str:String;
  304. posy, posx, i : Integer;
  305.  
  306. Begin
  307. with TSaveDialog.Create(Owner) do
  308. begin
  309. DefaultExt:='.txt';
  310.  
  311. if not Execute then exit;
  312. s:=TStringList.Create;
  313. s.Clear;
  314. for i:=0 to StringGrid4.RowCount-1 do
  315. begin
  316. Str := '';
  317. for j:=0 to StringGrid4.ColCount-1 do
  318. str:=str+StringGrid4.Cells[j, i]+' ';
  319. s.Add(Str);
  320. end;
  321. s.Add('T2');
  322. for i:=0 to StringGrid5.RowCount-1 do
  323. begin
  324. Str := '';
  325. for j:=0 to StringGrid5.ColCount-1 do
  326. str:=str+StringGrid5.Cells[j, i]+' ';
  327. s.Add(Str);
  328. end;
  329. s.Add('T3');
  330. for i:=0 to StringGrid6.RowCount-1 do
  331. begin
  332. Str := '';
  333. for j:=0 to StringGrid6.ColCount-1 do
  334. str:=str+StringGrid6.Cells[j, i]+' ';
  335. s.Add(Str);
  336. end;
  337.  
  338. S.SaveToFile(FileName);
  339. end;
  340. s.Free;
  341. end;
  342.  
  343.  
  344. procedure TForm6.BitBtn4Click(Sender: TObject);
  345. var
  346. s :TStringlist;
  347. i,j,yd:Integer;
  348. Str:String;
  349. posy, posx, py: Integer;
  350. t1,t2,t3:boolean;
  351.  
  352.  
  353. Begin
  354. t1:=true;
  355. t2:=false;
  356. t3:=false;
  357. with TOpenDialog.Create(Owner) do
  358. begin
  359. py:=0;
  360. DefaultExt:='.txt';
  361.  
  362. if not Execute then exit;
  363. s:=TStringList.Create;
  364. S.LoadFromFile(FileName);
  365. For posy := 1 to S.Count do
  366. begin
  367. posx := 0;
  368. Str := '';
  369. For i := 1 to Length(S.Strings[posy-1]) do
  370. begin
  371. if S.Strings[posy-1][i] <> ' ' then
  372. begin
  373. Str := Str + S.Strings[posy-1][i];
  374. if Str = 'T2' then
  375. begin
  376. t1:=false;
  377. t2:=true;
  378. py:=posy;
  379. end;
  380. if Str = 'T3' then
  381. begin
  382. t1:=false;
  383. t2:=false;
  384. t3:=true;
  385. py:=posy;
  386. end;
  387. end
  388. else
  389. begin
  390. if t1= true then StringGrid4.Cells[posx, posy-1] := Str;
  391. if t2 = true then StringGrid5.Cells[posx, posy-1-py] := Str;
  392. if t3 = true then StringGrid6.Cells[posx, posy-1-py] := Str;
  393. Str := '';
  394. inc(posx);
  395. end;
  396. end;
  397. end;
  398. end;
  399. S.Free;
  400. end;
  401.  
  402. end.
  403.  


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

Вопрос задала: Violina (статус: Посетитель)
Вопрос отправлен: 28 апреля 2008, 14:45
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Разбираться в чужом коде сложнее и дольше, чем написать программу с нуля. Особенно, когда в этом коде нету ни единого комментария!
Мне пока заняться нечем, поэтому я написал свой проект и прицепляю его к ответу.
Как говорится - "найди 10 отличий".
З.Ы. Сохранение/загрузку не писал, т.к. из условия непонятно, в каком формате (текстовый или двоичный) хранить данные. Если скажешь - могу дописать.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 29 апреля 2008, 09:27
Оценка за ответ: 5

Комментарий к оценке: спасибо огромное

Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 30 апреля 2008, 08:21; участников в обсуждении: 3.
Violina

Violina (статус: Посетитель), 29 апреля 2008, 11:58 [#1]:

min@y™ спасибо Вам огромное за программу! Мне надо чтобы на одну кнопку можно было сохранить в текстовый файл, а на другую из него в стринггриды вывести.. чтобы сами дирректорию файла сохранения указывали.. и сделайте, пожалуйста, кнопку очистки - ато у меня очистка получаетя на 1000 символов... ну и то что для меня совсем сложно - блок-схема.. просто в Вашей программе для меня очень много нового и непонятного..
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 29 апреля 2008, 11:59 [#2]:

Вообще, конечно, конструкции типа if t1=true очень "радуют" - раз t1 булевская переменная, то ее незачем сравнивать с true
min@y™

min@y™ (статус: Доктор наук), 29 апреля 2008, 14:06 [#3]:

Раз файл должен быть текстовый (такое условие задачи? ), пришли мне пример его вида. А то что-нибудь не то сделаю. Бинарный файл - проще: текстовый файл придётся парсить при загрузке данных из него.

Цитата:

в Вашей программе для меня очень много нового и непонятного..


Чего там непонятного? Спрашивай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 29 апреля 2008, 14:39 [#4]:

От тотального безделья на работе дополнил свой пример очисткой, сохранением и загрузкой исходных данных в ini-файл/из ini-файла.
Куды выслать?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Violina

Violina (статус: Посетитель), 29 апреля 2008, 15:27 [#5]:

Спасибо большое! мне нужно то бы запрашивало куда сохраняло и запрашивало от куда доставать... и ещё...не понятно для чего нужен XPManifest на форме? E-mail Violinka2008@yandex.ru
min@y™

min@y™ (статус: Доктор наук), 29 апреля 2008, 16:07 [#6]:

Цитата:


мне нужно то бы запрашивало куда сохраняло и запрашивало от куда доставать

Сделано с помощью TOpenDialog и TSaveDialog.

Цитата:


и ещё...не понятно для чего нужен XPManifest на форме?

Для придания интерфейсу вида под текущую тему Windows XP. Попробуй его удалить и пересобрать. Увидишь, что получится.
Исходник выслал по указанному адресу.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Violina

Violina (статус: Посетитель), 29 апреля 2008, 16:30 [#7]:

спасиб) за всё... но письма я не получила...
min@y™

min@y™ (статус: Доктор наук), 30 апреля 2008, 08:21 [#8]:

Странно, однако, может твой сервер отсеял моё письмо как спам, такое бывает. Ладно, закачал я файл на сервис для скачивания. Чтоб скачать, тыкай сюда.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 17 октября 2017, 21:49
Выполнено за 0.06 сек.
Рейтинг@Mail.ru