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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.02.2009, 15:29   #11
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

программистам в большинстве случаев приходится разбираться в чужом коде нежели писать свой, поэтому надо учиться читать чужой код, исправлять ошибки и брать себе на заметку что-нибудь полезное из чужого кода

вот исправленная ваша программа:
Код:
program pr6;
uses crt;
  const
      n=5;
      m=5;
      k=25;
      l=25;
   type
       typeMas=array[1..n,1..m] of integer;
       typeMas1=array[1..k] of integer;
       typeMas2=array[1..l] of integer;
   var
       A:TypeMas;
       B:typeMas1;
       C:typeMas2;
       i,j,p,q:integer;

   Procedure Massiv;
   begin
    randomize;
     for i:=1 to n do
      for j:= 1 to m do
       A[i,j]:=random(100)-random(100);
   end;

   procedure writeMas;
       begin
         for i:=1 to n do begin
          for j:=1 to m do write(A[i,j]:4);
          writeLn;
         end;
         writeLn
       end;

   procedure writeResult;
   var kolvo_otric, kolvo_poloj : integer;
       vse_poloj, vse_otric:boolean;
       begin
            for p:=1 to k do
            B[p]:=0;
            for q:=1 to l do
            C[q]:=0;
            p:=0;
            q:=0;
            for i:=1 to n do
             for j:=1 to m do
              if A[i,j]<0 then
              begin
                inc(p);
                B[p]:=A[i,j]
              end
              else
              begin
                inc(q);
                C[q]:=A[i,j]
              end;
            for p:=1 to k do
            write(B[p]:4); writeln;
            for q:=1 to l do
            write (C[q]:4); writeln
         end;


begin
clrscr;
    massiv;
    writeMas;
    writeResult;
    readln
end.
Во-первых, лучше всего в типах использовать произведение первых двух констант, отвечающих за диапозоны - тогда не нужны будут две другие константы l и k: то есть получится так:
Код:
const
      n=5;
      m=5;
   type
       typeMas=array[1..n,1..m] of integer;
       typeMas1=array[1..n*m] of integer;
       typeMas2=array[1..n*m] of integer;
Соответственно во всех процедурах, где используются константы k и l - их надо убрать и заменить на соответствующее произведение n*m ( если вы собираетесь их убирать вообще )

Во-вторых, в этом месте
Код:
for j:=1 to m do begin
             write(A[i,j]:4);
           end;
необязательно использовать составной оператор begin..end, потому что под циклом у вас выполняется один оператор write - и его хватит без begin end, потому что он один, а вот на цикл выше естественно надо писать begin end, потому что выполняется два оператора - for ... to ... do и writeln

дальше в конце программы вместо read(i) лучше использовать readln - так удобнее и не требует переменной - просто нажать enter и все, не требуя ввода какого-то значения, тем более integer, ведь я могу и на букву нажать, и тогда ваша программа заглохнет

В третьей процедуре нет счетчиков основного двумерного массива - вы просто указываете по неопределенным индексам элемент, причем один раз и непонятно какой, потому что счетчики не проставлены в цикл - в программе посмотрите третью процедуру - там все в цикле

Ну и наверное перечислять положительные элементы и отрицательные надо без нулевых элементов, которые были до этого вами проинициализированы ( заданы в третье процедуре - заполнение массива B и C нулевыми элементами ); да и примерно представляю, для чего нужны вот эти переменные
Код:
vse_poloj, vse_otric:boolean;
, но они в программе не используются - я не стал их убирать - может вы и доделаете так, как вам надо

Последний раз редактировалось capta1n; 08.02.2009 в 15:58.
capta1n вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите переделать прогу из Паскаля в Делфи! Toxass Общие вопросы Delphi 28 27.09.2009 15:36
перенос с паскаля на си Ядовитый Общие вопросы C/C++ 2 29.06.2007 13:17