Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > новый массив из нечетных элементов


Автор: royksoppster 29.1.2006, 00:23
Здравствуйте.
Мне нужно выполнить задачку:
"Написать процедуру создания нового массива из нечетных элементов исходного массива. Вывести 2 массива. Используя процедуру, создать 2 новых массива из нечетных элементов. Вывести все массивы."

Вот мой код этой программы:

Код

program noviimassiv;
type mas=array[1..10] of integer;
var i,n,k:integer;
a,b:mas;

procedure vvod(var a:mas; n:integer);
begin
for i:=1 to n do readln(a[i]);
end;

procedure vivod(var a:mas; n:integer);
begin
for i:=1 to n do
write(a[i]:3);
writeln;
end;

procedure ne4(c:mas; f:byte; d:mas; g:integer);
begin
g:=0;
for i:=1 to f do
if ODD(c[i]) then
begin
g:=g+1;
d[g]:=c[i];
end;
end;

BEGIN
writeln('введите кол-во элементов в массиве');
readln(n);
vvod(a,n);
writeln('исходный массив');
vivod(a,n);
ne4(a,n,b,k);
writeln('новый массив из нечетных элементов');
vivod(a,n);
readln;
END.


Вот.. проблема в том, что исходный массив нормально показывается, а вот новый массив... точнее процедура поиска нечетных элементов у меня не хочет работать.
Что не так ?

Заранее спасибо.

ЗЫ: пишу на турбо паскале версии 7.0, с русским и англ. шрифтом..

Автор: volvo877 29.1.2006, 02:08
В следующий раз будь внимательнее:
Код
program noviimassiv;
type
  mas=array[1..10] of integer;

var
  i,n,k:integer;
  a,b:mas;

procedure vvod(var a:mas; n:integer);
begin
  for i:=1 to n do readln(a[i]);
end;

procedure vivod(var a:mas; n:integer);
begin
  for i:=1 to n do write(a[i]:3);
  writeln;
end;

{ Обрати внимание - второй массив должен передаваться ПО ССЫЛКЕ }
procedure ne4(c:mas; f:byte; var d:mas; var g:integer);
begin
  g:=0;
  for i:=1 to f do
    if ODD(c[i]) then begin
      g:=g+1;
      d[g]:=c[i];
    end;
end;

BEGIN
  writeln('введите кол-во элементов в массиве'); readln(n);
  vvod(a,n);
  writeln('исходный массив');
  vivod(a,n);
  ne4(a,n,b,k);

  writeln('новый массив из нечетных элементов');
  { И здесь тоже - передаешь новый массив и количество элементов в нем }
  vivod(b,k);
  readln;
END.

Автор: Snowy 29.1.2006, 10:00
если ищем нечетные, то
if not ODD(c[i]) then
Добавлено @ 10:02
Цитата(royksoppster @ 29.1.2006, 00:23 Найти цитируемый пост)

writeln('новый массив из нечетных элементов');
vivod(a,n);

В новом массиве будет не n элементов, а
(n+1) div 2;

Автор: volvo877 29.1.2006, 10:31
Цитата(Snowy @ 29.1.2006, 09:00 Найти цитируемый пост)
если ищем нечетные, то
if not ODD(c[i]) then

smile Ошибочка... Odd это и есть "нечетный" по английски...

Автор: royksoppster 29.1.2006, 12:12
Вольво, спасибо тебе большое.
Программа работает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)