Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 06.02.2012, 17:27   #1 (permalink)
Boshaft_Elfe
Member
 
Аватар для Boshaft_Elfe
 
Регистрация: 28.03.2010
Сообщений: 477
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1837
По умолчанию Помогите с двумя задачами на Паскале

Доброго времени суток! Очень прошу помочь с двумя задачами на Паскале, задачки мелкие, несложные, но я физически не успеваю с ними справиться, на мне еще висит задача покрупней, да и поинтересней, если честно.
1. Поменять элементы в квадратной матрице местами относительно главной и побочной диагонали. (Тут хотела использовать вторую матрицу, заполняя ее элементами первой в другом порядке, не получается ).
2. Заполнить матрицу натуральными числами по спирали.
Заранее большое спасибо!
Boshaft_Elfe вне форума   Ответить с цитированием

Старый 06.02.2012, 17:27
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Очень часто в решении проблем помогает прочтение схожих топиков

Помогите пожалуйста! C# вычисление интеграла двумя любыми способами
Помогите плиз с задачами на с++
Помогите настроить линк между двумя Mikrotik SXT-5D's
Нужна помощь с задачами
Помогите с двумя программами по массивам
Помогите с двумя программами

Старый 06.02.2012, 19:18   #2 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Вот решение 2 задачи, заполнение происходит спиралью из центра. Скажу сразу, писал не я, но программу проверил - рабочая.
Код:
var a:array [1..100,1..100] of integer;
    i,j,s,x,y,n:integer;
    napr,shag:byte;
begin
 readln(n); {считываем n}
 x:=n+1;  {координаты текущей клетки}
 y:=n+1;
 shag:=1; {количество элементов в витке спирали}
 napr:=1; {направление движения}
 s:=-1;   {счетчик, увеличиваемый на 1}
 repeat
  begin
   for j:=1 to 2 do {нетрудно заметить, что каждые два витка одинаковы по длине(см. пример)}
    begin
     for i:=1 to shag do {поэтому мы можем заполнять по два витка с одним шагом}
      begin
       inc(s);
       a[x,y]:=s; {заполняем текущий элемент}
       if (napr=1) then dec(x);
       if (napr=2) then dec(y); {выбор направления движения}
       if (napr=3) then inc(x);
       if (napr=4) then inc(y);
      end;
     inc(napr);                {изменяем напрвление}
     if (napr=5) then napr:=1;
    end;
   inc(shag); {два витка пройдены, поэтому увеличиваем размер шага}
  end;
 until (shag=2*n+1); {единственный минус - последний столбец остается незаполненным, поэтому}
 for i:=2*n+1 downto 1 do {заполняем его}
  begin
   inc(s);
   a[i,2*n+1]:=s;
  end;
 for i:=1 to 2*n+1 do
  begin
   for j:=1 to 2*n+1 do
    write(a[i,j]:4);  {выводим массив}
   writeln;
  end;
 readln
end.
DDS вне форума   Ответить с цитированием
Старый 06.02.2012, 20:43   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Привет, Ира!
Ну вот первая задачка:

Код:
CONST
 N=7;
VAR
 M1,M2,M3:Array[1..N,1..N] of Byte;
 i,j:Byte;
BEGIN
 Randomize;
 For i:=1 to N do
  Begin
   For j:=1 to N do
    begin
     M1[i,j]:=Random(100);
     Write(M1[i,j]:4);
    end;
   Writeln;
  End;
 Writeln;
 For i:=1 to N do M2[i,i]:=M1[i,i];
 For i:=1 to N-1 do
  For j:=i+1 to N do
   M2[j,i]:=M1[i,j];
 For j:=1 to N-1 do
  For i:=j+1 to N do
   M2[j,i]:=M1[i,j];
 For i:=1 to N do
  Begin
   For j:=1 to N do
    Write(M2[i,j]:4);
   Writeln;
  End;
 Writeln;
 For i:=1 to N do M3[i,N-i+1]:=M1[i,N-i+1];
 For i:=1 to N-1 do
  For j:=1 to N-i do
   M3[N-j+1,N-i+1]:=M1[i,j];
 For j:=2 to N do
  For i:=N downto N-j+1 do
   M3[N-j+1,N-i+1]:=M1[i,j];
 For i:=1 to N do
  Begin
   For j:=1 to N do
    Write(M3[i,j]:4);
   Writeln;
  End;
 Readln;
END.
Vladimir_S вне форума   Ответить с цитированием
Старый 07.02.2012, 03:21   #4 (permalink)
Boshaft_Elfe
Member
 
Аватар для Boshaft_Elfe
 
Регистрация: 28.03.2010
Сообщений: 477
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1837
По умолчанию

До первой задачи таки додумалась сама, алгоритм получился такой же, как у вас, Владимир, может все-таки будет с меня толк со второй задачей еще маюсь, спасибо за решение, но я хочу заполнить ее наоборот к центру, спортивный интерес появился, сама добью спасибо всем за помощь
Boshaft_Elfe вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:47.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.