IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на 2х мерный массив, Для первого курса %)))
Sahsok
сообщение 5.01.2005 7:58
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Исходные данные:
1.квадратная нечетная матрица размернастью (m x m ); Минимальный размер 5х5 максимальный 21х21.
2.начальные элементы матрицы нулевые.
3. троектория обхода матрицы на рисунке


Программа должна обеспечивать: 1. Ввод даных с клавиатуры. 2. Вывод заданой матрицы на экран с последующим изображением процесса обхода заданной троектории. 3 Вывод в файл значений обхода матрицы (их координат), при этом имя файла вводится с клавиатуры.


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

P.p.s У меня в субботу пересдача, а меня без этой задачи на экзамен не пустят. Краем глаза видел экзаменационные билеты: ТАКОГО там точно нет. Я не могу понять к чему такие задачи дают на специальности, которые к компам имеют косвенное отношение.


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 5.01.2005 21:37
Сообщение #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
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 20:39
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"