Помощь - Поиск - Пользователи - Календарь
Полная версия: задача с одномерными массивами....
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ginga
Вот такая задача вот....помогите плиз сделать очень срочно нужно....

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

Пожалуйста помогите!!!!!!
мисс_граффити
за один проход находишь произведение и адрес минимального эл-та. потом заменяешь...
с чем проблемы? что пробовал делать?
ginga
Цитата(мисс_граффити @ 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;
мисс_граффити
тебе надо запоминать не сам минимальный элемент, а его индекс.
if b[i]<b[min] then min:=i;
...
b[min]:=p;

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



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;

мисс_граффити
я ж говорю - сделай нормальные отступы! лесенкой, по уровням...
для примера:
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
Вот вроде поменял всё как ты говорила!что дальше????((((((


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;

мисс_граффити
ну по порядку:
в массиве а
    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
ну вот что я тут намудрил опять!посмотри пожалуйста(((


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;





мисс_граффити
здесь до 1, а не до n
а так - похоже на правду
for i:= -9 to n do 
ginga
ясно!спасибо!!!!а как дальше сделать чтоб массивы в конце уже с заменёнными элементами выводились на экран?
мисс_граффити
так же, как ввод
только вместо readln надо использовать writeln
это все выведется в столбик
а можно write, а потом, когда кончится массив, делать writeln (без параметров). тогда каждый массив будет на своей строке
ginga
спасиб большое)))))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.