Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2011, 18:36   #1
darkline
 
Регистрация: 10.02.2011
Сообщений: 8
По умолчанию Отзеркаливание по диагонали (Pascal)

Есть двумерный массив A:=[n,n].
Как сделать диагональ цветной( диагональ проходит из нижнего левого угла до верхнего правого) и как отзеркалить массив по диагонали, а затем поставить его рядом?

Выглядеть должно как-то так:

1 2 3 | 9 6 3
4 5 6 | 8 5 2
7 8 9 | 7 4 1

p.s. Заранее спасибо!

Последний раз редактировалось darkline; 13.02.2011 в 18:50.
darkline вне форума Ответить с цитированием
Старый 13.02.2011, 21:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а что не получается то?
отзеркалить элементарно парой простых циклов.
Вы хотите отзеркаленные данные записать в исходный массив? или записать в новый массив? или просто вывести на экран, ничего не записывая в массив(ы) ?

Какой Pascal ?
для отображения в Turbo Pascal удобно использовать библиотеку CRT - там есть и перемещение курсора в любую заданную точку DOS экрана и изменения цвета букв, цвета фона ?

в чём трудности?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.02.2011, 21:35   #3
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

подключить модуль crt
использовать textcolor(<цвет>); это чтоб цвет менять, write и writeln для вывода в нужном виде
отзеркаливание:
Код:
for i:=1 to n-1 do for j:=1 to n-i do a[i,j]:=a[n-(j-1),n-(i-1)];
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 13.02.2011, 22:41   #4
darkline
 
Регистрация: 10.02.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а что не получается то?
отзеркалить элементарно парой простых циклов.
Вы хотите отзеркаленные данные записать в исходный массив? или записать в новый массив? или просто вывести на экран, ничего не записывая в массив(ы) ?

Какой Pascal ?
для отображения в Turbo Pascal удобно использовать библиотеку CRT - там есть и перемещение курсора в любую заданную точку DOS экрана и изменения цвета букв, цвета фона ?

в чём трудности?
Трудность в том, что я не могу правильно отзеркалить массив (как на моём примере), а также правильно задать цвет диагонали.
Отзеркаленный массив неважно куда записывать, главное чтоб на выходе их можно было бы оба увидеть.
А стоит у меня free pascal.
darkline вне форума Ответить с цитированием
Старый 13.02.2011, 23:52   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Зеркалирование Вам уже rubius2008 написал.

и про изменение цвета он же уже тоже написал.

Давайте Ваши попытки (ваш код, который Вы написали, где пытаетесь вывести массив, выделив цветом диагональ), ибо неясно, что у Вас не получается собственно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2011, 00:26   #6
darkline
 
Регистрация: 10.02.2011
Сообщений: 8
По умолчанию

Код:
 program matrix;
uses crt;
const n=3;
var i,j: integer;
a1: array [1..n,1..n] of integer;
begin
textcolor(lightgray);
clrscr;
randomize;
for i:=1 to n do
 for j:=1 to n do
  a1[i,j]:=random(30)-10;
    for i:=1 to n do
      begin
        writeln;
        for j:=1 to n do
         begin
           if n+1=j+i then
           textcolor(yellow)
           else
           textcolor(lightgray);
           write(a1[i,j]:4);

         end;
      end;
   writeln;
   begin
     for i:=1 to n-1 do
       begin
         writeln;
         for j:=1 to n-i do
           begin
             a1[i,j]:=a1[n-(j-1),n-(i-1)];
             write(a1[i,j]:4);
           end;

       end;
   end;
end.
спасибо конечно, rubius2008, за предоставленный алгоритм, но он у меня как то не до конца работает...

Последний раз редактировалось darkline; 14.02.2011 в 04:19.
darkline вне форума Ответить с цитированием
Старый 14.02.2011, 10:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а так?
Код:
...
   {вывод зеркального массива}
   begin
     for i:=1 to n do
       begin
         writeln;
         for j:=1 to n do
           begin
             if j<= (n-i) then
                write(a1[n-(j-1),n-(i-1)]:4)
             else
                write(a1[i,j]:4);
           end;

       end;
   end;
   readln;
p.s. только обратите внимание - я изменение исходного массива убрал.
Поэтому, если Вам нужно не просто вывести отзеркаленный массив,
а сохранить изменения в исходном массиве, добавьте в веточку if j<= (n-i) then
запись зеркального значения a1[i,j] := ....
т.е. код будет выглядеть так:
Код:
         for j:=1 to n do
           begin
             if j<= (n-i) then
                a1[i,j] := a1[n-(j-1),n-(i-1)]:4);
             write(a1[i,j]:4);
           end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2011, 10:44   #8
darkline
 
Регистрация: 10.02.2011
Сообщений: 8
По умолчанию

хмм... а так он копирует элементы из нижней диагонали и копирует их в верхнюю.
Если допустим заполнить массив от 1 до 9 то получается так:

9 6 3
8 5 6
7 8 9

я так понимаю нужно скопировать элементы над диагональю и потом как то вставить их под диагональ, только как это сделать?
darkline вне форума Ответить с цитированием
Старый 14.02.2011, 11:01   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
я так понимаю нужно скопировать элементы над диагональю и потом как то вставить их под диагональ, только как это сделать?
посмотрел исходный пост, понял, что Вам надо....

попробуйте:
Код:
   {вывод зеркального массива}
   begin
     for i:=1 to n do
       begin
         writeln;
         for j:=1 to n do
            write(a1[n-(j-1),n-(i-1)]:4);
       end;
   end;
   readln;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2011, 11:08   #10
darkline
 
Регистрация: 10.02.2011
Сообщений: 8
По умолчанию

Вот теперь получилось! Спасибо большое!
Вот полный текст программы, может кому пригодится:
Код:
program matrix;
uses crt;
const n=3;
var i,j: integer;
a1: array [1..n,1..n] of integer;
begin
textcolor(lightgray);
clrscr;
randomize;
for i:=1 to n do
 for j:=1 to n do
  a1[i,j]:=random(30)-10;
    for i:=1 to n do
      begin
        writeln;
        for j:=1 to n do
         begin
           if n+1=j+i then
           textcolor(yellow)
           else
           textcolor(lightgray);
           write(a1[i,j]:4);

         end;
      end;
   writeln;
   begin
     for i:=1 to n do
       begin
         writeln;
         for j:=1 to n do
           begin
           if n+1=j+i then
           textcolor(yellow)
           else
           textcolor(lightgray);


              write(a1[n-(j-1),n-(i-1)]:4);

           end;

       end;
   end;
   readln;
end.
darkline вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
диагонали матрицы на си Monomah Общие вопросы C/C++ 6 15.12.2010 21:13
вектор по диагонали бургер Паскаль, Turbo Pascal, PascalABC.NET 0 19.05.2010 04:24
диагонали матрицы astrozombie Паскаль, Turbo Pascal, PascalABC.NET 2 02.05.2009 08:42
Единицы по диагонали ChipLink Общие вопросы Delphi 2 24.01.2008 19:45
Найти отношения суммы элементов главной диагонали и суммы элементов побочной диагонали квадратной матрицы Elmander Помощь студентам 2 21.06.2007 07:15