0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 34
1

Удалить из массива все положительные элементы, расположенные до последнего отрицательного элемента

10.10.2013, 01:21. Показов 3692. Ответов 6
Метки нет (Все метки)

Прошу Вашей помощи.
Задача: удалить из массива все положительные элементы, расположенные до последнего отрицательного элемента.

У меня получается отыскать номер последнего отрицательного элемента, а дальше без вариантов...

Pascal
1
2
3
4
5
6
7
8
9
k:=0; {Длинна нового массива}
 
  for i:=1 to n do
    begin {Находим последний отрицательный}
      if R[i] < 0 then
        k:=i;
    end;
writeln(k);
end.
Буду благодарен.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2013, 01:21
Ответы с готовыми решениями:

Удалить все положительные элементы, кратные семи или трём, расположенные до последнего минимального элемента.
Дан одномерный целочисленный массив. Удалить все положительные элементы, кратные семи или трём,...

Переписать в другой массив из данного все элементы, расположенные правее последнего отрицательного элемента
Дан массив чисел x1,x2,...,x22. переписать в другой массив из данного все элементы, расположенные...

В произвольном массиве найти номер первого положительного и последнего отрицательного элемента и все элементы расположенные между ними
Подскажите условие для вывода на экран в массиве первый положительный элемент и последний...

Сформировать одномерный массив, элементами которого являются все положительные элементы исходного массива, расположенные после его 1-го отрицательного
Дан массив X(N,M). Найти первый отрицательный элемент при построчном просмотре. Сформировать...

6
Фрилансер
3417 / 2814 / 3000
Регистрация: 08.02.2012
Сообщений: 8,429
Записей в блоге: 1
10.10.2013, 11:59 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Var A:array[1..100] of integer;
    i,k,n,r,j:byte;
Begin
    write('N = ');readln(n);
    For i:=1 to n do
    Begin
      A[i]:=random(31)-15;
      write(A[i]:4);
      if A[i]<0 then k:=i;
    End;
    writeln;
    r:=k;i:=1;
    While i<=r do
    Begin
      if A[i]>0 then
      Begin
        dec(n);
        For j:=i to n do
         A[j]:=A[j+1];
        dec(i);
        dec(r);
      End;
      inc(i);
    End;
    writeln('Полученный массив');
    For i:=1 to n do
     write(A[i]:4);
End.
Тестируй
1
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 34
10.10.2013, 16:19  [ТС] 3
Цитата Сообщение от CodeR Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Var A:array[1..100] of integer;
    i,k,n,r,j:byte;
Begin
    write('N = ');readln(n);
    For i:=1 to n do
    Begin
      A[i]:=random(31)-15;
      write(A[i]:4);
      if A[i]<0 then k:=i;
    End;
    writeln;
    r:=k;i:=1;
    While i<=r do
    Begin
      if A[i]>0 then
      Begin
        dec(n);
        For j:=i to n do
         A[j]:=A[j+1];
        dec(i);
        dec(r);
      End;
      inc(i);
    End;
    writeln('Полученный массив');
    For i:=1 to n do
     write(A[i]:4);
End.
Тестируй
Cпасибо большое за способ. Я уже решил другим.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
k := 0; // Это будет последний отрицательный элемент
  for i := 1 to n do  // Найдём его
  begin 
    if R[i] < 0 then
      k := i;
  end;
  i := 1; // Возвращаем счётчик в начало
  while i <= k do
    if (R[i] > 0) then
    begin
      for j := i to k - 1 do
        R[j] := R[j + 1];
      k := k - 1; // Укоротим длину полученного массива
    end
    else i := i + 1; // Если элемент отрицательный, то идём дальше
  {}
  writeln('Результат');
  for i := 1 to k do
  begin
    writeln(R[i]);
  end;
Попытаюсь разобраться сейчас в Вашем способе.
0
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 34
13.10.2013, 02:11  [ТС] 4
Цитата Сообщение от CodeR Посмотреть сообщение
Var A:array[1..100] of integer;
* * i,k,n,r,j:byte;
Begin
* * write('N = ');readln(n);
* * For i:=1 to n do
* * Begin
* * * A[i]:=random(31)-15;
* * * write(A[i]:4);
* * * if A[i]<0 then k:=i;
* * End;
* * writeln;
* * r:=k;i:=1;
* * While i<=r do
* * Begin
* * * if A[i]>0 then
* * * Begin
* * * * dec(n);
* * * * For j:=i to n do
* * * * *A[j]:=A[j+1];
* * * * dec(i);
* * * * dec(r);
* * * End;
* * * inc(i);
* * End;
* * writeln('Полученный массив');
* * For i:=1 to n do
* * *write(A[i]:4);
End.
Мой способ дал сбой. Вернее он делает не совсем то, что мне нужно, а именно не учитывает элементы, стоящие после последнего отрицательного.

Я вас очень благодарю за помощь. И у меня есть к Вам вопрос: правильно ли я понял смысл следующих действий?

Pascal
1
2
3
4
dec(n); // Уменьшим длину главного массива
      dec(i); // Закончим цикл, когда итый станет катым
      dec(k); // Т.к. элементы массива сдвинулись, то и инднкс сдвинется
    inc(i); // Тут совсем не догадываюсь
Заранее благодарен за ответ.
0
Фрилансер
3417 / 2814 / 3000
Регистрация: 08.02.2012
Сообщений: 8,429
Записей в блоге: 1
13.10.2013, 09:23 5
Цитата Сообщение от i_1 Посмотреть сообщение
inc(i); // Тут совсем не догадываюсь
это параметр основного цикла,т.е каждый раз нам нужно проверять следующий элемент.А то,что внутри if есть dec(i); нужно для того чтобы,когда мы выходим из условия не перепрыгнуть через элемент
1
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 34
13.10.2013, 12:39  [ТС] 6
Цитата Сообщение от CodeR Посмотреть сообщение
это параметр основного цикла,т.е каждый раз нам нужно проверять следующий элемент.А то,что внутри if есть dec(i); нужно для того чтобы,когда мы выходим из условия не перепрыгнуть через элемент
спасибо, а смысл остальных строк я правильно понял?
0
Фрилансер
3417 / 2814 / 3000
Регистрация: 08.02.2012
Сообщений: 8,429
Записей в блоге: 1
13.10.2013, 12:45 7
Цитата Сообщение от i_1 Посмотреть сообщение
спасибо, а смысл остальных строк я правильно понял?
правильно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2013, 12:45
Помогаю со студенческими работами здесь

Нужно из массива удалить все положительные элементы после первого отрицательного
Помогите пожалуйста, всю голову сломал. Нужно из массива удалить все положительные элементы после...

Удалить все элементы массива, расположенные после последнего символа пробела
Дан символьный файл, содержащий по крайней мере один символ пробела. Удалить все его элементы,...

Удалить из массива все положительные элементы, расположенные между максимальным и минимальным
удалить из массива все положительные элементы, расположенные между максимальным и минимальным...

Заменить все положительные элементы вещественного массива значением максимального отрицательного элемента
Заменить все положительные элементы вещественного массива значением максимального отрицательного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru