Страница 1 из 2

Создать типизированный файл

СообщениеДобавлено: 27.04.2011 06:28:35
Asel
Создать типизированный файл, куда записать n целых чисел. Из файла целых чисел сформировать массив, записав в него только четные компоненты, находящиеся до минимального элемента.
Помогите пожалуйста очень нужно :cry:

Re: Создать типизированный файл

СообщениеДобавлено: 27.04.2011 09:42:56
informat
Что должно быть результатом помощи?
Нужно сделать всю работу за Вас или что-то уже есть?

Re: Создать типизированный файл

СообщениеДобавлено: 27.04.2011 12:12:20
NTFS
Очевидно, задача для зачета.
Мое предложение - 300 руб, срок - один день. Пишите на developer@tereshenkov.ru

Re: Создать типизированный файл

СообщениеДобавлено: 27.04.2011 20:37:59
RustemNur
NTFS писал(а):Мое предложение - 300 руб, срок - один день.

Эта... 300р. ... За еду, что ли?

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 09:52:35
Asel
Есть вот что помогите дальше нужно записать в массив только четные компоненты, находящиеся до минимального элемента.
Код: Выделить всё
Program pr1;
{$mode objfpc}{$H+}
uses
Classes , SysUtils
{you can add units after this};
type
massiw=array [1..1000] of real;
var f : file of real;
i , n : integer;
a : real;
p :^massiw;
s , t :word;
begin
AssignFile ( f, 'text.txt');
rewrite ( f );
write ('n=');
readln (n );
for i :=1 to n do
begin
write ('a=');
readln (a);
write (f, a);
end;
CloseFile (f);
AssignFile (f, 'text.txt');
reset (f) ;
s:= filesize (f);
writeln ('v faile ' ,s , ' chisel');
getmem(p, s*sizeof (real));
for t :=1 to s do
begin
read(f, p^[t]);
write (p^[t], ' ');
end;
freemem(p ,s*sizeof (real));
closefile (f);
readln;
end.

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 10:18:18
Padre_Mortius
TC, учимся пользоваться тегом code

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 10:19:56
Asel
А по подробнее можно?

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 11:32:50
v-t-l
1. Real (вещественный) не нужен, нужен Integer (целый) (см. условия задачи).
2. Использование Word (16-битное беззнаковое целое) в качестве счетчика на 32-битных системах не эффективно, лучше DWord или Integer.
3. Во FreePascal/Delphi существуют динамические массивы, и указатели в данном случае не нужны:
Код: Выделить всё
var p: array of integer;
...
s:= filesize (f);
SetLength(p,s);
...
for t:=0 to s-1 do // нумерация элементов начинается с нуля
begin
  read(f, p[t]);
...

4. Для нахождения минимума результату присваивается любое значение, затем при переборе массива каждый элемент сравнивается с результатом, и если он меньше, то результату присваивается значение элемента массива.
5. Число является четным, если остаток от целочисленного деления на 2 равен 0
Код: Выделить всё
if (p[t] mod 2)=0 ...

6. Результирующий массив можно создать отдельно, а можно использовать первоначальный с отдельным счетчиком.

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 11:36:39
RustemNur
ТС, где вы взяли этот код?

Добавлено спустя 8 минут 3 секунды:
v-t-l писал(а):5. Число является четным, если остаток от целочисленного деления на 2 равен 0
Код: Выделить всё
if (p[t] mod 2)=0 ...

Odd()

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 12:15:40
Asel
А что не правильного в этом коде?
RustemNur писал(а):ТС, где вы взяли этот код?

Добавлено спустя 8 минут 3 секунды:
v-t-l писал(а):5. Число является четным, если остаток от целочисленного деления на 2 равен 0
Код: Выделить всё
if (p[t] mod 2)=0 ...

Odd()

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 12:47:10
Maxizar
Да не все правильно, просто
Код: Выделить всё
if (p[t] mod 2)=0 then
begin
Будет выполнено если p[t] четное число
end;

Тогда как:
Код: Выделить всё
if Odd(p[t]) then
begin
Будет выполнено если p[t] Не четное число
end;

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 17:00:56
Asel
Я не понимаю как тогда лучше записать?

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 17:40:55
Maxizar
Решение в архиве. Ну блин ей богу :evil:
Как нужно допилите сами.

Использовал: lazarus-0.9.30-fpc-2.4.2-win32

Re: Создать типизированный файл

СообщениеДобавлено: 28.04.2011 19:27:14
Asel
Помогите пожалуйста что здесь не правильно. не работает.
Program pr1;
{$mode objfpc}{$H+}
uses
Classes , SysUtils
{you can add units after this};
type
massiw=array [1..1000] of integer;
var f : file of integer;
i, n, min, a, s, t, x: integer;
p, z: array of integer;
begin
AssignFile ( f, 'text.txt');
rewrite ( f );
write ('n=');
readln (n );
for i :=1 to n do
begin
write ('a=');
readln (a);
write (f, a);
end;
CloseFile (f);
AssignFile (f, 'text.txt');
reset (f) ;
s:= filesize (f);
SetLength(p,s);
writeln ('v faile ' ,s , ' chisel');
for t:=0 to s-1 do
begin
read(f, p[t]);
write (p[t], ' ');
end;
closefile (f);
readln;
p[min]:=0;
for i:=1 to n do begin
if p[min]>p[t] then min:=i;
end;
x:=0;
for i:=1 to min do
if (p[t] mod 2)=0 then begin
x:=x+1;
z[x]:=p[t];
end;
for i:=1 to x do
write(z[x],' ');
readln;
end.

Re: Создать типизированный файл

СообщениеДобавлено: 29.04.2011 00:33:22
v-t-l
Код: Выделить всё
program pr1;
var
  f: file of integer;
  n, a, i, min, t: integer;
  p: array of integer;
begin
  AssignFile(f, 'array.dat');
  Rewrite(f);
  n := 0;
  while n <= 0 do
  begin
    Write('n=');
    ReadLn(n);
  end;
  for i := 1 to n do
  begin
    Write('a=');
    ReadLn(a);
    Write(f, a);
    if (i = 1) or (a < min) then
    begin
      min := a;
      t := i;
    end;
  end;
  CloseFile(f);
  AssignFile(f, 'array.dat');
  Reset(f);
  SetLength(p, t);
  WriteLn('v faile ', n, ' chisel');
  n := 0;
  for i := 1 to t - 1  do
  begin
    Read(f, a);
    if (a <> 0) and (a mod 2 = 0) then
    begin
      p[n] := a;
      Write(p[n], ' ');
      n := n + 1;
    end;
  end;
  CloseFile(f);
  ReadLn;
end.