Показать сообщение отдельно
Старый 01.07.2012, 15:27   #1 (permalink)
lena_stud
Новичок
 
Регистрация: 21.06.2012
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Pascal, помогите дописать программу

Здраствуйте, не могу доделать программу (строит код хаффмана). В процедуре return (действия процедуры должны изменять массив b) есть ошибка (фозможно в описаниии формальных параметров), какая именно понять не могу. Также в основном теле программы нужно вставить textcolor(10)-чтобы выделял зеленым цветом числа, полученные в результате сложения, и textcolor(15)-для всех остальных чисел. Уже всю голову сломала, пытаясь вставить в нужном месте, но либо все числа были зеленые, либо все белые. Вот сам код:
Код:
program xaffmen;
 uses CRT;
 const n=5;
 type matrix1=array[1..n,1..n] of real;
 type matrix2=array[1..n,1..n] of string;
 type mas1=array [1..n] of byte;
 const dano: array [1..n] of real=(0.53, 0.23, 0.13, 0.06, 0.05);
 var a:matrix1; b:matrix2; k,m,i,j,l:byte; num: mas1; sum: real;



 procedure insert (n,k:byte; x:real; col:byte; var a:matrix1; var num: mas1);
  var i1:byte;
  begin
   for i1:=1 to n-col do a[i1,col]:=a[i1,col-1];
   a[n-col+1,col]:=x;
   i1:=n-col;
   while (i1>=1) and (x>a[i1,col]) do begin 
                                                 a[i1+1,col]:=a[i1,col];  
                                                 a[i1,col]:=x; 
                                                 i1:=i1-1;
                                                 end;
   num[col]:=i1+1;
  end;

 procedure return (n,k,col,numr:byte; var b:matrix2);
  var i1,j1:byte; s:string;
  begin
  for i1:=1 to n-col do b[i1,col]:=b[i1,col+1];
  s:=b[numr,col];
  for i1:=numr to n-col do b[i1,col]:=b[i1+1,col];
  b[n-col,col]:=s+'0';  
  b[n-col+1,col]:=s+'1';
  end;

 begin
  {vvod veroiatnostei}
   clrscr;
   k:=n;
    for i:=1 to k do
    for j:=1 to k do
     if j<>1 then a[i,j]:=0
               else a[i,j]:=dano[i];

 {vstavka chisla}
 for j:=1 to k-1 do
  begin
  i:=n+1-j;
  sum:=a[i,j]+a[i-1,j];

  insert (n,k,sum,j+1,a,num);
  end;

  {raspredelenie kodov}
  b[1,k]:='0';
  b[2,k]:='1';
  for j:=k-1 downto 1 do return (n,k,j,num[j+1], b);
 
 {vivod kodov elementov}
  clrscr;
  for i:=1 to n do begin
                       for j:=1 to k do 
                        if a[i,j]>0 then begin textcolor(10);write(a[i,j]:6:2);end
                                     else textcolor (15); 
                      gotoxy(k*6+1,i);
                      for j:=1 to k do write(b[i,j]:6);
                      writeln;
                      end;
  writeln ;

 readkey;
 end.
Должно получаться примерно так (рис слева)
а получается пока так (рис справа)
Изображения
  
lena_stud вне форума   Ответить с цитированием
Ads

Яндекс

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