|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#31
|
|||
|
|||
Я понимаю что уже достал... но блин - эта прога меня достала не меньше... не полчается у меня ее в real перевести... я ее уже раз 20 из real в integer и обратно пихал но ни там - ни там не работает - в integer понятно почему - а в real матерится на 3 строки
for t:=0 to n-1 do - тут пишет For loop control variable must have ordinal type stringgrid1.Cells[j,t]:=FormatFloat('0.00',C[t,j]); и тут выдает мою любимую фразу Incompatible Tipes: 'Integer' and 'Extended' Это все - что осталось исправить и прога готова - пожалуйста, скажите что тут не так? |
#32
|
|||
|
|||
Цитата:
|
#33
|
|||
|
|||
мне надо поменять местами 1-й и 9-й столбы матрицы - я их меняю через t:=C[i,k];
C[i,k]:=C[i,l]; C[i,l]:=t; k и l задал до этого как 0 и 8. |
#34
|
||||
|
||||
Цитата:
Для этого надо использовать другую переменную, напрмер tmp var tmp:real; Код:
temp:=C[i,k]; C[i,k]:=C[i,l]; C[i,l]:=temp; |
#35
|
|||
|
|||
Zylex - пасб за помощь, но что tmp, что temp, что t - один результат - пишет одно и тоже и прога не пашет!
|
#36
|
|||
|
|||
Цитата:
Zylex правильно написал. Выкладывайте весь код. |
#37
|
|||
|
|||
Вот весь код:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label4: TLabel; Edit4: TEdit; Label5: TLabel; StringGrid1: TStringGrid; Label6: TLabel; Edit5: TEdit; Edit6: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Y:array of array of integer; C:array of array of real; n:integer; m:integer; k:integer; l:integer; implementation uses unit2,unit3; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin randomize; edit1.Text:=inttostr(n); edit5.Text:=inttostr(m); edit6.Text:=inttostr(l); edit4.text:=inttostr(k); stringgrid1.RowCount:=n; stringgrid1.ColCount:=m; end; procedure TForm1.Button2Click(Sender: TObject); var i,j,t:integer; begin m:=stringgrid1.ColCount; k:=strtoint(edit4.text)-1; l:=strtoint(edit6.text)-1; if (k=-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (l=-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (k>m-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (l>m-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; for i:=0 to n-1 do begin t:=Y[i,k]; Y[i,k]:=Y[i,l]; Y[i,l]:=t; end; for t:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,t]:=inttostr(Y[t,j]); end; procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; begin n:=strtoint(edit1.Text); m:=strtoint(edit5.Text); setlength(Y,n,m); stringgrid1.RowCount:=n; stringgrid1.ColCount:=m; for i:=0 to n-1 do for j:=0 to m-1 do begin Y[i,j]:=random(50--50+1)-50; stringgrid1.Cells[j,i]:=inttostr(Y[i,j]); end; end; procedure TForm1.Button3Click(Sender: TObject); begin form1.Close; end; procedure TForm1.Button5Click(Sender: TObject); var i,j:integer; begin n:=strtoint(edit1.Text); m:=strtoint(edit5.Text); n:=12; m:=9; setlength(C,n,m); stringgrid1.RowCount:=n; stringgrid1.ColCount:=m; for i:=0 to n-1 do for j:=0 to m-1 do begin C[i,j]:=cos(14*j+1); stringgrid1.Cells[j,i]:=FormatFloat('0.00',C[i,j]); end; end; procedure TForm1.Button4Click(Sender: TObject); var i,j:integer; tmp:real; begin m:=stringgrid1.ColCount; k:=strtoint(edit4.text)-1; l:=strtoint(edit6.text)-1; k:=0; l:=8; for i:=0 to n-1 do begin tmp:=C[i,k]; C[i,k]:=C[i,l]; C[i,l]:=tmp; end; for tmp:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,tmp]:=FormatFloat('0.00',C[tmp,j]); end; end. Все работает до этого момента.... Код:
procedure TForm1.Button4Click(Sender: TObject); var i,j:integer; temp:real; begin m:=stringgrid1.ColCount; k:=strtoint(edit4.text)-1; l:=strtoint(edit6.text)-1; k:=0; l:=8; for i:=0 to n-1 do begin temp:=C[i,k]; C[i,k]:=C[i,l]; C[i,l]:=temp; end; for tmp:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,temp]:=FormatFloat('0.00',C[temp,j]); end; |
#38
|
|||
|
|||
Очень глубоко не вникал в суть программы, но вот несколько моментов.
1. Код:
for tmp:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,tmp]:=FormatFloat('0.00',C[tmp,j]); end; Код:
for t:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,t]:=FormatFloat('0.00',C[t,j]); end; 2. Вы используете динамические массивы, поэтому на button5 надо обязательно нажимать прежде чем нажать на button4. Иначе выскочит ошибка как раз на той строке, что вы и говорили. 3. Ну также, это так на всякий случай, число столбцов должно быть не меньше 10. Или опять ошибка выскочит. Ну это вы наверное знаете. 4. В процедуре создания формы Код:
procedure TForm1.FormCreate(Sender: TObject); begin randomize; edit1.Text:=inttostr(n); edit5.Text:=inttostr(m); edit6.Text:=inttostr(l); edit4.text:=inttostr(k); stringgrid1.RowCount:=n; stringgrid1.ColCount:=m; end; 5. Небольшой совет. Код читается очень трудно. Лучше пробелами выравнивать. |
#39
|
|||
|
|||
чёт парень у тя какая то байда вышла на мой взгляд...
1)ты в нижнем коде везде указываеш temp, а в цикле указал tmp, первая переменная объявлена а втрорая нет!..возможно из-за этого выделяется строка цикла 2) какой смысл от C[i,l]:=temp; если в цикле temp всегда примет значение C[n-1,8] 3) думаю ты нетак расставил циклы..может последний должен входить в предыдущий? 4) попробуй вместо temp подставлять сразу C[i,l]...если циклы действительно нужно объединять 5) непонимаю зачем l:=strtoint(edit6.text)-1; если сразу же идёт потом l:=8; |
#40
|
|||
|
|||
Цитата:
1. То что в в верхнем и нижнем коде tmp и temp не суть важно. 2. Именно таким образом и осуществляется обмен значениями разных столбцов. 4. То же что и 2. 5. Тут он просто эксперементировал вводя постоянные значения в код. |
#41
|
|||
|
|||
Цитата:
1) я не о размещении в нижнем и верхнем, он в цикле указал tmp, но необъявил эту переменную! 2)это и дураку понятно, но как будет осуществлятся обмен данными если циклы отдельно друг от друга...первый цикл пройдёт, только затем вступит в силу второй цикл, а значит по окончании первого цикла temp будет таким какой он последний, то биш C[n-1,8], таким он и перейдёт в на протяжение всего второго цикла! 4)уже непрокатывает..а то что я написал, означает что код уменьшится и будет более понятным + мы минуем тупой риал 5) ну раз эксперимент тогда ясно.. |
#42
|
|||
|
|||
Цитата:
Вот! То, что доктор прописал - спасибо огромное! Заработало! MegaPiha, Zylex, Farmazon огромное вам спасибо) Выручили! |
#43
|
|||
|
|||
Свова здрасте! Меня все не хотят оставить никак в покое - нужно еще сделать оказывается что бы данные, полученные в работе выводились в файл - тоесть например в текстовый документ - не подскажите, как это можно сделать? Вот код проги:
Код:
var i,j:integer; begin n:=strtoint(edit1.Text); m:=strtoint(edit2.Text); setlength(Y,n,m); stringgrid1.RowCount:=n; stringgrid1.ColCount:=m; for i:=0 to n-1 do for j:=0 to m-1 do begin Y[i,j]:=random(50--50+1)-50; stringgrid1.Cells[j,i]:=FormatFloat('0.00',Y[i,j]); end; end; procedure TForm5.Button3Click(Sender: TObject); var i,j,t:integer; tmp:real; begin m:=stringgrid1.ColCount; k:=strtoint(edit3.text)-1; l:=strtoint(edit4.text)-1; if (k=-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (l=-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (k>m-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; if (l>m-1) then begin showmessage('Перестановка столбцов невозможно, проверьте введеные данные!'); exit; end; for i:=0 to n-1 do begin tmp:=Y[i,k]; Y[i,k]:=Y[i,l]; Y[i,l]:=tmp; end; for t:=0 to n-1 do for j:=0 to m-1 do stringgrid1.Cells[j,t]:=FormatFloat('0.00',Y[t,j]); end; |
#44
|
|||
|
|||
Чтение и запись файлов
http://www.delphisources.ru/pages/fa...ite_files.html |
#45
|
|||
|
|||
MegaPiha - спасибо - ознакомился - только не могу понять как сделать, что бы в файл выводило данные стрингргрида?
|