IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Массив в файле.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


Доброго времени суток!
Как прочитать и записать массив (двумерный) чисел из файла, причём покомпонентно?
Задача интересная, прыгнуть из одной системы координат в другую. Но как прочитать элемнты массива из файла, а потом поиздевавшись над ними в Паскале, переписать их в другой файл, понятия не имею. Всё время какие-то строки попадаются, а не элементы матрицы. Помогите пожалуйста. Заранее, спасибо.)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Можно организовать это вот так:
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.

Что непонятно - спрашивай, объясню))

p.s. нескромный вопрос.. так ты все-таки Яна или.. Ян smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


 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.


Поставил BP. Теперь пашет под Turbo, не думал, что массив из 1000 строк и 1000 столбцов - стишком длинная структура. Извиняйте.

Сообщение отредактировано: Sozialist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Sozialist, ты вообще что-ли думать не научился? Как и читать? Ты где постишь? В разделе Паскаль? Будь добр постить программу, которая пройдет компиляцию Турбо Паскалем! dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


volvo
Думать и читать не научился. Да.

Сообщение отредактировано: Sozialist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


Спасибо ребята большоё, как прогу напишу, выставлю.
И ещё, если кому-то нужны книжки с решёнными задачами по численным методам, то тоже скинуть могу, у меня такого добра много, хотя мне кажется тут все знатоки. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +



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]3.gif2);
writeln(f);
end;
close(f);
end.



Добавлено через 16 мин.
издеваться не получается только над собой. blink.gif
исходный файл с матрицей (0 0; 1 1) должен перейти в файл с матрицей (50 50 ; 150; 150).

Но этого не происходит. Почему, понять не могу, ведь формула не трудная x=(150*i+50*i+100)/2 и изменила я в задаче не много. В общем, середина задачи явно не правильная...не пойму что делать, просветите пожалуйста.

Сообщение отредактировано: Яна3773 -


Прикрепленные файлы
Прикрепленный файл  input.txt ( 9 байт ) Кол-во скачиваний: 125
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


Естественно, головой нужно думать, что простое присваивание элементам матрицы 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;


Сообщение отредактировано: Sozialist -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


точно. Бред я написала.... спасиб)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Клавиатурный тиран
**

Группа: Пользователи
Сообщений: 79
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  -2  +


Яна3773
Смени пол cool.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +



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]4.gif0 );
write (f, ' line to');
writeln(f);
end;
close(f);
end.



Добавлено через 3 мин.
Сменила, но это не помогло. smile.gif
Понимаю, что достала уже всех.
Но есть ещё кое-что.
Как теперь в массив файла UOTPUT.TXT вставить строчку move to вместо line to, да не просто так а в первой строчке массива один раз. Чтобы вот так получилось
50 50 move to
100 75 line to
150 150 line to
У меня постоянно line to выходит, а это явно не то.

Сообщение отредактировано: Яна3773 -


Прикрепленные файлы
Прикрепленный файл  input.txt ( 27 байт ) Кол-во скачиваний: 127
Прикрепленный файл  input1.txt ( 17 байт ) Кол-во скачиваний: 144
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(Яна3773 @ 21.10.2007 9:46) *
Как теперь в массив файла UOTPUT.TXT вставить строчку move to вместо line to, да не просто так а в первой строчке массива один раз.


Описываешь вот такую константу:
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);



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


вот спасибо)
всё понятно и работает good.gif
обязательно посоветую этот сайт своему преподу, так что если какой-то чёкнутый озадачит вас бредовой математической задачей, а потом будет поучать как её лучше написать.... знайте, он уже здесь smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


  
{$I-}
reset(f);
{$I+}
if IoResult = 0 then



Добавлено через 4 мин.
Айра, извини, что припозднилась с вопросом, но что этот код значит?
в указателе написано, что это проверка ошибок ввода/вывода, но каких конкретно ошибок не сказано.
поиск задачи в текущем каталоге , а потом где придётся, что ли? Объясни пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата
написано, что это проверка ошибок ввода/вывода
Не проверка, а отключение... Смотри:

  {$I-}
{
Здесь отключили контроль ошибок, если ошибка произойдет - ее код вернет
функция ioResult. Если бы контроль ошибок не отключить, программа просто
аварийно прервется...
}
reset(f); { вот тут МОЖЕТ произойти ошибка (если файла нет, например) }
{$I+}

{
Сразу же после того, как была вызвана функция, которая МОЖЕТ завершиться
с ошибкой, надо вернуть контроль назад, и проверить, была ли ошибка - через ioResult
}
if IoResult = 0 then { если ioResult = 0, значит ошибки НЕ было, и файл открыт }
Только учти, что проверять ioResult надо сразу же, и после первого обращения к этой функции ее результат обнулится, то есть второй вызов ioResult выдаст 0 всегда, даже если при Reset(f) была ошибка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


ух ты!
вроде уложилось. Ещё раз спасибо.)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  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.



Добавлено через 1 мин.
Возращение blink.gif
Задача работала прекрасно, но у моего препода личная неприязнь к массивам…сказал их убрать, да и проверку пустой файл или нет тоже . Я убрала, но как теперь из двух столбцов (причём количество строк этой матрицы не известно) в входном файле сделать те же 2 столбца в выходном ( при этом, умножив каждую компоненту на 2), понятия не умею. В выходном файле опять строчки получаются, а нужно сохранить оформление под матрицу.
Вот такая вот…. математика. Помогите пож.)


Прикрепленные файлы
Прикрепленный файл  f.txt ( 17 байт ) Кол-во скачиваний: 110
Прикрепленный файл  F3.TXT ( 136 байт ) Кол-во скачиваний: 115
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Так:
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.

?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +


Спасибки, но я ещё вернусь !:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

Репутация: -  0  +




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.



Добавлено через 2 мин.
Опять пишу что-то неправильное. 2 входных файла, в первом координаты с неизвестным числом строк, во втором просто 4 числа- a,b,c,d. В выходном файле должна быть такая же матрица как и в первом входном, но преобразованная по формуле x=(c*x-a*x+a+c)/2 и y соответственно. Массивом мне уже помогли сделать, спасибо. Но как это сделать без массива, не пойму, у меня только первая строчка выходит правильная, а остальные 3 куда-то исчезают. Полтергейст. Или просто из меня очень плохой программист… wacko.gif

Сообщение отредактировано: Яна3773 -


Прикрепленные файлы
Прикрепленный файл  f1.TXT ( 30 байт ) Кол-во скачиваний: 133
Прикрепленный файл  f3.txt ( 17 байт ) Кол-во скачиваний: 133
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.10.2020 2:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name