Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Одномерный массив
Автор: cxt 9.04.2005 17:03
Задача:
В одномерно массиве состоящем из n целых чисел вычеслить номер максемального элемента массива
Не подскажите как подправить код чтобы массив нужно было бы вводить самому , а не при помощи randomize
Код
programm xxx;
const count=10;
var
m:array [1..count] of integer;
max,i:integer;
begin
randomize;
for i:=1 to count do
begin
m[i]:=random(count*2)+1;
writeln(m[i], ' ');
end;
writeln;
max:=m[1];
for i:=2 to count do
begin
if m[i]>max then
begin
max:=m[i];
end;
end;
writeln('Максимальный элемент ' , max);
end.
Автор: FreeMan 9.04.2005 17:12
Цитата
if m[i]>max then
begin
max:=m[i];
end;
сделай
Код
if m[i]>m[max] then
begin
max:=i;
end;
Автор: volvo 9.04.2005 17:17
Цитата
как подправить код чтобы массив нужно было бы вводить самому
Код
for i:=1 to count do
begin
m[i]:=random(count*2)+1;
writeln(m[i], ' ');
end;
поменяй на
Код
for i:=1 to count do
begin
write('m[', i, '] = '); readln(m[i]);
end;
Автор: cxt 9.04.2005 20:40
Не поможете еще раз :D
Пунк Б в этой задаче.
Вычеслить произведение элементов массива расположенным между первым и вторым нулевыми элементами.
Автор: klem4 9.04.2005 21:21
Код
i:=1;
while (i<=n)and(k=0) do
begin
if x[i]=0 then k:=i;
inc(i);
end;
if not((k=0)or(k=n)) then
begin
i:=succ(k);
while(i<=n)and(x[i]<>0) do
begin
p:=p*x[i];
inc(i);
if x[i]=0 then flag:=true;
end;
if flag then
writeln('p=',p:2:3)
else writeln('No')
end;
Автор: volvo 9.04.2005 21:37
klem4, все проще гораздо
Код
const
n = 10;
a: array[1 .. n] of integer =
(1, 2, 0, 4, 5, 6, 0, 8, 9, 10);
count: integer = 0;
var
ix: array[1 .. n] of integer;
i, p: integer;
begin
count := 0;
for i := 1 to n do
if a[i] = 0 then begin
inc(count); ix[count] := i;
end;
{ вот тут можно устроить проверку, "а есть ли вообще 2 нулевых элемента?" }
p := 1;
for i := ix[1] + 1 to ix[2] - 1 do
p := p * a[i];
writeln(p);
end.
Автор: cxt 9.04.2005 22:24
Спасибо за помощь
Но мне не нужен готовый массив
Цитата
(1, 2, 0, 4, 5, 6, 0, 8, 9, 10)
его нужно вводить самому... Это как бы одна задача первую нужно подредактировать чтобы получилась вторая.
Автор: volvo 9.04.2005 22:32
cxt, я до последней цифры переделывать не буду. Тебе показали, как это делается, дальше - самостоятельно.
Автор: cxt 10.04.2005 14:46
Ну не как немогу сделать... на верно все перепробовал не получается...
Щас массив вводится но щетает не верно
Код
program xxx;
const n=10;
var
a:array[1..n] of integer;
ix:array[1..n] of integer;
i,p,count:integer;
begin
for i:=1 to n do
begin
writeln('a[',i,']=');
readln(a[i]);
end;
for i:=1 to n do
if a[i]=0 then
begin
inc(count);
ix[count]:=i;
end;
p:=1;
for
i:=ix[i]+1 to ix[2]-1 do
p:=P*a[i];
writeln('Произведение равно' ,p);
end.
Автор: volvo 10.04.2005 14:52
Ну, во-первых, где обнуление Count? (в моем варианте оно все-таки было). А второй вопрос - я НЕ ЗНАЮ, какие данные вводятся, может быть во вводимом массиве просто нет двух нулей? Я не телепат.
Кстати, ИМЕННО поэтому я и делаю задачу так, чтобы были видны данные, с которыми она работает.
Да и вот этой строчки у меня не было:
Цитата
for i:=ix[i]+1 to ix[2]-1 do
У меня было так:
Цитата
for i := ix[1] + 1 to ix[2] - 1 do
Автор: cxt 10.04.2005 15:40
Хех стоило поставить 1 и заработало...