Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 12.10.2016
Сообщений: 137
1

Определить сумму k элементов матрицы, расположенных по спирали, разворачивающейся по часовой стрелке

15.06.2017, 12:16. Показов 1810. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В заданном массиве A(n;m), состоящем из целых чисел , определить сумму k элементов? Расположенных по спирали, разворачивающейся по часовой стрелки. Начальная точка спирали вводиться с клавиатуры!
Виктор 134 вне форума Обратить внимание администрации на это сообщение
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2017, 12:16
Ответы с готовыми решениями:

Процедура вывода элементов квадратной матрицы по спирали по часовой стрелке.
Собственно сабж...

Заполнение матрицы по спирали (с верхнего левого элемента по часовой стрелке)
нужно расставить элементы матрицы А таким образом: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7...

Заполнение матрицы по спирали (от левого верхнего элемента по часовой стрелке)
Надо заполнить числа спиралью, помогите (чем проще, тем лучше). ПРИМЕР : 1 2 ...

Можно ли путём поворота элементов матрицы А по часовой стрелке на 90 градусов получить совмещение матриц А и В
Пожалуйста помогите!!!!!!!!!!!!!!!! Можно ли путём поворота элементов матрицы А по часовой стрелке...

2
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
15.06.2017, 14:48 2
Лучший ответ Сообщение было отмечено Виктор 134 как решение

Решение

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
const n=10;m=15;
var
  a:array [1..n,1..m] of integer;
  i,j,k,x,y,s,dx,dy,t,l:integer;
begin
  for i:=1 to n do begin  
    for j:=1 to m do begin
      a[i,j]:=random(10);
     write(a[i,j]:4);
    end;
    writeln;
  end;
  repeat
    writeformat('Начальная точка(0<x<{0},0<y<{1}):',n+1,m+1);readln(y,x);
  until (x>0) and (x<=n) and (y>0) and (y<=n);
  repeat
    writeformat('Количество элементов(0<k<{0}):',n*m+1);readln(k);
  until (k>0) and (k<=n*m);
  s:=a[y,x];
  i:=y;j:=x;t:=1;dx:=0;dy:=0;
  repeat
   dx:=dx+1;
   if i<=y-dy then while (j<x+dx) and (j<m) and (t<k) do begin j:=j+1; t:=t+1;s:=s+a[i,j];end 
              else begin j:=(x+dx>m?m:x+dx);i:=i-1;end;
   dy:=dy+1;
   if j>=x+dx then while (i<y+dy) and (i<n) and (t<k) do begin i:=i+1;t:=t+1;s:=s+a[i,j];end 
              else begin i:=(y+dy>n?n:y+dy);j:=j-1;end;
   if i>=y+dy then while (j>x-dx) and (j>1) and (t<k) do begin j:=j-1;t:=t+1;s:=s+a[i,j];end 
              else begin j:=(x-dx<=0?1:x-dx);i:=i+1;end;
   if j<=x-dx then while (i>y-dy) and (i>1) and (t<k) do begin i:=i-1;t:=t+1;s:=s+a[i,j];end 
              else begin i:=(y-dy<=0?1:y-dy);j:=j+1;end;
  until t=k;  
  writeln('s=',s);
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
15.06.2017, 15:18 3
Еще вариант:
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
const
  sizei = 7;
  sizej = 9;
 
function CheckBounds(vi, vj: integer):= (vi > 0) and (vi <= sizei) and (vj > 0) and (vj <= sizej);
function f(k, maxk, vi, vj: integer):= (k < maxk) and CheckBounds(vi, vj); 
 
var
  a: array[1..sizei, 1..sizej] of integer;
 
begin
  for var i := 1 to sizei do
  begin
    for var j := 1 to sizej do 
    begin
      a[i, j] := Random(-10, 40);
      write(a[i, j]:4)
    end;
    writeln;
  end;
  
  var vi := ReadlnInteger('Номер строки начала спирали:'); // 5;
  var vj := ReadlnInteger('Номер столбца начала спирали:'); // 3;
  var count := ReadlnInteger('Количество суммируемых элементов:'); // 22
  
  var d := Arr(Arr(0, -1), Arr(-1, 0), Arr(0, 1), Arr(1, 0));
  var k := 1;
  var steps := 0;
  var stage := -1;
  
  var s := a[vi, vj]; 
  while f(k, count, vi, vj) do
  begin
    inc(steps); var ii := 1;
    while f(k, count, vi, vj) and (ii <= 2) do
    begin
      stage := Succ(stage) mod 4; var jj := 1;
      while f(k, count, vi, vj) and (jj <= steps) do
      begin
        inc(vi, d[stage][0]); inc(vj, d[stage][1]);
        if f(k, count, vi, vj) then 
        begin
          s := s + a[vi, vj];
          inc(k);
        end;
        inc(jj);
      end;
      inc(ii);
    end;
  end;
  
  if k < count then writeln(' Недостаточно места для разворачивания спирали, просуммировано: ', k);
  writeln('Сумма = ', s);
end.
0
15.06.2017, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2017, 15:18
Помогаю со студенческими работами здесь

Дана матрица n X m.Отсортировать по возрастанию элементы стоящие по периметру матрицы,начиная с элемента A(n,1) по часовой стрелке.Среди элементов,нах
Дана матрица n X m.Отсортировать по возрастанию элементы стоящие по периметру матрицы,начиная с...

Определить сумму элементов матрицы, расположенных выше главной диагонали
Помогите кто-то решить задачку !!!!!!! Плиз . Дана матрица целых чисел размером 4 *4 . Определить...

Заполнение матрицы от центра по спирали (по часовой стрелке)
написать программу, которая заполняет массив от цента по спирали(по часовой стрелке). пример: ...

Заполнение матрицы по спирали (из центра по часовой стрелке)
Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её...

Обход матрицы по спирали (из центра, по часовой стрелке)
Дан массив чисел от 1 до 25. Нужно вывести на форму вот в таком виде 21 22 23 24 25 20 7 8 ...

Написать программу заполнения прямоугольной матрицы M x N по спирали по часовой стрелке
Написать программу заполнения прямоугольной матрицы M x N по спирали по часовой стрелке, начиная с...


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

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