Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Cosfar
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 58
1

Сдвинуть все элементы массива на один шаг вправо

17.06.2015, 10:34. Просмотров 264. Ответов 0
Метки нет (Все метки)

В заданном k-м слое элементов целочисленного прямоугольного массива matrixnm сдвинуть все элементы на один шаг вправо. Номер слоя k задать с консоли.

Входные данные для n=4, m=5, k=2:
v_min=-20
v_max=10

Исходный массив:
7 -2 -11 3 -5
5 2 0 10 1
-15 9 -12 8 -18
0 -10 9 -13 4

Выходной массив:
7 -2 -11 3 -5
5 9 2 0 1
-15 -12 8 10 -18
0 -10 9 -13 4


код программы на PASCAL
идея в том чтоб развернуть слой в вектор
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const
 N_max=10;
 M_max=16;
 V_min=-20;
 V_max=10;
 p=1;
 type
  matrix=array[1..N_max,1..M_max] of integer;
  vector=array[1..2*(N_max+M_max)-3]of integer;
 var
 N,M,Nv,k,i,j:byte;
 a:matrix;
 v:vector;
     Procedure vect(av:matrix; var vv:vector);
     var q,r,d:byte;
     Begin
     d:=0;
     for r:=k to M-k do
      begin
      inc(d);
      vv[d]:=A[k,r];
      end;
     for q:=k to N-k do
      begin
       inc(d);
       vv[d]:=a[q,M-k+1];
      end;
     for r:=M-k+1 downto k+1 do
      begin
       inc(d);
       vv[d]:=a[N-k+1,r];
      end;
     for q:=N-k+1 downto k+1 do
      begin
       inc(d);
       vv[d]:=A[q,k];
      end;
     end;
 procedure sh(var vs:vector);
 var
   q,r:byte;
 begin
  for q:=1 to p do
   begin
    for r:=Nv downto 1 do vs[r+1]:=vs[r];
    vs[1]:=vs[nv+1];
   end;
  end;
       procedure matr(vm:vector);
       var
       q,r,d:byte;
       Begin
       d:=0;
       for r:=k to M-k do
        begin
         inc(d);
          A[k,r]:=vm[d];
        end;
        for q:=k to N-k do
        begin
        inc(d);
        A[q,M-k+1]:=vm[d];
        end;
        for r:=M-k+1 downto k+1 do
         begin
          inc(d);
          A[N-k+1,r]:=vm[d];
         end;
        for q:=N-k+1 downto k+1 do
        begin
        inc(d);
         A[q,k]:=vm[d];
         end;
        end;
BEGIN
randomize;
 write('количество строк-');
  readln(N);
  write('количество столбцов-');
  read(M);
  repeat
  write('номер слоя-');
  readln(k);
  if (k>(N div 2 ))or(k>(M div 2)) then writeln('error');
  until (k<=(N div 2))and(k<=(M div 2));
  WriteLn;
  Nv:=2*(K+M)-8*k+4;
  for i:=1 to N do
   begin
    for j:=1 to M do
     begin
     A[i,j]:=V_min+Random(V_max-V_min+1);
     write(A[i,j]:5);
     end;
    writeln;
   end;
  writeln;
  writeln;
  vect(A,V);
  sh(V);
  matr(V);
  for i:=1 to N do
   begin
    for j:=1 to M do
     begin
      write(A[i,j]:5);
      end;
    writeln;
   end;
  end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2015, 10:34
Ответы с готовыми решениями:

Сдвинуть все элементы массива на один шаг вправо
Ребят, выручайте! Не дружу я с массивами, а нужно контрольную делать. Сдавать в пятницу уже!...

Сдвинуть все элементы массива на одну позицию вправо (используя указатели)
Здравствуйте. Покажите, пожалуйста, как сдвинуть все элементы массива на одну позицию вправо,...

Циклически сдвинуть элементы массива на К разрядов вправо
Помогите пожалуйста написать вот такую программку: Ввести массив целых чисел длиной n (n &lt; 30)....

Элементы массива циклически сдвинуть на заданное K мест влево (вправо)
Ввести одномерный целочисленный массив размерностью N в память ПЭВМ. Память под массив выделить...

Циклически сдвинуть элементы массива на заданное K мест влево (вправо)
Вывести массив из файла на экран по пять элементов в строке. Элементы массива циклически сдвинуть...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2015, 10:34

Элементы заданного массива X циклически сдвинуть на K позиций вправо (влево)
Помогите, пожалуйста)

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

Разделить первое число в 8-ой СС на второе, а затем частное сдвинуть на один разряд вправо
Помогите решить... 1)Два незнаковых целых числа вводятся с клавиатуры в восьмеричной системе...


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

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

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