Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2007, 00:21   #1
Mookapek
Новичок
Джуниор
 
Регистрация: 17.12.2007
Сообщений: 2
По умолчанию Массивы

Здравствуйте!
Помогите, пожалуйста решить такую задачу на Паскале:
В одномерном массиве, состоящем из N целочисленных элементов, вычислить:
1. Минимальный по модулю элемент массива.
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях.

P.S. я в Паскале слаб, поэтому надеюсь на вашу помощь.
Mookapek вне форума Ответить с цитированием
Старый 18.12.2007, 08:49   #2
madmot
Форумчанин
 
Регистрация: 04.09.2007
Сообщений: 155
По умолчанию

1.
Код:
const n=20; {для примера...}
var a:array[1..n] of integer; 
  min:integer;
      i:byte;
begin
{--------------------------------------}
{здесь надо осуществить ввод массива}
{--------------------------------------}
min:=abs(a[1]);
for i:=2 to n do
  if abs(a[i])<min then min:=abs(a[i]);
writeln('min=',min:2);
end.

Последний раз редактировалось madmot; 18.12.2007 в 08:54.
madmot вне форума Ответить с цитированием
Старый 18.12.2007, 08:59   #3
madmot
Форумчанин
 
Регистрация: 04.09.2007
Сообщений: 155
По умолчанию

2.
Видимо придется делать за два прохода массива. Сначала в цикле ищем первый нулевой элемент (выйти из цикла можно оператором break), затем в новом цикле от него считаем сумму sum:=sum+abs(a[i])
madmot вне форума Ответить с цитированием
Старый 18.12.2007, 09:26   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Условия 1 и 2.
Код:
program mass1;
uses crt;
var a:array[1..100] of integer;
    n,min,sum,i,j:integer;
begin
  clrscr;
  write('n=');readln(n);
  randomize;
  for i:=1 to n do
     begin
       a[i]:= random(5)-2;//взят маленький интервал, чтобы ноли были
       write(a[i],' ')
     end;
readln;
min:=abs(a[1]);                  //1 условие
for i:=2 to n do
if a[i]<min then begin min:=a[i];end;
write('min=',min);
readln;
sum:=0;
for i:=1 to n do             //2 условие
if a[i]= 0 then
  for j:=i+1 to n do
      begin sum:=sum+abs(a[j]);end;
write('sum=',sum);
readln;
end.
puporev вне форума Ответить с цитированием
Старый 20.12.2007, 01:46   #5
Mookapek
Новичок
Джуниор
 
Регистрация: 17.12.2007
Сообщений: 2
По умолчанию

Всем спасибо. Вот осталось сделать такое: "Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях."
У меня получается только с помощью ввода дополнительного массива. А как сделать без доп. массива?
Mookapek вне форума Ответить с цитированием
Старый 20.12.2007, 07:36   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
"Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях."
В условии не оговорено, сохранить последовательность, или не обязательно. Во втором случае код проще. На всякий случай сохранил, из сложного простое сделать легче, чем наоборот.
Код:
 
for i:=1 to n div 2 do
for j:=i to n-1 do
if j mod 2=i mod 2 then
    begin
       x:=a[j];a[j]:=a[j+1];a[j+1]:=x;
    end;
for i:=(n div 2)+1 to n-2 do
for j:=i to n-1 do
if j mod 2<>i mod 2 then
    begin
       x:=a[j];a[j]:=a[j+1];a[j+1]:=x;
    end;
for i:=1 to n do
write(a[i],' ');
readln;
end.
puporev вне форума Ответить с цитированием
Старый 18.04.2011, 19:31   #7
pashqa
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
В условии не оговорено, сохранить последовательность, или не обязательно. Во втором случае код проще. На всякий случай сохранил, из сложного простое сделать легче, чем наоборот.
Код:
 
for i:=1 to n div 2 do
for j:=i to n-1 do
if j mod 2=i mod 2 then
    begin
       x:=a[j];a[j]:=a[j+1];a[j+1]:=x;
    end;
for i:=(n div 2)+1 to n-2 do
for j:=i to n-1 do
if j mod 2<>i mod 2 then
    begin
       x:=a[j];a[j]:=a[j+1];a[j+1]:=x;
    end;
for i:=1 to n do
write(a[i],' ');
readln;
end.
Не могли бы вы описать полностью программу,а то что-то я сделал не так,она не хочет ставить сначала четные элементы а потом не четные...
pashqa вне форума Ответить с цитированием
Старый 18.04.2011, 21:42   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Вы обращайте внимание на дату сообщения.
Вы задаёте вопрос по программе, которая была опубликована 3 с половиной года назад!

2)
Цитата:
она не хочет ставить сначала четные элементы а потом не четные...
судя по заданию:
Цитата:
в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях
программа и не должна этого делать!
Она должна расставлять элементы, стоящие в ЧЁТНЫХ / НЕЧЁТНЫХ ПОЗИЦИЯХ! а не чётные/нечётные элементы..

p.s. я программу не анализировал.. верю в puporev
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2011, 22:24   #9
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Цитата:
1) Вы обращайте внимание на дату сообщения.
Вы задаёте вопрос по программе, которая была опубликована 3 с половиной года назад!
Serge_Bliznykov, это ж хорошо когда люди поиском пользоваться начинают! Такое нужно поощрять)

pashqa, тебе вары и begin написать что ли?
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 19.04.2011, 22:43   #10
pashqa
Пользователь
 
Регистрация: 09.12.2010
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) Вы обращайте внимание на дату сообщения.
Вы задаёте вопрос по программе, которая была опубликована 3 с половиной года назад!

2)
судя по заданию:
программа и не должна этого делать!
Она должна расставлять элементы, стоящие в ЧЁТНЫХ / НЕЧЁТНЫХ ПОЗИЦИЯХ! а не чётные/нечётные элементы..

p.s. я программу не анализировал.. верю в puporev
Ну и что что 3.5 года назад)) мне надо было лучше создать новую тему?
P.S. извиняюсь) вопрос не совсем так поставил)) так все верно получается)) тока препод требует теперь через case и repeat/until
pashqa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы в С\С++ Zahar11 Помощь студентам 4 31.05.2008 00:35
массивы ShenDy Общие вопросы C/C++ 4 17.04.2008 00:01
Массивы Snord Общие вопросы Delphi 2 12.04.2008 13:45