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


Ответ
 
Опции темы Опции просмотра
Старый 15.01.2011, 15:23   #11 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Поправил в #8. Изменены процедуры vivod (добавлена вариация цвета) и obmen. Дело в том, что я тестировал для нечетного n, а поставил четное - вылезла ошибка. Но сейчас вроде всё путём.
Vladimir_S вне форума   Ответить с цитированием

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

На форуме часто создаются аналогичные темы, вот аналоги вашей

Матрицы и массивы в паскале
Задача на массивы в Паскале
Массивы на Паскале
Массивы

Старый 15.01.2011, 15:48   #12 (permalink)
newkami
Новичок
 
Регистрация: 14.01.2011
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А что напортачено? хм, я вроде проверял, у меня все вроде норм, не важно ведь по условию как эту область(треугольник) поворачивать.
Вот только у меня почему-то выдает ошибку "26 Type mismatch" в процедуре traekt:
Код:
procedure traekt;
 begin
  writeln('traektoriya:');
  V:=A[n];
  for j:=1 to n do
, поэтому я там немного подругому сделал.

Вот мой окончательный вариант:
Код:
program kyrs;
uses crt;

type
 mas=array[1..15,1..15] of integer;
 vector=array[1..15] of integer;

var
 i,j,n:integer;
 A,B:mas;
 V,V1,V2:vector;

procedure vvod;
 begin
  repeat
   clrscr;
   write('vvedite razmernost massiva ot 5 do 15: ');
   readln(n);
  until (n>=5) and (n<=15);
  for i:=1 to n do
   for j:=1 to n do
    A[i,j]:=-100+random(201);
 end;

procedure vivod(Av:mas);
 var i1,j1:integer;
 begin
  i1:=(n div 2)+1;
  if (n mod 2)=0 then
   j1:=(n div 2)
  else
   j1:=(n div 2)+1;
  for i:=1 to n do
   begin
    for j:=1 to n do
     begin
      if (i<i1) or ((i>i1) and (j<=i-i1)) or
         ((i>=i1) and (j>j1) and (j<n-(i-i1))) then
       textcolor(13) else textcolor(14);
      write(Av[i,j]:5);
     end;
    writeln;
    textcolor(13);
   end;
  Writeln('Press "Enter" to continue...');
  ReadLn;
 end;

procedure vivod_V(Vv:vector);
 begin
  for i:=1 to n do
   write(Vv[i]:5);
  writeln;
 end;

procedure obmen(Ao:mas; var Bo:mas);
 var i1,j1:integer;
 begin
  Bo:=Ao;
  i1:=(n div 2)+1;
  if (n mod 2)=0 then
   begin
    j1:=(n div 2);
    for i:=i1 to n do
     for j:=i-i1+1 to j1 do
      begin
       Bo[j1+j,n-(i-i1)]:=Ao[i,j];
       Bo[i,j]:=Ao[j1+j,n-(i-i1)];
      end;
   end
  else
   begin
    j1:=(n div 2)+1;
    for i:=i1 to n do
     for j:=i-i1+1 to j1 do
      begin
       Bo[j1+j-1,n-(i-i1)]:=Ao[i,j];
       Bo[i,j]:=Ao[j1+j-1,n-(i-i1)];
      end;
   end;
 end;

Procedure traekt;
 begin
  writeln('traektoriya:');
  textcolor(4);
  for j:=1 to n do
   begin
    V[j]:=A[n,j];
     write(V[j]:5);
    end;
   writeln;
   textcolor(13);
  Writeln('Press "Enter" to continue...');
 end;

procedure order(Vo:vector; var Vo1:vector; var Vo2:vector);
 var d:integer;
 begin
  Vo1:=V;
  for i:=1 to n do
   for j:=1 to n-i do
    if Vo1[j]>Vo1[j+1] then
     begin
      d:=Vo1[j+1];
      Vo1[j+1]:=Vo1[j];
      Vo1[j]:=d;
     end;
  Vo2:=V;
  for i:=1 to n do
   for j:=1 to n-i do
    if Vo2[j]<Vo2[j+1] then
     begin
      d:=Vo2[j+1];
      Vo2[j+1]:=Vo2[j];
      Vo2[j]:=d;
     end;
 end;

procedure maxmin;
 var
  min,max,i1,j1:integer;
 begin
  i1:=(n div 2)+1;
  if (n mod 2)=0 then
   j1:=(n div 2)
  else
   j1:=(n div 2)+1;
  max:=A[1,1];
  min:=A[1,1];
  for i:=1 to i1-1 do
   for j:=1 to n do
    begin
     if A[i,j]>max then
      max:=A[i,j];
     if A[i,j]<min then
       min:=A[i,j];
    end;
  for i:=i1 to n-2 do
   for j:=j1+1 to n-(i-i1+1) do
    begin
     if A[i,j]>max then
      max:=A[i,j];
     if A[i,j]<min then
       min:=A[i,j];
    end;
  for i:=i1+1 to n do
   for j:=1 to i-i1 do
    begin
     if A[i,j]>max then
      max:=A[i,j];
     if A[i,j]<min then
       min:=A[i,j];
    end;
   writeln('max=',max);
   writeln('min=',min);
  end;

BEGIN
 clrscr;
 randomize;
 textbackground(9);
 textcolor(13);
 vvod;
 clrscr;
 Writeln('Ishodnaya matritsa:');
 vivod(A);
 obmen(A,B);
 Writeln('Preobrazovannaya matritsa:');
 vivod(B);
 traekt;
 readln;
 order(V,V1,V2);
 Writeln;
 writeln('sortirovka po vozrastaniu:');
 vivod_v(V1);
 Writeln;
 writeln('sortirovka po ubivaniu:');
 vivod_v(V2);
 Writeln('Press "Enter" to continue...');
 Readln;
 Writeln;
 Maxmin;
 ReadLn;
END.
Спасибо вам еще раз! Вы очень мне помогли.
newkami вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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