Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 19:23   #11
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

Помогите,пожалуйста!!!
Заменить последний отрицательный элемент массива на модуль первого элемента массива.

var
Form1: TForm1;
N:integer;
M:array of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Randomize;
N:=Strtoint(Edit1.Text);
setlength(M,N);
Edit2.Text:=' ';
Edit3.Text:=' ';
for I := 0 to N-2 do
begin
M[i]:=Round(Sin(Random(10))*10);
Edit2.Text:=Edit2.Text+' '+inttostr(M[i])
end;
for i := n-1 downto 0 do
if m[i] < 0 then break;
Edit2.Text:=Edit2.Text+' '+inttostr(M[i]);
end;
M[n-1]:=abs(m[1]);
Edit3.Text:=Edit3.Text+' '+inttostr(M[i]);
end
999 вне форума Ответить с цитированием
Старый 21.01.2012, 19:29   #12
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

оформляйте код тегом code, решетка над окном сообшения (#)


находите последний отрицательный, а меняете значение у последнего, причем модулем не первого элемента массива а второго, массив то с 0
Код:
M[n-1]:=abs(m[1]);
а надо
Код:
M[i]:=abs(m[0]);
кстати тут end лишний
Код:
for i := n-1 downto 0 do
if m[i] < 0 then break;
Edit2.Text:=Edit2.Text+' '+inttostr(M[i]);
//end;
M[n-1]:=abs(m[1]);
и первый цикл заполняет массив не полностью а до предпоследнего элемента включительно

Код:
for I := 0 to N-2 do //в массиве N элементов значит должно быть до N-1
вот
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Randomize;
N:=Strtoint(Edit1.Text);
setlength(M,N);
Edit2.Text:=' ';
Edit3.Text:=' ';
for I := 0 to N-1 do
begin
M[i]:=Round(Sin(Random(10))*10);
Edit2.Text:=Edit2.Text+' '+inttostr(M[i])
end;
for i := n-1 downto 0 do
if m[i] < 0 then break;
//Edit2.Text:=Edit2.Text+' '+inttostr(M[i]);//сомневаюсь что вам это нужно

M[i]:=abs(m[0]);
for I := 0 to N-1 do// кажется вы этого хотели
Edit3.Text:=Edit3.Text+' '+inttostr(M[i]);
end;

Последний раз редактировалось vovk; 21.01.2012 в 20:08.
vovk вне форума Ответить с цитированием
Старый 22.01.2012, 08:55   #13
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

Разделить все элементы массива с нечетными номерами на последний элемент (последний элемент отличен от 0).
как записать код?
Код:
var
     Form1: TForm1;
  N:integer;
  M:array of real;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Randomize;
N:=Strtoint(Edit1.Text);
setlength(M,N);
Edit2.Text:=' ';
Edit3.Text:=' ';
for I := 0 to N-1 do
begin
M[i]:=Round(Sin(Random(10))*10);
end;
for i:= N-1 to N- 1 do
 if M[i]=0 then
 begin
 m[i]:=Round(Sin(Random(10))*10);
 end;
 for i := 0 to n-1  do
 Edit2.Text:=Edit2.Text+' '+floattostr(M[i]);
if i mod 2 <>0 then
 begin
M[i]:= M[i]/M[n-1];
for i := 0 to n-1  do
Edit3.Text:=Edit3.Text+' '+floattostr(M[i]);
end;
end;
end.
Подсажите, почему не выполняется операция  M[i]:= M[i]/M[n-1];
for i := 0 to n-1  do

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.01.2012 в 17:48.
999 вне форума Ответить с цитированием
Старый 22.01.2012, 13:03   #14
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Ещё раз оформляйте код тегом
В цикле выполняется только первая строчка кода следующая за циклом, если нужно выполнять несколько строк, то их заключают в блок
begin
end;

Код:
for i := 0 to n-1 do
Edit2.Text:=Edit2.Text+' '+floattostr(M[i]);//в цикле выполняется только эта строчка
if i mod 2 <>0 then// это условие проверяется только 1 раз после цикла
В вашем случае вывод массива в EDIT2 лучше сделать при заполнении, и там же сделать вложенный цикл для исключения 0,
а деление и вывод изменённого массива делать уже в другом цикле.



Код:
for I := 0 to N-1 do
begin
M[i]:=Round(Sin(Random(10))*10);
while M[i]=0 do
m[i]:=Round(Sin(Random(10))*10);
Edit2.Text:=Edit2.Text+' '+floattostr(M[i]);
end;

for i := 0 to n-1 do
begin//начала блока который  обрабатывается в цикле
if i mod 2 <>0 then
M[i]:= M[i]/M[n-1];//эта строчка обрабатывается только при выполнении условия 

Edit3.Text:=Edit3.Text+' '+floattostr(M[i]);//эта строчка выполняется во всех итерациях цикла
end;//конец блока который  обрабатывается в цикле



Хотя всё можно в 1 цикле сделать, с вложенным циклом для обработки 0 значений, всё равно в массиве остаётся только вариант после деления

Последний раз редактировалось vovk; 22.01.2012 в 13:11.
vovk вне форума Ответить с цитированием
Старый 23.01.2012, 15:59   #15
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

Помогите исправить ошибки! Дан двумерный массив размером n*m, заполненный случайным образом.
Заменить минимальный по модулю элемент каждого столбца на противоположный

Код:
ar
Form3: TForm3;
  i,j,n,m,min:Integer;
  a:array [0..30,0..30] of integer;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
begin
Randomize;
n:=strtoint(Edit1.Text);
m:=strtoint(Edit2.Text);
for i:=0 to n-1 do
for j:=0 to m-1 do
a[i,j]:=Round(Sin(Random(100))*100);
StringGrid1.RowCount:=n+1;
StringGrid1.RowCount:=m+1;
With  StringGrid1 do
begin
  i:=0;
  for J := 1 to RowCount do
  Cells[i,j]:=Inttostr(j);
j:=0;
  for i:= 1 to ColCount do
  Cells[i,j]:=Inttostr(i);
end;
 With  StringGrid1 do
 for i:= 1 to n do
     for j:=1 to m do
   Cells[i,j]:=inttostr(a[i-1,j-1]);
for i:= 1 to n do
begin
  min:=abs(a[1,1]);
 for I := 0 to n-1 do
  if abs(a[i,j])< abs(min) then  min:=a[i,j];
end;
  for i:= 1 to n do
  for j:=1 to m do
  begin
 a[i,j]:=-a[i,j];
 end;
With  StringGrid2 do
begin
  i:=0;
  for J := 1 to RowCount do
  Cells[i,j]:=Inttostr(j);
j:=0;
  for i:= 1 to ColCount do
  Cells[i,j]:=Inttostr(i);
end;
 With  StringGrid2 do
 for i:= 1 to n do
 for j:=1 to m do
Cells[i,j]:=inttostr(a[i-1,j-1]);
end;
end.
999 вне форума Ответить с цитированием
Старый 23.01.2012, 17:01   #16
999
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 15
По умолчанию

Дан двумерный массив размером n*m, заполненный случайным образом.
как Вставить после каждого столбца, содержащего значение равное нулю столбец из нулей.

Код:
if a[i,j]=0 then k:=j;
   begin
    for j := n downto k+1 do
    for i := 1 to n do
a[i, j+1] := a[i, j];
for i := 1 to n do
  a[i, k+1] := 0;
 end;
Считает неверно..

Последний раз редактировалось 999; 23.01.2012 в 17:38.
999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Delphi Slimluma Помощь студентам 13 26.12.2011 01:35
Delphi задача Яська Помощь студентам 7 16.12.2010 20:21
Delphi 7. Задача Юрий2009 Помощь студентам 6 02.05.2009 20:37
Задача в Delphi Oksana11 Помощь студентам 3 22.12.2007 00:12