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

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

Форум «Всё о Паскале» _ Задачи _ задача с одномерными массивами....

Автор: ginga 25.11.2007 15:04

Вот такая задача вот....помогите плиз сделать очень срочно нужно....

Даны массивы а(10), в (4), с (7).В каждом массиве заменить минимальный элемент произведением элементов соответственного массива. Элементы каждого массива можно брать любые. В скобках это кол-во эл-ов в каждом массиве.

Пожалуйста помогите!!!!!!

Автор: мисс_граффити 25.11.2007 16:17

за один проход находишь произведение и адрес минимального эл-та. потом заменяешь...
с чем проблемы? что пробовал делать?

Автор: ginga 25.11.2007 16:32

Цитата(мисс_граффити @ 25.11.2007 12:17) *

за один проход находишь произведение и адрес минимального эл-та. потом заменяешь...
с чем проблемы? что пробовал делать?

произведение нахожу и минимальные элементы!а вот как заменить и потом вывести массив с заменнёнными элементами не получается....((((

Добавлено через 2 мин.
вот что у меня пока что получилось....а что с этим делать дальше не понимаю((((

[quote]
Program massivi;
const n=10; m=7; l=-2;
var
a: array [1..n] of integer;
b: array [4..m] of integer;
c: array [-9..l] of integer;
i, p, min : integer;
begin
for i:= 1 to n do readln(a[i]);
p:= a[1];
min := a[1];
for i:= 1 to n do
begin
p:=p*(a[i]);
if a[i]<min then min := a[i]
begin
min:=p;
end
end;
for i:= 1 to n do readln(b[i]);
p:= b[4];
min := b[4];
for i:= 4 to m do
begin
p:=p*(b[i]);
if b[i]<min then min := b[i]
begin
min:=p;
end
end;
for i:= 1 to n do readln(c[i]);
p:=0;
min := c[-9];
for i:= -9 to n do
begin
p:=p*(c[i]);
if c[i]<min then min := c[i]
begin
min:=p;
end
end;

Автор: мисс_граффити 25.11.2007 16:58

тебе надо запоминать не сам минимальный элемент, а его индекс.

if b[i]<b[min] then min:=i;
...
b[min]:=p;

сделай нормальные отступы - так читать программу невозможно, какой begin к чему относится - совершенно неясно.

Автор: ginga 25.11.2007 18:07

ну вот чуток потделал как ты сказала.....подредоктировал код....возможно что то и не правлильно((((
просмотри плиз!и по возможности подскажи что дальше нужно сделать(((



Program massivi;
const n=10; m=7; l=-2;
var
a: array [1..n] of integer;
b: array [4..m] of integer;
c: array [-9..l] of integer;
i, p, min : integer;
begin
for i:= 1 to n do readln(a[i]);
p:= a[1];
min := a[1];
for i:= 1 to n do
begin
p:=p*(a[i]);
if a[i]<a[min] then min := i;
a[min]:=p;
end;


for i:= 1 to n do readln(b[i]);
p:= b[4];
min := b[4];
for i:= 4 to m do
begin
p:=p*(b[i]);
if b[i]<b[min] then min := i;
b[min]:=p;
end;


for i:= 1 to n do readln(c[i]);
p:=0;
min := c[-9];
for i:= -9 to n do
begin
p:=p*(c[i]);
if c[i]<c[min] then min := i;
c[min]:=p;
end;


Автор: мисс_граффити 25.11.2007 18:14

я ж говорю - сделай нормальные отступы! лесенкой, по уровням...
для примера:

for i:= -9 to n do 
begin
p:=p*(c[i]);
if c[i]<c[min] then min := i;
c[min]:=p;
end;

почему до n, кстати? до 1 вроде...
и если ты делаешь сначала p:=0, то произведение всегда будет равно 0.
а если делаешь p:= b[4]; то на b[4] умножится 2 раза

Автор: ginga 25.11.2007 18:33

Вот вроде поменял всё как ты говорила!что дальше????((((((


Program massivi;
const n=10; m=7; l=-2;
var
a: array [1..n] of integer;
b: array [4..m] of integer;
c: array [-9..l] of integer;
i, p, min : integer;
begin
for i:= 1 to n do readln(a[i]);
p:=1;
min := a[1];
for i:= 1 to n do
begin
p:=p*(a[i]);
if a[i]<a[min] then min := i;
a[min]:=p;
end;


for i:= 1 to m do readln(b[i]);
p:= 1;
min := b[4];
for i:= 4 to m do
begin
p:=p*(b[i]);
if b[i]<b[min] then min := i;
b[min]:=p;
end;


for i:= 1 to l do readln(c[i]);
p:=1;
min := c[-9];
for i:= -9 to n do
begin
p:=p*(c[i]);
if c[i]<c[min] then min := i;
c[min]:=p;
end;
end;


Автор: мисс_граффити 25.11.2007 18:49

ну по порядку:
в массиве а

    for i:= 1 to n do readln(a[i]);
p:=1;
min := 1; //мы же договорились запоминать индексы!
for i:= 1 to n do
begin
p:=p*(a[i]);
if a[i]<a[min] then min := i;
end;
a[min]:=p; //вот это надо вынести за пределы цикла! а то ерунда получится

в массиве b (с отступами здесь хуже...):
    for i:= 4 to m do readln(b[i]); //почему от 1 до m? от 4...
p:= 1;
min := 4; //!!!
for i:= 4 to m do
begin //вот здесь уползла строчка
p:=p*(b[i]);
if b[i]<b[min] then min := i;
end;
b[min]:=p; //опять же - выносим

ну и с массивом с- те же ошибки

Автор: ginga 25.11.2007 19:04

ну вот что я тут намудрил опять!посмотри пожалуйста(((


Program massivi;
const n=10; m=7; l=-2;
var
a: array [1..n] of integer;
b: array [4..m] of integer;
c: array [-9..l] of integer;
i, p, min : integer;
begin
for i:= 1 to n do readln(a[i]);
p:=1;
min := 1;
for i:= 1 to n do
begin
p:=p*(a[i]);
if a[i]<a[min] then min := i;
end;
a[min]:=p;


for i:= 4 to m do readln(b[i]);
p:= 1;
min := 4;
for i:= 4 to m do
begin
p:=p*(b[i]);
if b[i]<b[min] then min := i;
end;
b[min]:=p;

for i:= -9 to l do readln(c[i]);
p:=1;
min := -9;
for i:= -9 to n do
begin
p:=p*(c[i]);
if c[i]<c[min] then min := i;
end;
c[min]:=p;
end;






Автор: мисс_граффити 25.11.2007 20:15

здесь до 1, а не до n
а так - похоже на правду

for i:= -9 to n do 

Автор: ginga 25.11.2007 20:28

ясно!спасибо!!!!а как дальше сделать чтоб массивы в конце уже с заменёнными элементами выводились на экран?

Автор: мисс_граффити 25.11.2007 21:11

так же, как ввод
только вместо readln надо использовать writeln
это все выведется в столбик
а можно write, а потом, когда кончится массив, делать writeln (без параметров). тогда каждый массив будет на своей строке

Автор: ginga 25.11.2007 21:36

спасиб большое)))))