Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 06.05.2019
Сообщений: 36

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

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

Студворк — интернет-сервис помощи студентам
Дан целочисленный вектор А(п). Поменять местами последний положительный элемент вектора с первым ненулевым элементом вектора.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2019, 22:45
Ответы с готовыми решениями:

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

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

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

5
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
07.05.2019, 22:02
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
Я бы решил немного по-другому - в одном цикле и, в большинстве случаев, менее чем за один проход массива. А всякие 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
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,480
10.05.2019, 19:03
Цитата Сообщение от 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
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
А ввод без проверки данных - это новое слово в программировании.
Вы не возражаете, если я тоже на минутку включу перфекциониста? Например, ваша проверка данных не полна. А если юзер нечаянно введёт точку или символ какой? В идеале, всё, что вводит юзер, надо собирать в строку, а потом val'ом преобразовывать в число.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Просто тот или иной инструмент лучше применять лишь тогда, когда это действительно необходимо.
Примерно это я и пытался сказать. А в этой задаче такой необходимости не наблюдается.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
(А употребление слова program - это очень современно, не моветон и никакой не антиквариат. )
Program - это не моветон, не антиквариат и даже не анахронизм С помощью Program можно коротко описать суть задачи, решаемой программой, так что какая-никакая польза есть.
0
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,480
11.05.2019, 02:05
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.05.2019, 02:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru