С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.10.2017
Сообщений: 20
1

Переписать в массив вначале все элементы исходного массива с четными номерами, а затем — с нечетными

05.01.2018, 17:12. Показов 2834. Ответов 7

Author24 — интернет-сервис помощи студентам
Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера вначале все элементы исходного массива с четными номерами, а затем — с нечетными: A2, A4, A6, …, A1, A3, A5, … .
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2018, 17:12
Ответы с готовыми решениями:

Вывести вначале элементы массива с четными индексами, а затем - с нечетными.
1. Дан массив размера N. Вывести вначале его элементы с четными индексами, а затем - с нечетными....

Сформировать два массива: в первый включить элементы исходного с четными номерами, а во второй с нечетными
помогите пожалуйста решить задачи=) язык программирования паскаль №2) задан массив а размерности...

Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами
Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы...

Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами.
В очередной раз прошу помощи в решении сложного (пока) для меня задания, ребята, помогите......

7
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
07.01.2018, 16:06 2
Лучший ответ Сообщение было отмечено naru2vlad как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const n = 6;
var a, b: array [1..n] of integer;
    i, ii: integer;
begin
  randomize;
  write('A: ');
  for i := 1 to n do begin
    a[i] := -25 + random(51);
    write(a[i], ' ');
  end;
  writeln;
  ii := 2;
  for i := 1 to n div 2 do begin
    b[i] := a[ii]; ii := ii + 2;
  end;
  ii:=1;
  for i := n div 2 + 1 to n do begin
    b[i] := a[ii]; ii := ii + 2;
  end;
  write('B: ');
  for i := 1 to n do
    write(b[i], ' ');
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7795 / 4618 / 2831
Регистрация: 22.11.2013
Сообщений: 13,114
Записей в блоге: 1
08.01.2018, 20:37 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
const n=6;
var a, b: array [1..n] of Integer; i: Integer;
begin
  Randomize;
  for i:=1 to n do begin
    a[i]:=-25+Random(51);
    b[(i+1) div 2+n div 2*Ord(Odd(i))]:=a[i];
  end;
  Write('A ='); for i:=1 to n do Write(' ',a[i]); WriteLn;
  Write('B ='); for i:=1 to n do Write(' ',b[i]); WriteLn;
end.
0
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
08.01.2018, 22:10 4
Цитата Сообщение от bormant Посмотреть сообщение
Ord(Odd(i))
Можно сократить до i mod 2.
1
Модератор
10061 / 5403 / 3353
Регистрация: 17.08.2012
Сообщений: 16,533
08.01.2018, 22:52 5
i mod 2 в виде текста, конечно, короче получается. Однако, взятие остатка от деления - достаточно дорогостоящая операция.

Если уж сокращать, то лучше будет (i and 1).

Насчёт Ord(Odd(i)) - интересная штука получается. Как ни странно, это эквивалент (i and 1), поскольку компилируется это дело (по крайней мере, в FPC) как раз в
Assembler
1
2
mov i, eax
and 1, eax
Вывод: Ord(Odd(i)) - оптимальный вариант. С одной стороны, компилируется в эффективный код, с другой стороны, логически верно отражает задуманное действие (i mod 2 или i and 1 - скажем так, "безликие").
1
1682 / 1095 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
08.01.2018, 23:43 6
Cyborg Drone, компилятор разве не может соптимизировать такие вещи(если конечно же включить оптимизацию)?
1
Модератор
10061 / 5403 / 3353
Регистрация: 17.08.2012
Сообщений: 16,533
09.01.2018, 00:30 7
Новичок, ??? В данном случае, конечно же, не может быть и речи о результате, который ты ожидаешь. Откуда компилятору знать, что тебе нужно?

Поэтому он i mod 2 компилирует примерно в
Assembler
1
2
3
4
mov i, eax
cdq   
mov 2, ecx
idiv ecx
Дело в том, что i mod 2 это совсем не то же самое, что ord(odd(i)) или i and 1. В данном случае можно применить i mod 2, но, вообще говоря, для определения чётности / нечётности требуется abs(i mod 2), ну, или abs(i) mod 2, но это уж как-то и не сокращение вовсе.

Пример:

ord(odd(-5)) = 1
-5 mod 2 = -1

Мелочь, вроде бы, но... Не мелочь. Определение чётности с помощью i mod 2 - это, на самом деле, такая бомба замедленного действия. Сидит себе в программе, до поры до времени никаких ошибок, а потом: бац! И долгие танцы с бубном.
2
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7795 / 4618 / 2831
Регистрация: 22.11.2013
Сообщений: 13,114
Записей в блоге: 1
09.01.2018, 14:32 8
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
но, вообще говоря, для определения чётности / нечётности требуется abs(i mod 2), ну, или abs(i) mod 2
Это если зачем-то сравнивать с 1. Но для сравнения с нулем знак безразличен: i mod 2 <> 0
Тем не менее, FPC 3.0.4 и тут без деления обойтись не сможет даже с включенной оптимизацией (-Ox) от 1 до 4.

Цитата Сообщение от Новичок Посмотреть сообщение
Можно сократить до i mod 2
... но не нужно, неспроста оно там написано, выше Cyborg Drone пояснил, почему :-)
1
09.01.2018, 14:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2018, 14:32
Помогаю со студенческими работами здесь

Создать два файла, первый из которых содержит элементы исходного с нечетными номерами, а второй — с четными
Задан файл действительных чисел (создать программным путем). Создать два новых файла, первый из...

Поменять местами элементы с четными и нечетными номерами содномерного массива
Поменять местами элементы с четными и нечетными номерамисодномерного массива

Создать два новых файла, первый из которых содержит элементы исходного файла с четными номерами, а второй — с нечетными.
Дан файл вещественных чисел с именем Name1. Создать два новых файла с именами Name2 и Name3, первый...

Сформировать два массива, включая в первый четные элементы исходного массива с нечетными индексами, а во второй нечетные элементы с четными индексами
Задан массив размером K. Сформировать два массива, включая в первый четные элементы исходного...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru