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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2009, 17:05   #1
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Восклицание МАССИВЫ 1 задача СРОЧНО

Уважаемые программисты!
Очень прошу вас помочь решить задачу:
"Дан целочисленный массив с N элементами. Сформировать новый массив, куда будут заносится соседние (то есть с индексами 1 и 2, 5 и 6 и т.д.) отрицательные элементы исходного массива"
Прилагаю свой код решения, но оно немного "кривое" - не всегда выводит нужные числа, не разберусь почему.
Пожалуйста, кто может, помогите лучше сегодня (или просто помогите=))!
Program NaZachet1;
uses crt;
var
a,b:array[1..100] of integer;
i,j,k,n:integer;
begin
clrscr;
read(n);
j:=1;
for i:=1 to n do
read(a[i]);
for i:=2 to n do
begin
if (a[i]<0) and (a[i-1]<0) then
begin
b[j]:=a[i-1];
j:=j+2;
b[j+1]:=a[i];
j:=j+2;
end;
end;
for k:=1 to j do
write(b[k],' ');
end.
Посмотрите, пожалуйста, что неверно!
RomT24 вне форума Ответить с цитированием
Старый 19.01.2009, 17:38   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

На первый взгляд увидел одну ошибку
Код:
begin
b[j]:=a[i-1];
j:=j+2;        {вот это лишнее}
b[j+1]:=a[i];
j:=j+2;
end;
Допустим у вас массив начинается так -5 -7. Тогда -5 у вас запишется в b[1], а -7 в b[3], после чего запись пойдёт в b[5]
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 19.01.2009, 17:40   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Насколько понял, должен выводить пары чисел?

Код:
Program NaZachet1;
uses crt;
var
a,b:array[1..100] of integer;
i,j,k,n:integer;
begin
clrscr;
read(n);
j:=1;
for i:=1 to n do
  read(a[i]);
writeln('---------');
for i:=2 to n do
  begin
  if (a[i]<0) and (a[i-1]<0) then
     begin
     b[j]:=a[i-1];
     b[j+1]:=a[i];
     j:=j+2;
     end;
  end;
for k:=1 to j-1 do
  begin
  write(b[k],' ');
  if k mod 2 = 0 then writeln;
  end;
readln;
end.

Пример ввода:
Код:
10
-6
-4
4
6
7
-7
-8
-9
4
5
---------
-6 -4
-7 -8
-8 -9
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 19.01.2009, 17:41   #4
pomoshnic
Форумчанин
 
Аватар для pomoshnic
 
Регистрация: 16.11.2008
Сообщений: 192
По умолчанию

...
For i:=1 to n do
B[i]:=a[i];
For i:=1 to n do
Begin
T:=0;
If odd(i) then if a[i]<0 then t:=a[i]; else if t<0 then
Begin
a[i-1]:=a[i];
A[i]:=t;
End;
End;
...

Последний раз редактировалось pomoshnic; 19.01.2009 в 17:46.
pomoshnic вне форума Ответить с цитированием
Старый 19.01.2009, 20:00   #5
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
По умолчанию

Спасибо, я теперь убедился, что мой второй вариант (где j+2) верный! И представляете, мне на зачете препод свой вариант написал (не проверяя на компе), сказал, что он правильный, а мои нет!
RomT24 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы на C++задача Wia Помощь студентам 1 20.12.2008 01:08