Доброго времени суток!
Как прочитать и записать массив (двумерный) чисел из файла, причём покомпонентно?
Задача интересная, прыгнуть из одной системы координат в другую. Но как прочитать элемнты массива из файла, а потом поиздевавшись над ними в Паскале, переписать их в другой файл, понятия не имею. Всё время какие-то строки попадаются, а не элементы матрицы. Помогите пожалуйста. Заранее, спасибо.)
Можно организовать это вот так:
var i,j: integer;
m: array[1..5,1..5] of integer;
f: text;
begin
assign (f, 'input.txt');
{$I-}
reset(f);
{$I+}
if IoResult = 0 then
begin
for i:=1 to 5 do
for j:=1 to 5 do
read (f, m[i,j]); {читаем элементы в массив}
end;
close(f);
{издеваешься над числами}
assign (f, 'output.txt');
rewrite(f);
for i:=1 to 5 do
begin
for j:=1 to 5 do
write(f,m[i,j]:3); {записываем элементы в файл}
writeln(f);
end;
close(f);
end.
Var
i,j,n,m:integer;
A,B:array [1..100,1..100] of integer;
f,g:file of integer;
begin
//Создаю массив А
write('n = ');
readln(n);
write('m = ');
readln(m);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
//Вывожу массив А на экран
writeln; writeln('Massive:');
for i:=1 to n do
begin
for j:=1 to m do
write(' ',a[i,j]);
writeln;
end;
//Записываю массив А в файл 'file1.dat'
assign(f,'file1.dat');
rewrite(f);
for i:=1 to n do
for j:=1 to m do
write(f,a[i,j]);
close(f);
//Читаю данные из файла 'file1.dat' в некий массив (можно этот же)
reset(f);
for i:=1 to n do
for j:=1 to m do
read(f,a[i,j]);
close(f);
//'Издеваюсь' над эл-ми массива, получаю массив В
for i:=1 to n do
for j:=1 to m do
b[i,j]:=a[i,j]+2;
//Записываю массив В в файл 'massive file2.dat'
assign(g,'file2.dat');
rewrite(g);
for i:=1 to n do
for j:=1 to m do
begin
write(g,b[i,j]);
end;
close(g);
//Далее снова читаю из файла и вывожу на экран с целью оценки результата
reset(g);
for i:=1 to n do
for j:=1 to m do
read(g,b[i,j]);
close(g);
writeln('Massive B:');
for i:=1 to n do
begin
for j:=1 to m do
write(' ',b[i,j]);
writeln;
end;
readln
end.
Sozialist, ты вообще что-ли думать не научился? Как и читать? Ты где постишь? В разделе Паскаль? Будь добр постить программу, которая пройдет компиляцию Турбо Паскалем!
volvo
Думать и читать не научился. Да.
Спасибо ребята большоё, как прогу напишу, выставлю.
И ещё, если кому-то нужны книжки с решёнными задачами по численным методам, то тоже скинуть могу, у меня такого добра много, хотя мне кажется тут все знатоки.
Program _1;
var
i, j: integer;
m:array [1..2, 1..2] of real;
f:text;
begin
assign (f, 'input.txt');
{$I-}
reset(f);
{$I+}
if IoResult = 0 then
begin
for i:=1 to 2 do
for j:=1 to 2 do
read (f, m[i,j]);
end;
close(f);
begin
for i:=1 to 2 do
for j:=1 to 2 do
m[i,j]:=(150*i+50*i+100)/2;
end;
assign (f, 'uotput.txt');
rewrite(f);
For i:=1 to 2 do
begin
for j:=1 to 2 do
write (f, m[i,j]2);
writeln(f);
end;
close(f);
end.
Естественно, головой нужно думать, что простое присваивание элементам матрицы M новых значений в соответствии с приведенной формулой, в которую не входят элементы массива М, не значит "издеваться" над массивом. Правильно так:
begin
for i:=1 to 2 do
for j:=1 to 2 do
m[i,j]:=(150*m[i,j]+50*m[i,j]+100)/2;
end;
точно. Бред я написала.... спасиб)
Яна3773
Смени пол
Program _Transition;
const n=3;
var
i, j: integer;
m:array [1..n, 1..2] of real;
mm:array [1..2, 1..2] of real;
f,f1:text;
begin
assign (f, 'input.txt');
{$I-}
reset(f);
{$I+}
if IoResult = 0 then
begin
for i:=1 to n do
for j:=1 to 2 do
read (f, m[i,j]);
end;
close(f);
assign (f1, 'input1.txt');
{$I-}
reset(f1);
{$I+}
if IoResult = 0 then
begin
for i:=1 to 2 do
for j:=1 to 2 do
read (f1,mm[i,j]);
end;
close(f1);
begin
for i:=1 to n do
for j:=1 to 2 do
m[i,j]:=(mm[2,1]*m[i,j]-mm[1,1]*m[i,j]+mm[2,1]+mm[1,1])/2;
end;
assign (f, 'uotput.txt');
rewrite(f);
For i:=1 to n do
begin
for j:=1 to 2 do
write (f, m[i,j]0 );
write (f, ' line to');
writeln(f);
end;
close(f);
end.
const
str: array[boolean] of string = ('line', 'move');
assign (f, 'uotput.txt');
rewrite(f);
for i:=1 to n do begin
for j:=1 to 2 do
write (f, m[i,j] :4 :0 );
{ если i = 1, то напечатается str[true], то есть 'move', иначе - 'line'}
write (f, ' ' + str[i = 1] + ' to');
writeln(f);
end;
close(f);
вот спасибо)
всё понятно и работает
обязательно посоветую этот сайт своему преподу, так что если какой-то чёкнутый озадачит вас бредовой математической задачей, а потом будет поучать как её лучше написать.... знайте, он уже здесь
{$I-}
reset(f);
{$I+}
if IoResult = 0 then
{$I-}Только учти, что проверять ioResult надо сразу же, и после первого обращения к этой функции ее результат обнулится, то есть второй вызов ioResult выдаст 0 всегда, даже если при Reset(f) была ошибка...
{
Здесь отключили контроль ошибок, если ошибка произойдет - ее код вернет
функция ioResult. Если бы контроль ошибок не отключить, программа просто
аварийно прервется...
}
reset(f); { вот тут МОЖЕТ произойти ошибка (если файла нет, например) }
{$I+}
{
Сразу же после того, как была вызвана функция, которая МОЖЕТ завершиться
с ошибкой, надо вернуть контроль назад, и проверить, была ли ошибка - через ioResult
}
if IoResult = 0 then { если ioResult = 0, значит ошибки НЕ было, и файл открыт }
ух ты!
вроде уложилось. Ещё раз спасибо.)
Program _Transition;
var
x: real;
f,f1 : text;
begin
assign (f, 'f.txt');
reset (f);
assign (f1, 'f1.txt');
rewrite (f1);
while not EOF (f) do
begin
read (f, x);
x:=x*2;
begin
write (f1,x:4:0);
end;
end;
close(f);
close(f1);
end.
Так:
Program _Transition;?
var
x: real;
f, f1 : text;
b: boolean;
begin
assign (f, 'f.txt');
reset (f);
assign (f1, 'f1.txt');
rewrite (f1);
b := true;
while not EOF (f) do begin
read (f, x);
x:=x*2;
write (f1,x:6:0);
b := not b;
if b then writeln(f1);
end;
close(f);
close(f1);
end.
Спасибки, но я ещё вернусь !:)
Program _Transition;
var
x,xx,y,yy,a,b,c,d: real;
f, f1, f3 : text;
begin
assign (f1, 'f1.txt');
reset (f1);
assign (f3, 'f3.txt');
reset (f3);
assign (f, 'f.txt');
rewrite (f);
while not EOF (f1) do begin
read (f1, x, y);
while not EOF (f3) do begin
readln (f3, a, b, c, d );
xx:=(c*x-a*x+a+c)/2;
yy:=(d*y-b*y+d+b)/2;
write (f,xx:6:0, yy:6:0);
write(f);
end;
end;
close(f);
close(f1);
close (f3);
end.
Program _Transition;
var
x,xx,y,yy,a,b,c,d: real;
f, f1, f3 : text;
begin
assign (f1, 'f1.txt');
reset (f1);
assign (f3, 'f3.txt');
reset (f3);
assign (f, 'f.txt');
rewrite (f);
readln(f3,a,b,c,d);
while not EOF (f1) do
begin
readln (f1, x, y);
xx:=(c*x-a*x+a+c)/2;
yy:=(d*y-b*y+d+b)/2;
writeln (f,xx:3:0, yy:3:0);
end;
close(f);
close(f1);
close (f3);
end.
2 конечно... пропадали.
до меня дошло, получилось. Всем спасибо
Program _Transition;
var
x,xx,y,yy,a,b,c,d: real;
f, f1, f3 : text;
xz:word;
s:string;
begin
assign (f1, 'func.txt');
reset (f1);
assign (f3, 'coord.txt');
reset (f3);
assign (f, 'curve.txt');
rewrite (f);
readln (f3, a, b, c, d );
while not EOF (f1) do begin
readln (f1, x, y, s);
xx:=(c*x-a*x+a+c)/2;
yy:=(d*y-b*y+d+b)/2;
xz:=Pos ( ' line to',s);
if xz<>0 then
begin
Delete (s, xz, Length (' line to'));
Insert (' move to', s ,xz);
end;
writeln(s);
writeln (f, xx:6:1, yy:6:1, s);
end;
close(f);
close(f1);
close (f3);
end.
попробывала как volvo в первый раз посоветывал, с массивами через ввоод str, но у меня количество строк не известно, как указать на первую не пойму....
Собственно, почему надо сначала везде наштамповать "line to", а потом - менять? Не проще там, где эти "line to" добавляются - поменять в первой строке на "move to"? Или сначала создадим себе сложности, а потом героически их преодолеем?
Program Func;
var
a, b, h, y, x : real;
n, i : integer;
f1:text;
Function f( x : real) : real;
begin
f := x*x
end;
begin
write('Vvedite nachalnoe znachenie y0=');
readln(a);
write('Vvedite conecnoe znachenie yn=');
readln(b);
write('Vvedite chislo razbienij n=');
readln(n);
h := (b - a)/n;
assign (f1, 'func.txt');
rewrite (f1);
for i := 0 to n do
begin
x := a + i*h;
y := f(x);
write(f1, x:7:4, y:7:4, ' line to');
writeln(f1);
end;
close(f1);
end.
Я уже в этой теме где-то показывал использование Boolean, или тебе и это запретили?
Program Func;
var
a, b, h, y, x : real;
n, i : integer;
f1:text;
b: boolean; { <--- !!! }
Function f( x : real) : real;
begin
f := x*x
end;
begin
write('Vvedite nachalnoe znachenie y0=');
readln(a);
write('Vvedite conecnoe znachenie yn=');
readln(b);
write('Vvedite chislo razbienij n=');
readln(n);
h := (b - a)/n;
assign (f1, 'func.txt');
rewrite (f1);
b := true; { <--- Первая строка - будем добавлять "move to" }
for i := 0 to n do
begin
x := a + i*h;
y := f(x);
write(f1, x:7:4, y:7:4);
if b then writeln(f1, ' move to')
else writeln(f1, ' line to');
b := false; { <--- В любом случае следующая строка - НЕ первая }
end;
close(f1);
end.
нет, не запретили. Даже очень разрешили. Ещё немного и я бы чёкнулась.
спасиб.