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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2008, 17:58   #1
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию Задача на файл

Нужна помощь в написании программы. Если у кого-то есть возможность помочь, вот условие задачи:

задан типизированный файл целых чисел. На его основе создать текстовый файл, в каждой строке которого необходимо записать число в десятичной системе счисления из исходного файла и соответствующее ему число в двоичной системе счисления.

Заранее благодарю откликнувшихся.)
Foky вне форума Ответить с цитированием
Старый 03.04.2008, 23:12   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, если не заморачиваться:
Код:

  function BinaryW(W : Word) : string;
  const
    Digits : array[0..$F] of Char = '0123456789ABCDEF';
      {-Return binary string for word}
    { (c) TurboPower }
  var
    I, N : Word;
  begin
    N := 1;
    BinaryW[0] := #16;
    for I := 15 downto 0 do begin
      BinaryW[N] := Digits[Ord(W and (1 shl I) <> 0)]; {0 or 1}
      Inc(N);
    end;
  end;
  
var
  f : File of integer;  
  FOut : text;
  k : integer;
begin
  { код в комментариях  - это для создания тестового файла 
    с целыми числами от 10 до 32 - 
    чтобы можно было проверить работу программы.}
(*  Assign(f, 'InFILE.DAT');
  Rewrite(f);
  for k:=10 to 32 do Write(f,k);
  Close(f); *)

  Assign(f, 'InFILE.DAT');
  Reset(f);
  Assign(FOut, 'MyInt.txt');
  Rewrite(FOut);
  While Not Eof(f) do
  begin
    Read(f, k);
    WriteLn(FOut, K:10, ' ', BinaryW(K));
  end;
  Close(f);
  Close(FOut);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2008, 17:57   #3
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Спасибо), но у меня пару вопросов.
В исходном файле (InFILE.DAT) не видно цифр, их можно как-нибудь просмотреть в читаемом виде?

$F в массиве что означает? Первый раз такое вижу.

И есть ли возможность перевода, скажем, не группы цифр от 0 до 32 как ты писал, а например абстрактных чисел, например 5,8,45 (не группа) и т.д?

Можно ди убрать лишние нули в файле MyInt.txt?
Foky вне форума Ответить с цитированием
Старый 04.04.2008, 22:13   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Foky Посмотреть сообщение
Спасибо), но у меня пару вопросов.
В исходном файле (InFILE.DAT) не видно цифр, их можно как-нибудь просмотреть в читаемом виде?
ага. Воспользоваться программой, которая покажет содержимое файла - т.е. написать свой конвертер (т.е. смотри программу выше в пост #2), либо свой вьювер.
По другому - никак... ;-)

Цитата:
Сообщение от Foky Посмотреть сообщение
$F в массиве что означает? Первый раз такое вижу.
это просто число. число 15. в шестнадцатеричной записи.

Цитата:
Сообщение от Foky Посмотреть сообщение
И есть ли возможность перевода, скажем, не группы цифр от 0 до 32 как ты писал, а например абстрактных чисел, например 5,8,45 (не группа) и т.д?
я не понял, что ты спрашиваешь!! код переводит ЛЮБЫЕ ЦЕЛЫЕ ЧИСЛА!
от 0 до 32 - это количество цифр выводимых в результирующем двоичном коде! Кстати, тут же и ответ на твой вопрос:
Цитата:
Сообщение от Foky Посмотреть сообщение
Можно ди убрать лишние нули в файле MyInt.txt?
разумеется можно. Ты, наверное, хотил спросить - КАК?

проще, поменяй функцию BinaryW (полностью удали из кода) на, например, такую:

Код:
   function Int2Binary(l: longint): string; 
   { int32 to its binary string representation}
   var 
     i: longint; 
     s: string; 
   begin 
     s := ''; 
     repeat
       if odd(l) then 
         s := '1' + s 
       else 
         s := '0' + s; 
       l := l shr 1; 
     until l=0;
     Int2Binary := s;
  end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2008, 00:22   #5
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ага. Воспользоваться программой, которая покажет содержимое файла - т.е. написать свой конвертер (т.е. смотри программу выше в пост #2), либо свой вьювер.
По другому - никак... ;-)

это просто число. число 15. в шестнадцатеричной записи.

я не понял, что ты спрашиваешь!! код переводит ЛЮБЫЕ ЦЕЛЫЕ ЧИСЛА!
от 0 до 32 - это количество цифр выводимых в результирующем двоичном коде! Кстати, тут же и ответ на твой вопрос: разумеется можно. Ты, наверное, хотил спросить - КАК?

проще, поменяй функцию BinaryW (полностью удали из кода) на, например, такую:

Код:
   function Int2Binary(l: longint): string; 
   { int32 to its binary string representation}
   var 
     i: longint; 
     s: string; 
   begin 
     s := ''; 
     repeat
       if odd(l) then 
         s := '1' + s 
       else 
         s := '0' + s; 
       l := l shr 1; 
     until l=0;
     Int2Binary := s;
  end;
Заменила функцию на другую и в файле myint.txt и получила числа 8241, 13365 и т.д. и все с кодом 1011010110000110000000000010001. Что-то я ничего не понимаю. Исходные числа рандомом берутся или их задать можно? А что касается решения с первой функцией,то там выводит то,что задается тут: for k:=0 to 32 do,т.е. выводится весь промежуток,вот я и спросила,как вывести отдельные значения.
Foky вне форума Ответить с цитированием
Старый 05.04.2008, 00:56   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Foky, давайте отделять мух от котлет!

по порядку.
1)
я не вижу в свой программе кода
Цитата:
что задается тут: for k:=0 to 32 do
есть в закомментаренном участке
for k:=10 to 32 do Write(f,k);
но он же закомментарен! Это просто для того, чтобы можно было проверить работу программы!

2) программа читает числа из 'InFILE.DAT'
какие там числа (и сколько) их будет, столько их и будет выведено в выходной файл MYINT.TXT

3) хотите, чтобы были Ваши числа - напишите малюсенькую программу, которая запишет нужные числа в 'InFILE.DAT'.
Всё.

4) у меня есть смутные подозрения, что Вы что-то напортачили в коде!.
Если не разберётесь, что у Вас не получается,
то запакуйте программу (.PAS) + ваш файл с данными ('InFILE.DAT') в архив и выкладывайте тут, в форуме.
вместе разберёмся.

Последний раз редактировалось Serge_Bliznykov; 05.04.2008 в 01:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.04.2008, 21:48   #7
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Скрипт при выполнении выдаёт заранее заданный диапазон чисел (от 10 до 32)переведенных в двоичную систему, а я хочу чтобы числа заранее задавались в *.dat файле и от туда уже переводились
Вложения
Тип файла: rar BIN.rar (668 байт, 8 просмотров)

Последний раз редактировалось Foky; 08.04.2008 в 22:10.
Foky вне форума Ответить с цитированием
Старый 08.04.2008, 22:47   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
Злость

Господи, ну так запишите в файл нужные числа!!!!!

и, прежде всего - УДАЛИТЕ ИЗ ПРОГРАММЫ КОД, КОТОРЫЕ ЗАПИСЫВАЕТ ПОСЛЕДОВАТЕЛЬНЫЕ ЧИСЛА В DAT файл!!!!! НАПРОЧЬ! ОН ТАМ ПРОСТО БЫЛ ДЛЯ ОТЛАДКИ!! ТО, ЧТО ОТМЕЧЕНО КРАСНЫМ - УДАЛИТЬ!!
Код:
begin
  assign(f,'Infile.dat');
  rewrite(f);
  for k:=10 to 32 do write(f,k);
  close(f);
и напишите отдельную программу:
Код:
var
  f:File of integer;
  k:integer;
begin
  assign(f,'Infile.dat');
  
  {обнулить (затереть и открыть для записи) файл Infile.dat}
  rewrite(f);
  
  {записать число 5}
  K:= 5;
  write(f,k); 

  {записать число 8}
  K:= 8;
  write(f,k); 

  {записать число 45}
  K:= 45;
  write(f,k); 
  
  {закрыть файл}
  close(f);
  
end. {КОНЕЦ ПРОГРАММЫ}

- а почему в Вашей программе нет отступов в коде...
это некрасиво ;-(
- лучше число в десятичном представлении отделить от двоичного представления пробелом (выводить пустой символ - глупо и бесполезно!:
writeln(fOut,k:10,' ',binaryW(k));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.04.2008, 23:17   #9
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
Хорошо

Ааа... Спасибо Работает!
Foky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVI файл DeDoK Общие вопросы Delphi 6 29.09.2018 15:37
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58
на файл задача пожалуйста Neznau Паскаль, Turbo Pascal, PascalABC.NET 13 03.06.2008 11:30
Задача на файл в паскале Юрии Александрович Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2007 17:08
ini файл Simply-Art Общие вопросы Delphi 3 17.06.2007 14:43