Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 10:51   #1
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию Паскаль. В файл записываются только "0". Что делать?

При попытке записать в типизированный файл одномерный массив в 1-ой процедуре и вывести его во 2-ой, почему-то выводятся "0".
Код:
Program Xme1ez_6_Record;
Uses Crt;
Type mas1=array [1..255] of integer;
type Xm=record
     a:mas1;
     end;
     myfile=file of Xm;
Var f1:myfile;
    c1:Xm;
    
Procedure Fo(a:mas1; f1:myfile);
Var i:integer;
begin
Randomize;
Assign(f1,'i:\OdMassiv');
rewrite(f1);
 For i:=1 to 100 do begin
  a[i]:=round(10+random*(100-10));
  write(f1,c1);
 end;
 close(f1);
end;

Procedure Z1(a:mas1; f1:myfile);
Var i:integer;
begin
Randomize;
Assign(f1,'i:\OdMassiv');
reset(f1);
 For i:=1 to 100 do begin
 read(f1,c1);
  Write(c1.a[i],' ');
 end;
 close(f1);
end;

Begin
CLRSCR;
Fo(c1.a,f1);
Z1(c1.a,f1);
readln;
end.
Женька Good вне форума Ответить с цитированием
Старый 02.04.2012, 11:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ОМГ!

Вы хоть понимаете, что ОДНА запись у Вас - это МАССИВ на 255 элементов?!
А Вы его В ЦИКЛЕ пишите (т.е. записываете по 100 массивов размером по 255 элементов!
Ну и читаете аналогично.

нужно примерно так:
Код:
Procedure Fo(var MyCl:Xm);
Var i:integer;
  f1:myfile;
begin
  Randomize;
  For i:=1 to 100 do 
     MyCl.a[i] :=  round(10+random*(100-10));

  Assign(f1,'i:\OdMassiv');
  rewrite(f1);
  Write(f1, MyCl )
  close(f1);
end;

Procedure Z1(var MyCl:Xm);
Var f1:myfile;
begin
  Assign(f1,'i:\OdMassiv');
  reset(f1);
  read(f1,MyCl);
  close(f1);
end;
p.s.
1) предупреждение. Вы не сохраняете данные, сколько элементов в массиве реально записано (ну ваше число N = 100)
я бы добавил поле типа Integer (или Byte) прямо в структуру записи.
вот так:
Код:
type Xm=record
     CountArr : integer;
     a:mas1;
end;
2) вас не учили давать структурам, именам переменных, процедур ОСМЫСЛЕННЫЕ имена? Вам ещё не мутит от Z1, Fo, C, A, Xm и т.п. ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 12:49   #3
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

а теперь нужно преобразовать одномерный массив, взяв его из файла в двумерный.
Код:
Procedure Z1(a1:mas2; f1:myfile; f2:myfile);
Var i:integer;
    j:integer;
    k:integer;
    s:mas2;
begin
Writeln;
Assign(f1,'i:\OdMassiv');
reset(f1);
k:=10;
 For i:=1 to 3 do begin
  For j:=1 to 5 do begin
 read(f1,c1);
 s[i,j]:=c1.a[k];
  Write(s[i,j],' ');
   inc(k);
 end;
 writeln;
 end;
 close(f1);
end;
Выводятся в матрице "0".
Женька Good вне форума Ответить с цитированием
Старый 02.04.2012, 13:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 For i:=1 to 3 do begin
  For j:=1 to 5 do begin
     read(f1,c1);
опять в цикле чтение массивов из файла! у Вас в файле есть 15 массивов?!


такое впечатление, что Вы не видите или не читаете или не понимаете того, что я Вам пишу..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 13:20   #5
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
опять в цикле чтение массивов из файла! у Вас в файле есть 15 массивов?!


такое впечатление, что Вы не видите или не читаете или не понимаете того, что я Вам пишу..
нет, 15 нет.
а как тогда записать, чтобы из того массива вывести на экран числа начиная 10 номера?
Женька Good вне форума Ответить с цитированием
Старый 02.04.2012, 13:25   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
....
begin
  Assign(f1,'i:\OdMassiv');
  reset(f1);
  read(f1,c1);
  close(f1);

  Writeln;
  k:=10;
  For i:=1 to 3 do begin
    For j:=1 to 5 do begin
       s[i,j]:=c1.a[k];
       Write(s[i,j],' ');
       inc(k);
    end;
    writeln;
   end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 13:31   #7
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Код:
....
begin
  Assign(f1,'i:\OdMassiv');
  reset(f1);
  read(f1,c1);
  close(f1);

  Writeln;
  k:=10;
  For i:=1 to 3 do begin
    For j:=1 to 5 do begin
       s[i,j]:=c1.a[k];
       Write(s[i,j],' ');
       inc(k);
    end;
    writeln;
   end;
end;
Всё равно печатает матрицу из 0.
Женька Good вне форума Ответить с цитированием
Старый 02.04.2012, 14:00   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Всё равно печатает матрицу из 0.
А в исходном файле что? Не нули?
возьмите, сделайте программу, которая прочитает и выведет содержимоей файла.

выглядеть эта программа может так:
Код:
Uses Crt;
Type mas1=array [1..255] of integer;
type Xm=record
     a:mas1;
     end;
     myfile=file of Xm;

Var f1:myfile;
    OneRec : Xm;
    i, k :integer;


begin
  Assign(f1,'i:\OdMassiv');
  reset(f1);
  WriteLn('Всего в файле записей (массивов): ',FileSize(f1));
  for k:=1 to FileSize(f1) do begin
     Read(f1, OneRec);
     WriteLn('Содержимое массива ',k,' : ');
     for i:=1 to 255 do
       Write(OneRec.a[i]:3,' ');
     WriteLn;
     WriteLn;
  end;
  Close(f1);
  Readln
end.

запустите программу и посмотрите, что у Вас внутри файла OdMassiv реально находится! (думаю, что там мусор в результате предыдущих попыток многократнейшей записи массивов)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.04.2012, 14:13   #9
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
у Вас в файле есть 15 массивов?!
А почему не 16?
=master= вне форума Ответить с цитированием
Старый 02.04.2012, 14:20   #10
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А в исходном файле что? Не нули?
возьмите, сделайте программу, которая прочитает и выведет содержимоей файла.

выглядеть эта программа может так:
Код:
Uses Crt;
Type mas1=array [1..255] of integer;
type Xm=record
     a:mas1;
     end;
     myfile=file of Xm;

Var f1:myfile;
    OneRec : Xm;
    i, k :integer;


begin
  Assign(f1,'i:\OdMassiv');
  reset(f1);
  WriteLn('Всего в файле записей (массивов): ',FileSize(f1));
  for k:=1 to FileSize(f1) do begin
     Read(f1, OneRec);
     WriteLn('Содержимое массива ',k,' : ');
     for i:=1 to 255 do
       Write(OneRec.a[i]:3,' ');
     WriteLn;
     WriteLn;
  end;
  Close(f1);
  Readln
end.

запустите программу и посмотрите, что у Вас внутри файла OdMassiv реально находится! (думаю, что там мусор в результате предыдущих попыток многократнейшей записи массивов)
вот моя прога
Код:
Program Xme1ez_6_Record;
Uses Crt;
Type mas1=array [1..100] of integer;
Type mas2=array [1..100, 1..100] of integer;
type Xm=record
     a:mas1;
     a1:mas2;
     end;
     myfile=file of Xm;
Var f1:myfile;
    f2:myfile;
    c1:Xm;

Procedure Fo(a:mas1; f1:myfile);
Var i:integer;
    j:integer;
begin
Randomize;
Assign(f1,'i:\OdMassiv');
rewrite(f1);
 For i:=1 to 100 do begin
  c1.a[i]:=round(10+random*(100-10));
   Write('x',i,'=',c1.a[i],' ');
  write(f1,c1);
 end;
 close(f1);
end;

Procedure Z1(a:mas1; a1:mas2; f1:myfile; f2:myfile);
Var i:integer;
    j:integer;
    k:integer;
    s:mas1;
begin
Writeln;
Assign(f1,'i:\OdMassiv');
reset(f1);
k:=10;
 For i:=10 to 25 do begin
  read(f1,c1);
  end;
  Close(f1);
  Assign(f2,'i:\GU1');
  Rewrite(f2);
 For i:=1 to 3 do begin
  For j:=1 to 5 do begin
  c1.a1[i,j]:=c1.a[i];
  Write(c1.a1[i,j],' ');
  write(f2,c1);
 end;
 writeln;
 end;
 close(f2);
end;

Begin
CLRSCR;
Fo(c1.a,f1);
Z1(c1.a,c1.a1,f1,f2);
readln;
end.
Женька Good вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что делать с "отморозками"??? genrix Свободное общение 245 23.04.2013 09:33
Delphi, "Floating point overflow" что делать? xMass Помощь студентам 12 02.04.2009 01:37
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03