Program odczytujący liczby z TXT przetwarzający je metodą Gaussa oraz zapisujący wynik.

0

Witam. Mam swój program opisany wyżej w temacie. Kod poniżej:

program tablica2D;
    type  tab=array [1..10 , 1..10] of double;

    procedure tczytaj (var ta:tab; iw,ik :integer);
    var i,j :integer;
    begin;
          for i:=1 to iw do
          for j:=1 to ik do
          begin;
          write('ta[',i,',',j,']= ');
          readln (ta[i,j]);
          end;
    end;
         procedure aczytaj (var ta:tab; iw,ik :integer);
         var i,j :integer;
         begin;

          for i:=1 to iw do
          begin;
          for j:=1 to ik do
          write (ta[i,j]:10:3);
          writeln;
          end;

         end;

      var iw,ik :integer;
      ta:tab;
      procedure gaus (var ta:tab; iw,ik :integer);
      var i,j,r :integer;
          begin
               for r:=1 to ik-1 do
               for i:=r+1 to iw do
               for j:=r+1 to ik do

               ta[i,j]:=ta[i,j]-(ta[i,r]*ta[r,j])/ta[r,r];
          end;

 procedure czytaj(zapis:string; var b:tab);
 var i,j,lw,lk:integer; f:text;
 begin
      assign(f,zapis);
      {$i-} reset(f); {$i+}
            if IoResult<>0 then writeln(zapis,'Pliku nie ma w lokalizacji') else
            begin
            readln(f,lw,lk);
            for i:=1 to lw do for j:=1 to lk do
            begin read(f,b[i,j]);
               writeln(i,' ',j,' ',b[i,j]);
            end;   readln(f);
            close(f);
            end;
 end;
     procedure zap(zapis:string; var b:tab);
     var i,j,lw,lk:integer; var f:text;
     begin
     assign(f,'zapis.txt');
     {$i-} reset(f);{$i+}
         if IoResult=0 then writeln(zapis,'plik juz istnieje') else
            begin
            rewrite(f);
            writeln(f,lw,lk);
                   for i:=1 to lw do
                   for j:=1 to lk do
                   write(f,b[i,j],' ');
                   writeln(f);
                   close(f);
            end;
     end;


var zapis:string; b:tab;

begin
   { writeln ('tablica dwa wymiary');
    writeln ('Podaj wiersze');
    readln(iw);
    writeln ('Podaj kolumny');
    readln(ik);}
    czytaj(zapis,b);
   ( tczytaj(ta,iw,ik); }
    gaus(ta,iw,ik);
   { aczytaj(ta,iw,ik);   }
    zap(zapis,b);
    write ('koniec');
    readln;
end.
 

Załącznik stanowi plik z którego chcę, by program przeczytał dane i po zastosowaniu metody Gaussa zapisał go.
Proszę Was o nakierunkowanie gdzie znajduje się błąd. Podejrzewam, że cos jest nie tak z odczytem i zapisem, ale z roztargnienia nie potrafię rozwiązać problemu. Muszę na godzinę sobie odpuścić.

Pozdrawiam.

0

czytaj('zapis.txt',b);
lub w procedurze czytaj:
assign(f,'zapis.txt');

0

Ok. Program czyta. Tylko mam problem z "chwyceniem" przez program metody Gaussa. Jako komentarze ozanczyłem procedry "aczytaj" i "tczytaj" poniewaz są dla mnie poglądowe. Zmienną "b" zmieniłem na "ta" ; "ik" na "lk" i analogicznie "iw" Jakie jeszcze błędy widzicie w programie?

Tak się przedstawia nowy kod:

program tablica2D;
    type  tab=array [1..10 , 1..10] of double;

   { procedure tczytaj (var ta:tab; iw,ik :integer);
    var i,j :integer;
    begin;
          for i:=1 to iw do
          for j:=1 to ik do
          begin;
          write('ta[',i,',',j,']= ');
          readln (ta[i,j]);
          end;
    end;
         procedure aczytaj (var ta:tab; iw,ik :integer);
         var i,j :integer;
         begin;

          for i:=1 to iw do
          begin;
          for j:=1 to ik do
          write (ta[i,j]:10:3);
          writeln;
          end;

         end;     }

      var lw,lk :integer;
      ta:tab;
      procedure gaus (var ta:tab; lw,lk :integer);
      var i,j,r :integer;
          begin
               for r:=1 to lk-1 do
               for i:=r+1 to lw do
               for j:=r+1 to lk do

               ta[i,j]:=ta[i,j]-(ta[i,r]*ta[r,j])/ta[r,r];
          end;

   procedure czytaj(zapis:string; var ta:tab);
 var i,j,lw,lk:integer; f:text;
 begin
      assign(f,'zapis.txt');
      {$i-} reset(f); {$i+}
            if IoResult<>0 then writeln(zapis,'Pliku nie ma w lokalizacji') else
            begin
            readln(f,lw,lk);
            for i:=1 to lw do for j:=1 to lk do
            begin read(f,ta[i,j]);
               writeln(i,' ',j,' ',ta[i,j]);
            end;   readln(f);
            close(f);
            end;
 end;
procedure zap(zapis:string; var ta:tab);
var i,j,lw,lk:integer; var f:text;
begin
 assign(f,'zapis.txt');
 {$i-} reset(f);{$i+}
         if IoResult=0 then writeln(zapis,'plik juz istnieje') else
            begin
            rewrite(f);
            writeln(f,lw,lk);
                   for i:=1 to lw do
                   for j:=1 to lk do
                   write(f,ta[i,j],' ');
                   writeln(f);
                   close(f);
            end;
 end;


var zapis:string;

begin
  { writeln ('tablica dwa wymiary');
    writeln ('Podaj wiersze');
    readln(iw);
    writeln ('Podaj kolumny');
    readln(ik);    }
    czytaj(zapis,ta);
   { tczytaj(ta,iw,ik); }
    gaus(ta,lw,lk);
   { aczytaj(ta,iw,ik);   }
    zap(zapis,ta);
    write ('koniec');
    readln;
end.
0

Dzieki foopaylfoo za motywację. Głowa została użyta. Co do gotowców to jednak pomyłka.
Wrzucam kod działającego programu, temat zamknięty.

program tablica2D;
    type  tab=array [1..10,1..10] of double;

   procedure czytaj(var ta:tab; var lw,lk:integer; var zapis:string);
   var i,j:integer; f:text;
 begin
      assign(f,'zapis.txt');
      {$i-} reset(f); {$i+}
            if IoResult<>0 then writeln('Pliku nie ma w lokalizacji') else
            begin
            readln(f,lw,lk);
            for i:=1 to lw do for j:=1 to lk do

            begin read(f,ta[i,j]);
            writeln('ta[',i,',',j,']=',ta[i,j]:10:3);

            end;   read(f);
            close(f);
            end;
 end;
      var lw,lk :integer;
      ta:tab;
      procedure gaus (var ta:tab; lw,lk :integer);
      var i,j,r :integer;
          begin
               for r:=1 to lk-1 do
               for i:=r+1 to lw do
               for j:=r+1 to lk do

               ta[i,j]:=ta[i,j]-(ta[i, r]*ta[r, j])/ta[r, r];
          end;

procedure pokazmacierz (var ta:tab; var lk,lw:integer);
          var i,j:integer;
          begin
          for i:=1 to lw do
              begin
          for j:=1 to lk do
              write(ta[i, j]:10:3);
              writeln;
              end;
           end;
procedure zap(var ta:tab; var lw,lk:integer; var zapis:string);
   var i,j:integer; f:text;
begin
 assign(f,'zapis2.txt');
 {$i-} reset(f);{$i+}
         if IoResult=0 then writeln(zapis,'plik juz istnieje') else
            begin
            rewrite(f);
            writeln(f,lw,lk);
                   for i:=1 to lw do
                   begin
                   for j:=1 to lk do
                   write(f,ta[i, j]:10:3, ' ');
                   writeln(f);
                  end;
                   close(f);
            end;
 end;
 var zapis:string;
begin
     writeln('Za chwile nastapi odczytanie z pliku ZAPIS.TXT odczytanie macierzy. Ciskaj ENTER.');
     readln;
     czytaj(ta,lw,lk,zapis);
     writeln('Za chwile Gauss zrobi magiczna operacje mlotkem.ENTERuj.');
     readln;
     gaus(ta,lw,lk);
     writeln('Zrobil wlasnie to...');
     pokazmacierz(ta,lk,lw);
     writeln('Za chwile nastapi zapisanie tego co zrobil Gauss do pliku ZAPIS2.TXT. Jeszcze raz nacisnij ENTER.');
     readln;
     zap(ta,lw,lk,zapis);
     write ('Koniec programu');
     readln;
end.
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1