Автор Тема: Вспоминаем Turbo Pascal и решаем задачи на нём  (Прочитано 49112 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #60 : 22 Ноябрь 2009, 22:39:16 »
gepar, да что там сложного-то? Вот разве что один тонкий момент:
Цитата
for j:=1 to 4 do
    begin
      r:=m[j];
      m[j]:=m[11-j];
      m[11-j]:=r;
    end;
Ну так тут все понятно должно быть: r - вещественная переменная, которая используется в качестве "буфера обмена" значениями элементов массива m: m[j] m[11-j]: в переменную r заносится значение m[j] (для сохранности), затем присваиваем m[j]-ому m[11-j]-ое (перезаписываем m[j]), после чего присваиваем m[11-j]-ому элементу массива значение переменной r, в которой (как мы помним) сохранено изначальное значение m[j]-го (до перезаписи его значением m[11-j]-го). Таким образом значения m[j]-го и m[11-j]-го элементов массива поменялись местами (благодаря вспомогательной переменной r). ((Запомни этот прием, он тебе еще пригодится в будущем, когда будешь решать задачи по сортировке массивов.))

Ну, а почему тут 11 вместо 10, думаю, и сам легко догадаешься. Так что тут никакого тонкого момента мне не кажется.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #61 : 22 Ноябрь 2009, 23:03:11 »
topos84, спасибо за то что расписал всё , сегодня уже что-то на сон клонит и не думается после всех решённых упражнений , завтра ещё разок пересмотрю твоё решение дабы дальше на таком не попадаться .

Оффлайн AnXIouS

  • Пользователь
  • Сообщений: 323
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #62 : 23 Ноябрь 2009, 00:29:27 »
Цитата: topos84
gepar, да что там сложного-то? Вот разве что один тонкий момент:
Можно еще сложнее (вспомнился один жесткий препод):
for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #63 : 23 Ноябрь 2009, 00:39:00 »
Цитата: AnXIouS
for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;
Прямо-таки упражнение для йогов, какое-то!  :lol:

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #64 : 23 Ноябрь 2009, 06:08:48 »
Можно еще сложнее (вспомнился один жесткий препод):
for j:=1 to 4 do
    begin
      m[j] := m[j] + m[11-j];
      m[11-j] :=m[j] - m[11-j];
      m[j] := m[j] - m[11-j];
    end;
Математическая олимпиада! Обменять значения двух переменных, не прибегая к третей. Помню, помню, школа, класс 8й кажется...

Оффлайн Aku

  • Пользователь
  • Сообщений: 1471
  • Пол: Мужской
  • ушёл
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #65 : 23 Ноябрь 2009, 16:22:41 »
gepar, откуда задачи берёшь? Поделись ссылочкой, хочу вернуть прежнюю форму (благо 4 пары НифигаНеДелайИграйВДоту в неделю (a.k.a. Информатика/Програмирование/Обїектно ориентированое и.т.д.) позволяют вполне )

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #66 : 23 Ноябрь 2009, 21:33:05 »
Все упражнения из учебника В.В Зеленского (веб версия в виде книги) , нужно залить ?

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #67 : 24 Ноябрь 2009, 01:27:46 »
gepar, еще задачки будут?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #68 : 24 Ноябрь 2009, 22:00:31 »
topos84, понравилось ? :) Они то будут ,я же программированию на паскале ещё толком не научился, а вопросы то всегда при обучении возникают .Они просто перестали возникать потому что завтра у меня контрольная по высшей математике .

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #69 : 24 Ноябрь 2009, 22:44:31 »
Цитата: gepar
topos84, понравилось ?
Ога. Давно не решал такие (лет восемь уже дедушку Паскаля Борландовича не мучал). Приятно было вспомнить. :)

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #70 : 25 Ноябрь 2009, 22:36:06 »
Вообщем возникла небольшая проблемка .
Задание : Есть квадратная матрица А порядка n, векторы х и у являются n элементами. Получить вектор А(х+у).
С подсказкой другана получилось вот такое решение :
Теперь вопрос почему x и y нужно генерить рендомно да и правильное ли это решение ?

Оффлайн brill

  • Пользователь
  • Сообщений: 2196
  • Пол: Мужской
  • \/\/\/\/\/\/
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #71 : 25 Ноябрь 2009, 22:38:07 »
gepar, я конечно извиняюсь. Но для меня метки ассоциируются с плохо разведенной платой. Когда после разводки начинают лепить поверх провода :blush:

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #72 : 25 Ноябрь 2009, 23:05:39 »
brill,ты о чём ?Я же метки не использовал в программе  o_0

Оффлайн brill

  • Пользователь
  • Сообщений: 2196
  • Пол: Мужской
  • \/\/\/\/\/\/
    • Youtube
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #73 : 25 Ноябрь 2009, 23:16:28 »
gepar, о твоем первом посту. Где ты хочешь научиться использовать метки :)
Ты не обращай внимания, я просто сказал какие у меня ассоциации с метками...

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #74 : 25 Ноябрь 2009, 23:50:09 »
Цитата: gepar
Есть квадратная матрица А порядка n, векторы х и у являются n элементами. Получить вектор А(х+у).
А на русский язык это как можно перевести? Серьезно. x и y - векторы с n координатами (т.е. кортежи из n элементов) или, в матричной терминологии, вектор-столбцы или вектор-строки. Вопрос: какой смысл ты вкладываешь в обозначение A(x+y)? Если бы это была линейная алгебра, а не программирование, то выражение A(x+y) могло бы означать вектор, к которому применили линейный оператор с матрицей А. Я верно все понял? Матрица А - матрица линейного оператора?

Добавлено позже:
Короче не парься, А есть матрица линейного оператора, потому что больше ничем быть не может.
Значит так. Применение линейного оператора к вектору x с n координатами есть умножение квадратной матрицы этого линейного оператора А на вектор-столбец x справа (или же на вектор-строку x слева, что даст тот же результат - вектор А(x)). Так что тебе нужно написать прогу, которая будет умножать квадратную матрицу порядка n (т.е. матрицу nxn) справа на вектор-столбец (т.е. на матрицу nx1). Формулу умножения матриц знаешь?

Добавлено позже:
Цитата: gepar
Теперь вопрос почему x и y нужно генерить рендомно да и правильное ли это решение ?
Потому что ему так захотелось (в условии задачи, как ты его написал, говорится "Есть квадратная матрица А порядка n", при этом не говорится, дана ли она нам (т.е. знаем ли мы ее элементы) или не дана; друган твой решил, что она не дана, поэтому он ее сгенерировал рендомный образом).

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #75 : 25 Ноябрь 2009, 23:56:53 »
brill, а , ты об этом, да я ещё после совета aUruM'а от них отказался   , ты просто резко вспомнил их :)
topos84, проблема в том что это всё условие , я тоже если честно , его мало понял  поэтому и спросил у другана а как дальше поступить после генерации матрицы ну и  в итоге имеем что имеем .

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #76 : 26 Ноябрь 2009, 00:06:00 »
gepar, короче вариант с генерацией матрицы малоправдоподобен. Скорее всего матрица А либо задана изначально, либо вводится с клавиатуры. Мне больше нравится второй вариант, т.к. и вектора x и y тоже в явном виде не даны, значит и их надо вводить с клавиатуры. Если так, то сначала пишешь процедуру ввода матрицы с клавиатуры, затем процедуру сложения векторов, затем процедуру умножения матрицы справа на вектор-столбец и, наконец, процедуру вывода ответа на экран (тут слово "процедура" не следует понимать буквально, т.е. если тебе не хочется отдельно писать процедуры/функции, то не пиши их, а сразу пиши все в теле программы, но так как процедуры и функции тебе все равно понадобятся для других задач, то лучше пиши сразу с ними, ничего трудного в них нет).

P.S. В аське никогда не бываешь?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #77 : 26 Ноябрь 2009, 00:27:19 »
topos84, в аське я почти всегда онлайн , сегодня проблемы с провайдером были (первый раз увидел пинг 11 секунд , надо было заскриншотить и в тему юмор закинуть , ну да я сразу как-то об этом не подумал  :) )  .По поводу твоего варианта : после того как я пишу процедуру ввода матрици (у меня там рендом,  впринципе всё равно помоему , но могу и исправить) то дальше как мне писать процедуру сложения векторов , когда я незнаю какие сами вектора ? :(

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #78 : 27 Ноябрь 2009, 16:52:47 »
Наконецто было время подумать более детально над этим  :
Цитата: topos84
for j:=1 to 4 do
    begin
      r:=m[j];
      m[j]:=m[11-j];
      m[11-j]:=r;
    end;
И я всё же пришёл к выводу что там ведь всё же 5ка , а не 4ка так как 11 - 4 = 7 и в итоге 6ой и 5ый элементы не обмениваются значениями .

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #79 : 27 Ноябрь 2009, 20:53:15 »
gepar, ай, черт! Напутал! Конечно, 10 чисел - четное количество, поэтому неподвижного элемента не будет (я почему-то думал, что 5-ое останется на месте, потому что она есть середина, от которой и будет отражаться последовательность).

Тогда да, не до 4-х, а до 5 пробегает значение j.

Оффлайн Doctor Venkman

  • Emu-Land Team
  • Сообщений: 6490
  • Пол: Мужской
  • Я киберпанк!
    • Twitter
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #80 : 27 Ноябрь 2009, 21:43:31 »
Давайте тему переименуем в "помогите сделать уроки"  :lol:

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #81 : 27 Ноябрь 2009, 22:19:39 »
Цитата: Doctor Venkman
Давайте тему переименуем в "помогите сделать уроки"
Нет , эти задания из интернет учебника , можешь даже проверить , автора и названия я вроде где-то писал немного раньше в теме , домашние же задания обычно сдаются преподавателю для оценки так что уроками это назвать сложно .

Добавлено позже:
topos84, да я сегодня слегка похожее задание начал решать и после того как решил уже только понял что в прошлом была одна ошибочка :)

Добавлено позже:
Застрял на сортировке массивов .
Задание Организуйте массив содержащий 20 целых чисел .Отсортируйте отдельно элементы с чётным индексом по возрастанию и элементы с нечётным индексом по убыванию .
Вообщем то что у меня получилось ( некоторые строки сдвинуты так как я то пробовал в begin и end их заключать то проводил другие операции , но в итоге всё равно вижу что что-то не так по тому что программа не запускается .
P.S Стоит отметить что подпрограммы я ещё не изучал и в учебнике они идут дальше так что по идеи это упражнение нужно сделать без их использования .
P.P.S Буду благодарен если кто-то поможет отсортировать хотя бы чётные или нечётные элементы , а дальше я уже сам  буду с паскалем воевать  :)
« Последнее редактирование: 29 Ноябрь 2009, 23:14:36 от gepar »

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #82 : 01 Декабрь 2009, 00:20:17 »
Неужели никто не может осилить эту задачку ?Ато я второй день уже мучаюсь  и никак не получаеться задать довйное условие типа if i mod 2 = 0 and m<m[i+2] then  ... :(

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #83 : 01 Декабрь 2009, 00:48:56 »
Цитата: gepar
if i mod 2 = 0 and m[ i ]<m[i+2] do       //По сути именно с этой строкой и возникает проблема , толи я что-то задаю всё время
          Begin                                             //неправильно толи х.з .
               buf:=m[ i ];
               m:=m[i+2];
               m[i+2]:=buf;
               ind:=false;
Ты поставил перед собой условие сэкономить на символах кода? К чему это перескакивание через один индекс? Не проще было бы разбить массив на два отдельных и каждый из них отсортировать?


Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #84 : 01 Декабрь 2009, 00:56:15 »
Цитата: topos84
Ты поставил перед собой условие сэкономить на символах кода? К чему это перескакивание через один индекс? Не проще было бы разбить массив на два отдельных и каждый из них отсортировать?
Если честно возникала такая идея в самом начале  , но я её отсёк на корне почему то решив что это будет неправильно .Спасибо за подсказку , сейчас попробую разделить на два массива .


Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #85 : 01 Декабрь 2009, 01:22:14 »
Цитата: gepar
Но ведь это  относиться больше к матемматике чем к программированию , или в програмировании стоит также поступать в задачах ?
Ну зачем изобретать двухместный двухрамный двухколесный (по одному колесу на раму) велосипед, а потом учиться держать на нем равновесие, когда можно взять два обычных велосипеда?
Это я к тому, что пока ты в совершенстве не овладел условными операторами, тебе незачем полунаугад составлять сложные. Сначала попробуй свести к простым, а уж потом, если не выйдет, пробуй сложные. ;)

Оффлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #86 : 01 Декабрь 2009, 06:33:21 »
Боян, но все же (взорвите себе моцк! компилить в TP7.x):
{ New Borlont Poskal 95 example program.
  This program lets you use new Borlont Poskal 95, which was built-in in the
  Borland Pascal 7.0. (I guess even developers didn't know about it.)
  It can be switched on by using double comments the [see below] way }
program external(private,public); { you can specify type of your program.
This is done in Borland Pascal 7.0, but when using Borlont Poskal 95, it
receives new meaning }

{ now, enable Borlont Poskal 95 syntax }
const forward = ^{; (* this string enables Borlont Poskal 95 }
{ now all the syntax of the new Poskal 95 can be used. Look through these
examples to find new features }
      private =  { Assign Private Action }
      BEGIN
        in case of export, do not object to destructor and goto library
      END;
      public =   { Assign Public Action }
      BEGIN
        goto do program and begin with absolute packed unit in assembler
      END;

type program = unit; { you can give any name to your identifiers }
     program = library; { you can redefine any type as many times }
     program = program; {                           as you want }
     type = var; { you can define type "type" }
     type = const;

var program : program; { you can redefine variables too }
    program : program with library; { you can use any syntax you want }
    program : program with unit;
    var : program; { you can even define variable "var" }
    var : const;
    var : type;

const program : program = program or unit and library;
      program : program = unit with library in program;
      const : const = type shl string in unit shr and;

{ new free object definition }
type object = object (do not object to object)
       constructor begin; external in library program;
       destructor end; assembler with program;
       procedure function; interrupt with assembler;
       function procedure:constructor; packed assembler unit in program;
     and end;

{ Now execute program with predefined constants (what does it mean?) }
do PROGRAM external ( const private, const public );
{ new function/procedure definition - you don't have any restriction to
function/procedure definition now! }
Function Function (Function:Function):Function; Function and Not Procedure;
 FUNCTION BEGIN
   Function:=Program(Unit Near.External(Far));
 FUNCTION END
Procedure Function (far,near : object) : function or procedure;
 begin
   Function(or procedure):=far far far far in program;
 and; { even if you mixed "end" with "and", compiler will understand it }
{ new "if" statement - no any restriction to the syntax }
IF procedure or function far far in program THEN
while repeat do repeat while;
{ You can construct any operator via constructors and destructors
(again, no restriction to the syntax) }
Constructor And (in library) : And:=library.and;
Destructor Constructor (Procedure : Function) : Program; Var;
{ New Great Assembler! Allows to write everything in words }
asm
  1. Write Message "Formatting disk C" on the screen
  2. Format Disk C (and also ignore all the Windows tries to stop it)
  3. Physically destroy hard drive
  4. Connect to the Internet
  5. Cheat Pentagon
  6. Download secret plans to the disk A:
  7. Disconnect and destroy computer (along with everything in 10 000 km^2
     around)
  8. Finish
end;
{ and at last, very free syntax. Just write everthing you want and
compiler will understand what you meant }
array begin:case[const] of constructor ...
destructor div do downto else end
exports file for function goto
if implementation in inherited inline then interface label library mod nil
not object or packed procedure program record repeat
set shl string to type shr
unit until uses var
while with xor
{ The only bad thing about Borlont Poskal 95 extension is the next:
Your program will NEVER run (although will ALWAYS compile) ;) guess why? :) }

(* And now, switch back to the Borland Pascal 7.0 with uncomment :*)

{ next lines are written in Borland Pascal 7.0. }
type far = string;

function near(far:far):far;far;
begin
  external.near:=external.far(far);
end;
{ you can also switch to the Poskal 95 extension with next line: }
const assembler = ^'; { '
begin
uses program external in unit forward xor string with far far in near
end. (* it is not end of program *)
(* another feature: number of begin's and end's doesn't have to match *)
procedure constructor and destructor(function:function and procedure);
begin
  if constructor then destructor else function in constructor;
    end:
    end;
    end,
    end.
end.
begin. begin. begin, begin begin(begin(end)).
asm
  (c) Pavel Anokhin 1999
  Net Mail: 2:5027/16.20
  E-Mail: mna@valley.ru
end and begin;
{ ok, I think that's enough, switch back to BP7 with next character:}
{ we're back in BP. Enjoy :)  Pascal rulezzzz forever!!! }

begin
  near(forward);
end.

PS Код:
type far = string;

function near(far:far):far;far;
begin
  external.near:=external.far(far);
end;
работает в реале. Проверял лично. ;)

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #87 : 01 Декабрь 2009, 14:43:35 »
{ New Borlont Poskal 95 example program.
  This program lets you use new Borlont Poskal 95, which was built-in in the
  Borland Pascal 7.0. (I guess even developers didn't know about it.)
  It can be switched on by using double comments the [see below] way }
program external(private,public); { you can specify type of your program.
This is done in Borland Pascal 7.0, but when using Borlont Poskal 95, it
receives new meaning }

{ now, enable Borlont Poskal 95 syntax }
const forward = ^{; (* this string enables Borlont Poskal 95 }
{ now all the syntax of the new Poskal 95 can be used. Look through these
examples to find new features }
      private =  { Assign Private Action }
      BEGIN
        in case of export, do not object to destructor and goto library
      END;
      public =   { Assign Public Action }
      BEGIN
        goto do program and begin with absolute packed unit in assembler
      END;

type program = unit; { you can give any name to your identifiers }
     program = library; { you can redefine any type as many times }
     program = program; {                           as you want }
     type = var; { you can define type "type" }
     type = const;

var program : program; { you can redefine variables too }
    program : program with library; { you can use any syntax you want }
    program : program with unit;
    var : program; { you can even define variable "var" }
    var : const;
    var : type;

const program : program = program or unit and library;
      program : program = unit with library in program;
      const : const = type shl string in unit shr and;

{ new free object definition }
type object = object (do not object to object)
       constructor begin; external in library program;
       destructor end; assembler with program;
       procedure function; interrupt with assembler;
       function procedure:constructor; packed assembler unit in program;
     and end;

{ Now execute program with predefined constants (what does it mean?) }
do PROGRAM external ( const private, const public );
{ new function/procedure definition - you don't have any restriction to
function/procedure definition now! }
Function Function (Function:Function):Function; Function and Not Procedure;
 FUNCTION BEGIN
   Function:=Program(Unit Near.External(Far));
 FUNCTION END
Procedure Function (far,near : object) : function or procedure;
 begin
   Function(or procedure):=far far far far in program;
 and; { even if you mixed "end" with "and", compiler will understand it }
{ new "if" statement - no any restriction to the syntax }
IF procedure or function far far in program THEN
while repeat do repeat while;
{ You can construct any operator via constructors and destructors
(again, no restriction to the syntax) }
Constructor And (in library) : And:=library.and;
Destructor Constructor (Procedure : Function) : Program; Var;
{ New Great Assembler! Allows to write everything in words }
asm
  1. Write Message "Formatting disk C" on the screen
  2. Format Disk C (and also ignore all the Windows tries to stop it)
  3. Physically destroy hard drive
  4. Connect to the Internet
  5. Cheat Pentagon
  6. Download secret plans to the disk A:
  7. Disconnect and destroy computer (along with everything in 10 000 km^2
     around)
  8. Finish
end;
{ and at last, very free syntax. Just write everthing you want and
compiler will understand what you meant }
array begin:case[const] of constructor ...
destructor div do downto else end
exports file for function goto
if implementation in inherited inline then interface label library mod nil
not object or packed procedure program record repeat
set shl string to type shr
unit until uses var
while with xor
{ The only bad thing about Borlont Poskal 95 extension is the next:
Your program will NEVER run (although will ALWAYS compile) ;) guess why? :) }

(* And now, switch back to the Borland Pascal 7.0 with uncomment :*)

{ next lines are written in Borland Pascal 7.0. }
type far = string;

function near(far:far):far;far;
begin
  external.near:=external.far(far);
end;
{ you can also switch to the Poskal 95 extension with next line: }
const assembler = ^'; { '
begin
uses program external in unit forward xor string with far far in near
end. (* it is not end of program *)
(* another feature: number of begin's and end's doesn't have to match *)
procedure constructor and destructor(function:function and procedure);
begin
  if constructor then destructor else function in constructor;
    end:
    end;
    end,
    end.
end.
begin. begin. begin, begin begin(begin(end)).
asm
  (c) Pavel Anokhin 1999
  Net Mail: 2:5027/16.20
  E-Mail: mna@valley.ru
end and begin;
{ ok, I think that's enough, switch back to BP7 with next character:}
{ we're back in BP. Enjoy :)  Pascal rulezzzz forever!!! }

begin
  near(forward);
end.
Вот это шизофрения! 0_0

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #88 : 02 Декабрь 2009, 21:26:32 »
Задание : Создайте массив содержащий 10 различных символов.Первую половину массива отсортируйте по возрастанию , а вторую по убыванию.Отсортированный массив выведите на экран .
Мой код
program proga1910;
uses crt;
var
m:array[1..10] of char;
i:integer;
buf:char;
ind:boolean;
Begin
     for i:=1 to 10 do
     Begin
          writeln('Enter m[',i,']');
          read(m[i]);
     end;
     writeln('Array is ');
     writeln;
     for i:=1 to 10 do write(m[i],' ');
     repeat;
     ind:=true;
     for i:=1 to 4 do if m[i]>m[i+1] then
     Begin
          buf:=m[i];
          m[i]:=m[i+1];
          m[i+1]:=m[i];
          ind:=false;
     end;
     until ind;
     repeat;
     ind:=true;
     for i:=6 to 9 do if m[i]<m[i+1]  then
     Begin
          buf:=m[i];
          m[i]:=m[i+1];
          m[i+1]:=buf;
          ind:=false;
     end;
     until ind;
     Writeln;
     writeln('Now array is ');
     writeln;
     for i:=1 to 10 do write(m[i],' ');
end. 
Вопрос : почему не сортируется ?Более того - появляются левые символы  0_0 .Например если при составлении массива был введён один символ # то в ответе их может быть два и более .

Оффлайн topos84

  • Emu-Land Team
  • Сообщений: 2762
  • Пол: Мужской
    • Просмотр профиля
Re: Вспоминаем Turbo Pascal и решаем задачи на нём
« Ответ #89 : 02 Декабрь 2009, 21:56:25 »
Цитата: gepar
repeat;
А разве после repeat'а ставится точка с запятой?

Цитата: gepar
until ind;
А разве тут не должно быть until ind=true? (Я уже не помню синтаксиса оператора repeat... until.)