Помощь - Поиск - Пользователи - Календарь
Полная версия: запись и чтение фаила + матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
JoB
Необходимо написать две проги:
1. записывает фаил
2.читает фаил.
Ввести матрицу (4 строки 6 столбцов) Обнулить каждый эллимент не четных столбцов матрици.
APAL
Может все таки не "проги", а процедуры?

И как с этим должна быть связана матрица???



В правильном вопросе скрыта большая часть ответа!
JoB
можно конечно и процедурами...
Просто нужно записать получившуюся матрицу в фаил, а за тем этот фаил прочитать...
JoB
Я тут немного набросал, правдо есть ошибки и основная задача не выполнена...
 const n=4; m=6;
type
vector = array[1..n] of byte;
matrix = array[1..m] of vector;
var i,j:integer;
d: matrix;
begin
for i:=1 to n do
write;
for j:=1 to m do
write (D[i,j]);
writeln;
for i:=1 to n do
begin
if i mod 2
else i:=0;
write
end;
for j:=1 to m do
begin
if j mod 2
else
j:=0;
writeln (d[i,j])
end.
.
APAL
Что мешает описанию: matrix = array[1..n,1..m] of byte; ???
Я не понял дальше с циклами... Первый - вообще без смысловой нагрузки, а второй по идее должен быть внутри первого. Рекомендую разобраться с BEGIN - END в нужных местах.

И не вижу никакой основной идеи решения! Такое ощущение, что просто откуда-то нарезаны куски кода и всунуты как попало...



P.S.: А ты вообще компилировать пробовал данный текст?
JoB
пробовал... =)
вот еще немного пописал, пока на заменении нечетных редов забил...
Вот первая програмка - работает отлично.
uses crt;
const n=4; m=6;
type
vector = array[1..n] of byte;
matrix = array[1..m] of vector;
var i,j:byte;
d: matrix;
t:text;
begin
clrscr;
randomize;
for i:=1 to n do
for j:=1 to m do
for i:=1 to n do
d[i,j]:=random(100);
assign(t,'99.txt');
rewrite(t);
for i:=1 to n do
begin
for j:=1 to m do
write (t, d[i,j]:5);
writeln (t);
end;
close(t);
end.
.


А вот вторая

uses crt;
const n=4; m=6;
type
vector = array[1..n] of byte;
matrix = array[1..m] of vector;
var i,j:byte;
d: matrix;
t:text;
begin
clrscr;
assign (t,'99.txt');
reset (t);
for i:=1 to n do
begin
for j:=1 to m do
read(t,d[i,j]);
readln(t);
end;
close (t);
for i:=1 to n do
begin
for j:=1 to m do
write (d[i,j]:5);
writeln;
end;
writeln;
readln;
end.

volvo
Потому, что неправильно читаешь матрицу из файла... Вот так матрица читается и распечатывается, как положено:
uses crt;
const
n = 4; m = 6;

type
vector = array[1..n] of byte;
matrix = array[1..m] of vector;

var
i, j: byte;
d: matrix;
t: text;

begin
clrscr;
assign (t,'99.txt'); reset (t);

i := 1;
while not seekeof(t) do begin
j := 1;
while not seekeoln(t) do begin
read(t, d[i, j]); inc(j);
end;
readln(t);
inc(i);
end;

close (t);
for i:=1 to n do begin

for j := 1 to m do
write(d[i,j]:5);
writeln()

end;
writeln;
readln;
end.
JoB
Спасибо, все отлично пашет, правдо я, все же сделал вторую прогу по своему, но это не важно, а важно то, что первая, до сих пор у меня не хочет занулять каждый эллимент нечетных столбцов матрици... Помогите пожалуйста.
JoB
Что то ничего не получается вот:
uses crt;
const n=4; m=6;
type
vector = array[1..n] of byte;
matrix = array[1..m] of vector;
var i,j:byte;
k:byte;
d: matrix;
t:text;
begin
clrscr;
randomize;
for i:=1 to n do
for j:=1 to m do
d[i,j]:=random(100);
for j:=1 to n do
begin
if j mod 2 then
j[k]:=0;
end;
assign(t,'99.txt');
rewrite(t);
for i:=1 to n do
begin
for j:=1 to m do
write (t, d[i,j]:5);
writeln (t);
end;
close(t);
end.


но я думаю, что лучшеб через inc И odd(i)(возвращает true если i не четная.) - но к сожалению я забыл как они правельно пишутся...
volvo
Ну, задай матрицу вот так, и сразу запиши ее в файл:
  randomize;
for i:=1 to n do
for j:=1 to m do
if odd(j) then d[i,j]:=0
else a[i, j] := random(100);
{ и сразу запись в файл... }
Больше ничего делать не надо...
JoB
все. Разобрался. Спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.