• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите с двумя задачами на Паскале

Boshaft_Elfe

Ученик
Почётный участник
Регистрация
28 Мар 2010
Сообщения
477
Реакции
22
Баллы
0
Помогите с двумя задачами на Паскале

Доброго времени суток! Очень прошу помочь с двумя задачами на Паскале, задачки мелкие, несложные, но я физически не успеваю с ними справиться, на мне еще висит задача покрупней, да и поинтересней, если честно.
1. Поменять элементы в квадратной матрице местами относительно главной и побочной диагонали. (Тут хотела использовать вторую матрицу, заполняя ее элементами первой в другом порядке, не получается:( ).
2. Заполнить матрицу натуральными числами по спирали.
Заранее большое спасибо!
 
Вот решение 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.
 
Привет, Ира!
Ну вот первая задачка:

Код:
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.
 
До первой задачи таки додумалась сама, алгоритм получился такой же, как у вас, Владимир, может все-таки будет с меня толк:) со второй задачей еще маюсь, спасибо за решение, но я хочу заполнить ее наоборот к центру, спортивный интерес появился, сама добью:) спасибо всем за помощь:)
 
Назад
Сверху