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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 18:40   #1
программирование
Форумчанин
 
Регистрация: 22.04.2013
Сообщений: 162
Восклицание procedure вывода матрицы так, чтобы элементы диагонали (любой) двигались (есть пример) Pascal ABC

добрый вечер, уважаемые программисты. помогите, пожалуйста, дописать программу.

в Procedure нужно вывести начальную матрицу (которая была в Procedure Print или которая была в Procedure Vid) так, чтобы элементы диагонали двигались.

вот программа на языке Pascal ABC

Код:
program jh_1;
uses crt;
type a=array[1..20,1..20] of integer;
     sort=array[1..20,1..20] of integer;
var n:integer;
    massiv:a;
    mass:sort;
i,j:integer;

procedure vid(n:integer);
var i,j:integer;
begin
  for i:=1 to n do begin
    for j:=1  to n do begin
      massiv[i,j]:=random(9)-5;
      write(massiv[i,j],'  ');
      end;      
      writeln;
      end;      
end;


procedure sor(n,i,j:integer);
var T,k,l:integer;
begin
mass:=massiv;
 for l:=1 to n do begin
       For i:=2  to n do 
           Begin  T:=mass[l,i];   j:=1;
                  While  T>mass[l,j] do  j:= j +1;
                  For k:=i-1 downto  j do mass[l,k+1] := mass[l,k];   mass[l,j]:=T;
           End;
        end;
       Writeln ('Упорядкований масив: ');
  for l:=1 to n do begin
   For i := 1 to n do Write(mass[i,l],' ');  Writeln;end;
end;
function max(n:integer): integer;
var
  max: integer;
  i, j: integer;
begin
  max := mass[1,1];
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      if max < mass[i, j] then
         max := mass[i, j];
    end;
  end;

  result := max;
end;
procedure print(n:integer);
var i,j:integer;
begin
    for i := 1 to n do begin
		for j := 1 to n do
			if (i <> j) and (i+j-1 <> n) then
				Write (mass[i, j] : 3);
		WriteLn;
end;end;

begin
clrscr;
writeln('введите розмер матрицы');
readln(n);
vid(n);
sor(n,i,j);
writeln('Max = ', max(n));
print(n);
end.
про программу
в основной программе вводится размер матрицы,
в Procedure Vid производится вывод матрицы с помощью генератора случайных чисел Randomize,
в Procedure Sor производится сортировка строк по спаданию,
в Function Max - нахождение максимального элемента матрицы,
в Procedure Print - вывод элементов матрицы, которые находятся между диагоналями.

Пример программы с движением (вправо, влево, вперед,назад).
программа игра в крестики-нолики

Код:
rogram shop;
uses crt;
label 1,10;
var      i,j,k,l,m,k1,m1,kk,di1,di2,di3,di4,di5,di6,di7,di8:integer;Am:array [1..3,1..3] of char;  d:char;

begin
clrscr;
k:=31;m:=8;
{Vvedenna matr A -pustichka}
for i:=1 to 3 do
  begin
    for j:=1 to 3 do
      begin
        Am[i,j]:='_';
        gotoxy(30+i,7+j);
        write(Am[i,j]);
      end;
  end;
{xodi}
for kk:=1 to 9 do
  begin
    1:
    k:=31;m:=8;   di1:=0;di2:=0;di3:=0;di4:=0; di5:=0;di6:=0;di7:=0;di8:=0;
  {Rux kursora}
    gotoxy(k,m);
repeat
begin
  if readkey=#54 then
   begin
     k1:=k1+1;
     k:=31+(k1 mod 3);
     gotoxy(k,m);
   end;
  if readkey=#52 then

   begin
     k1:=k1+1;
     k:=33-(k1 mod 3);
     gotoxy(k,m);
   end;
 if readkey=#50 then
   begin
     m1:=m1+1;
     m:=8+(m1 mod 3);
     gotoxy(k,m);
   end;
   if readkey=#56 then
   begin
     m1:=m1+1;
     m:=10-(m1 mod 3);
     gotoxy(k,m);
   end;
end;
until readkey=#13;
    if (kk mod 2)=1 then d:='X' else d:='O';
    if Am[k-30,m-7]='_' then begin write(d); Am[k-30,m-7]:=d; end else begin gotoxy(3,3);writeln('Zanato',k);goto 1; end;

    {perevirka diagonali ctrok}
    for i:=1 to 3 do
    begin
      if (Am[i,i]=Am[1,1]) and (Am[1,1]<>'_') then di1:=di1+1;
      if (Am[i,4-i]=Am[3,1]) and (Am[3,1]<>'_') then di2:=di2+1;
      if (Am[1,i]=Am[1,1])  and (Am[1,1]<>'_') then di3:=di3+1;
      if (Am[2,i]=Am[2,1])  and (Am[2,1]<>'_') then di4:=di4+1;
      if (Am[3,i]=Am[3,1])  and (Am[3,1]<>'_') then di5:=di5+1;
      if (Am[i,1]=Am[1,1])  and (Am[1,1]<>'_') then di6:=di6+1;
      if (Am[i,2]=Am[1,2])  and (Am[1,2]<>'_') then di7:=di7+1;
      if (Am[i,3]=Am[1,3])  and (Am[1,3]<>'_') then di8:=di8+1;
    end;
    if (di1=3) or (di2=3) or (di3=3) or (di4=3) or (di5=3) or (di6=3) or (di7=3) or (di8=3) then goto 10;

  end;
10:

Gotoxy(3,3);
writeln('Pobeda  ',d);


readln;


end.
заранее, огромное спасибо за помощь.
программирование вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Procedure вывода элементов матрицы, которые находятся между диагоналями (дописать в программу) Pascal ABC программирование Паскаль, Turbo Pascal, PascalABC.NET 4 06.06.2013 10:04
Подпрограмма Procedure(Pascal ABC) Tanya-Manya Помощь студентам 2 13.03.2013 21:54
Сформировать вектор x так, чтобы в нем чередовались положительные и отрицательные элементы из матрицы n Freedo Паскаль, Turbo Pascal, PascalABC.NET 17 15.11.2012 21:40
Работа с массивами: Заполнить клетки матрицы цифрами так, чтобы в любой строке/столбце не было одинаковых цифр (Visual Basic) вася радугов Помощь студентам 2 18.10.2012 12:22