Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 11.04.2008, 16:25
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Я понимаю что уже достал... но блин - эта прога меня достала не меньше... не полчается у меня ее в 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  
Старый 11.04.2008, 16:33
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от AndrYxo
Я понимаю что уже достал... но блин - эта прога меня достала не меньше... не полчается у меня ее в 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'

Это все - что осталось исправить и прога готова - пожалуйста, скажите что тут не так?
В цикле можно использовать только целочисленные типы: integer, byte, word и т.д. Поэтому переменную t, если она является счетчиком, трогать не надо. Пусть будет integer. Тогда ошибок не будет. Может надо подправить сам алгоритм? Зачем счетчику t что либо присваивать?
  #33  
Старый 11.04.2008, 16:41
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

мне надо поменять местами 1-й и 9-й столбы матрицы - я их меняю через t:=C[i,k];
C[i,k]:=C[i,l];
C[i,l]:=t;

k и l задал до этого как 0 и 8.
  #34  
Старый 11.04.2008, 17:00
Аватар для Zylex
Zylex Zylex вне форума
Прохожий
 
Регистрация: 06.04.2008
Адрес: Сыктывкар
Сообщения: 33
Репутация: 10
По умолчанию

Цитата:
Сообщение от AndrYxo
мне надо поменять местами 1-й и 9-й столбы матрицы - я их меняю через t:=C[i,k];
C[i,k]:=C[i,l];
C[i,l]:=t;

k и l задал до этого как 0 и 8.

Для этого надо использовать другую переменную, напрмер tmp

var tmp:real;

Код:
temp:=C[i,k];
C[i,k]:=C[i,l];
C[i,l]:=temp;
  #35  
Старый 11.04.2008, 17:11
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Zylex - пасб за помощь, но что tmp, что temp, что t - один результат - пишет одно и тоже и прога не пашет!
  #36  
Старый 11.04.2008, 17:16
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от AndrYxo
Zylex - пасб за помощь, но что tmp, что temp, что t - один результат - пишет одно и тоже и прога не пашет!

Zylex правильно написал.
Выкладывайте весь код.
  #37  
Старый 11.04.2008, 17:28
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Вот весь код:
Код:
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  
Старый 11.04.2008, 18:04
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Очень глубоко не вникал в суть программы, но вот несколько моментов.
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;
Вот в этом месте как раз надо использовать счетчик integer - он же t.
Код:
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  
Старый 11.04.2008, 18:29
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

чёт парень у тя какая то байда вышла на мой взгляд...
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  
Старый 11.04.2008, 18:36
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от Farmazon
чёт парень у тя какая то байда вышла на мой взгляд...
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;
Не со всем согласен.
1. То что в в верхнем и нижнем коде tmp и temp не суть важно.
2. Именно таким образом и осуществляется обмен значениями разных столбцов.
4. То же что и 2.
5. Тут он просто эксперементировал вводя постоянные значения в код.

  #41  
Старый 11.04.2008, 19:05
Farmazon Farmazon вне форума
Прохожий
 
Регистрация: 04.04.2008
Сообщения: 14
Репутация: 10
По умолчанию

Цитата:
Сообщение от MegaPiha
Не со всем согласен.
1. То что в в верхнем и нижнем коде tmp и temp не суть важно.
2. Именно таким образом и осуществляется обмен значениями разных столбцов.
4. То же что и 2.
5. Тут он просто эксперементировал вводя постоянные значения в код.


1) я не о размещении в нижнем и верхнем, он в цикле указал tmp, но необъявил эту переменную!
2)это и дураку понятно, но как будет осуществлятся обмен данными если циклы отдельно друг от друга...первый цикл пройдёт, только затем вступит в силу второй цикл, а значит по окончании первого цикла temp будет таким какой он последний, то биш C[n-1,8], таким он и перейдёт в на протяжение всего второго цикла!
4)уже непрокатывает..а то что я написал, означает что код уменьшится и будет более понятным + мы минуем тупой риал
5) ну раз эксперимент тогда ясно..
  #42  
Старый 11.04.2008, 19:08
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Цитата:
Сообщение от MegaPiha
Очень глубоко не вникал в суть программы, но вот несколько моментов.
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;
Вот в этом месте как раз надо использовать счетчик integer - он же t.
Код:
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;


Вот! То, что доктор прописал - спасибо огромное! Заработало!
MegaPiha, Zylex, Farmazon огромное вам спасибо) Выручили!
  #43  
Старый 15.04.2008, 15:08
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

Свова здрасте! Меня все не хотят оставить никак в покое - нужно еще сделать оказывается что бы данные, полученные в работе выводились в файл - тоесть например в текстовый документ - не подскажите, как это можно сделать? Вот код проги:
Код:
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  
Старый 15.04.2008, 16:42
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Чтение и запись файлов
http://www.delphisources.ru/pages/fa...ite_files.html
  #45  
Старый 15.04.2008, 17:17
AndrYxo AndrYxo вне форума
Начинающий
 
Регистрация: 04.04.2008
Сообщения: 115
Репутация: 10
По умолчанию

MegaPiha - спасибо - ознакомился - только не могу понять как сделать, что бы в файл выводило данные стрингргрида?
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter