![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Sahsok |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: ![]() ![]() ![]() |
Исходные данные:
1.квадратная нечетная матрица размернастью (m x m ); Минимальный размер 5х5 максимальный 21х21. 2.начальные элементы матрицы нулевые. 3. троектория обхода матрицы на рисунке Программа должна обеспечивать: 1. Ввод даных с клавиатуры. 2. Вывод заданой матрицы на экран с последующим изображением процесса обхода заданной троектории. 3 Вывод в файл значений обхода матрицы (их координат), при этом имя файла вводится с клавиатуры. П.с. если задать размер отличный от того, который на рисунке,троектория должна возрасти соответственно размерам. P.p.s У меня в субботу пересдача, а меня без этой задачи на экзамен не пустят. Краем глаза видел экзаменационные билеты: ТАКОГО там точно нет. Я не могу понять к чему такие задачи дают на специальности, которые к компам имеют косвенное отношение. Эскизы прикрепленных изображений ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Sahsok
В общем сделал я универсальный алгоритм, заполняющий матрицу так, как тебе нужно... Но боюсь сложновато будет для первокурсника... Будут вопросы - задавай. Код Uses Crt; Const m = {11}5; Var mat: Array[1 .. m, 1 .. m] Of Byte; f_name: String; f: Text; T, n, j, curr_x, curr_y: integer; up, back: boolean; count, started: integer; procedure printmatrix(cx, cy: integer); var i, j: integer; begin clrscr; for i := 1 to m do begin for j := 1 to m do begin (* Это только для проверки работоспособности *) if mat[i, j] = 0 then textcolor(lightgray) else textcolor(mat[i, j] + 1); (* проверка *) write(mat[i, j]:2); (* Это только для проверки работоспособности *) textcolor(lightgray); (* проверка *) end; writeln end; writeln(f, '(', cx, ',', cy, ')'); readln end; begin ClrScr; Write('File Name: '); ReadLn(f_name); Assign(f, f_name); ReWrite(f); FillChar(mat, sizeof(mat), 0); { Здесь должен быть ввод значений } { Part I } n := Trunc(Sqrt(m)); up := True; count := 0; curr_x := m; curr_y := m; While curr_x > 0 Do Begin mat[curr_y, curr_x] := 1; T := curr_y; printmatrix(curr_y, curr_x); Inc(count); If count = n Then Begin count := 1; up := not up End; Dec(curr_x); Inc(curr_y, 1 - 2*Byte(up)) end; { Part II } For j := Pred(T) DownTo Succ(Succ(m) div 2) Do Begin mat[j, 1] := 2; printmatrix(j, 1) End; { Part III } For curr_y := Succ(m) div 2 DownTo 1 Do For curr_x := 1 To curr_y Do Begin mat[curr_y, curr_x] := 3; printmatrix(curr_y, curr_x) End; { Part IV } n := Pred(m) div 2; up := False; back := False; count := 0; started := 2; curr_x := started; curr_y := 1; While True Do Begin If back Then Begin While curr_x > Succ(started) Do Begin Dec(curr_x); mat[curr_y, curr_x] := 4; printmatrix(curr_y, curr_x) End; back := False; Dec(n, 2); Inc(started, 2); Inc(curr_x); Inc(curr_y); up := False; count := 0 End; If n = 0 Then Break Else If n = 1 Then Begin mat[curr_y, curr_x] := 4; printmatrix(curr_y, curr_x); break End; mat[curr_y, curr_x] := 4; printmatrix(curr_y, curr_x); Inc(count); If count = n Then Begin count := 1; If up Then Begin back := true; continue End; up := not up End; Inc(curr_x); Inc(curr_y, 1 - 2*Byte(up)) End; Close(f) end. Примечания: 1) данные в матрицу не вводятся, основной задачей было создание необходимой траектории обхода; 2) 4 участка траектории обозначаются соответствующими цифрами; 3) после вывода очередной цифры - нажимаем "Enter" для продолжения; 4) в текущей директории создается текстовый файл с введенным именем, содержащий координаты точек траектории. Вроде бы всё... :D |
![]() ![]() |
![]() |
Текстовая версия | 10.09.2025 3:06 |