1 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 10

Заполнить матрицу от левого верхнего угла по спирали: вниз-вправо-вверх-влево

18.11.2009, 15:01. Показов 2794. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заполнить матрицу ЛП, от левого верхнего угла по спирали: вниз-вправо-вверх-влево
Сама матрица:

1323102928272625
23356555453525124
33457727170695023
43558738079684922
52659748178674821
63760757677664720
73861626354654619
83940914243444518
910111121314151617

[404]

буду благодарен за помощь
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2009, 15:01
Ответы с готовыми решениями:

Заполнить матрицу от центра по спирали: вниз - влево - вверх - вправо
Заполнить матрицу ЛП, от центра по спирали: вниз - влево - вверх - вправо.

Составить программу движения круга вверх, вниз, влево, вправо в зависимости от нажатия клавиш
Задача: Вроде как тему "функции readkey и keypressed' более менее понял, но завис буквально на первой задаче... Вот код, который я...

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

6
Почетный модератор
 Аватар для Puporev
64312 / 47609 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
18.11.2009, 16:15
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
uses crt;
var a:array[1..20,1..20]of integer;
    n,i,j:integer;
    x,y,num,add,dir:integer;
begin
clrscr;
write('n=');readln(n);
x:=1;//начало движения 1-й столбец, 0-я строка
y:=0;
num:=1;//номер=1
Add:=n;//начальная длина пути
dir:=1;//знак+
while (add<>0) do
begin
  i:=0;
  while (i<>add) do
    begin
    y:=y+dir;//идем вниз, потом вверх по столбцу
    a[y,x]:=num;
    num:=num+1;
    i:=i+1;
    end;
  i:=0;
  add:=add-1;
  while (i<>add) do
    begin
    x:=x+dir;//по строке сначала вправо, потом влево
    a[y,x]:=num;
    num:=num+1;
    i:=i+1;
    end;
  dir:=dir*(-1);//меняем знак
end;
for i:=1 to n do
   begin
     for j:=1 to n do
     write(a[i,j]:4);
     writeln;
   end;
readln
end.
3
1 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 10
19.11.2009, 14:58  [ТС]
Спасибо тебе большое!!!!!
0
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 5
06.02.2018, 00:23
Для более 20-ти строк и столбцов не работает! Может быть знающие форумчане поправят код?!
0
Модератор
10248 / 5535 / 3374
Регистрация: 17.08.2012
Сообщений: 16,914
06.02.2018, 04:40
Tutius, а самому подкорректировать строку 2? Не вариант или религия не позволяет?
1
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 5
06.02.2018, 23:40
Cyborg Drone, спасибо за то, что указали на мой промах -наверное уже просто устал: решал допоздна и глаз "замылился"... Моя задача была похожая - вот условие: Заполните массив из 28 строк и 27 столбцов по спирали вниз натуральными числами, начиная с 23. Найдите сумму элементов фрагмента матрицы, верхний левый угол которого находится в пятой строке и шестом столбце, а правый нижний угол совпадает с правым нижним углом матрицы.
Взял код из данной ветки, немного переработал:
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
const
     n=28;
var a:array[1..1000,1..1000]of integer;
    s,k,i,j:integer;
    dsr,x,y,num,ds,d:integer;
begin
x:=1;//начало движения 1-й столбец, 0-я строка
y:=0;
num:=23;//первый элемент массива
ds:=n;//начальная длина пути - начальная высота столбца
dsr:=n-2;// строка(кол-во элементов)
d:=1;//приращение по оси 0Y и знак "+/-" - отвечает за изменение направления заполнения
//=============== заполняем массив ======================
while (ds-1<>0) do
begin
// ============ заполняем текущий столбец ============
  i:=0;
  while (i<>ds) do
    begin
    y:=y+d;//идем вниз, потом вверх по столбцу
    a[y,x]:=num;
    num:=num+1;
    i:=i+1;
    end;
  i:=0;
  ds:=ds-1;
//========= заполняем текущую строку ===========================
  while (i<>dsr) do
    begin
    x:=x+d;//по строке сначала вправо, потом влево
    a[y,x]:=num;
    num:=num+1;
    i:=i+1;
    end;
    dsr:=dsr-1;
  d:=-d;//меняем знак
end;
//================= выводим на печать ==================
for i:=1 to n do
   begin
     for j:=1 to n-1 do
     write(a[i,j]:4);
     writeln;
   end;
 writeln;
//==============сумма по по внутреннему массиву ===========
      s:=0;
      for i:=5 to n do
          for j:=6 to n-1 do
                             s:=s+a[i,j];
      write('Полученная сумма: ',s);
end.
Но получившийся код, на мой взгляд, получился громоздким, не интуитивно-понятным и "некрасивым". Не хватает опыта написать/переработать выше написанный код для двумерных массивов с разным количеством столбцов и строк. Чтобы не мучиться с различными коэффициентами и переменными - а просто меняя значения столбцов и строк получать результат... Надеюсь - у кого-нибудь получится!
0
 Аватар для JuriiMW
5093 / 2660 / 2354
Регистрация: 10.12.2014
Сообщений: 10,055
08.02.2018, 09:31
Tutius, основная проблема (даже скорее не учащихся, а тех, кто преподаёт) в том, что именование переменных происходит не по смыслу, а по принципу: понадобилась → взяли первую попавшуюся свободную букву и „закодили“.

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
const
  Rows = 28;
  Cols = 27;
  numStart = 23;
  sumFromRow = 5;
  sumFromCol = 6;
  d = 4;
 
var
  a : array [0..Rows-1, 0..Cols-1] of Integer;
  Num, Row, Col, Invariant, Sum : Integer;
  
begin
  for Row := 0 to Rows-1 do
    for Col := 0 to Cols-1 do
      a[Row,Col] := 0;
      
  Num := numStart; Row := 0; Col := 0; a[Row,Col] := Num;
  Invariant := 0;
  while 1 + Num - numStart <> Rows * Cols do
    case Invariant of
      0 : if (Row+1 < Rows) and (a[Row+1,Col] = 0) then begin Inc(Num); Inc(Row); a[Row,Col] := Num; end else Inc(Invariant);
      1 : if (Col+1 < Cols) and (a[Row,Col+1] = 0) then begin Inc(Num); Inc(Col); a[Row,Col] := Num; end else Inc(Invariant);
      2 : if (Row > 0     ) and (a[Row-1,Col] = 0) then begin Inc(Num); Dec(Row); a[Row,Col] := Num; end else Inc(Invariant);
      3 : if (Col > 0     ) and (a[Row,Col-1] = 0) then begin Inc(Num); Dec(Col); a[Row,Col] := Num; end else Invariant := 0;
    else
      Inc(Num);
    end;
    
  for Row := 0 to Rows-1 do
    begin
      for Col := 0 to Cols-1 do Write(a[Row,Col]:d);
      WriteLn;
    end;
    
  Sum := 0;
  for Row := sumFromRow-1 to Rows-1 do
    for Col := sumFromCol-1 to Cols-1 do
      Inc(sum, a[Row,Col]);
  WriteLn(Sum);
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2018, 09:31
Помогаю со студенческими работами здесь

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

Спираль из нижнего левого угла вправо
Помогите сделать спираль из нижнего левого угла вправо

Можно ли определить позицию левого верхнего угла Picture?
Можно ли определить позицию левого верхнего угла Picture? Например функциями: Writeln(Picture.Left); Writeln(Picture.Top); Если...

Изменение размера прямоугольника при фиксированной координате верхнего левого угла
Здравствуйте, помогите пожалуйста с курсовой «Резиновый прямоугольник». Изменение размера прямоугольника при фиксированной координате...

Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний
Лабиринт задан двумерным массивом. Из левого верхнего угла лабиринта пройти в правый нижний. Массив задается вводом. Элементы, по которым...


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

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

Новые блоги и статьи
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru