Другие языки программирования и технологии

Помогите с Pascal, найдите ошибку

Проблема в том, что мне нужно взять исходные данные из файла, в котором находиться квадратная матрица vfразмерностью A[4,4] и матрица столбец с 4 строками, выглядет это так: 0.5 2.5 6.7 3.7 95.51 2.8 4.6 9.3 5.8 155.61 3.1 0.6 2.1 3.2 63.44 8.1 0.5 4.1 3.8 112.5 Квадратную матрицу я принимаю за А[4,4] а матрицу стобец за b[4]. Я составил текст программы для извалечения матриц из файла, то он у меня почему то извлекает только квадратную матрицу, а вместо матрицы b выдаёт нулю. Помогите найти ошибку. program Gayss; const n=4; var a :array[1..n,1..n] of real; b :array[1..n] of real; t :text; i, j :integer; Begin assign(t,'input.txt'); reset(t); for i := 1 to n do begin j := 0; while j<4 do begin inc(j); read(t, a[i, j]); end; readln(t); end; j:=5; i:=0; while i<4 do begin inc(i); read(t, b); end; writeln('Извлечённая матрица А: '); for i := 1 to n do begin for j := 1 to n do begin write(a[i, j]:6:2); end; writeln; end; writeln; writeln('извлечённая матрица В: '); for i:=1 to n do begin writeln(b:6:2); end; close(t); end.
ты выходишь из цикла for и заполняешь b когда уже дошёл до конца файла.. . бля... короче в коде b(i) заполняешь... а не просто b...но это походу майл с тэгами объебался и не показал квадратные скобки.. .
(кстати неплохо бы не просто тупо читать n...раз.. . а проверять EOF() на достижение конца файла... )
надо примерно так.. .

for i := 1 to n do
begin
j := 0;
while j<5 do
begin
inc(j);
if (j<=4) then
begin
read(t, a[i, j]);
else
read(t, b);
end;
end;
readln(t);
end;
АУ
Александр Ульянов
37 344
Лучший ответ
к коду не присматривался, но на мой взгляд ваш вайл можно заменить на for j:=0 to 3. Ваши вайлы мне мозг разъели) в общем вот так правильно:
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;
const n=5;

var
a :array[1..4,1..5] of real;
b :array[1..4] of real;
t :text;
i, j :integer;

Begin
assign(t,'C:\1.txt');
reset(t);

for i := 1 to 4 do
begin
for j := 1 to 5 do
begin
read(t, a[i, j]);
end;
end;
writeln('Извлечённая матрица А: ');
for i := 1 to 4 do
begin
for j := 1 to 5 do
begin
write(a[i, j]:8:2);
end;
writeln;
end;
writeln;

writeln('извлечённая матрица В: ');
j:=5;
for i:=1 to 4 do
begin
b[ i ]:=a[i,j];
writeln(b[ i ]:6:2);
end;
close(t);
readln;
end.

с границами массивов на вывод сами определитесь, можно сделать чтобы массив А выводился 4х4, а можно 4х5 так как он представлен в файле
У Вас при каждом вхождении фор повторяется вайл... получается масло-маслянное. И размер тут не при делах, Вам надо просто фор надо делать до метки Eof(), а данные потом распределить (в памяти они один фиг строкой расположены)
Харун Aзат
Харун Aзат
8 140