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

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

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

> Массив в файле.
Яна3773
сообщение 19.10.2007 21:52
Сообщение #1


Новичок
*

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

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


Доброго времени суток!
Как прочитать и записать массив (двумерный) чисел из файла, причём покомпонентно?
Задача интересная, прыгнуть из одной системы координат в другую. Но как прочитать элемнты массива из файла, а потом поиздевавшись над ними в Паскале, переписать их в другой файл, понятия не имею. Всё время какие-то строки попадаются, а не элементы матрицы. Помогите пожалуйста. Заранее, спасибо.)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
Айра
сообщение 20.10.2007 0:00
Сообщение #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 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 20.10.2007 0:18
Сообщение #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 - 21.10.2007 18:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.10.2007 0:29
Сообщение #4


Гость






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


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

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

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


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

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


Новичок
*

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

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


Спасибо ребята большоё, как прогу напишу, выставлю.
И ещё, если кому-то нужны книжки с решёнными задачами по численным методам, то тоже скинуть могу, у меня такого добра много, хотя мне кажется тут все знатоки. smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Яна3773
сообщение 20.10.2007 15:31
Сообщение #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 - 20.10.2007 15:50


Прикрепленные файлы
Прикрепленный файл  input.txt ( 9 байт ) Кол-во скачиваний: 170
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sozialist
сообщение 20.10.2007 16:41
Сообщение #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 - 20.10.2007 16:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Яна3773
сообщение 20.10.2007 16:50
Сообщение #9


Новичок
*

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

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


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


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

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

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


Яна3773
Смени пол cool.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Яна3773
сообщение 21.10.2007 10:46
Сообщение #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 - 21.10.2007 12:26


Прикрепленные файлы
Прикрепленный файл  input1.txt ( 17 байт ) Кол-во скачиваний: 187
Прикрепленный файл  input.txt ( 27 байт ) Кол-во скачиваний: 178
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.10.2007 12:37
Сообщение #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 - 21.10.2007 12:38
 К началу страницы 
+ Ответить 
Яна3773
сообщение 21.10.2007 13:12
Сообщение #13


Новичок
*

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

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


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


Новичок
*

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

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


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



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


Гость






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

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

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


Новичок
*

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

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


ух ты!
вроде уложилось. Ещё раз спасибо.)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Яна3773
сообщение 23.10.2007 10:00
Сообщение #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), понятия не умею. В выходном файле опять строчки получаются, а нужно сохранить оформление под матрицу.
Вот такая вот…. математика. Помогите пож.)


Прикрепленные файлы
Прикрепленный файл  F3.TXT ( 136 байт ) Кол-во скачиваний: 174
Прикрепленный файл  f.txt ( 17 байт ) Кол-во скачиваний: 165
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.10.2007 10:20
Сообщение #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.

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


Новичок
*

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

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


Спасибки, но я ещё вернусь !:)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Яна3773
сообщение 23.10.2007 11:42
Сообщение #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 - 23.10.2007 11:44


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

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

 



- Текстовая версия 20.07.2025 2:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"