Другое > Hard'n'Soft
Вспоминаем Turbo Pascal и решаем задачи на нём
<< < (13/15) > >>
igarexa:
и опять я)) господа программисты, тут такое дело))
вобщем, как я уже говорил, мне надо внедрить процедуру соеденения файлов, в уже готовую программу, и, как и ожидалось, конечно же столкнулся с неизбежной проблемой: "не работает" ))
Помогите пожалуйста разобраться))) Программа сама сложная и большая, по этому напишу пожалуй процедуру создания файла, которая уже была, и ту процедуру слияния 2х файлов, которую я хочу внедрить (примеры нарыл в инете, внёс свои изменения).

Быть может, это и не понадобится, но в программе имеется это процедура создания файла:

--- Код: ---procedure Fcreate(var fff:Myfiletype; filename:string; var FileOpen: boolean);
var RC, n, i: integer;
    answer : string[1];
    rec :MyRec;
label BUILD;
begin
assign(fff, filename);
{$I-}
RC:=13;
reset(fff);
{$I+}
RC:=ioresult;
if (RC=0) then
      if (FileRewr(filename) = FALSE) then
          begin
          close(fff);
          FileOpen:=False;
          MyFileErr:=1;
          exit;
          end;

{$I-}
rewrite(fff);
{$I+}
     if(IOResult<>0) then begin
                          MyFileErr:=3;
                          FileOpen:=False;
                          exit;
                          end;
       n:=NumOfRec;

       Rec.Name1:='                                              ';
       Rec.Name2:='                                              ';
       for i:=0 to n do
       begin
        Rec.name1:= chr($61 +i);
        Rec.name2:= chr($30 +i);
        write(fff,Rec);
       end;
close(fff);
          FileOpen:=False;
end;
--- Конец кода ---


Если честно, то мне мало что понятно в ней, но я так понимаю, создаётся файл, начальное название которого "filename"

Изходя из этого, вот прецедура слияния двуй файлов.

--- Код: ---procedure merge ( var fff:MyfileType; filename: string; var FileOpen: boolean);
var
  a, b: integer;
  eof_a, eof_b: boolean;
begin
writeln('Vvedi nazvanie 1-go fajla');
read(filename);
  assign(f2, filename);
  reset(f2);
  writeln('Vvedi nazvanie 2-go fajla');
read(filename);
  assign(f3, filename);
  reset(f3);

  rewrite(f4);

  eof_a := eof(f2); if not eof_a then read(f2, a);
  eof_b := eof(f3); if not eof_b then read(f3, b);
  while (not eof_a) and (not eof_b) do begin
    if a < b then begin
      write(f4, a);
      eof_a := eof(f2); if not eof_a then read(f2, a);
    end
    else begin
      write(f4, b);
      eof_b := eof(f3); if not eof_b then read(f3, b);
    end;
  end;

  if eof_a then begin
    write(f4, b);
    while not eof(f3) do begin
      read(f3, b); write(f4, b);
    end;
  end
  else begin
    write(f4, a);
    while not eof(f2) do begin
      read(f2, a); write(f4, a);
    end;
  end;
  close(f4);
end;
--- Конец кода ---

Ход моих мыслей:
1. У меня имеется несколько ранее созданных файлов с разными названиями (программа без моей процедуры всё реализует)
2. В моеё процедуре, сначала я вписываю название 1го, программа считывает, и соотносит его с переменной f2, со вторым так же, в f3.
3. Далее в процедуре уже составлен алгоритм слияния (его нашёл), и создаётся файл f4.

Есть пару вопросов, в правильную сторону ли я мыслю (всмысле можно ли так занести 2 файла в эту процедуру), правильная ли она?
Подключил я её так: procedure merge  ( var fff:Myfiletype; filename: string; var FileOpen: boolean);
Вызываю так: begin merge(MyData, MyDataOpen); end; (по аналогии с другими процедурами)

По идее программа жалуется лишь на то что Identifier not found на f2, f3, f4.

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

Yoti:
Так может и нам этот непонятный материал покажешь?))
Кстати, работа с файлами меня тоже жутко интересует. Я пробегаюсь побайтово, а это жутко долго. Как бы это дело ускорить? По идее, нужно либо работать в РАМе полностью, либо использовать буфер обработки...
HardWareMan:

--- Цитата: Yoti от 04 Май 2012, 03:08:51 ---Кстати, работа с файлами меня тоже жутко интересует. Я пробегаюсь побайтово, а это жутко долго. Как бы это дело ускорить? По идее, нужно либо работать в РАМе полностью, либо использовать буфер обработки...
--- Конец цитаты ---
Когда нужно работать с файлом побайтово, но при этом хочется скорости (или при больших объемах), то определенно нужно использовать кэш. В реальном режиме не так и много ОЗУ (в отличии от защищенного режима или под Win32, где можно несколько десятков мегабайт загрузить разом), поэтому, делаем буфер данных (можно и в куче) и подчитываем его по мере надобности. Например, я когда-то делал так:

--- Код: ---// Описываем глобальные переменные
var Adres,AdresE,adr,x1,s2,lenght:word;
    Off,b:byte;
    Cash:array[0..$2fff] of byte;
    fl:file;
// Ускоритель работы с диском, убедитесь, что файл открыт, иначе будет ошибка
function GetByte:byte;
begin
     if Adres=0 then begin
        BlockRead(fl,cash,$3000,AdresE);
        if Eof(fl) then Off:=128;
        end;
     GetByte:=Cash[Adres]; inc(Adres);
     if (Adres=AdresE) and (Off=128) then Off:=255;
     if Adres=AdresE then Adres:=0;
end;

// Использование
begin
     // Обнулим адрес и признак последнего блока
     Adres:=0; Off:=0;
     // Открываем файл
     Assign(fl,'FileName.Ext'); ReSet(fl,1);
......
     while Off<>255 do begin
     // Берем очередной байт
     b:=GetByte;
     ****
     end;
......
     // В конце закрываем файл
     Close(fl);
end.

--- Конец кода ---
Yoti:
HardWareMan,
спасибо, попробую.
igarexa:
Yoti, Конечно покажу)) Раньше не получилось, система полетела....
Залил на http://ifolder.ru/30318665
Тут конечно черт ногу сломит, но благодарю что решил разобраться))
Yoti:
igarexa,
я имел ввиду тот непонятный материал.
Там требования особые или ты просто его не понимаешь?
Просто если не понял, то

--- Цитата: igarexa ---Identifier not found на f2, f3, f4.
--- Конец цитаты ---
значит, что ты переменные не сVARил)



--- Цитата: LAB4.PAS ---
--- Код: ---writeln('5 - zakroim fajl ');
--- Конец кода ---

--- Конец цитаты ---
Программа для курсов кройки и шитья?))


--- Цитата: LAB4IO.PAS ---
--- Код: ---writeln('dannij falj sohranen ');
--- Конец кода ---

--- Конец цитаты ---
Про какую фальш (фальж) там столь упоминаний?))


--- Цитата: LAB4IO.PAS ---
--- Код: ---if( (answer='j') or (answer='J')) then
--- Конец кода ---

--- Конец цитаты ---
LowerCase()/UpCase() же =)
igarexa:
Yoti, это и есть тот страшный материал)) (сама программа)
Мне её дали, и сказали добавить возмоность соеденения 2х файлов.
Я как бы наткнулся на процедуру слияния файлов

--- Код: ---procedure merge ( var fff:MyfileType; filename: string; var FileOpen: boolean);
var
  a, b: integer;
  eof_a, eof_b: boolean;
begin
writeln('Vvedi nazvanie 1-go fajla');
read(filename);
  assign(f2, filename);
  reset(f2);
  writeln('Vvedi nazvanie 2-go fajla');
read(filename);
  assign(f3, filename);
  reset(f3);

  rewrite(f4);

  eof_a := eof(f2); if not eof_a then read(f2, a);
  eof_b := eof(f3); if not eof_b then read(f3, b);
  while (not eof_a) and (not eof_b) do begin
    if a < b then begin
      write(f4, a);
      eof_a := eof(f2); if not eof_a then read(f2, a);
    end
    else begin
      write(f4, b);
      eof_b := eof(f3); if not eof_b then read(f3, b);
    end;
  end;

  if eof_a then begin
    write(f4, b);
    while not eof(f3) do begin
      read(f3, b); write(f4, b);
    end;
  end
  else begin
    write(f4, a);
    while not eof(f2) do begin
      read(f2, a); write(f4, a);
    end;
  end;
  close(f4);
end;
--- Конец кода ---
надеюсь что правильная)), и теперь хочу внедрить её в эту программу.


--- Цитата ---значит, что ты переменные не сVARил)
--- Конец цитаты ---
да, прочитал насчёт жтой ошибки, попробовал дать f2,f3,f4 все возможные типы данных которые я знаю, не полчилось ( видимо что то не допонимаю, или же не там это делаю...


--- Цитата ---Программа для курсов кройки и шитья?))
--- Конец цитаты ---

--- Цитата ---Про какую фальш (фальж) там столь упоминаний?))
--- Конец цитаты ---
А, не оброщай вниммания))) это я переводил с латышского на русский побырому))

Добавлено позже:
Апдейт информации  :)
Вобщем нашёл я готовый похожий вариант моей работы. Та процедура, которую я хотел "запилить" в программу совсем не то что надо..... Всё оказалось сложнее, сам бы не сделал.
Единственная проблема, что где то есть небольшая ошибка (программа скомпилировалась, только файл вроде создаётся, а под конец программа вылетает, и объеденнёный файл при перезапуске уже не находит). Ну да ладно, повожусь ещё, а если не исправлю - сдам какая есть... хоть какие то пункты за неё получу.
Позже залью готовую (если будет) программу )) для интереса))

Спасибо всем за уделённое внимание))
paul_met:
Чтобы не создавать отдельную тему, спрошу тут по поводу Delphi.
В одной из прог вдруг перестало работать автовыпадение подменю при наведении на меню мышкой (компонет Tmenuitem). Теперь чтобы показалось подменю надо обязательно кликнуть. Никак не могу понять почему появился такой баг. Само меню я вообще не трогал. Да и настроек там минимум - никакой опции, связанной с выпадением подменю я там не нашёл.
DrMefistO:
paul_met, сорс можешь в ЛС кинуть? Гляну.
Yoti:
Прошу помощи: мне нужен рабочий компилирующийся исходник вложенного контекстного меню Windows на Delphi. То есть который создаёт dll, которая после регистрации добавляет раскрывающийся пункт ("Sample menu >"), в котором есть хотя бы один элемент, который можно выбрать ("Sample menu > \ To do something"). Вроде того, что делают WinRAR, 7-zip и т.д.
Deefrex:
Borland Pascal 7.0 Eng (полная версия с установщиком), 13-дискетное издание с RTL.

Дискеты 1-12: дистрибутив;
Дискета 13: RTL.

Взято отсюда: https://pascal.sources.ru/museum/bp7.htm Я лишь всё сразу по папкам скомпоновал для удобной установки.



Работает без нареканий на Windows 98 Second, на XP уже может подлагивать (например, отображать 2 курсора).

Программы, естественно, компилирует в 16-битной разрядности, которые максимум можно открыть на 32-битной ОС.

Upd.

Я сегодня разобрался, почему у меня в Windows XP при запуске Borland Pascal дублировался курсор. Я это всё запускал в VirtualBox.

Собственно, если такое происходит, то в виртуалке с большой долей вероятности окно с системой развёрнуто на весь экран и включена интеграция мыши.



Проблема полностью решается перед запуском Borland Pascal сворачиванием окна системы до стандартного разрешения, изначально заданного виртуальной машиной, и отключением этой самой интеграции мыши (в нижней панели окна системы / через меню "Ввод" -> "Интеграция мыши").

Deefrex:
Я сейчас пошёл получать вышку на заочку. Имеется диплом средне-специальной квалификации (поэтому в ВУЗ'е меня оформили на сокращённую форму обучения). Всё для того, чтобы прокачаться по квалификации, а вместе с ней и по профессии, и нужны какие-то строгие дедлайны, т.к. я несколько лет после получения диплома СПС занимался отнюдь не программированием (то права получал, то на карантине сидел, то работал хоть кем-нибудь, чтобы хотя бы какие-то свои деньги иметь; последнее из таких мест - склад Ozon, комплектовщиком). Да и если программирование изучать самостоятельно - можно на каком-нибудь этапе не хило так засесть, бросить писать коды на неопределённый срок, а вернуться к любимому делу только через 3 года, когда из башки уже всё выветрится. Поэтому я и пошёл на данный шаг, чтобы была мотивация постоянно в этом вариться и стараться всё успеть.

Мало того, что меня там историей России уже завалили выше крыши (но это не самое страшное). :lol:

Пару дней назад открыли наконец раздел "Основы алгоритмизации и программирования", а там любимый Паскаль! :crazy:



Я так смеялся, когда читал первый заголовок (со скрина).

Даже думал в последнее время: «Да не, ну по-любому студентов сейчас должны сразу хотя бы на Си'шку направлять, уже со старта. Ну какой Паскаль в 2022 году, вы чё там, алё?» Короче, виртуалку на Windows 98 и Borland Pascal туда не зря в последние дни накатывал. Будто знал, к чему готовиться. :biggrin:
HardWareMan:

--- Цитата: Deefrex от 12 Ноябрь 2022, 07:55:27 ---Даже думал в последнее время: «Да не, ну по-любому студентов сейчас должны сразу хотя бы на Си'шку направлять, уже со старта. Ну какой Паскаль в 2022 году, вы чё там, алё?» Короче, виртуалку на Windows 98 и Borland Pascal туда не зря в последние дни накатывал. Будто знал, к чему готовиться. :biggrin:
--- Конец цитаты ---
Этот ваш Ц не заточен под обучение. Даже Барсик и то под обучение более пригоден, чем Ц. И речь не за обучение какому-то конкретному языку, т.е. рыбе. Речь за обучение программированию в принципе, т.е. удочке. Так что да, паскаль жил, паскаль жив, паскаль будет жить. А ты потом можешь скачать заголовки синтаксиса паскаля для Ц для препроцессора и юзать синтаксис паскаля в Ц. Ну или сам написать, это не сложно.  :lol:
MaxWooD:

--- Цитата: HardWareMan от 12 Ноябрь 2022, 09:09:28 ---Этот ваш Ц не заточен под обучение
--- Конец цитаты ---
:cool: Скоро первоклашкам вместо Азбуки будут выдавать Русский толковый словарь.

Про Турбо Паскаль, скажу, от себя лично, что для введения в основы программирования он идеален. Впоследствии для задач инженера (не программиста) этих знаний будет достаточно + хорошая база для освоения других языков программирования. В настоящее время, у каждого инженера должна быть хорошая база по программированию, иначе с этой отрасли уже никак.

Бейсик в своё время так и не осилил, вроде понятно все, но непонятно  :lol:
Deefrex:

--- Цитата: HardWareMan от 12 Ноябрь 2022, 09:09:28 ---Речь за обучение программированию в принципе, т.е. удочке.
--- Конец цитаты ---

--- Цитата: HardWareMan от 12 Ноябрь 2022, 09:09:28 ---А ты потом можешь скачать заголовки синтаксиса паскаля для Ц для препроцессора и юзать синтаксис паскаля в Ц.
--- Конец цитаты ---

--- Цитата: MaxWooD от 12 Ноябрь 2022, 14:07:18 ---для введения в основы программирования он идеален
--- Конец цитаты ---

Я не спорю, т.к. сам программу для своего первого диплома писал на Delphi (если это вообще можно назвать написанием, т.к. сделал я её где-то за трое суток без сна и отдыха чётко перед предзащитой - до этого у меня был голый, сырой и нерабочий набросок этой самой программы). Для написания диплома - это вообще самый простой и наименее замороченный вариант. Вопрос только в том - а где и как потом работать?

Сегодня ещё общался с айтишником с работы по этой теме - у него незаконченное высшее по ИБ (т.е. бросил), ~2,5-3 года он просто отработал на одном месте оператором КЦ (а туда берут вообще всех - со мной на оплачиваемое обучение ходил пацан, которому во время этого самого обучения стукнуло 18, и который на тот момент нигде не учился), а потом откликнулся на одну вакансию в этом самом КЦ, и его перевели на айтишника, и вот он мне вообще высказал, что от наличия диплома у человека не шибко много плюсов, а от знания Паскаля плюсов ещё меньше. :biggrin: И что Паскаль - это древность, которая нигде в коммерческой деятельности в современном мире не используется. То же самое я слышал от некоторых программеров-самоучек (один из таких тупо на дому делал сайты) те 3 года, что высматривал себе работу после получения диплома.

Добавлено позже:

--- Цитата: MaxWooD от 12 Ноябрь 2022, 14:07:18 ---Бейсик
--- Конец цитаты ---

Бейсик меня вообще практически обошёл стороной и никак не касался.

Добавлено позже:
P.S. Вообще в российских учебных заведениях делают всё как-то неправильно. У меня в начале первого курса колледжа в своё время было тупо повторение информатики со школьной программы старших классов, Word, Excel, Access и теория + другие предметы, поэтому на первом семестре я вообще себя чувствовал там как рыба в воде, наивно думая, что так будет всегда, и из-за этого зачастую прогуливал пары. Когда во втором семестре началось небольшое вхождение в Паскаль, а под конец семестра сдача всех лабораторных по Паскалю и зачёт с написанием программы - у меня была реальная паника, и я вообще не понимал как это всё пишется и что оно означает. Когда на предпоследнем курсе у нас после Паскаля было небольшое вхождение в Си, а на курсовую нам задали написание рабочей программы полностью на Си - у меня была реальная паника, и я вообще не понимал как это всё пишется и что оно означает. Большинство из наших работы тогда тупо купили, а каким образом я в тот период закрыл предмет и курс - меня даже не спрашивайте. Поэтому на последнем курсе я твёрдо решил, что буду писать дипломную программу именно на Делфи. Так вот и получил свой диплом.

А нужно делать так, чтобы студент с первых дней в учебном заведении на своей шкуре испытал, чего от него там хотят, и что его ждёт в дальнейшем. Без вот этого вот тихого входа в реку, чтобы потом тебя сходу-сразу окунули на глубину. Чтобы студент сразу понимал, куда он вляпался, и надо ли ему это вообще. Потому что потом уже будет поздно. А давать заднюю и расстраивать родителей, которые за тебя заплатили, ждут от тебя великих свершений, а за каждый косяк готовы сожрать живьём, что ты в своём учебном процессе абсолютно нихера не понимаешь, ой как не хочется.

А если человека прёт и он действительно того хочет (как сейчас в моём случае) - он с любым языком на начальном этапе подружится. Главное, чтобы он ему после получения диплома пригодился.

P.P.S. Максимально странным зачётом у меня при обучении в колледже (даже более странным, чем обучение Паскаля) был тот, где нас на предпоследнем курсе заставляли делать анимации в Adobe Flash (который уже на тот момент отжил свою былую славу и почти никем уже не использовался). Где ж теперь этот самый Flash?
HardWareMan:

--- Цитата: Deefrex от 12 Ноябрь 2022, 23:15:41 ---...и вот он мне вообще высказал, что от наличия диплома у человека не шибко много плюсов, а от знания Паскаля плюсов ещё меньше. :biggrin: И что Паскаль - это древность, которая нигде в коммерческой деятельности в современном мире не используется. То же самое я слышал от некоторых программеров-самоучек (один из таких тупо на дому делал сайты) те 3 года, что высматривал себе работу после получения диплома.
--- Конец цитаты ---
Популярность Pascal, конечно, падает, но он не бесполезен. И есть несколько известных продуктов, написанных на нём. AIMP, например. Кроме инструмента для обучения и понимания программирования, ООП и прочих этих вещей он иногда удобнее, потому что код легко сделать самокомментируемым. Я, например, 90% своих утилит под dos/винду пишу на нём, потому что это экономит моё время. А ведь каждый нормальный программист имеет свой "швейцарский нож" из набора собственноручно написанных утилит. Исключение - скриптинг.
Deefrex:

--- Цитата: HardWareMan от 13 Ноябрь 2022, 03:36:33 ---Популярность Pascal, конечно, падает, но он не бесполезен.
--- Конец цитаты ---

Я поднимал вопрос не о том, полезен он или нет. Я, как ни странно, тоже его использую. Я поднимал с ним вопрос о том, ГДЕ ПОТОМ РАБОТАТЬ? Желательно выпускнику, желательно сразу после окончания учебного заведения (пока знания не выветрились), ну может +/- через месяц-два-три.

Добавлено позже:

--- Цитата: HardWareMan от 13 Ноябрь 2022, 03:36:33 ---AIMP, например.
--- Конец цитаты ---

Полезен он был для меня лишь однажды, в период, когда проходило бета-тестирование 3 версии, и одна из беток умела скробблить в last.fm треки короче 30 секунд (разработчики ласта такое ограничение делали на сайте специально для того, чтобы не было накруток). Для всего остального у меня есть foobar2000, который был написан, как мне кажется, вообще на ассемблере (чего не скажешь про вышеупомянутый AIMP).
HardWareMan:

--- Цитата: Deefrex от 13 Ноябрь 2022, 03:47:39 ---Я поднимал с ним вопрос о том, ГДЕ ПОТОМ РАБОТАТЬ? Желательно выпускнику, желательно сразу после окончания учебного заведения (пока знания не выветрились), ну может +/- через месяц-два-три.
--- Конец цитаты ---
А как это соотносится с языком программирования? Вот в 80х-90 уже были и С и Паскаль и даже Ассемблер был ещё в ходу, но алгоритмы в школах учили на алголе. Это вообще гипотетический язык и даже тогда на нём написать что-то полезное было невозможно, в отличии от того же Паскаля сегодня.

--- Цитата: Deefrex от 13 Ноябрь 2022, 03:47:39 ---Полезен он был для меня лишь однажды, в период, когда проходило бета-тестирование 3 версии, и одна из беток умела скробблить в last.fm треки короче 30 секунд (разработчики ласта такое ограничение делали на сайте специально для того, чтобы не было накруток). Для всего остального у меня есть foobar2000, который был написан, как мне кажется, вообще на ассемблере (чего не скажешь про вышеупомянутый AIMP).
--- Конец цитаты ---
Я не говорю про полезность AIMP лично тебе. Я говорю об актуальном продукте, который развивается и имеет своё достаточно большое комьюнити. Для которого я даже когда-то писал визуализационный плагин. Должен уточнить, что AIMP не плеер а только оболочка над плеером, которая и реализовывает весь спектр сервиса. Сам плеер это библиотека BASS и она не за авторством Артёма.
supremacy:

--- Цитата: HardWareMan от 13 Ноябрь 2022, 03:36:33 --- AIMP,
--- Конец цитаты ---
Помню что TheBat был вроде на делфи. Так же знаю один продукт, используемый многими банками сейчас, написанный на delphi. Хочется его на c++ переписать, но это требует времени и денег. Так что приходится иногда вспоминать паскаль. У дочки в школе на информатике паскаль был.  Скачивал тогда free pascal, вот только удобной ide под него не нашёл. По сравнению с ms visual studio всё каким-то убогим ощущается.
Werton:

--- Цитата: HardWareMan от 13 Ноябрь 2022, 04:47:33 ---Должен уточнить, что AIMP не плеер а только оболочка над плеером, которая и реализовывает весь спектр сервиса. Сам плеер это библиотека BASS и она не за авторством Артёма.
--- Конец цитаты ---
Он давненько писал, что перевел aimp на свой аудио движок, хотя bass частично всё равно используется
http://www.aimp.ru/blogs/?p=29

А ещё более известный продукт, написанный на delphi, это великий и ужасный Total Commander, всегда его юзаю :)

Добавлено позже:

--- Цитата: supremacy от 13 Ноябрь 2022, 07:09:41 ---Скачивал тогда free pascal, вот только удобной ide под него не нашёл.
--- Конец цитаты ---
В некоторых вузах преподают pascalABC.Net, вполне себе готовая среда, вроде и удобно, а вроде и немного странно паскаль тянущий за собой .net framework, тогда уж лучше сразу c# учить.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии