Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 5.00
Unrealler
652 / 350 / 26
Регистрация: 11.12.2009
Сообщений: 508
#1

Стандартные операции с массивами (матрицами) - Pascal

29.05.2010, 11:10. Просмотров 137067. Ответов 33

-------------------------------------------------------------------------------------------
Содержание:
  1. "Переворот" массива
  2. Сдвиг массива на k элементов влево или вправо
  3. Сдвиг массива на k элементов влево или вправо за линейное время
  4. Поиск минимума/максимума и их индексов
  5. Поиск минимума/максимума и их индексов в двумерном массиве (матрице)
  6. Работа с элементами выше/ниже/на главной/побочной диагоналях
  7. Транспонирование матрицы относительно главной и побочной диагоналей
  8. Поворот двумерного массива на 90° по часовой стрелке
  9. Поворот на 90 градусов по часовой стрелке и против без использования дополнительного массива
  10. Удаление элемента в одномерном массиве
  11. Удаление строк и столбцов по условию
  12. Цифровая сортировка (DigidalSort)
  13. Удаление всех строк и столбцов, содержащих хотя бы 1 ноль
  14. Двоичный (бинарный) поиск
  15. Работа с матрицей одним циклом
  16. Заполнение массива случайными неповторяющимися значениями
  17. Заполнение массива змейкой из левого верхнего угла
  18. Заполнение массива змейкой снизу вверх построчно
  19. Удалить все элементы, которые встречаются больше 1 раза
  20. Удаление элементов в одномерном несортированном массиве по условию
  21. Заполнение массива по спирали
  22. Построение синусоиды на двумерном массиве(матрице) из точек(.)
  23. Вставка нового столбца в матрицу со сдвигом исходных элементов
  24. Вставка новой строки в матрицу со сдвигом исходных элементов
  25. Переворот матрицы на 90° по часовой стрелке
  26. Заполнение массива неповторяющимися значениями
-------------------------------------------------------------------------------------------





1) Очень часто на форуме просят "переворот" массива. Например, было
Код
1 2 3 4 5
Стало
Код
5 4 3 2 1
Осуществляется это так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
   a:array[1..100] of integer;
   i,r,n:integer;
begin
 readln(n);  {Г·ГЁГІГ*ГҐГ¬ Г°Г*çìåð Г¬Г*Г±Г±ГЁГўГ*}
 for i:=1 to n do
  read(a[i]);
 for i:=1 to n div 2 do   {Г±Г*Г¬ "ïåðåâîðîò"}
  begin
   r:=a[i];
   a[i]:=a[n-i+1];
   a[n-i+1]:=r;
  end;
 for i:=1 to n do
  write(a[i],' ');
 readln
end.
2) Не менее возникает вопрос о сдвиге массива на k элементов влево или вправо.
Было
Код
1 2 3 4 5
Стало
Код
5 1 2 3 4
Сдвиг влево на k элементов:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
   a:array[1..100] of integer;
   i,r,n,k,j:integer;
begin
 read(n,k);  {k îáîçГ*Г*Г·Г*ГҐГІ âåëè÷èГ*Гі ñäâèãГ*}
 for i:=1 to n do
  read(a[i]);
 for i:=1 to k do
  begin
   for j:=1 to n do
    if (j=1) then r:=a[j] else a[j-1]:=a[j];
   a[n]:=r;
  end;
 for i:=1 to n do
  write(a[i],' ');
 readln
end.
Сдвиг на k элементов вправо:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
   a:array[1..100] of integer;
   i,r,n,k,j:integer;
begin
 read(n,k);  {k îáîçГ*Г*Г·Г*ГҐГІ âåëè÷èГ*Гі ñäâèãГ*}
 for i:=1 to n do
  read(a[i]);
 for i:=1 to k do
  begin
   for j:=n downto 1 do
    if (j=n) then r:=a[n] else a[j+1]:=a[j];
   a[1]:=r;
  end;
 for i:=1 to n do
  write(a[i],' ');
 readln
end.
38
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2010, 11:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стандартные операции с массивами (матрицами) (Pascal):

Стандартные операции с матрицами - Pascal
Очень прошу, помогите, кто чем сможет) буду очень благодарна... Написать программы и если можно, без функций и процедур 1 задание:...

Стандартные операции с массивами - Pascal
Можете помочь? Завтра сдавать : 1) Вести массив A(N). Найти среднее геометрическое значение массива. Минимальный элемент массива...

Операции с массивами и матрицами, подсчет кол-ва столбцов содержащих отрицательные элементы. - Pascal
Нужна помощь с таким заданием: Если в прямоугольной матрице меньше половины столбцов содержит отрицательные элементы, то все элементы с...

Стандартные алгоритмы работы с одномерными массивами - Pascal
1. Ввод массива целых чисел. 2. Вывод массива в строку. 3. Найти минимальный элемент. Найти количество элементов имеющих минимальное...

Основные операции с матрицами - Pascal
Определить значение матричного многочлена f(x)=A*A*A+2*A*A-3*A-5*E; -2 0 3 A= 9 -4 5 3 11 -7

Операции с матрицами в Pascal - Pascal
Здравствуйте!Помогите пожалуйста с написанием программы для следующей задачи: Дана матрица размера 3х4.Составить программу для просчета...

33
JokeR.BY
CAPITAL OF ROCK!
1273 / 700 / 573
Регистрация: 03.03.2010
Сообщений: 2,284
Завершенные тесты: 2
07.12.2014, 04:56 #31
roma070201, как вы себе это представляете? тут же совершенно разные переменные.
0
Mawrat
12788 / 5695 / 672
Регистрация: 19.09.2009
Сообщений: 8,838
07.12.2014, 12:28 #32
Цитата Сообщение от roma070201 Посмотреть сообщение
можно ли написать без if'а , а как-нибудь по другому?
С учётом окружающего кода - можно. Имеем:
Pascal
1
2
3
4
5
6
for i:=1 to k do
begin
  for j:=n downto 1 do
    if (j=n) then r:=a[n] else a[j+1]:=a[j];
  a[1]:=r;
end;
Тогда без IF будет так:
Pascal
1
2
3
4
5
6
7
for i:=1 to k do
begin
  r := a[n]; 
  for j:= n - 1 downto 1 do
    a[j+1]:=a[j];
  a[1]:=r;
end;
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3553 / 2247 / 1149
Регистрация: 22.11.2013
Сообщений: 5,916
15.01.2017, 15:31 #33
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сдвиг массива на k элементов за линейное время
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{ сдвиг массива a на n элементов (вправо для n>0, влево для n<0 }
procedure rotate(var a: array of Integer; n: Integer);
  procedure rev(b, e: Integer);
  var t: Integer;
  begin
    while b<e do begin
      t:=a[b]; a[b]:=a[e]; a[e]:=t;
      Inc(b); Dec(e);
    end;
  end;
begin
  n:=n mod (High(a)+1); if n=0 then Exit;
  if n<0 then Inc(n,High(a)+1);
  rev(Low(a),High(a)); rev(0,n-1); rev(n,High(a));
end;
3
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3553 / 2247 / 1149
Регистрация: 22.11.2013
Сообщений: 5,916
24.10.2017, 19:46 #34
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
А вот еще более эффективный сдвиг (за один проход):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure vRotate(var a: array of Integer; shift: Integer); {+ влево, - вправо}
var b, c, t, size: Integer;
begin
  size:=High(a)+1;
  shift:=shift mod size; if shift<0 then Inc(shift,size);
  if shift=0 then Exit;
  b:=0;
  while (b<>shift) and (shift<>size) do begin
    c:=shift;
    while (b<>shift) and (c<>size) do begin
      t:=a[b]; a[b]:=a[c]; a[c]:=t;
      Inc(b); Inc(c);
    end;
    if b=shift then shift:=c;
  end;
end;
0
24.10.2017, 19:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2017, 19:46
Привет! Вот еще темы с ответами:

Выполнить операции с квадратными матрицами - Pascal
2. Выполнить операции (здесь A, B, C, D — квадратные матрицы порядка n) (B^T)*(C^T)*(D^T)

Арифметические операции над матрицами - Pascal
Выполнив действия над матрицами A(n,n) и B(n,n) вычислить матрицу C(n,n) по формуле C=(A-B')(3A'+B/2),где A' и B'-транспортированные...

Определть операцию div через другие операции и стандартные функции - Pascal
помогите написать программу на языке паскаль!!! Задание: Определть операцию div через другие операции и стандартные функции. ...

Операции над массивами. - Pascal
Найти минимумы нечетных столбцов матрицы. uses crt; var i,j,n,min:integer; a:array of integer;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru