Показать сообщение отдельно
 18.01.2012, 22:50  
#2
  Punk423 Punk423 вне форума
  Форумчане ПМР
 Аватар для Punk423
Детали профиля (+/-)
Ответов: 41
Регистрация: 18.01.2012
Спасибо:1/3
Не понравилось:3/0
Репутация: 1

Помогите исправить код программы для корректной её работы.
Мне надо чтобы выводила расписанное решение линейных уравнений методом жордано-гаусса.
Оно половину решения делает правильно. А за тем не могу понять, но оно сбивается и выводит чушь.

Вот пример
Ввод: 1 1 -3 2 6 1 -2 0 -1 -6 0 1 1 3 16 2 -3 2 0 6
Вывод:
| 1 | 1 | -3 | 2 | 6 | 7 |
| 1 | -2 | 0 | -1 | -6 | -8 |
| 0 | 1 | 1 | 3 | 16 | 21 |
| 2 | -3 | 2 | 0 | 6 | 7 |

| 1/1 | 1/1 | -3/1 | 2/1 | 6/1 | 7/1 |
| 1/1 | -2/1 | 0/1 | -1/1 | -6/1 | -8/1 |
| 0/1 | 1/1 | 1/1 | 3/1 | 16/1 | 21/1 |
| 2/1 | -3/1 | 2/1 | 0/1 | 6/1 | 7/1 |

| 1/1 | 1/1 | -3/1 | 2/1 | 6/1 | 7/1 |
| 0/1 | -3/1 | 3/1 | -3/1 | -12/1 | -15/1 |
| 0/1 | 1/1 | 1/1 | 3/1 | 16/1 | 21/1 |
| 2/1 | -3/1 | 2/1 | 0/1 | 6/1 | 7/1 |

| 1/1 | 1/1 | -3/1 | 2/1 | 6/1 | 7/1 |
| 0/1 | -3/1 | 3/1 | -3/1 | -12/1 | -15/1 |
| 0/1 | 1/1 | 1/1 | 3/1 | 16/1 | 21/1 |
| 2/1 | -3/1 | 2/1 | 0/1 | 6/1 | 7/1 |

| 1/1 | 1/1 | -3/1 | 2/1 | 6/1 | 7/1 |
| 0/1 | -3/1 | 3/1 | -3/1 | -12/1 | -15/1 |
| 0/1 | 1/1 | 1/1 | 3/1 | 16/1 | 21/1 |
| 0/1 | -5/1 | 8/1 | -4/1 | -6/1 | -7/1 |

А дальше решение не правильное.

---------------------------------------------------

Код HTML:
program df;
var  i,j,c,z,ss,pr,prss,kff,i3,j3,i2,j2,delz,delc,kz,kc,ksc,ksz,ai3c,ai3z,i4,j4,c4,z4,min,i11,kkk,kkkf,min2,ff,ffg,i5,i6,j6,i6c,i6z,minn,iii:integer;
rc,rz:real;
 a:array [1..4,1..13] of integer;
 f1: text;

begin
     {Ввод**
     assign   (f1, 'file1.txt');
           reset (f1);
 for i:=1 to 4 do
 begin
 ss:=0;
  for j:=1 to 5 do
   begin
    z:=2*j;
    c:=2*j-1;
    read(f1,a[i,c]) ;
    a[i,z]:=1;
    ss:=a[i,c]+ss;
   end;
 a[i,12]:=1;
 a[i,11]:=ss;
 end;
 
       close (f1);
     {Вывод**
  for i:=1 to 4 do
  begin
  write(' | ');
   for j:=1 to 6 do
   begin
    c:= 2*j-1;
    write(a[i,c],' | ');
     end;
   writeln;
   end;
    writeln;
    




  for j:=1 to 4 do
   begin
    pr:=0;
    prss:=0;
    kff:=0;
    c:=2*j-1;
    z:=2*j;
    ff:=0;

    {нахождение нужной строки**
    for i:=1 to 4 do
    begin

     if (a[i,c]=1) and (pr=0)  and (a[i,13]=0)
      then begin

            pr:=1;
            kff:=i;
            a[i,13]:=1;
           end
         {если не нашло нужную изменем строку**
      else begin
      
      
      
             if pr<>1
             then
             begin
             prss:=prss+1;
             min:=0;
             kkk:=1;

                       
                       

                 for i5:=1 to 4 do
                  begin

                   if ff=0
                    then  if a[i5,13]=0
                            then begin
                                  ff:=1;
                                  ffg:=i5;
                                 end;
                  end;
                       
             kff:=ffg;
             if prss=4
              then begin
                     a[kff,13]:=1;
                    delz:=a[kff,c];
                     delc:=a[kff,z];
                     for j2:=j to 6 do
                       begin
                        z:=2*j2;
                        c:=2*j2-1;
                        a[kff,z]:=a[kff,z]*delz;
                        a[kff,c]:=a[kff,c]*delc;
                        if a[kff,z]=a[kff,c]
                         then begin
                               a[kff,z]:=1;
                               a[kff,c]:=1;
                              end;
                       end;
                      end;
            end;
            end;
            end;

            
       {преобразование массива**
      for i3:=1 to 4 do
      begin
       kz:=2*j;
       kc:=2*j-1;
       ksc:=a[i3,kc];
       ksz:=a[i3,kz];
       for j3:=j to 6 do
        begin

         if i3<>kff
          then
           begin
            c:=2*j3-1;
            z:=2*j3;
            ai3c:=-ksc*a[kff,c];
            ai3z:=ksz*a[kff,z];
            if ai3z=a[i3,z]
             then begin
                   a[i3,z]:=ai3z;
                   a[i3,c]:=ai3c+a[i3,c];
                  end
             else begin
                   a[i3,z]:=ai3z*a[i3,z];
                   a[i3,c]:=ai3c+a[i3,c]*ai3z;
                   if a[i3,z]=0
                    then writeln('net reweni9');
                  end;

            end;
          end;
          
          {сокрашение**
          for i6:=1 to 4 do
           for j6:=j to 6 do
            begin
             i6c:=j6*2-1;
             i6z:=j6*2;
             if a[i6,i6c]>a[i6,i6z]
              then minn:=a[i6,i6z]
              else minn:=a[i6,i6c];
             for iii:=minn-1 downto 2 do
              begin
               if (a[i6,i6c] mod iii=0) and (a[i6,i6z] mod iii=0)
                then begin
                      a[i6,i6c]:=a[i6,i6c] div iii;
                      a[i6,i6z]:=a[i6,i6z] div iii;
                     end;
              end;
            end;
          
          
             {Вывод**

           
           
              end;
           for i4:=1 to 4 do
            begin
             write(' | ');
             for j4:=1 to 6 do
              begin
                z4:=2*j4;
                c4:=2*j4-1;
                 if  a[i4,c4]= a[i4,z4]
                  then write(1,' | ')
                  else  if a[i4,z4]=1
                         then   write(a[i4,c4],' | ')
                         else if a[i4,c4]=0
                         then  write(0,' | ')
                         else write(a[i4,c4],'/',a[i4,z4],' | ');
              end;
             writeln;
            end;
          writeln;
          
          
          
       end;
       writeln('______________________________________________')
end.
  Вверх