2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2, 3  След.
 
 Re: Задание на Delphi
Сообщение03.10.2010, 14:51 
Спасибо всем! Поправил. Теперь другая проблема- ошибок то нет, но текста в листбоксе не видно. Он как бы есть(потому что строки и столбцы выделяются, но его не видно). В чём причина? Да и проблема с ln(A/x^2) осталась. Как выбросить случай x=0 в цикле
Код:
x:=-6;
Repeat
matrix[x+7,3]:=Ln(A/(x*x));
x:=x+1;
until x>6

Вот весь код :
код: [ скачать ] [ спрятать ]
  1. unit Unit1; 
  2.  
  3. interface 
  4.  
  5. uses 
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7.   Dialogs, StdCtrls; 
  8.  
  9. type 
  10.   TForm1 = class(TForm) 
  11.   Edit1: TEdit; 
  12.   Label1: TLabel; 
  13.   Label2: TLabel; 
  14.   Button1: TButton; 
  15.   ListBox1: TListBox; 
  16.   procedure Button1Click(Sender: TObject); 
  17.  
  18.   private 
  19.     { Private declarations } 
  20.   public 
  21.     { Public declarations } 
  22.   end; 
  23.  
  24. var 
  25.   Form1: TForm1; 
  26.   y : real; 
  27.   matrix: array[1..13,1..3] of real; 
  28.   A,x : integer; 
  29.   i,j : byte; 
  30.   Edit1: TEdit; 
  31.   Label1: TLabel; 
  32.   Label2: TLabel; 
  33.   Button1: TButton; 
  34.   ListBox1: TListBox; 
  35.   StrTmp : String; 
  36.   prim:array[1..13,1..3] of string; 
  37. implementation 
  38.  
  39. {$R *.dfm} 
  40. procedure TForm1.Button1Click(Sender: TObject); 
  41. begin 
  42. A := StrToInt(Edit1.Text); 
  43. Case A of -2: 
  44. for x := -6 to 6 do 
  45. begin 
  46. matrix[x+7,1]:=(x*x*x)/A; 
  47. end; 
  48.  
  49. 10: 
  50. begin 
  51. x:=-6; 
  52. While x<=6 do 
  53. begin 
  54. matrix[x+7,2]:=sin(A-x); 
  55. x:=x+1; 
  56. end; 
  57. end; 
  58. 4: 
  59. begin 
  60. x:=-6; 
  61. Repeat 
  62. matrix[x+7,3]:=Ln(A/(x*x)); 
  63. x:=x+1; 
  64. until x>6 
  65. end; 
  66. else 
  67. ShowMessage('À äîëæíî ïðèíèìàòü çíà÷åíèÿ -2;4;10'); 
  68. end; 
  69. for i := 1 to 13 do begin 
  70. StrTmp := ''; 
  71. for j := 1 to 3 do begin 
  72. if StrTmp <> '' then begin 
  73. StrTmp := StrTmp + Char(9); 
  74. end; 
  75. StrTmp := StrTmp + prim[i,j]; 
  76. end; 
  77. ListBox1.Items.Add(StrTmp); 
  78. end; 
  79. end; 
  80. end. 

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:19 
lim0n в сообщении #358584 писал(а):
... prim ... не понятно, он что - пустой...
Не видно ни одной ссылки на его элементы слева от знака присваивания.
Что это за массив? Пустых строк? Тогда зачем он, не проще ли:
Код:
StrTmp := StrTmp + "";

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:26 
Эээ... ну тогда плз. объясните как вывести двухмерный массив в ListBox...

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:51 
Результаты в массиве matrix, вот и выводите его:
Код:
...
S: string[11];
...
Str(matrix[i, j], S);
StrTmp := StrTmp + S;
...

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:58 
А где именно это писать? Между какими строками? В программировании я полный 0.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 16:18 
Написал вывод матрицы так. Та же проблема.
Код:
for i := 1 to 13 do begin
StrTmp := '';
for j := 1 to 3 do begin
if StrTmp <> '' then begin
Str(matrix[i, j], S);
end;
StrTmp := StrTmp + S;
end;
ListBox1.Items.Add(StrTmp);
end;
end;
end.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:11 
2Ms-dos4
Цитата:
А где именно это писать? Между какими строками?

Вместо строки 75.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:19 
Я её и заменил. Толку ноль. И ещё, кто скажет как выкинуть вариант с x=0 в случае с A=4(где ещё Ln(A/x^2)). Вот код
код: [ скачать ] [ спрятать ]
  1. unit Unit1; 
  2.  
  3. interface 
  4.  
  5. uses 
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7.   Dialogs, StdCtrls; 
  8.  
  9. type 
  10.   TForm1 = class(TForm) 
  11.   Edit1: TEdit; 
  12.   Label1: TLabel; 
  13.   Label2: TLabel; 
  14.   Button1: TButton; 
  15.   ListBox1: TListBox; 
  16.   procedure Button1Click(Sender: TObject); 
  17.  
  18.   private 
  19.     { Private declarations } 
  20.   public 
  21.     { Public declarations } 
  22.   end; 
  23.  
  24. var 
  25.   Form1: TForm1; 
  26.   y : real; 
  27.   matrix: array[1..13,1..3] of real; 
  28.   A,x : integer; 
  29.   i,j : byte; 
  30.   Edit1: TEdit; 
  31.   Label1: TLabel; 
  32.   Label2: TLabel; 
  33.   Button1: TButton; 
  34.   ListBox1: TListBox; 
  35.   StrTmp : String; 
  36.   prim:array[1..13,1..3] of string; 
  37.   S: string[11]; 
  38. implementation 
  39.  
  40. {$R *.dfm} 
  41. procedure TForm1.Button1Click(Sender: TObject); 
  42. begin 
  43. A := StrToInt(Edit1.Text); 
  44. Case A of -2: 
  45. for x := -6 to 6 do 
  46. begin 
  47. matrix[x+7,1]:=(x*x*x)/A; 
  48. end; 
  49.  
  50. 10: 
  51. begin 
  52. x:=-6; 
  53. While x<=6 do 
  54. begin 
  55. matrix[x+7,2]:=sin(A-x); 
  56. x:=x+1; 
  57. end; 
  58. end; 
  59. 4: 
  60. begin 
  61. x:=-6; 
  62. Repeat 
  63. matrix[x+7,3]:=Ln(A/(x*x)); 
  64. x:=x+1; 
  65. until x>6 
  66. end; 
  67. else 
  68. ShowMessage('À äîëæíî ïðèíèìàòü çíà÷åíèÿ -2;4;10'); 
  69. end; 
  70. for i := 1 to 13 do begin 
  71. StrTmp := ''; 
  72. for j := 1 to 3 do begin 
  73. if StrTmp <> '' then begin 
  74. Str(matrix[i, j], S); 
  75. end; 
  76. StrTmp := StrTmp + S; 
  77. end; 
  78. ListBox1.Items.Add(StrTmp); 
  79. end; 
  80. end; 
  81. end. 

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:51 
Аватара пользователя
можно вставить что-то вроде if (x==0) {matrix=ln(...)} else {matrix = 0};
то есть доопределить нулём или ещё чем. Можно написать два цикла, до нуля и после нуля.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:57 
Ms-dos4 в сообщении #358680 писал(а):
Я её и заменил. Толку ноль.
Ms-dos4, запустите уже наконец отладчик и пройдите свою программу по шагам.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 20:02 
gris, спс , кажется получилось.
Maslov, а толку, что даст отладка. Я просто попоросил пример кода, когда выводят многомерную матрицу в listbox. Отладчик то проблем не видит. Код теперь такой:

код: [ скачать ] [ спрятать ]
  1. unit Unit1; 
  2.  
  3. interface 
  4.  
  5. uses 
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7.   Dialogs, StdCtrls; 
  8.  
  9. type 
  10.   TForm1 = class(TForm) 
  11.   Edit1: TEdit; 
  12.   Label1: TLabel; 
  13.   Label2: TLabel; 
  14.   Button1: TButton; 
  15.   ListBox1: TListBox; 
  16.   procedure Button1Click(Sender: TObject); 
  17.  
  18.   private 
  19.     { Private declarations } 
  20.   public 
  21.     { Public declarations } 
  22.   end; 
  23.  
  24. var 
  25.   Form1: TForm1; 
  26.   y : real; 
  27.   matrix: array[1..13,1..3] of real; 
  28.   A,x : integer; 
  29.   i,j : byte; 
  30.   Edit1: TEdit; 
  31.   Label1: TLabel; 
  32.   Label2: TLabel; 
  33.   Button1: TButton; 
  34.   ListBox1: TListBox; 
  35.   StrTmp : String; 
  36.   prim:array[1..13,1..3] of string; 
  37.   S: string[11]; 
  38. implementation 
  39.  
  40. {$R *.dfm} 
  41. procedure TForm1.Button1Click(Sender: TObject); 
  42. begin 
  43. A := StrToInt(Edit1.Text); 
  44. Case A of -2: 
  45. for x := -6 to 6 do 
  46. begin 
  47. matrix[x+7,1]:=(x*x*x)/A; 
  48. end; 
  49.  
  50. 10: 
  51. begin 
  52. x:=-6; 
  53. While x<=6 do 
  54. begin 
  55. matrix[x+7,2]:=sin(A-x); 
  56. x:=x+1; 
  57. end; 
  58. end; 
  59. 4: 
  60. begin 
  61. x:=-6; 
  62. Repeat 
  63. if 
  64. x=0 then 
  65. matrix[x+7,3]:=0 
  66. else 
  67. matrix[x+7,3]:=Ln(A/(x*x)); 
  68. x:=x+1; 
  69. until x>6 
  70. end; 
  71. else 
  72. ShowMessage('À äîëæíî ïðèíèìàòü çíà÷åíèÿ -2;4;10'); 
  73. end; 
  74. for i := 1 to 13 do begin 
  75. StrTmp := ''; 
  76. for j := 1 to 3 do begin 
  77. if StrTmp <> '' then begin 
  78. Str(matrix[i, j], S); 
  79. end; 
  80. StrTmp := StrTmp + S; 
  81. end; 
  82. ListBox1.Items.Add(StrTmp); 
  83. end; 
  84. end; 
  85. end. 

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 21:23 
Ms-dos4 в сообщении #358780 писал(а):
Код теперь такой:

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

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 21:37 
Аватара пользователя
 i  Ms-dos4, Ваше участие в написании этой программы сводится к вставке в код фрагментов, подсказанных участниками обсуждения, причём сами Вы не в состоянии даже понять, куда эти фрагменты вставлять. Наше правило "Халявы здесь нет" подразумевает несколько иной способ решения задач.

Из создавшейся ненормальной ситуации я вижу два возможных выхода: или Вы начинаете что-то делать самостоятельно, или я закрываю тему. Право решать (пока) оставляю за Вами.

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 22:43 
Всё, вывод сделал сам и он работает. Есть только один вопрос. Строки несколько криво выглядят и немного сдвинуты одна относительно другой, если например в одной число трёхзначное а в другой двух и т.д. Как их выровнить?
Код:
for i := 1 to 13 do begin
for j := 1 to 3 do
Label2.caption:=label2.caption+'        '+FloatToStr(matrix[i,j]);
Label2.caption:=label2.caption+#13;
end;

 
 
 
 Re: Задание на Delphi
Сообщение03.10.2010, 22:54 
Ms-dos4 в сообщении #358854 писал(а):
Строки несколько криво выглядят и немного сдвинуты одна относительно другой, если например в одной число трёхзначное а в другой двух и т.д. Как их выровнить?
Установите для Label2 шрифт с фиксированной шириной (например, Courier) и почитайте про функцию Format.

 
 
 [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group