Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Массивы

Автор: Wert 3.12.2004 22:03

Я посмотрел в ФАКе, ничего такого не нашел, может кто знает как это сделать, помогите?
Все нужно сделать в делфе с интерфейсом.
1)Составить программу формирования вектора(размерность - 4), компоненты которого - элементы лежащие на побочной диагонали матрицы 4*4, значения задаются пользователем.
2)Дан вектор А(размерность - 10). Составить программу, формирующую вектор В, элементы которого располагаются так: сначала нечетные члены последовательности элементов А, потом четные(а1, а3, а5, а7, а9, а2, а4, а6, а8, а10)

По второму я что-то навоял, но это не работает, вот код:

Код

------
type
TVector = array [0..9] of Integer
TVector2 = array [0..9] of Integer
var
v:TVector;
m:TVector2;

implementation

{$R *.dfm}

procedure TfrmArray.btnVectorClick(Sender: TObject);
begin
v[0]: = StrToInt(TVector.Cells[0, 0]);
v[1]: = StrToInt(TVector.Cells[1, 0]);
v[2]: = StrToInt(TVector.Cells[2, 0]);
v[3]: = StrToInt(TVector.Cells[3, 0]);
v[4]: = StrToInt(TVector.Cells[4, 0]);
v[5]: = StrToInt(TVector.Cells[5, 0]);
v[6]: = StrToInt(TVector.Cells[6, 0]);
v[7]: = StrToInt(TVector.Cells[7, 0]);
v[8]: = StrToInt(TVector.Cells[8, 0]);
v[9]: = StrToInt(TVector.Cells[9, 0]);
end;
 procedureTfrmArray.btnVecttoVectClick(Sender: TObject);
var i, j : integer
begin
m[0]:=v[0];
m[1]:=v[2];
m[2]:=v[4];
m[3]:=v[6];
m[4]:=v[8];
m[5]:=v[1];
m[6]:=v[3];
m[7]:=v[5];
m[8]:=v[7];
m[9]:=v[9];
end;
end.


Над первым думаю сейчас, но пока мало что получается...

Автор: Jahnerus 3.12.2004 23:00

Слушай а ти случайно не Британец ... судя по коду ... в конце концов ведь циклы есть ... blink.gif

Автор: GoodWind 3.12.2004 23:12

Цитата
случайно не Британец ... судя по коду

проясни ситуацию, а ?

Автор: Jahnerus 3.12.2004 23:13

2 Функции выполняющие только формирование векторов ...
если ввод сам не сделаешь пиши!

Код
const n=4;
 m=10;
type ma3x=array[1..n,1..n] of integer;
 vector=array[1..m] of integer;
{Задание 1}
procedure vect(matr:ma3x; var vec:vector);
var
 i:byte;
begin
 for i:=1 to n do vec[i]:=matr[n-i+1,i];
end;
{Задание 2}
procedure vect_2(v1:vector; var v2:vector);
var
 i,j:byte;
begin
 j:=0;
 for i:=1 to m do begin
   if v1[i]<0 then begin
     j:=j+1;
     v2[j]:=v1[i];
   end;
 end;
 for i:=1 to m do begin
   if v1[i]>=0 then begin
     j:=j+1;
     v2[j]:=v1[i];
   end;
 end;
end;


Добавлено (3.12.04 18:17):

GoodWind
Существует такая легенда ...
Британцы умудряються писать самый не рациональный код ... говорят даже что если посадить обезьяну за комп то она напишет лучше них ... с тех пор и повелось "Британец" значит кодит не так как все ! (мягко говоря).
Ну согласись 20 строк по принцыпу Copy + Paste это извращение sad.gif

Автор: GoodWind 3.12.2004 23:24

Цитата
Британец" значит кодит не так как все !

lol.gif lol.gif lol.gif

Автор: Wert 3.12.2004 23:38

Да мне вобщем-то не важна оптимизированность кода, главное чтобы все работало...

Автор: Jahnerus 3.12.2004 23:49

Wert

Цитата
Да мне вобщем-то не важна оптимизированность кода, главное чтобы все работало...

Не хочу конешно тебя обежать ... уверен ти только начинаешь ... и у тебя всё впереди ... но дело здесь даже не в оптимизации, а в экономии хотябы личного времени ...
Я бы поленился копировать и вставлять 20 раз одну и ту же строку заменяя в каждой из них только один параметр ... А еслиб размерность была не 10 а 1000... я бы на тебя тогда посмотрел ! :D :D :D

Автор: Wert 4.12.2004 1:03

Я действительно только начинаю...

И я не совсем понял: функция, что ты написал стоит отдельно?, или это действие при клике на кнопку??

Вобщем я что-то написал а он ругается на многие строки... sad.gif


Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids;

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   btnVector: TButton;
   StringGrid2: TStringGrid;
   btnVecttoVect: TButton;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 const
m=10;
vector=array [1..m] of integer; // [Error] Unit1.pas(23): Expression expected but 'ARRAY' found   ||   [Error] Unit1.pas(23): ';' expected but 'OF' found


var  //[Error] Unit1.pas(26): Expression expected but 'VAR' found
 Form1: TForm1;

implementation

{$R *.dfm}

procedure vect_2(v1:vector; var v2:vector);  //[Error] Unit1.pas(33): 'vector' is not a type identifier
var
i,j:byte;
begin
j:=0;
for i:=1 to m do begin
  if v1[i]<0 then begin   //[Warning] Unit1.pas(39): Comparing signed and unsigned types - widened both operands
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
for i:=1 to m do begin
  if v1[i]>=0 then begin  //[Warning] Unit1.pas(45): Comparing signed and unsigned types - widened both operands
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
end;

end.




Вобщем, помогите пжлста, без вас я пропаду... sad.gif

Автор: volvo 4.12.2004 1:29

Wert
Ты забыл слово Type (3-я строка)

Код

const
m=10;
type
vector=array [1..m] of integer;

Попробуй исправить.

Автор: Wert 4.12.2004 2:35

не работает, все те же ошибки остались

Автор: volvo 4.12.2004 2:45

Wert
Я только что откомпилировал приведенный выше код - никаких ошибок в нем нет.
Ты добавил слово Type?

Автор: Wert 4.12.2004 2:58

да
А этот код на паскале?
У меня на Делфе.
В принципе разницы никакой...

Автор: volvo 4.12.2004 2:59

Так я на Дельфи и компилировал...

Автор: Wert 4.12.2004 3:00

А хотя нет, осталась только одна ошибка

const
m=10; [Error] Unit1.pas(23): Identifier redeclared: 'm'

Добавлено (3.12.04 22:02):
Только что она значит я не понимаю...

Добавлено (3.12.04 22:05):
О, все, и эту ошибку убрал...
Спасибо, только как мне написать процедуру к кнопке, ту, что я написал подойдет? Или ты и так ее написал? Прошу прощения за тупой вопрос

Автор: volvo 4.12.2004 3:07

А значит она, что у тебя где-то выше по тексту уже определена переменная (или константа) с именем "m", и ты ее пытаешься переопределить...

Проверь, может ты просто эту строчку 2 раза поставил?

Автор: Wert 4.12.2004 3:11

Да, я уже убрал...
Но объясните вот это:

Код

procedure vect_2(v1:vector; var v2:vector);
var
i,j:byte;
begin
j:=0;
for i:=1 to m do begin
  if v1[i]<0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
for i:=1 to m do begin
  if v1[i]>=0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
end;

это процедура к кнопке или что? unsure.gif

Автор: volvo 4.12.2004 3:17

Вообще-то, это процедура, которая по содержимому одного массива вычисляет второй. А уж как ее вызывать - твое дело. Хочешь - можешь вызывать по нажатию кнопки... :yes:

Автор: Wert 4.12.2004 3:19

Спасибо

Автор: Wert 4.12.2004 3:26

Опять я что-то сделал не так, подскажите, кто знает пжлста:

Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids;
type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   btnVector: TButton;
   StringGrid2: TStringGrid;
   btnVecttoVect: TButton;
   procedure btnVecttoVectClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 const
m=10;
type
vector=array [1..m] of integer;


var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure vect_2(v1:vector; var v2:vector);

procedure TForm1_btnVecttoVectClick(Sender: TObject);
var
v1:vector;  v2:vector;
i,j:byte;
begin
j:=0;
for i:=1 to m do begin
  if v1[i]<0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
for i:=1 to m do begin
  if v1[i]>=0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;


end.

Ошибки такие:

[Error] Unit1.pas(55): Record, object or class type required
[Error] Unit1.pas(57): 'END' expected but end of file found
[Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.btnVecttoVectClick'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Автор: volvo 4.12.2004 3:30

Ай-яй-яй ... А если вот так?

Код

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
  StringGrid1: TStringGrid;
  btnVector: TButton;
  StringGrid2: TStringGrid;
  btnVecttoVect: TButton;
  procedure btnVecttoVectClick(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

const
m=10;
type
vector=array [1..m] of integer;


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure vect_2(v1:vector; var v2:vector);
var i,j:byte;
begin
j:=0;
for i:=1 to m do begin
  if v1[i]<0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
for i:=1 to m do begin
  if v1[i]>=0 then begin
    j:=j+1;
    v2[j]:=v1[i];
  end;
end;
end;

procedure TForm1.btnVecttoVectClick(Sender: TObject); {**** Здесь ****}
var v1:vector;  v2:vector;
begin
 vect_2(v1, v2);
end;

end.

Автор: Wert 4.12.2004 3:36

А... я понял принцип надо просто ссылку сделать...
Но оно не компилится:
[Error] Unit1.pas(52): Statement expected but 'PROCEDURE' found
[Error] Unit1.pas(15): Unsatisfied forward or external declaration: 'TForm1.btnVecttoVectClick'
[Fatal Error] Project11.dpr(5): Could not compile used unit 'Unit1.pas'

Автор: volvo 4.12.2004 3:41

Смотри мой предыдущий пост - там должна была быть точка (я отметил, где) ...

Автор: Wert 4.12.2004 3:44

Я вобщем-то догадался, но вот 1 и 3 ошибки остались
Я не понимаю, что такое Statement??? sad.gif

Автор: volvo 4.12.2004 3:46

Проверь еще раз программу... Ощущение такое, что ты забыл End где-то...

Автор: Wert 4.12.2004 3:59

Да, ты был прав... Спасибо БОЛЬШОЕ!
Теперь она компилится.
Осталось написать процедуру передачи вектора таблице...
Сейчас попробую...

Добавлено (3.12.04 23:09):
Похоже без помощи не обойтись...
Не поможешь, а то уже к завтрому готовую прогу сдать надо...
Буду очень благодарен.

Автор: volvo 4.12.2004 5:03

Проверь PM