Резидентные программы это в информатике

Содержание

Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident — «завершиться и остаться резидентной») — в операционной системе MS-DOS программа, вернувшая управление оболочке операционной системы (command.com), либо надстройке над операционной системой (Norton Commander и т. п.), но оставшаяся в оперативной памяти персонального компьютера. Резидентная программа активизируется каждый раз при возникновении прерывания, вектор которого эта программа изменила на адрес одной из своих процедур.

При работе с MS-DOS резидентные программы широко использовались для достижения различных целей (например, русификаторы клавиатуры, программы доступа к локальной сети, менеджеры отложенной печати, вирусы).

По способу инициализации и вызова операционной системой резидентные программы необходимо отличать от «настоящих» драйверов MS-DOS, встраиваемых операционной системой в своё ядро во время загрузки.

В эпоху многозадачных ОС резидентными иногда называют программы, загруженные постоянно и работающие в фоновом режиме. Но применение этого термина некорректно по отношению к многозадачным ОС.

Урок информатики Саттыбаева Лаззат Ильясовна

Основные понятия

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

Такие программы тоже обычно запускаются через файл AUTOEXEC.BAT или при необходимости. Они перехватывают прерывания, предназначенные для работы с клавиатурой. Как только пользователь нажимает заранее определенную комбинацию клавиш, резидентная программа активизируется. Поверх имеющегося на экране изображения выводится диалоговое окно резидентной программы.

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

Аналогично работают резидентные модули некоторых систем управления базами данных (СУБД). Прикладная программа посылает запросы к базе данных через прерывание, устанавливаемое при запуске такой СУБД.

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

Например, резидентным программам не разрешается использовать прерывания MS-DOS, когда вздумается. Это связано с тем, что MS-DOS с самого начала проектировалась как однозадачная операционная система, поэтому функции прерываний MS-DOS не обладают свойством реентерабельности (повторной входимости).

Представьте себе такую ситуацию.

Пусть обычная программа вызвала какую-либо функцию прерывания MS-DOS, на выполнение которой требуется относительно много времени (например, запись на диск).

Так как пользователь может активизировать резидентную программу в любой момент, то если не принять специальных мер предосторожности, возможен повторный вызов той же самой функции, обработка которой ещё не завершена. В этом случае мы получим повторный вызов функции MS-DOS, который недопустим из-за того, что функции MS-DOS не реентерабельны.

Информатика 10 класс (Урок№7 — Программное обеспечение (ПО) компьютеров и компьютерных систем.)

Функции BIOS также далеко не все реентерабельны. Резидентная программа может смело вызывать разве лишь прерывание INT 16h (которое предназначено для работы с клавиатурой). Если резидентной программе нужно вывести что-нибудь на экран, то вместо прерывания INT 10h следует выполнить непосредственную запись символов и их атрибутов в видеопамять.

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

У программы есть две возможности остаться резидентной в памяти — использовать прерывание INT 27h или функцию 31h прерывания INT 21h .

Читайте также:
Банана программа для звука

Для использования прерывания INT 27h сегментный регистр CS должен указывать на PSP программы. При этом в регистр DX следует записать смещение последнего байта программы плюс один байт.

Нетрудно заметить, что этот способ больше всего подходит для com-программ, так как с помощью прерывания INT 27h невозможно оставить в памяти резидентной программу длиннее 64 Кбайт.

Другой, более удобный способ заключается в вызове функции 31h прерывания INT 21h . В регистре AL вы можете указать код завершения программы, регистр DX должен содержать длину резидентной части программы в параграфах. Здесь уже нет указанного выше ограничения на размер программы.

Для того чтобы оставить резидентной в памяти программу, размер которой превышает 64 Кбайт, вы можете использовать только последний метод. Но не стоит увлекаться большими резидентными программами, так как занимаемая ими память нужна другим программам.

Структура резидентной программы

Сначала в памяти располагаются данные, затем обработчики прерываний (вектора), и наконец секция инициализации (которая имеет точку входа INIT и именно в эту точку передается управление при запуске программы). Основная задача секции инициализации — установить резидент в памяти (она нужна лишь при установке программы, потом её из памяти удаляют). Эту секцию располагают в старших адресах (так как «обрезать» мы можем только старшие адреса).

Функции секции инициализации заключаются в следующем

Инициализация резидентной программы

Для использования прерывания 27h сегментный регистр CS должен указывать на PSP программы, а в регистре DX должно быть записано смещение последнего байта программы плюс один байт. Нетрудно заметить, что этот способ остаться резидентной больше всего подходит для программ в формате COM. Вы не сможете оставить резидентной программу длиннее 64 килобайт.

Другой, более удобный способ — использовать функцию 31h прерывания INT 21h. В регистре AL вы можете указать код завершения программы, регистр DX в этом случае должен содержать длину резидентной части программы в параграфах. Здесь уже нет ограничения 64 килобайта на длину программы. Использование этой функции — единственная возможность оставить резидентной программу длиннее 64 килобайт.

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

Библиотека функций Quick C содержит специальную функцию для оставления программы резидентной в памяти. Эта функция использует прерывание INT 21h (функция 31h) и имеет имя _dos_keep(). Первый параметр функции — код завершения (то, что записывается в регистр AL), а второй — длина резидентной части программы в параграфах.

Решение проблемы повторного запуска

Нужно определить, была уже запущена TSR или нет. Возможно несколько вариантов определения запуска TSR:

  • Использование статической памяти компьютера. В этом случае по некоторому фиксированному адресу располагается флаг, который устанавливается в момент первого запуска TSR. При следующих запусках этот флаг анализируется (если F=1 то TSR уже установлен, а если F=0 то флаг устанавливается и происходит попытка повторной загрузки TSR). Такую статическую ячейку можно выбрать в области векторов, напримеp пусть неиспользуемый вектоp FF использует этот флаг (в младших адресах). Или можно использовать память ОЗУ дисплея (за пределами 640 Кбайт). В ОЗУ имеются неиспользованные области памяти, которые на экране не отображаются, и эту память можно использовать под флаг. Недостаток этого метода заключается в том, что разные TSR могут использовать один и тот же флаг, в результате может быть заблокированна загрузка новой TSR.
  • Резидентная сигнатура. Сигнатура — это некоторая кодовая последовательность. Идея состоит в том, что в тексте резидентной части прграммы размещается специальная сигнатура (напримеp, имя программы). При повторном запуске TSR сканируется вся память компьютера на предмет поиска такой сигнатуры. Если сигнатура встречается дважды (как минимум), то это свидетельствует о попытке 2-й загрузке . Этот метод используют антивирусные программы. Для повышения надежности и скорости работы метода сканирование памяти осуществляется по блокам. При этом анализироваться будут только блоки PSP и + фиксированное смещение относительно PSP.
  • Метод мультиплексного пpерывания (наиболее часто используется на практике). В рамках DOS существует пpерывание int 2Fh, которое используется для некоторой нестандартной связи между прикладной программой и ОС. Суть нестандартной связи заключаетса в том, что пользователь может написать собственные функции для пpерывания int 2Fh. Напримеp, пусть при загрузке резидента устанавливается новый обработчик вектора 2Fh (старый обработчик включает в себя тело нового). Пусть есть обработчик функции АХ=2АВСh и результатом работы этой функции должно быть AL=0FFh (эти два кода играют роль сигнатуры). Секция инициализации делает следующее:

Достоинство: Широкое использование. Недостаток: Набоp сигнатуры достаточно ограничен (сигнатура может случайно совпасть). Надежность меньше, чем у 2-го метода.

  • Анализ окружения процесса. По имени задачи определить, загружена такая программа в памяти или нет. Недостаток: Если переименуем резидент, то можно загрузить его копию ещё раз.

Взаимодействие новых и старых обработчиков прерываний (ISR)

При установке резидентной программы в память осуществляется перехват векторов. При этом между старыми и новыми обработчиками пpерываний возможны следующие схемы взаимодействия:

  • Исключение старого обработчика (взаимодействия нет). Недостаток: Если старый обработчик реализует какие-то полезные функции, которые нужно оставить, то эти функции нужно будет продублировать в новом. Напримеp, если рассмотреть обработчик пpерывания клавиатуры INT 9, то его функции достаточно сложные:
  • принимает код с клавиатуры;
  • сообщает клавиатуре, что код принят;
  • обрабатывает код (то есть из SCAN кода, делает ASCII код);
  • помещает код в буфеp клавиатуры (очередь);

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

  • Вызов старого обработчика командой CALL.

Уровни сложности TSR и взаимодействие новых ISR друг с другом

В зависимости от взаимодействия новых ISR выделяют различные уровни сложности.

  • Простейшие TSR, их характеристики.
  • ISR не взаимодействуют друг с другом (или всего один ISR).
  • Резидентная функция RF не использует в своей работе функции BIOS или DOS.
  • Время исполнения RF настолько мало, что нет необходимости защищаться от повторной активизации.
  • При работе RF используется стек текущего процесса (RF должна быть простая, чтобы стек часто не использовать; нужно иметь как минимум 3 свободных байта в стеке для того, чтобы реализовать RF). Примером такой TSR может являться щелкающая клавиатура.
  • Резидентная секция программы состоит из нескольких взаимодействующих ISR.
  • RF использует пpерывания BIOS.
  • Используется защита от повторной активизации RF.
  • Используется стек текущего процесса.
Читайте также:
Укажите ложное высказывание команды в программе

Если посмотреть на функции BIOS во время их работы, то можно заметить, что они нереентерабельны, это относиться к функциям работы с диском INT 13 и экраном INT 10. Реентерабельность — это свойство, которое позволяет программе или какому-то её фрагменту пpерываться и выполняться с начала (вновь). То есть программа может пpерывать сама себя.

Т.о. функции BIOS нереентерабильны . Классически нужно будет написать новый обработчик INT 13. Пусть резидентная функция вызывается при нажатии какой-либо клавиши, то нужно использовать обработчик пpерываний клавиатуры INT 9, который должен проверить флаг: идет работа с диском или нет. Если флаг равен нулю, то можно вызывать нашу программу RF (которая работает с INT 13). Защита делается только от пpерывания INT 13, так как остальные пpерывания используют функции DOS.

  • TSR 3-го уровня сложности.

Это такие программы, в которых резидентная функция использует функции DOS(напримеp RF использует INT 21). INT 21 нереентерабильна . Можно бы было решить эту проблему так же, как и с INT 13. Но этот метод не работает, так как функции DOS не всегда имеют стандартное завершение (есть некоторые выходы, которые нельзя проконтролировать). К таким функциям относятся 4C и 4B.

В OC есть специальный флаг — флаг активности DOS, которая называется INDOS. Этот флаг равен 0, если функция INT 21 не выполняется, и не равен 0, если она выполняется. Т.о. в программе необходимо анализировать INDOS. Есть стандартная функция для получения флага INDOS , это AH=34h пpерывания int 21. В результате этой функции ES:BX -> inDOS.

Эту функцию 34h надо выполнить в секции инициализации . Должны зафиксировать адрес этого флага INDOS в статической ячейке памяти и затем использовать её в обработчиках пpерываний.

  • TSR 4-го уровня сложности. Некоторые функции пpерывания INT 21 выполняются очень долго (напримеp ввод с клавиатуры с ожиданием) . Если происходит запрос на вызов резидентной функции или RF в этот момент времени, то реально вызова RF не произойдет до тех поp, пока не завершится INT 21 (пока не нажмется какая-то клавиша + Enter). Все функции DOS разделены на 2 класса:
  • 00..0Ch — это клавиатура, экран;
  • 0Dh.. — это работа с файлами (выполняется достаточно быстро);

Когда выполняется 1-я группа, то можно выполнять функции другой группы, но не первой, и наоборот. Для решения проблемы запуска резидентной функции в момент выполнения функций 1-й группы используется специальное пpерывание INT 28. Пользователь может перехватить вектоp INT 28 и выполнить соответствующие действия (из 2-й группы).

Напримеp, пусть наша резидентная функция использует только 2-ю группу функций. Если DOS активна, то TSR вызывает только INT 28, а если не активна, то вызывает пpерывания только от таймера. Вывод на экран можно осуществлять непосредственно в ОЗУ дисплея (минуя DOS и BIOS). Для работы с клавиатурой используют функции BIOS. Для работы с экраном и клавиатурой используются функции 2-й группы, но экран и клавиатура рассматриваются как устройство CON и работа с ним ведется как с файлом.

  • Эррера, Армандо
  • Славяновский стакан
  • Малашкевич, Олег Александрович
  • Nannarrup hoffmani
  • Pentax Electro Spotmatic

Источник: stilin.ru

Резидентная программа

Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident — «завершиться и остаться резидентной») — в операционной системе MS-DOS программа, вернувшая управление оболочке операционной системы (command.com), либо надстройке над операционной системой (Norton Commander и т. п.), но оставшаяся в оперативной памяти персонального компьютера. Резидентная программа активизируется каждый раз при возникновении прерывания, вектор которого эта программа изменила на адрес одной из своих процедур.

При работе с MS-DOS резидентные программы широко использовались для достижения различных целей (например, русификаторы клавиатуры, программы доступа к локальной сети, менеджеры отложенной печати, вирусы).

По способу инициализации и вызова операционной системой резидентные программы необходимо отличать от «настоящих» драйверов MS-DOS, встраиваемых операционной системой в своё ядро во время загрузки.

В эпоху многозадачных ОС резидентными иногда называют программы, загруженные постоянно и работающие в фоновом режиме. Но применение этого термина некорректно по отношению к многозадачным ОС.

См. также

  • Демон (программа)
  • Службы Windowsde:TSR-Programm

Источник: www.sbup.com

Презентация на тему Структура резидентной программы. Структура EXE-, COM- файлов. Процедурные типы

Прерывание — это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре, которая входит в состав ДОС и называется процедурой обработки прерывания. Каждое

  • Главная
  • Разное
  • Структура резидентной программы. Структура EXE-, COM- файлов. Процедурные типы

Слайды и текст этой презентации

Слайд 1Структура резидентной программы. Структура EXE-, COM- файлов. Процедурные типы. Передача

функций в качестве параметров
Лекция 28

Структура резидентной программы. Структура EXE-, COM- файлов. Процедурные типы. Передача функций в качестве параметровЛекция 28

Слайд 2Прерывание — это особое состояние вычислительного процесса. В момент прерывания нарушается

нормальный порядок выполнения команд программы и управление передается специальной процедуре,

которая входит в состав ДОС и называется процедурой обработки прерывания.
Каждое прерывание характеризуется в рамках ДОС порядковым номером и связано со своей процедурой обработки.
Для связи с любыми процедурами прерываний используются векторы прерываний — четырехбайтные абсолютные адреса точек входа в эти процедуры. Векторы прерываний располагаются в младших адресах оперативной памяти, начиная с нулевого адреса: прерывание номер 0 — по адресу 0, номер 1 — по адресу 1*4 = 4, номер N — по адресу N * 4.

Прерывание — это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление

Слайд 3С помощью следующих двух процедур программист может прочитать содержимое любого

вектора или установить его новое значение.
Процедура GETINTVEC.
Возвращает вектор

прерывания с указанным номером. Обращение:
GETINTVEC ( , )
Здесь — выражение типа BYTE; номер прерывания;
— переменная типа POINTER; адрес точки входа в процедуру обработки прерывания.
Процедура SETINTVEC.
Устанавливает новое значение вектора прерывания. Формат обращения:
SETINTVEC ( , )
Здесь — выражение типа BYTE; номер прерывания;
— выражение типа POINTER; адрес точки входа в процедуру обработки прерывания.

С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение. Процедура

Слайд 4При нормальном завершении программы она выгружается из памяти. Вы можете

прекратить работу программы и оставить ее резидентной в памяти, если

воспользуетесь процедурой KEEP, которая завершает программу и оставляет ее в памяти.
Procedure Keep(ExitCode : Word);
Вся программа остается в памяти, включая сегмент данных, сегмент стека и кучу, так что необходимо задать максимальный размер кучи, с использованием директивы компилятора $M. Параметр ExitCode соответствует параметру, передаваемому в стандартную процедуру Halt.

Читайте также:
Как подобрать себе программу для ведения личного бюджета

При нормальном завершении программы она выгружается из памяти. Вы можете прекратить работу программы и оставить ее резидентной

Слайд 5Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident

— «завершиться и остаться резидентной») — в операционной системе MS-DOS

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

Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident — «завершиться и остаться резидентной») — в

Слайд 6Структура резидентной программы
Резидентные программы состоят из двух частей: резидентной и

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

резидентную часть к активизации.
Вспомогательная часть выполняет следующие действия:
1.) сохраняет векторы «захватываемых» прерываний во внутренних переменных;
2.) устанавливает эти векторы по адресу резидентной части программы;
3.) инициализирует внутренние переменные резидентной части;
4.) завершает работу программы без удаления резидентной части из памяти компьютера.

Структура резидентной программыРезидентные программы состоят из двух частей: резидентной и вспомогательной части. При запуске программы выполняется только

Слайд 7С того момента как резидентная часть программы находится в оперативной

памяти, и на нее указывает вектор «захваченного» прерывания, она может

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

С того момента как резидентная часть программы находится в оперативной памяти, и на нее указывает вектор

Слайд 8Структура EXE-, COM- файлов
Структура COM — файла проста. В файлах

данного типа содержатся только машинный код и данные программы. Размер COM

— файла ограничен 64 кб, т.е. размером одного сегмента памяти.
В основном COM файлы пишут на языке Ассемблера, но это не обязательно. Написать файл можно на любом языке, который можно потом компилировать.

Структура EXE-, COM- файловСтруктура COM - файла проста. В файлах данного типа содержатся только машинный код и

Слайд 9Структура EXE файла
Состоять EXE файлы могут из нескольких сегментов, следовательно

их размер не ограничен 64 кб. По структуре EXE файл

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

Структура EXE файлаСостоять EXE файлы могут из нескольких сегментов, следовательно их размер не ограничен 64 кб. По

Слайд 10Процедурные типы
Основное назначение процедурных типов — дать программисту гибкие средства

передачи функций и процедур в качестве фактических параметров обращения к

другим процедурам и функциям.
Для объявления процедурного типа используется заголовок процедуры (функции), в котором опускается ее имя, например:
type
Proc1 = procedure(a, b, с: Real; var d: Real);
Ргос2 = procedure;
Func1 = function: string;
Func2 = function(var s: string): Real;

Процедурные типыОсновное назначение процедурных типов - дать программисту гибкие средства передачи функций и процедур в качестве фактических

Слайд 11После объявления процедурного, или функционального, типа его можно использовать для

описания формальных параметров – имен процедур и функций. Кроме того,

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

После объявления процедурного, или функционального, типа его можно использовать для описания формальных параметров – имен процедур и

Слайд 12Как и при любом другом присваивании, значения переменной в левой

и в правой части должны быть совместимы по присваиванию.
Процедурные

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

Как и при любом другом присваивании, значения переменной в левой и в правой части должны быть совместимы

Слайд 13Кроме того, для обеспечения совместимости по присваиванию процедура или функция,

если ее нужно присвоить процедурной переменной, должна удовлетворять следующим требованиям:
1) это

не должна быть стандартная процедура или функция;
2) такая процедура или функция не может быть вложенной;
3) она не должна быть процедурой прерывания (interrupt).

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

Кроме того, для обеспечения совместимости по присваиванию процедура или функция, если ее нужно присвоить процедурной переменной, должна

Слайд 14Когда процедурной переменной присваивается значение процедуры, то на физическом уровне

происходит следующее: адрес процедуры сохраняется в переменной.
Фактически процедурная переменная

весьма напоминает переменную-указатель, только вместо ссылки на данные она указывает на процедуру или функцию.
Как и указатель, процедурная переменная занимает 4 байта (два слова), в которых содержится адрес памяти.

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

Слайд 15Параметры процедурного типа
Поскольку процедурные типы допускается использовать в любом контексте,

то можно описывать процедуры или функции, которые воспринимают процедуры и

функции в качестве параметров.
Параметры процедурного типа особенно полезны в том случае, когда над множеством процедур или функций нужно выполнить какие-то общие действия.
Если процедура или функция должны передаваться в качестве параметра, они должны удовлетворять тем же правилам совместимости типа, что и при присваивании. Такие процедуры или функции должны компилироваться с директивой far, они не могут быть встроенными функциями, не могут быть вложенными и не могут описываться с атрибутом interrupt.

Параметры процедурного типаПоскольку процедурные типы допускается использовать в любом контексте, то можно описывать процедуры или функции, которые

Слайд 16Рассмотрим пример.
Пусть необходимо вывести таблицы значений трех функций: sin(x), sin(x)*cos(х)

и sin(x)/x. Напишем процедуру вывода таблицы значений функции, использующую функцию

в качестве параметра.
type
func=function(x: real): real;

function f1(х:real): real;
begin
f1:=sin(x);
end;
function f2(х:real): real;
begin
f2:=sin(x)*cos(x);
end;

Рассмотрим пример.Пусть необходимо вывести таблицы значений трех функций: sin(x), sin(x)*cos(х) и sin(x)/x. Напишем процедуру вывода таблицы значений

<

h2>Слайд 17function f3(x:real): real;
begin
f3:=sin(x)/x;
end;

вызов функций>
шагом h>
procedure fun_table(f: func; a,b,h: real);
var x:real;
begin
x : =a ;
while x

Слайд 18writeln;
end;
begin

f2 и f3 на разных отрезках>
fun_table(f1, 0, 3.14, 0.5) ;
fun_table(f2,

0, 1.57, 0.2);
fun_table(f3, -5, 5, 2) ;
readln;
end.

Источник: theslide.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru