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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 17:57   #1
МихаилС
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию Огромное число

Всем доброго времени суток. Возникла проблема. Мне надо написать программу, которая считывает из файла 'data.dat' число, находящееся на 2ой строчке этого файла в массив(т.е. каждая цифра числа находится в отдельной ячейке массива) и выполняет с этим числом определенные операции. Эти 'Определенны операции' я написал. Проблема в том, что не знаю как считать из файла эти цифры так, чтобы каждая находилась в своей ячейке массива.
На 1ой строчке файла присутствует число N. Число N равно количеству цифр в числе( при этом 1<N<1 000 000). Подскажите пожалуйста, как записать это число в массив.
Код:
program NightMare;
type BigAr = array[1..1000000] of byte;
function Check(var a1:Bigar;n:integer):integer;
var count:integer;
begin
  count:=0;
  if (a1[n]=10) then begin
    Inc(count);
    a1[n]:=0;
    Inc(a1[n-1]);
    Check(a1,n-1);
  end;
  check:=count;
end;
procedure Swap(var a1:BigAr;n:integer);
var arr:Bigar;
    i,t,f,l,k:integer;
begin
  t:=0;
  k:=n;
  l:=n div 2;
  for i:=l downto 1 do begin
    Inc(t);
    f:=a1[k];
    a1[k]:=a1[t];
    a1[t]:=f;
    dec(k);
  end;
end;

var a1:BigAr;
    b,n,c,i,counter:integer;
    f:text;
    ch:char;
begin
  Assign(f,'bezmiegs.dat');
  Reset(f);
  Read(f,n);
  i:=1;
  while not eof(f) do begin
    Read(f,ch);
    a1[i]:=ord(ch)-48;   //Это, к сожалению, не работает.
    Inc(i);
  end;
 { Writeln('Enter N value!');
  Readln(n);
  For b:=1 to n do begin      //Использовал для ввода вручную
    Readln(c);
    a1[b]:=c;
  end;}
  close(f);
  writeln;
  counter:=1;
  b:=1;
  While b<>0 do begin
    Inc(counter);
    Inc(a1[n]);
    c:=Check(a1,n);
    n:=n-c;
    Swap(a1,n);
    b:=0;
    for i:=1 to n-1 do begin
      b:=b+a1[i];
    end;
  end;
  Assign(f,'bezmiegs.rez');
  Rewrite(f);
  Write(f,a1[1]);
  Write(f,' ');
  Write(f,COunter);
  close(f);
end.
Буду признателен за помощь.
МихаилС вне форума Ответить с цитированием
Старый 23.04.2011, 18:23   #2
ipaSoft
Пользователь
 
Аватар для ipaSoft
 
Регистрация: 17.05.2009
Сообщений: 10
По умолчанию

Код:
type bigarr
var al: Bigarr
..
...

while (not EOF(file)) do 
ReadLn(file, mytempstring);
for aaaa := 1 to length(mytempstring) do
al[aaaa] := ord(mytempstring[i])-48;
Вроде того..
У меня там косяки и вникать некогда. Вообщем я хочу сказать, что можно прочитать строчку и представить ее массивом.
Люди учат цифры...
Цифры учат людей...

Последний раз редактировалось ipaSoft; 23.04.2011 в 18:28.
ipaSoft вне форума Ответить с цитированием
Старый 23.04.2011, 18:44   #3
МихаилС
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ipaSoft Посмотреть сообщение
Код:
type bigarr
var al: Bigarr
..
...

while (not EOF(file)) do 
ReadLn(file, mytempstring);
for aaaa := 1 to length(mytempstring) do
al[aaaa] := ord(mytempstring[i])-48;
Вроде того..
У меня там косяки и вникать некогда. Вообщем я хочу сказать, что можно прочитать строчку и представить ее массивом.
Дело в том, что макс. длина строки 255 элементов, а мне надо 1 000 000.
МихаилС вне форума Ответить с цитированием
Старый 23.04.2011, 18:46   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

судя по представленному коду, у МихаилС код на TurboPascal
там строчку длиной миллион символов не считаешь!

МихаилС, Вы правильно решили читать посимвольно!
Цитата:
Код:
 i:=1;
  while not eof(f) do begin
    Read(f,ch);
    a1[i]:=ord(ch)-48;   //Это, к сожалению, не работает.
    Inc(i);
  end;
почему не работает?!
в чём это выражается?!
А почему N читаете через Read, а не ReadLn ?

А попробуйте так:
Код:
  Assign(f,'bezmiegs.dat');
  Reset(f);
  ReadLn(f,n);
  i:=1;
  while not eoln(f) do begin
    Read(f,ch);
    a1[i]:=ord(ch)-48;   
    Inc(i);
  end;
или даже так:
Код:
  Assign(f,'bezmiegs.dat');
  Reset(f);
  ReadLn(f,n);
  for i:=1 to N do begin
     Read(f,ch);
      a1[i]:=ord(ch)-48; 
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.04.2011, 18:59   #5
МихаилС
 
Регистрация: 30.01.2011
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
судя по представленному коду, у МихаилС код на TurboPascal
там строчку длиной миллион символов не считаешь!

МихаилС, Вы правильно решили читать посимвольно!

почему не работает?!
в чём это выражается?!
А почему N читаете через Read, а не ReadLn ?

А попробуйте так:
Код:
  Assign(f,'bezmiegs.dat');
  Reset(f);
  ReadLn(f,n);
  i:=1;
  while not eoln(f) do begin
    Read(f,ch);
    a1[i]:=ord(ch)-48;   
    Inc(i);
  end;
или даже так:
Код:
  Assign(f,'bezmiegs.dat');
  Reset(f);
  ReadLn(f,n);
  for i:=1 to N do begin
     Read(f,ch);
      a1[i]:=ord(ch)-48; 
  end;
Всё заработало, спасибо. Всё из за того, что я первый раз ставил не readln, а просто read. Видимо, не до конца разобрался, чем read От readln отличается в работе с файлами. Буду знать. Спасибо!
МихаилС вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание программы за ОГРОМНОЕ спасибо ash404 Фриланс 23 01.09.2010 14:33
сделайте пожалуйста практические!!!!!!! а то завтра сдавать!!!!всем кто откликнется огромное спасибо!!!!! vadimka777ok Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2009 19:11
Опять Паскаль...Тема множества...Заранее огромное спасибо!!! Miledi Помощь студентам 1 20.04.2008 16:34
помогите определиться: огромное дерево описателей vs блоб с данными + индексированый нормализованый слова Slyman Свободное общение 0 06.10.2007 01:23