8 / 8 / 6
Регистрация: 18.07.2013
Сообщений: 146

Присвоить элементам двумерного массива их порядковые номера

08.11.2013, 12:10. Показов 1071. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте, попалась мне интересная задачка и захотел ее решить. Но как всегда без непонятностей не обошлось.

Создать программу , присваивающую элементам двумерного массива их порядковые номера. По спирали. Например, для матрицы 5×5 должно получиться:
Pascal
1
2
3
4
5
6
7
8
9
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
программу я решил вот так:

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
type
  TSpirMatrix = Array of Array of integer;
 
var
  A: TSpirMatrix;
  b, c, i, j, k, f, n, m, p, u: integer;
  
begin
  
  write('Ââåäèòå ðàçìåðíîñòü ìàòðèöû ÷åðåç ïðîáåë - ');
   
  
  readln(n, m);   // Ââîäèì ðàçìåðíîñòü ìàòðèöû, n-ñòðîêà, m-ñòîëáåö.
  writeln;
  writeln('YOUR MATRIX  ',  N, 'x', M, ':');
  SetLength(A, n+1, m+1);   // Çàäàåì äëèíó ìàññèâà, â ñîîòâåòñòâèè ñ äëèíîé ñòðîê è ñòîëáöîâ, íî óâåëè÷èë íà åäèíèöó, òàê êàê ìàññèâ íà÷èíàåòñÿ ñ íóëÿ, à â äàííîì ñëó÷àå ýòî íåóäîáíî.
 
  b:=1;   // Íà÷àëüíàÿ ñòðîêà.
  c:=1;   // Íà÷àëüíûé ñòîëáåö.
  p:=n*m;   // Îáùåå êîëè÷åñòâî ýëåìåíòîâ â ìàòðèöå, èëè ïîñëåäíåå ÷èñëî â ìàòðèöå.
  k:=0;   // Ïîðÿäêîâîå ÷èñëî â ñïèðàëüíîé ìàòðèöå.
  while k<>p do   //  öèêëå çàïîëíÿåòñÿ âíåøíèé âèòîê, çàòåì óäàëÿåòñÿ. Öèêë çàâåðøàåòñÿ, êîãäà ýëåìåíò ìàòðèöû çàïîëíåí ïîñëåäíèì ïîðÿäêîâûì ÷èñëîì.
    begin
      for i:=b to n do   // Öèêë ïî ñòðîêàì.
        for j:=c to m do   // Öèêë ïî ñòîëáöàì.
        begin
          if i=b then   // Åñëè ýòî íà÷àëüíàÿ ñòðîêà, òî...
            begin
              A[i,j]:=k+1;   // Êàæäûé ýëåìåíò ñòðîêè çàïîëíÿåòñÿ ñëåäóþùèì ÷èñëîì è
              k:=A[i,j]      // ýòî ÷èñëî çàïîìèíàåòñÿ â ïåðåìåííîé k.
            end
          else   // Åñëè íå íà÷àëüíàÿ ñòðîêà, òî
            begin
              if i<>n then   // Åñëè íå óñëîâíî ïîñëåäíÿÿ ñòðîêà(ãäå-òî ìåæäó íà÷àëüíîé è óñëîâíî ïîñëåäíåé), òî...
                begin
                  if j=m then        // Åñëè ïîñëåäíèé ýëåìåíò ñòðîêè(ïðàâàÿ ñòîðîíà âèòêà), òî
                    begin
                      A[i,m]:=k+1;   // ýòè ýëåìåíòû, ïðàâîé ñòîðîíû âèòêà, çàïîëíÿþòñÿ ñëåäóþùèì ÷èñëîì è
                      k:=A[i,m];     // îíî çàïîìèíàåòñÿ â ïåðåìåííîé k.
                    end;
                end
              else   // Åñëè óñëîâíî ïîñëåäíÿÿ ñòðîêà, òî..
                begin
                  for f:=m downto c do   // Ïåðåáèðàþòñÿ ýëåìåíòû óñëîâíî ïîñëåäíåé ñòðîêè ñïðàâà-íàëåâî
                    begin
                      A[i,f]:=k+1 ;      // ýòè ýëåìåíòû ïîñëåäîâàòåëüíî çàïîëíÿþòñÿ ñëåäóþùèì ÷èñëîì, çàòåì ïðèñâîåííîå ÷èñëî
                      k:=A[i,f];         // çàïîìèíàåòñÿ â ïåðåìåííîé k.
                    end;
                  break   // Êàê òîëüêî ïîñëåäíÿÿ ñòðîêà çàïîëíåíà, ïðåæäåâðåìåííî çàâåðøàåì öèêë, ÷òîáû áîëüøå íå ïåðåáèðàëèñü ýëåìåíòû ñòðîêè.
                end
            end;
        end;
 
      // ÇÀÏÎËÍßÅÌ ËÅÂÓÞ ×ÀÑÒÜ ÂÈÒÊÀ, ÌÅÆÄÓ ÍÀ×ÀËÜÍÎÉ È ÓÑËÎÂÍÎ ÏÎÑËÅÄÍÅÉ ÑÒÐÎÊÎÉ.
      if c<>m then   // Åñëè ðàññìàòðèâàåìàÿ ìàòðèöà ñîñòîèò íå èç îäíîãî ñòîëáöà, òî ðåàëèçóåì öèêë..
      for i:=n-1 downto b+1 do   // Ïåðåáèðàþòñÿ ýëåìåíòû ëåâîé ñòîðîíû âèòêà ìåæäó ïåðâîé è óñëîâíî ïîñëåäíåé ñòðîêîé ÑÍÈÇÓ-ÂÂÅÐÕ,
        begin
          A[i,c]:=k+1;           // ýòè ýëåìåíòû ïîñëåäîâàòåëüíî çàïîëíÿþòñÿ ñëåäóþùèì ÷èñëîì, çàòåì ïðèñâîåííîå ÷èñëî
          k:=A[i,c]              // çàïîìèíàåòñÿ â ïåðåìåííîé k.
        end;
 
   // ÓÑËÎÂÍÎ óäàëÿåì çàïîëíåííûé âèòîê.
      b:=b+1;
      c:=c+1;
      m:=m-1;
      n:=n-1;
    end;
 
  // ÌÀÒÐÈÖÀ ÇÀÏÎËÍÅÍÀ! ÎÔÎÐÌËßÅÌ È ÂÛÂÎÄÈÌ ÍÀ ÝÊÐÀÍ.
  write(' ');   // Îòñòóïàåì îò êðàÿ.
  for i:=1 to (Length(A[0])-1)*4+2 do   // Ïå÷àòàåì íèæíèå
    write('_');                         // ÷åðòî÷êè íàä ìàòðèöåé.
 
    writeln;                                  // Îòñòóïàåì âíèç è
    writeln('|', '|':(Length(A[0])-1)*4+3);   // ïî êðàÿì ñòàâèì ïàëî÷êè.
 
  for i:=1 to Length(A)-1 do   // Öèêë ïî ñòðîêå.
  begin
    write('|');   // Ñëåâà îò ñòðîêè ñòàâèì ïàëêó.
    for j:=1 to Length(A[0])-1 do   // Öèêë ïî ñòîëáöàì.
      write(A[i,j]:4);   // Âûâîäèì ýëåìåíò ìàòðèöû è
    writeln('  |');      // ñòàâèì ïàëêó, ïåðåâåäÿ êóðñîð íà ñëåä. ñòðîêó.
  end;
  //Ìàòðèöà âûâåäåíà, äåëàåì íèç ðàìêè.
  write('|');                            // Âíà÷àëå ïàëêà.
  for i:=1 to (Length(A[0])-1)*4+2 do    // Çàòåì íèæíèå
    write('_');                          //     ÷åðòî÷êè.
 
  writeln('|');                          // è çàâåðøàåì ïàëêîé.
  writeln;
  repeat
    write('Ââåäèòå "1" - äëÿ ïîâòîðà èëè "0" - äëÿ çàâåðøåíèÿ: ');   readln(U);
    if (u<(-1)) or (u>1) then
      write('ÍÅÂÅÐÍÛÉ ÂÂÎÄ!!! ')
  until (u>(-1)) and (u<2);
  writeln;
  until U=0;
 
end.
Всё работает верно, но вопрос вот в чем:

если я 23 строку заменю на
Pascal
1
while k<>n*m do
а 21ю удалю.

и введу в программе размерность 10 10, РАБОТАЕТ НЕПРАВИЛЬНО! ПОЧЕМУ? всё одно и то же ведь....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2013, 12:10
Ответы с готовыми решениями:

Напечатать порядковые номера целых элементов массива
дан массив А. Напечатать порядковые номера целых элементов!!

Присвоить элементам массива значения функции
Задан массив из 15 элементов. Присвоить элементам массива значения функции H=-cos(2.13(ln(a^0.75x)))+sin(0.25x) при изменении аргумента x...

Вывести на экран порядковые номера четных элементов массива
3. ввести и вывести массив любым способом. вывести на экран порядковые номера четных элементов массива

4
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
08.11.2013, 12:19
Посмотрите здесь: https://www.cyberforum.ru/post778732.html
0
8 / 8 / 6
Регистрация: 18.07.2013
Сообщений: 146
08.11.2013, 13:10  [ТС]
Цитата Сообщение от ildwine Посмотреть сообщение
Посмотрите здесь: https://www.cyberforum.ru/post778732.html
Дело не в самой задаче. Я не могу понять почему если я в цикл while явно задаю условие n*m он ошибается, а если p:=n*m и в условие цикла задаю р, то все работает... одно и то же условие и только для матрицы 10х10 работает по-разному.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33421 / 21527 / 8240
Регистрация: 22.10.2011
Сообщений: 36,935
Записей в блоге: 12
08.11.2013, 15:36
Цитата Сообщение от Prizrak067 Посмотреть сообщение
почему если я в цикл while явно задаю условие n*m он ошибается
А ты строки 66-67 посмотри:

Pascal
63
64
65
66
67
   // УСЛОВНО удаляем заполненный виток.
      b:=b+1;
      c:=c+1;
      m:=m-1;
      n:=n-1;
, и подумай еще раз, что лучше: сразу запомнить общее количество элементов матрицы, или каждый раз его вычислять, с учетом изменения переменных?
1
8 / 8 / 6
Регистрация: 18.07.2013
Сообщений: 146
08.11.2013, 16:15  [ТС]
блин, вот лох я А! тоочно.... спасибо))) тупанул, так тупанул)))))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2013, 16:15
Помогаю со студенческими работами здесь

Найти минимальное и максимальное числа массива и их порядковые номера.
Помогите решить простенькую задачку для друга,если можно с блок схемой Найти минимальное и максимальное числа массива и их порядковые ...

Дан массив А(20). Найти минимальный и максимальный элементы массива, и их порядковые номера
Дан массив А(20). Найти минимальный и максимальный элементы массива, и их порядковые номера.

Присвоить значение 5 всем элементам массива, имеющим номер, кратный 3
. Дан массив А(N). Составить программу, которая присваивает значение 5 всем элементам массива А, имеющим номер, кратный 3.

Определить порядковые номера и значения первого положительного и последнего отрицательного элементов массива Z.
Нужна помощь с задачей https://www.cyberforum.ru/attachment.php?attachmentid=28986&amp;stc=1&amp;d=1272332730

Вывести на экран дисплея порядковые номера нечетных элементов массива целых чисел
Вывести на экран дисплея порядковые номера нечетных элементов массива целых чисел.


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

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

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru