2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Задание на Delphi
Сообщение03.10.2010, 14:51 
Заслуженный участник


25/02/08
2961
Спасибо всем! Поправил. Теперь другая проблема- ошибок то нет, но текста в листбоксе не видно. Он как бы есть(потому что строки и столбцы выделяются, но его не видно). В чём причина? Да и проблема с 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 


16/06/10
199
lim0n в сообщении #358584 писал(а):
... prim ... не понятно, он что - пустой...
Не видно ни одной ссылки на его элементы слева от знака присваивания.
Что это за массив? Пустых строк? Тогда зачем он, не проще ли:
Код:
StrTmp := StrTmp + "";

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:26 
Заслуженный участник


25/02/08
2961
Эээ... ну тогда плз. объясните как вывести двухмерный массив в ListBox...

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:51 


16/06/10
199
Результаты в массиве matrix, вот и выводите его:
Код:
...
S: string[11];
...
Str(matrix[i, j], S);
StrTmp := StrTmp + S;
...

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 15:58 
Заслуженный участник


25/02/08
2961
А где именно это писать? Между какими строками? В программировании я полный 0.

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 16:18 
Заслуженный участник


25/02/08
2961
Написал вывод матрицы так. Та же проблема.
Код:
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 
Заслуженный участник


26/07/09
1559
Алматы
2Ms-dos4
Цитата:
А где именно это писать? Между какими строками?

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

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:19 
Заслуженный участник


25/02/08
2961
Я её и заменил. Толку ноль. И ещё, кто скажет как выкинуть вариант с 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 
Заслуженный участник
Аватара пользователя


13/08/08
14451
можно вставить что-то вроде if (x==0) {matrix=ln(...)} else {matrix = 0};
то есть доопределить нулём или ещё чем. Можно написать два цикла, до нуля и после нуля.

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 17:57 
Заслуженный участник


09/08/09
3438
С.Петербург
Ms-dos4 в сообщении #358680 писал(а):
Я её и заменил. Толку ноль.
Ms-dos4, запустите уже наконец отладчик и пройдите свою программу по шагам.

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 20:02 
Заслуженный участник


25/02/08
2961
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 
Заслуженный участник


11/05/08
32166
Ms-dos4 в сообщении #358780 писал(а):
Код теперь такой:

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

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 21:37 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Ms-dos4, Ваше участие в написании этой программы сводится к вставке в код фрагментов, подсказанных участниками обсуждения, причём сами Вы не в состоянии даже понять, куда эти фрагменты вставлять. Наше правило "Халявы здесь нет" подразумевает несколько иной способ решения задач.

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

 Профиль  
                  
 
 Re: Задание на Delphi
Сообщение03.10.2010, 22:43 
Заслуженный участник


25/02/08
2961
Всё, вывод сделал сам и он работает. Есть только один вопрос. Строки несколько криво выглядят и немного сдвинуты одна относительно другой, если например в одной число трёхзначное а в другой двух и т.д. Как их выровнить?
Код:
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 
Заслуженный участник


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group