Версия для печати темы
Форум «Всё о Паскале» _ Делфи _ Массивы
Автор: 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
Слушай а ти случайно не Британец ... судя по коду ... в конце концов ведь циклы есть ...
Автор: 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 это извращение
Автор: GoodWind 3.12.2004 23:24
Цитата
Британец" значит кодит не так как все !
Автор: 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
Я действительно только начинаю...
И я не совсем понял: функция, что ты написал стоит отдельно?, или это действие при клике на кнопку??
Вобщем я что-то написал а он ругается на многие строки...
Код
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.
Вобщем, помогите пжлста, без вас я пропаду...
Автор: 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;
это процедура к кнопке или что?
Автор: 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???
Автор: 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