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

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

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

Автор: 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, все проще гораздо smile.gif

Код
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

Спасибо за помощь smile.gif

Но мне не нужен готовый массив

Цитата
(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 и заработало...