![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
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 |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 20:39 |