Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для DroopyJkee
1 / 1 / 0
Регистрация: 17.10.2012
Сообщений: 11

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

17.10.2012, 21:31. Показов 3277. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит дали задание:
Дана произвольная матрица. Развернуть ее в вектор и упорядочить последовательность элементов по убыванию, выкинув все элементы, большие числа а. Занести элементы упорядоченной последовательности в новую наиболее подходящую по размеру квадратную матрицу по спирали.

Сделал вроде как все, кроме того, что бы задать финальную матрицу спиралью (по часовой стрелке)

Вот все, что есть:
Matlab M
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
clc
clear
m=input('m=');
n=input('n=');
A=fix(10*rand(m,n));
disp(A)
a=input('a=');
B=reshape(A,1,m*n);
disp(B);
i=1;
    while i<=length(B)
        if B(i)>a
           B(i)=[];
           i=i-1;           
        end
        i=i+1;
    end
C=-sort(-B);
disp(B);
disp(C);
c=ceil(sqrt(length(C)));
disp(c);
for k=length(C):c*c
    C(k)=0;
end
disp(C);
f=1;
for g=1:c
    for j=1:c
    M(g,j)=C(f);
    f=f+1;
    end
end
disp(M);
Пока задаю обычную матрицу
Дополняю недостающее количество элементов нулями
Так же, в программе присутствует огромное количество промежуточных выводов для самопроверки)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2012, 21:31
Ответы с готовыми решениями:

Массив: Заполнить квадратную матрицу порядка n, записывая элементы в нее по спирали против часовой стрелки
Составить программу которая заполняет квадратную матрицу порядка n натуральными числами 1,2,3,n2,записывая их в нее по спирали против...

Выделить наиболее подходящую квадратную матрицу и вычислить сумму элементов ее главной диагонали
Дана матрица M*N. Выделить в ней наиболее подходящую квадратную матрицу и вычислить сумму элементов ее главной диагонали.

Заполнить квадратную матрицу по спирали
Cоставить программу, которая заполняет квадратную матрицу порядка n нaтуральными числами 1,2,3,...n,записывая их в нее &quot;по...

5
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
20.10.2012, 17:47
Вот тебе код покрасивше (циклы в матлаб - это моветон), только мне так же еще не снизошло просветление о "спирализаци" вектора.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear;
clc;
 
m = 20;
n = 13;
a = 7;
% генерируем матрицу
s = randint(m,n,10);
% развертываем матрицу в массив
s = s(:);
% удаляем лишние элементы
s(s>a)=[];
% сортируем
s = sort(s,'descend');
% определяем размер кв. матрицы
N = ceil(sqrt(length(s)));
% добавляем нули в конец до нужного кол-ва
s(end:N.^2) = 0;
Добавлено через 21 час 19 минут
Уже кое-что надумал, но пока не добрался до матлаба :) вкратце скажу, что хочу сгенерировать два массива индексов соответствующих пути по спирали по часовой, длинны N^2, и засунуть в соотствии с ними значения преобразованного векора.
Единственное, как показали каракули на бумажке, есть нюансы, если N четное или нечетное.
1
 Аватар для DroopyJkee
1 / 1 / 0
Регистрация: 17.10.2012
Сообщений: 11
21.10.2012, 22:20  [ТС]
zosima,
Моветон, моветоном, но препод сказал делать так))
Значит немного подкорректировал, вроде бы и в спираль забивается, но теперь другая проблема...
если порядок последней квадратной матрицы нечетный, то центральный элемент обращается в ноль.
Matlab M
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
clc
clear
m=input('m=');
n=input('n=');
A=fix(10*rand(m,n));
disp(A)
a=input('a=');
B=reshape(A,1,m*n);
i=1;
    while i<=length(B)
        if B(i)>a
           B(i)=[];
           i=i-1;           
        end
        i=i+1;
    end
C=-sort(-B);
disp(C);
c=ceil(sqrt(length(C)));
for k=length(C)+1:c*c
    C(k)=0;
end
z=1;
for krug=1:fix((c+1)/2)
    for g1=krug:c-krug
        M(krug,g1)=C(z);
        z=z+1;
    end
    for g2=krug:c-krug
        M(g2,c+1-krug)=C(z);
        z=z+1;
    end
    for g3=c+1-krug:-1:krug+1
        M(c+1-krug,g3)=C(z);
        z=z+1;
    end
    for g4=c+1-krug:-1:krug+1
        M(g4,krug)=C(z);
        z=z+1;
    end
end
if mod(c,2)~=0
    M(round(c/2),round(c/2))=C(c*c);
end
disp(M)
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
22.10.2012, 08:53
Желанье препода - закон!)
Напиши вконце:
Matlab M
1
2
3
if mod(c,2) ~= 0
    M( ceil(c/2), ceil(c/2) ) = C(end);
end
Однако, если массив дополняли вконце нулями, то не удивительно, что в центральной клетке ноль :)
0
 Аватар для DroopyJkee
1 / 1 / 0
Регистрация: 17.10.2012
Сообщений: 11
22.10.2012, 20:43  [ТС]
zosima
Соль не в этом, там даже если не нужно дополнять, то все равно ноль получается, это видно если сделать обычное заполнение... типа этого:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
clc
clear
c=5;
z=1;
C=1:c*c
for krug=1:fix((c+1)/2)
   for g1=krug:c-krug
       M(krug,g1)=C(z);
       z=z+1;
   end
   for g2=krug:c-krug
       M(g2,c+1-krug)=C(z);
       z=z+1;
   end
   for g3=c+1-krug:-1:krug+1
      M(c+1-krug,g3)=C(z);
      z=z+1;
   end
   for g4=c+1-krug:-1:krug+1
      M(g4,krug)=C(z);
      z=z+1;
   end
end
disp(M)
1
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
10.12.2012, 20:19
наша ошибка была в том, что мы дописывали нули в конец не зависимо от длинны массива:
s(end:c*c) = 0;
Поэтому, когда массив был длинны c*c, последний элемент затирался нулем!
Надо было так:

if length(s)<c*c
s(end:c*c) = 0;
end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2012, 20:19
Помогаю со студенческими работами здесь

Заполнить квадратную матрицу по спирали
Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3, .. ., n2, записывая их в нее &quot;по...

Заполнить квадратную матрицу по спирали
Здесь была ссылка куда-то далеко.

Заполнить квадратную матрицу по спирали
Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3, …, n2, записывая их в нее «по спирали»...

Заполнить квадратную матрицу по спирали
Квадратную матрицу размерности N ( N - нечетное число) заполнить числами от 1 до N2 по спирали от центра

Заполнить квадратную матрицу по спирали
Одномерный: В заданном целочисленном массиве R(9) определить индекс наибольшего из нечетных по значению положительных элементов. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru