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

Цитата:
Сообщение от лекси 1 Посмотреть сообщение
Помогите пожалуйста!
Черт, что за запах отвратительный? Ох, чую - пахнет Паскалем АВС. Превосходящим своею глючностью самою глючность. В общем, так - за глюки этого... изделия я не отвечаю. Кроме того:
1. Ведь вот просил Вас выкладывать листинги в тегах {Code}, и объяснил, как это делается - нет, всё мимо. Ведь так неудобно читать неформатированный текст программы! Впрочем, это так - воркотня.
2. Не надо менять то, что было отлажено и выверено! Например, у меня:

If b then Write(P:15);
Writeln;

у Вас:

If b then Writeln(P:15);
Writeln;

В результате на экране появляются лишние пустые строки, матрица рвется. И зачем?

Ну ладно. Главное, ответить на извечный вопрос "Что делать?". Предлагаю попытаться обойти глюки Вашего лжепаскаля путем задания типа произведения P, как "Real". Должно помочь. Тогда (заодно еще кое-где кое-что "причесал" и добавил исключение нулевых элементов матрицы):
Код:
Program Primer;
uses crt;
const
 n=5;
var
 M: array[1..n,1..n]of integer;
 i,j,r,k,a,c :integer;
 P:Real;
 b:boolean;
begin
 clrscr;
 randomize;
 write('Enter the range [a,c]: ');
 readln(a,c);
 writeln;
 writeln('Initial matrix:');
 writeln;
 for i:=1 to N do
  begin
   b:=true;
   P:=1;
   for j:=1 to N do
    begin
     M[i,j]:=random(c-a+1)+a;
     if M[i,j]=0 then M[i,j]:=1;
     if M[i,j]<0 then b:=false;
     if b then P:=P*m[i,j];
     write(m[i,j]:4);
    end;
   if b then write(P:15:0);
   writeln;
  end;
 readkey;
 writeln;
 writeln('Ordered matrix:');
 writeln;
 for j:=1 to n do
  begin
   for k:=1 to n-2 do
    begin
     for i:=k+2 to n do
     if k mod 2 <> 0 then
      if sqr(m[k,j]) < sqr(m[i,j]) then
       begin
        r:=m[k,j];
        m[k,j]:=m[i,j];
        m[i,j]:=r;
       end;
    end;
  end;
 for i:=1 to n do
  begin
   for j:=1 to n do write (m[i,j]:4);
   writeln;
  end;
 readkey;
End.
Изображения
 
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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