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

Дан целочисленный вектор А(n). Поменять местами последний положительный элемент вектора с первым ненулевым элементом

06.05.2019, 22:45. Показов 1607. Ответов 5

Дан целочисленный вектор А(п). Поменять местами последний положительный элемент вектора с первым ненулевым элементом вектора.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2019, 22:45
Ответы с готовыми решениями:

Поменять местами первый положительный элемент с первым отрицательным элементом
1)Массив из 9 элементов. Поменять местами первый положительный элемент с первым отрицательным...

Поменять местами последний элемент массива с первым элементом, равным x
Заданный массив с n чисел. Поменять местами последний элемент с первым элементом, равным x. Учесть...

В одномерном целочисленном массиве поменять местами последний элемент с первым нулевым элементом
Ввести в память машины одномерный целочисленный массив, размерностью не более 50 элементов....

Поменять местами последний элемент массива с первым минимальным элементом, а затем поделить на заданное
Поменять местами последний элемент массива с первым минимальным элементом, а затем поделить на...

5
2373 / 775 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
07.05.2019, 22:02 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
program Zadanie84;
const
n = 10;   //  Количество элементов массива.
var
a: array [1..n] of integer;  // Переменная для хранения массива.
i: integer;  // Промежуточная переменная для организации циклов.
ind1: integer;  // Переменная для хранения индекса первого ненулевого элемента.
ind2: integer;   // Переменная для хранения индекса последнего положительного элемента.
buf: integer;  // Промежуточная переменная для обмена значений элементов.
reg1: boolean;  // Переменная для проверки корректности нахождения индекса элемента с ненулевым значением.
reg2: boolean;  // Переменная для проверки корректности нахождения индекса элемента с положительным значением.
begin
randomize;
writeln('Исходный массив:');
for i:= 1 to n do
 begin
 a[i]:= random(7) - 3; // Заполнение массива случайными числами.
 write(a[i]:3);
 end;
writeln;
ind1:= 0;
for i:= 1 to n do     // Поиск индекса первого элемента  с ненулевым значением.
 if a[i] <> 0 then
    begin
    ind1:= i;
    writeln('Индекс первого элемента с ненулевым значением: ',ind1);
    break;
    end;
reg1:= true;
if ind1 = 0 then     // Проверка поиска элемента по условиям задачи.
   begin
     writeln('В массиве нет элементов с ненулевым значением.');
     reg1:= false;
   end;
ind2:= 0;
for i:= n downto 1 do  // Поиск индекса последнего элемента  с положительным значением.
 if a[i] > 0 then
    begin
    ind2:= i;
    writeln('Индекс последнего элемента с положительным значением: ',ind2);
    break;
    end;
reg2:= true;
if ind2 = 0 then      // Проверка поиска элемента по условиям задачи.
   begin
     writeln('В массиве нет элементов с положительным значением.');
     reg2:= false;
   end;
if reg1 and reg2 then
   begin
    buf:= a[ind1];     // Обмен значениями между найденными элементами.
    a[ind1]:= a[ind2];
    a[ind2]:= buf;
    writeln('Измененный массив:');  // Вывод измененного массива на экран.
    for i:= 1 to n do
      write(a[i]:3);
    Writeln;
   end
else
  writeln('Обмен значениями элементов осуществить невозможно. ');
Readln;
end.


Протокол работы программы
Исходный массив:
3 -1 0 0 0 3 -1 2 -3 -1
Индекс первого элемента с ненулевым значением: 1
Индекс последнего элемента с положительным значением: 8
Измененный массив:
2 -1 0 0 0 3 -1 3 -3 -1
0
2 / 2 / 0
Регистрация: 25.04.2019
Сообщений: 8
10.05.2019, 13:47 3
Я бы решил немного по-другому - в одном цикле и, в большинстве случаев, менее чем за один проход массива. А всякие break'и, ИМХО, такой же моветон, как и goto.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Program Exchange;
Var
    A: Array [1..50] of Integer;
    i,f,l,n,t: Integer;
    b, b1, b2: Boolean;
 
Begin
  Randomize;
  Write ('Введите размерность массива: ');
  Read (n);
  WriteLn ('Исходный массив:');
    For i:= 1 to n do
      begin
        A [i]:= Random (n) - Random (n);
        Write (A [i]:3)
      end;
  WriteLn;
  b:= True;
  b1:= False;
  b2:= False;
  i:= 0;
    While (b and (i < n)) do
      begin
        i:= i + 1;
          IF not b1 and (A [i] <> 0) then
            begin
              f:= i;
              b1:= True
            end;
          IF not b2 and (A [n + 1 - i] > 0) then
            begin
              l:= n + 1 - i;
              b2:= True
            end;
          IF b1 and b2 then b:= False
      end;
    IF b1 then WriteLn ('Индекс первого элемента с ненулевым значением: ', f)
      Else WriteLn ('В массиве нет элементов с ненулевым значением');
    IF b2 then WriteLn ('Индекс последнего элемента с положительным значением: ', l)
      Else WriteLn ('В массиве нет элементов с положительным значением');
    IF b1 and b2 then
      begin
        t:= A [f];
        A [f]:= A [l];
        A [l]:= t;
        WriteLn ('Измененный массив:');
          For i:= 1 to n do Write (A [i]:3)
      end
    Else WriteLn ('Обмен значениями элементов осуществить невозможно');
  ReadLn
End.
0
Модератор
9528 / 4857 / 3228
Регистрация: 17.08.2012
Сообщений: 15,194
10.05.2019, 19:03 4
Цитата Сообщение от CyberInfinity Посмотреть сообщение
всякие break'и, ИМХО, такой же моветон, как и goto
А ввод без проверки данных - это новое слово в программировании.

Вообще, то, что нарушает концепцию структурного программирования - это не так уж и плохо. Быть догматиком - куда как хуже. Просто тот или иной инструмент лучше применять лишь тогда, когда это действительно необходимо. Иными словами, Вы не любите кошек только потому, что не умеете их готовить. (А употребление слова program - это очень современно, не моветон и никакой не антиквариат. )

Почти то же самое , что и у Вас, только покороче:
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
29
30
31
32
33
34
35
36
37
38
39
40
const
  m = 100;
 
var
  a: array[1..m] of integer;
  i, n, last_neg, first_no_zero, tmp: integer;
 
begin
  randomize;
  repeat
    write('n in [1..', m, '];  n = ');
    readln(n)
  until n in [1..m];
  writeln('Source array A:');
  for i := 1 to n do
    begin
      a[i] := -99 + random(199);
      write(a[i]:4);
      if (first_no_zero = 0) and (a[i] <> 0) then first_no_zero := i;
      if a[i] < 0 then last_neg := i
    end;
  writeln;
  if last_neg > 0
    then writeln('Last negative: A[', last_neg, '] = ', a[last_neg])
    else writeln('Negative element not found');
  if first_no_zero > 0
    then writeln('First no zero: A[', first_no_zero, '] = ', a[first_no_zero])
    else writeln('No zero element not found');
  if (last_neg > 0) and (first_no_zero > 0)
    then begin
      tmp := a[last_neg];
      a[last_neg] := a[first_no_zero];
      a[first_no_zero] := tmp;
      writeln('Result array:');
      for i := 1 to n do write(a[i]:4);
      writeln
    end
    else writeln('Exchange not possible');
  readln
end.
0
2 / 2 / 0
Регистрация: 25.04.2019
Сообщений: 8
11.05.2019, 00:59 5
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
А ввод без проверки данных - это новое слово в программировании.
Вы не возражаете, если я тоже на минутку включу перфекциониста? Например, ваша проверка данных не полна. А если юзер нечаянно введёт точку или символ какой? В идеале, всё, что вводит юзер, надо собирать в строку, а потом val'ом преобразовывать в число.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Просто тот или иной инструмент лучше применять лишь тогда, когда это действительно необходимо.
Примерно это я и пытался сказать. А в этой задаче такой необходимости не наблюдается.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
(А употребление слова program - это очень современно, не моветон и никакой не антиквариат. )
Program - это не моветон, не антиквариат и даже не анахронизм С помощью Program можно коротко описать суть задачи, решаемой программой, так что какая-никакая польза есть.
0
Модератор
9528 / 4857 / 3228
Регистрация: 17.08.2012
Сообщений: 15,194
11.05.2019, 02:05 6
Цитата Сообщение от CyberInfinity Посмотреть сообщение
ваша проверка данных не полна
Не возражаю. Конечно, не полна. Но pashasos3 только учится, и проверка ввода с применением, например, val, вряд ли добавит ему оценку, но вызовет у преподавателя стойкую уверенность насчёт того, что pashasos3 халявщик.
Цитата Сообщение от CyberInfinity Посмотреть сообщение
С помощью Program можно коротко описать суть задачи
Во-первых, я пошутил, и во-вторых, ключевое слово program предназначено вовсе не для того, что Вы написали. Коротко (или подробно, по желанию) суть задачи логичнее описать в комментарии в начале программы, что обычно и делается.

Ликбез:

Ключевое слово program предназначено для описания имени программы (обычно это имя присваивается именам объектного и исполняемого файлов), а также (уверен, что Вы этого не знаете) для указания устройств ввода и вывода для программы. Например, при
Pascal
1
program example (com1, lpt1);
компоновщик создаст файл example.obj, компилятор создаст файл example.exe, ввод данных программой будет производиться с последовательного порта номер 1, вывод данных программой будет производиться на принтер номер 1. Стандартные устройства ввода-вывода можно не указывать, то есть
Pascal
1
program example;
полностью выглядит как
Pascal
1
program example (input, output);
если точнее, то
Pascal
1
program example (con, con);
если совсем точно, то
Pascal
1
program example (keyb, crt);
но последнее поддерживается не всегда.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2019, 02:05
Помогаю со студенческими работами здесь

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

Дан массив X(N).Найти наибольший элемент и поменять его местами с первым элементом.
Добрый день.Помогите, пожалуйста, решить задачу. Дан массив X(N).Найти наибольший элемент и...

Дан массив X(N). Найти наибольший элемент и поменять его местами с первым положительным элементом, если такой есть
Дан массив X(N). Найти наибольший элемент и поменять его местами с первым положительным элементом,...

Поменять местами последний ноль в линейной последовательности с первым элементом
Написать программу, которая меняет местами последний ноль в линейной последовательности с первым...


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

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

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