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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2011, 02:37   #1
ovram
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 11
По умолчанию Паскаль. Открыть файл и обработать.

Есть софт для работы с портом, суть в том чтоб открыть бинарный файл и обработать. Пол дня парю мозг над обработкай.

допустим файл 01001011

Код:
program vvv;
uses crt;

var i,a:integer;
    f:text;
    b:array of Byte;
begin;
clrscr;
port[888]:=0;
a:=0; i:=0;
writeln('vvedite dlinu fronta',a);
readln(a);
Assign(f,'f.txt');
reset(f);
while eof(f)=False do
begin
inc(i);
setlengs(b,i);
read(f,b[i-1]);
end;
close(f);



writeln('davay rodnoy');
if port[889]=0 then

for i:=0 to Length(b)-1 do
begin

if b[i]=0 then
{если 0}
if port[888]=255 then port[888]:=0; delay(a);
if port[888]=0 then port[888]:=255; delay(a);
if b[i]=1 then
{если =1}
if port[888]=255 then port[888]:=0; delay(a); port[888]:=255; delay(a);
if port[888]=0 then port[888]:=255; delay(a); port[888]:=0; delay(a);
end;
port[888]:=0;
writeln('operation complite');
sound(980); delay(50000); nosound;
read;
end.
Вечно какието бока у компилятора. Как еще придумать чтоб обрабатывать по очереди эти нолики и еденички?

Последний раз редактировалось Stilet; 27.01.2011 в 08:12.
ovram вне форума Ответить с цитированием
Старый 27.01.2011, 08:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
допустим файл 01001011
Ну и что нам должна сказать эта пространная фраза?
Если у тебя кодирование идет посимвольно то ты верно делаешь.
Если же ты имеешь ввиду что нужно из числа биты повыдерать то в цикле
Код:
k:=Число;
for i:=1 to 32 do begin
 if (k and 1)<>0 then begin
  if port[888]=255 then port[888]:=0; delay(a); port[888]:=255; delay(a);
  if port[888]=0 then port[888]:=255; delay(a); port[888]:=0; delay(a);
 end else begin
  if port[888]=255 then port[888]:=0; delay(a);
  if port[888]=0 then port[888]:=255; delay(a);
 end;
 k:=k shr 1;
end;
Цитата:
Вечно какието бока у компилятора.
Это у тебя бока а не у компилятора. Ты сам то пойми сначала чего хочешь.
Цитата:
read(f,b[i-1]);
Файл текстовый? тогда замени на Readln. И Читай в переменку типа String.
А цикл будет

Код:
if b[i]='0' then Кстати тут Begin нужен?
{если 0}
...
if b[i]='1' then
{если 1}
...
Короче намутил ты такого что никак не сходится с логикой. Выясняй задачу точно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2011, 12:13   #3
ovram
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 11
По умолчанию

Кодирование идет посимвольно, файл текстовый.
ovram вне форума Ответить с цитированием
Старый 27.01.2011, 14:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вот в таком случае и работай с ним как с текстовым
Код:
program vvv;
uses crt;

var i,a:integer;
    f:text;
    b:string
begin;
clrscr;
port[888]:=0;
a:=0; i:=0;
writeln('vvedite dlinu fronta',a);
readln(a);
Assign(f,'f.txt');reset(f);

while not eof(f) do begin
 readln(f,b);

 For i:=0 to Length(b)-1 do begin
  if b[i]=0 then   {если 0} begin
   if port[888]=255 then port[888]:=0; delay(a);
   if port[888]=0 then port[888]:=255; delay(a);
  end;
  if b[i]=1 then {если =1} begin
   if port[888]=255 then port[888]:=0; delay(a); port[888]:=255; delay(a);
   if port[888]=0 then port[888]:=255; delay(a); port[888]:=0; delay(a);
  end;
 end;

end;
close(f);
...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.01.2011, 21:43   #5
ovram
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 11
По умолчанию

if b[i]=0 then
жалуется type mismatch
ovram вне форума Ответить с цитированием
Старый 27.01.2011, 21:53   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

это же символ
Код:
if b[i]='0'
Stilet скорее всего набирал всё прямо тут, вполне нормально некоторые очепятки. Самому то тоже думать надо..
vovk вне форума Ответить с цитированием
Старый 27.01.2011, 22:08   #7
ovram
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 11
По умолчанию

теперь тормозит на
close(f); и говорит фаил нот опен
гониво как он мог тогда начинать обработку
ovram вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Две лабы: файл - обработать слова; массив - найти три наибольших элемента за один проход ( Delphi ) Emma_Imp Помощь студентам 5 26.12.2010 21:13
Обработать слова в Паскаль Twisti Помощь студентам 2 25.12.2010 22:23
Обработать строку [Паскаль] Вадим25 Помощь студентам 1 14.12.2010 13:24
Открыть файл dmitriegorovih Общие вопросы Delphi 2 24.08.2010 12:34
Открыть файл RIO HTML и CSS 2 17.08.2010 13:40