- •Київський національний університет імені Тараса Шевченка
- •Гриф надано Міністерством освіти і науки України (лист № 1.4/18-г-1523 від 20.09.07)
- •Основи алгоритмізації
- •1.1. Поняття алгоритму
- •1.2. Класифікація внутрішніх структур алгоритмів
- •1. Ввести а,b.
- •3. Вивести значення s.
- •4. Кінець.
- •6. Закінчити роботу.
- •1. Ввести число n.
- •6. Перехід до п.3.
- •7. Друк к.
- •8. Кінець.
- •1.3. Складність алгоритмів
- •1.4. Складність задач
- •Завдання для самостійної роботи
- •Форма Бекуса – Наура
- •Завдання для самостійної роботи
- •Void main(){
- •3.2. Структура с-програми
- •3.3. Описувачі
- •3.4. Основні операції мови с
- •If(!inword)
- •Void main()
- •Int rozmir;
- •3.5. Оператори мови с
- •3.5.1. Прості оператори
- •3.5.2. Умовний оператор
- •3.5.3. Оператор циклу for
- •3.5.4. Оператори do-while, while
- •3.5.5. Оператор continue
- •3.5.6. Оператор-перемикач switch
- •3.5.7. Оператор break
- •3.5.8. Оператор goto
- •If(error(I,j,k)) goto exit;
- •3.5.9. Оператор return
- •3.6. Директиви препроцесору та вказівки компілятору
- •3.6.1. Директива препроцесору #define
- •1. Макровизначення:
- •3.6.3. Директива #include
- •3.6.4. Директиви умовної компіляції #if, #elif, #else, #endif
- •3.6.5. Директива #line
- •If(!cond)
- •3.7. Описувачі з модифікаторами
- •3.7.1. Моделі пам'яті
- •3.7.2. Модифікатори типу доступу в пам'яті
- •Int huge*near X;
- •3.7.3. Модифікатори const, volatile, cdecl, pascal, interrupt
- •Volatile int t;
- •Void interrupt timer()
- •Void wait(int interval)
- •Завдання для самостійної роботи
- •Принципи типізації даних
- •4.1. Прості типи даних
- •4.2. Похідні типи
- •4.3. Еквівалентність типів
- •4.4. Успадкування атрибутів
- •4.5. Перераховні типи
- •4.6. Логічні типи
- •4.7. Символьні типи
- •4.8. Числові типи
- •4.9. Структурні типи даних
- •4.9.1. Масиви
- •4.9.2. Структури
- •Int year;
- •4.10. Деякі особливості типів даних c
- •4.10.1. Базові типи даних
- •4.10.2. Перетворення типів
- •Int atoi(char s[]) /*char* s*/
- •4.10.3. Засіб typedef
- •Int curs;
- •4.10.4. Покажчики та масиви
- •Void * p;
- •Int array[12];
- •Void f(int a[])
- •Int f(char * s)
- •Наведемо деякі приклади розв'язання задач.
- •Int shift; /*відступ*/
- •Int count[n]; /*кількість монет даного типу (коефіцієнти ai)*/
- •Int coin;
- •Int sum; /*монета, яку міняємо*/
- •Int maxcoin; /*індекс по масиву cost[] монети максимальної вартості, допустимої при даному розміні.*/
- •If(count[I])
- •If(maxcoin)
- •Int* ctranspon (int *a,int n,int m)
- •Void dobutok(int* a, int* b, int** c, int n, int m)
- •Int n,m,I,size;
- •Int main()
- •4.10.5. Структури та об'єднання
- •Розглянемо деякі приклади розв'язання задач.
- •Int hashfunc(key); int eqkey(key, key);
- •Void freeval(val); void setval(val, val);
- •Void freekey(key); void setkey(key, key);
- •Int hashfunc(key key){
- •Val val; /*значення*/
- •Void set(key key, val val){
- •Void printcell(struct cell *ptr){
- •Void main(void)
- •Завдання для самостійної роботи
- •Зображення чисел у комп'ютері
- •Int main(void)
- •5.1. Системи числення
- •5.2. Правила переведення чисел з однієї системи числення в іншу
- •5.3. Правило визначення точності зображення
- •5.4. Двійкова арифметика
- •5.4.1. Додавання двійкових чисел
- •5.4.2. Зображення від'ємних чисел
- •XXXXXXXX 00000001 00000000.
- •5.4.3. Віднімання двійкових чисел
- •5.4.4. Множення двійкових чисел
- •5.4.5. Ділення двійкових чисел
- •5.5. Ознака переповнення розрядної сітки при арифметичних операціях
- •5.6. Зображення цілих чисел
- •5.7. Зображення дійсних чисел
- •5.8. Керування машинним зображенням чисел та особливості виконання арифметичних операцій
- •Завдання для самостійної роботи
- •Реалізація концепції структурного програмування
- •6.1. Оголошення та визначення функцій
- •Int d;} people;
- •6.2. Формальні та фактичні параметри
- •Void swap(int a,int b)
- •Void swap(int a,int*b)
- •6.3. Функції зі змінною кількістю параметрів
- •Void sum(char *msg,...)
- •6.5. Параметри функції main
- •6.6. Лiтернi покажчики та функцiї
- •Void strcpy(char*s,char*t)
- •Void f(void)
- •6.8. Класи пам'яті
- •Розглянемо деякі приклади розв'язання задач.
- •I, power(2,I),power(-3,I));
- •Void main() { choturukyt b; tochka *a; float s; long n,in; srand(time(null));
- •6.9. Введення–виведення с. Файли та потоки
- •6.9.1. Функції введення–виведення верхнього рівня
- •6.9.2. Функції введення–виведення консольного термінала та порту
- •Int main(void)
- •6.9.3. Функції введення–виведення нижнього рівня
- •Int main(void)
- •Int handle;
- •Розглянемо приклади розв'язання задач.
- •Void main(void)
- •Void main(argc,argv)
- •If(c& masks[I])
- •If (цей рядок довший за найдовший з попередніх)
- •Int max; /*максимальна довжина*/
- •Int len; /*довжиною цього рядка*/
- •Int nwords; /*кількість слів у рядку*/
- •If(!*s) /*рядок закінчився*/
- •Int ctr; /*кількість входжень слова*/
- •If(!strcmp(word,w[I].Wrd)){
- •If(alert){
- •Void main() { float X,y,z,t,s; int I,j,flag,n,k; m1: clrscr();
- •InitBase (void){
- •Int key, /*новий ключ*/
- •InitBase();
- •Завдання для самостійної роботи
- •7.1. Елементи концепції обєктно-орієнтованого програмування
- •Int year;
- •Int year;
- •7.3. Опис протоколу класу
- •7.4.1. Коментарі
- •7.4.2. Прототипи функцій
- •Void f();
- •7.4.5. Перевантаження функцій
- •Int Name (int first)
- •Int Name (unsigned first)
- •Int Name (int first,char*second)
- •7.4.6. Значення формальних параметрів за умовчанням
- •7.4.7. Посилання й покажчики
- •Void increment(int& X)
- •Int anotherint;
- •7.4.10. Покажчик на void
- •Void*void_ptr;
- •Void swap(void*&item1,void*&item2)
- •7.4.11. Зв'язування зі збереженням типів
- •7.4.12. Про структури та об'єднання
- •7.5. Функції-члени класу
- •X *this;
- •Int year;
- •7.6. Конструктори та деструктори
- •7.6.1. Поняття про конструктори
- •Int*data;
- •Int size;
- •7.6.3. Конструктор копіювання
- •Int data[large];
- •Inline Large1 Large1::fast(const Large1 & b)
- •7.7. Глобальні та локальні об'єкти
- •Void main(void)
- •7.8. Статична пам'ять і класи
- •Int statpol::I;
- •Vоid draw()
- •Int large;
- •Int bigwant;
- •Void f() {
- •Void g(int a)
- •7.9. Успадкування
- •7.9.1. Синтаксична реалізація успадкування
- •7.9.2. Правила доступу до полів даних
- •Void f(void)
- •Void g(void){}//...}
- •7.9.3. Конструктори та деструктори в похідних класах
- •7.9.4. Використання заміщуючих функцій-членів
- •Void Display (void); //замiщувальна функцiя
- •Void Region::Display(void)
- •Void Display(void);};
- •Void Population::Display(void)
- •7.9.5. Похідні класи й покажчики
- •7.9.6. Ієрархія типів
- •XyValue(int_x,int_y):X(_x),y(_y)
- •XyData(int_x,int_y)
- •7.9.7. Множинне успадкування
- •Void SetLoc(int_x,int_y);};
- •Int data;
- •7.10. Віртуальні функції та класи
- •7.10.1. Віртуальні функції
- •Int value;
- •Virtual int GetValue();
- •Int Value::GetValue(){return value;}
- •7.10.2. Чисті віртуальні функції. Абстрактні класи
- •Virtual void f1(void);
- •Virtual void f2(void);//...}
- •Int index;
- •7.10.3. Віртуальні деструктори
- •7.10.4. Посилання як засіб для реалізації поліморфізму
- •7.10.5. Дещо про механізм віртуальних функцій
- •Virtual int method1(float r);
- •Int data;
- •Void func(void){//тіло}};
- •Virtual public CocaCola {
- •Int size;
- •Void ShowValue(void)
- •Void ShowValues(void);};
- •Void Two::ShowValues(void)
- •7.11.2. Дружні функції
- •Void Show(One &c1,Two &c2)
- •Void Show(One &c1);
- •Void Two::Show(One &c1)
- •7.12. Перевантаження операцій
- •7.12.1. Загальний підхід
- •Void main()
- •7.12.2. Перетворення типів
- •X::operator т();
- •7.12.3. Перевантаження операції індексування масиву
- •Int znach;
- •7.12.4. Перевантаження операції виклику функції
- •Int operator()(void);
- •Int FuncClass::operator()(void)
- •Vidnosh*vec;
- •7.12.5. Перевантаження операції доступу до члена класу
- •7.12.6. Перевантаження операцій інкремента й декремента
- •Int index;
- •Void*operator new(size_t)
- •Void*operator new(size_t);
- •8.1. Функціональні шаблони
- •8.1.1. Визначення й використання шаблонів функцій
- •Void func(t t)
- •Int main(void)
- •8.1.2. Перевантаження шаблонів функції
- •Int main(void)
- •8.1.3. Cпецiалiзованi функцiї шаблона
- •Int main(void){
- •8.2. Шаблони класів
- •8.2.1. Визначення шаблонів класу
- •Void push(t t);
- •Int numitems;
- •8.2.2. Константи й типи як параметри шаблона
- •8.2.3. Використання шаблонних класів
- •Int main(void)
- •8.2.4. Спеціалізація шаблонів класу
- •Void add(t item);
- •Int main(void)
- •IArray.Add(i1);
- •Int main(void)
- •IList.Add(i1);
- •Завдання для самостійної роботи
- •Автоматна технологія програмування
- •If(!stop)printf("не входити");
- •Завдання для самостійної роботи
- •Список літератури
- •Передмова 3
IArray.Add(i1);
char*msg="Hello,world!";
Array<char*>strArray;
strArray.add(msg);
return 0;}
Можна також передбачити повне перевизначення шаблона класу, що служить для роботи з деяким особливим типом. При спеціалізації цілого шаблонного класу треба передбачити визначення:
спеціалізованого шаблонного класу, помістивши його після визначення узагальненого;
для всіх елементів-функцій.
Розглянемо таку задачу. Нехай маємо у файлі array.h описаний вище шаблонний клас Array і визначений деякий тип користувача у файлі string.h. Тоді можемо записати
#include <string.h>
#include "array.h"
class Array<string>
{public:
Array(int size=defSize)
{//…
}
~Array()
{//...
}
void add(string str,int indx=-1);
};
void Array<string>::add(string str,int indx=-1)
{//тіло функції
}
Int main(void)
{int i1=10;
Array<int>iList;
IList.Add(i1);
string str("Добрий ранок!\n");
Array<string>sList;
sList.add(str);
return 0;}
Реалізація шаблонів С++ не дозволяє перевантажити ім'я шаблона класу. Наприклад, не можна визначити одночасно Array<class T> та Array<class T,int size>.
Недоліки шаблонів:
програма міститиме повний код представників шаблона для кожного з породжувальних типів. Це може збільшити розмір виконуваного модуля;
часто реалізація шаблона добре працює з деякими типами, але не оптимальна в інших випадках. Для специфічних типів з метою підвищення ефективності даних бажано використовувати спеціальні шаблони.
Завдання для самостійної роботи
1. Вивчити роботу наведеного нижче шаблона для різних типів даних щодо швидкодії програми:
template<class T>inline const T& min(const T& t1,const T& t2)
{return t1>t2? t2:t1;}
template<class T>inline const T& max(const T& t1,const T& t2)
{return t1>t2? t1:t2;}
2. Написати функціональний шаблон сортування масиву елементів довільного базового типу. Порівняти розмір виконуваного коду шаблона й відповідних функцій.
3. Написати функціональний шаблон сортування масиву елементів довільного типу (включаючи класи користувача).
4. Доповнити та протестувати приклад шаблонного класу Аrray.
5. Описати шаблон деякого класу з опцією Global і відповідний шаблон з опцією External в іншому модулі. Скомпілювати та протестувати програму.
6. Написати програму для ілюстрації дій компілятора при виклику функції. Для цього визначити деяку функцію, функціональний шаблон і розглянути випадки:
а) параметри при виклику функції точно відповідають тим, що вказані при її описі;
б) параметри при виклику точно не відповідають указаним при описі, але існує шаблон, який дозволяє згенерувати функцію з точною відповідністю параметрів;
в) не існує функції чи шаблона з точною відповідністю параметрів, але ми діємо за правилами перетворення типів.
7. Розробити тип даних string для роботи з рядками, визначивши для нього операції додавання й віднімання.
8. Розробити тип даних vector (для роботи з векторами), визначивши для нього операції додавання й віднімання.
9. Розробити тип даних matrix (для роботи з матрицями), визначивши для нього операції додавання й віднімання.
10. Розробити тип даних complex3 (для роботи з числами вигляду a+ib+jc, а,b,c є R, де i,j – уявні одиниці, i*i=-1, j*j=-1,i*j=0), визначивши для нього операції додавання й віднімання.
11. Розробити тип даних masyv (для роботи із масивами), визначивши для нього операції додавання й віднімання та передбачивши контроль виходу індексу за задану границю.
12. Розробити тип даних set (для роботи з множинами), визначивши для нього операції додавання й віднімання.
13. Розробити тип даних spysok (для роботи з динамічними змінними), визначивши для нього операції додавання як дописування в кінець і віднімання – як вилучення зі списку.
14. Розробити тип даних file (для роботи з файлами), визначивши для нього операції додавання й віднімання як конкатенацію й вилучення однакових елементів.
15. Розробити тип даних file (для роботи з файлами), визначивши для нього операції додавання й віднімання як конкатенацію й вилучення однакових елементів.
16. Розробити тип даних integral (для обчислення інтегралів функцій), визначивши для нього операції додавання й віднімання.
17. Розробити тип даних SLAR (для зображення систем лінійних алгебраїчних рівнянь), визначивши для нього операції додавання й віднімання.
18. Розробити тип даних inthuge (для роботи з цілими числами, розмір яких виходить за межі розмірів стандартних типів даних мов програмування ), визначивши для нього операції додавання й віднімання.
19. Розробити тип даних permanent (для обчислення й зображення компонент матриць), визначивши для нього операції додавання й віднімання.
20. Розробити тип даних differencial (для запису лінійних диференціальних рівнянь n-го порядку), визначивши для нього операції додавання й віднімання.
21. Розробити тип даних probability (для зображення випадкових величин із заданими функціями розподілу), визначивши для нього операцію додавання через згортку (функція знаходження інтеграла вважається відомою).
22. Розробити тип даних shape (для зображення опуклих багатокутників у просторі R2), визначивши для нього операції додавання як об'єднання вершин і віднімання як теоретико-множинне віднімання множини вершин.
23. Розробити тип даних sitka (для зображення множини точок, що є вузлами деякої сітки з довжиною сторони у визначеній обмеженій області), визначивши для нього операції додавання й віднімання.
24. Розробити тип даних tablycia (для зображення й виведення числової інформації у вигляді таблиці), визначивши для нього операції додавання й віднімання.
25. Розробити тип даних vkazivnyk (для роботи з покажчиками), визначивши для нього операції віднімання й додавання до цілого числа.
26. Розробити тип даних polar (для роботи з комплексними числами в полярній системі координат), визначивши для нього операції додавання й віднімання.
27. Розробити тип даних polinom (для роботи з багаточленами), визначивши для нього операції додавання й віднімання.
28. Розробити тип даних function (для роботи з функціями, що повертають цілі числа й мають один параметр типу int), визначивши для нього операції додавання, віднімання, побудови графіка тощо.
29. Розробити клас для зображення інформації про студента. Забезпечити можливість отримувати й записувати інформацію про прізвище, ім'я, адресу, групу, успішність тощо.
30. Розробити клас для зображення інформаційної структури гуртожитку, що характеризується вулицею, номером будинку, набором кімнат. Кімната характеризується номером, місткістю, кількістю зайнятих місць, списком студентів, що проживають. Забезпечити можливість отримувати необхідну інформацію про зайнятість і структуру кімнат, студентів, що проживають, і вносити необхідні зміни.
31. Розробити клас, що зображує факультет. Факультет характеризується повною й короткою назвою, інститутом, до якого він належить, і списком навчальних груп. Інститут характеризується назвою та адресою. Група характеризується назвою, кількістю студентів і середнім балом за підсумками останньої сесії. Забезпечити можливість отримувати відповідну інформацію про факультет, успішність студентів тощо та редагувати її.
32. Розробити клас, що зображує викладача. Викладач характеризується ім'ям, прізвищем, кафедрою, списком дисциплін, які він читає. Кафедра належить до факультету й має назву. Дисципліна характеризується назвою, кількістю годин і середнім балом, виставленим викладачем на останній сесії по всіх групах. Забезпечити можливість отримувати відповідну інформацію про викладача й редагувати її.
33. Розробити клас, що зображує методичний посібник. Посібник характеризується автором, назвою, дисципліною й кількістю видач примірників. Видача примірників характеризується датою та ім’ям студента. Автор характеризується ім’ям, прізвищем і назвою кафедри. Забезпечити можливість отримувати відповідну інформацію про посібник і редагувати її.
34. Розробити клас, що зображує книгу в бібліотеці. Книга характеризується списком авторів, назвою й тематикою. Тематика характеризується кодом і назвою теми. Автор характеризується ім'ям, прізвищем, кращою темою й кількістю написаних книг. Забезпечити можливість отримувати відповідну інформацію про книгу й редагувати її.
35. Розробити клас, що зображує студентську групу. Група характеризується факультетом, номером і списком студентів. Студент характеризується ім'ям, прізвищем і середнім балом за останню сесію. Факультет характеризується назвою й фахом. Забезпечити можливість отримувати відповідну інформацію про групу й редагувати її.
36. Розробити клас, що зображує університет. Університет характеризується назвою, вулицею, номером будинку, списком факультетів і ректором. Ректор характеризується ім’ям, прізвищем і вченим ступенем. Факультет характеризується назвою, фахом і кількістю студентів. Забезпечити можливість отримувати відповідну інформацію про університет і редагувати її.
37. Розробити клас, що зображує лекційний курс. Лекційний курс характеризується назвою, викладачем, що його читає, групою і списком проведених пар. Пари характеризується датою й кількістю студентів, які їх відвідали. Група характеризується назвою й кількістю студентів. Забезпечити можливість отримувати відповідну інформацію про лекційний курс і редагувати її.
38. Розробити клас, що зображує навчальний корпус інституту. Навчальний корпус належить до інституту і характеризується назвою та списком аудиторій. Інститут характеризується адресою й назвою. Аудиторія характеризується номером, місткістю і зайнятістю (зайнята/не зайнята). Забезпечити можливість отримувати відповідну інформацію про навчальний корпус і редагувати її.
39. Написати програму моделювання роботи аеродрому (можна використати клас Літак і похідні від нього). Аеродром може обслуговувати одночасно не більше k літаків. Якщо посадки вимагають більше k літаків, то зайві мають чекати дозволу. Якщо паливо закінчується, то літак падає. Аеродром обслуговує кожен літак деякий фіксований час, що залежить від його типу. Процес надходжень літаків вважати пуассонівським з деяким параметром (інтервал між надходженням літаків виражається співвідношенням
,
де – деякий параметр, – випадкова величини, що має рівномірний розподіл на (0,1)). Аеродром має функціонувати заданий час. Процес функціонування відобразити графічно.
40. Написати програму моделювання океану. Океан повинен мати три типи елементів: 1 – Риби; 2 – Хижаки, що поїдають риб і собі подібних; 3 – Перешкоди. Моделювання здійснити поетапно. На кожному етапі моделювання кожен живий об'єкт (риба, хижак):
а) аналізує простір навколо себе;
б) здійснює певні дії, якщо може (хижак поїдає жертву);
в) рухається в можливому напрямку. Стан океану відобразити графічно.
Сам океан можна задати за допомогою статичного двовимірного масиву покажчиків на клас Океан, що є полем класу Океан. Кожен елемент масиву при ініціалізації є адресою елемента одного з трьох похідних від базового класу (Риба, Хижак, Перешкода) або NULL, якщо в певному місці океану нічого немає.
41. Нехай маємо позитивно, негативно заряджені та нейтральні однотипні частинки, які рухаються з певними швидкостями, розміщені:
а) в обмеженій частині площини;
б) у тривимірному просторі.
Кожна заряджена частинка має заряд певної величини. Сила взаємодії зарядів пропорційна відстані між ними (однойменні відштовхуються, різнойменні – притягуються). При наближенні різнойменних частинок на відстань вважатимемо, що вони утворюють дві нейтральні. При наближенні зарядженої та нейтральної частинок на відстань заряджена віддає нейтральній половину заряду. Швидкість руху пропорційна силі, що діє на частинку. Побудувати модель руху частинок і визначити результат через деякий час. Дати графічну інтерпретацію.
42. Побудувати модель повітряної битви літаків:
а) є два однотипних літаки, що не рухаються (зависли в повітрі), які по черзі випадково стріляють один в одного. Битва закінчується, якщо один з літаків переміг (Клас Літак має поля: життя, координати, функції стрільби.);
б) запрограмувати попередній випадок, зробивши літаки рухомими;
в) надати літакам додатковий параметр – область видимості. Якщо один з літаків потрапляє в область видимості іншого, то постріл другого відбувається майже напевно (з невеликою ймовірністю похибки);
г) ввести поля паливо та боєприпаси. Якщо паливо закінчується, то літак стає нерухомим;
д) поширити останній варіант на групу об'єктів;
е) вводити в бій літаки різних типів (типи визначаються максимальними значеннями найпростіших параметрів – кількістю боєприпасів, пального);
є) додати можливість дозаправки й відновлення боєприпасів у повітрі через введення особливих транспортних літаків, які також можуть збиватись;
ж) ввести n типів зброї на літаках і n відповідних систем захисту від кожного типу зброї. Якщо певний тип захисту знищено, то відбувається зменшення змінної життя літака;
з) ввести бази, де пошкоджені літаки можуть ремонтуватись і відновлювати запаси палива й боєприпасів. На базах можуть будуватись літаки з однаковою інтенсивністю (можна зробити цей параметр випадковим, наприклад, з пуассонівським розподілом). Якщо поле життя літака стає меншим від деякої константи, але не нульовим, то літак має повернутися на базу;
і) ввести можливість нападу на ворожі аеродроми та їх знищення.
Координати ворожих баз спочатку невідомі. Аеродроми мають потужну систему захисту.
43. Моделювання організму:
а) ввести клас Клітина як базовий для клітин різних типів. Вважаємо, що є три типи клітин: звичайна; клітина, що генерує антитіла (плазмоклітина); клітина-вірус (що має додаткове поле – потужність чи силу вірусу). Візуально кожна клітина є колом з певним радіусом. Вона має молекулу ДНК (статичне поле), що є скінченною послідовністю двовимірних (тривимірних) векторів-напрямків поділу. У момент поділу клітини породжується нова (екземпляр того самого класу), яка приєднується до базової в напрямку вектора поділу, заданого черговою позицією молекули ДНК. При цьому статичний індекс позиції ДНК збільшується на одиницю. Кожна з утворених клітин сама починає ділитися. Можливість поділу в заданому напрямку зумовлюється візуальним зображенням. Процес формування конструкції продовжується, доки величина статичного індексу позицій ДНК не буде дорівнювати її довжині;
б) у клітину ввести масив покажчиків на клас Клітина, у якому зберігаються адреси сусідніх клітин. У процесі моделювання звичайна клітина стає плазмоклітиною випадково. Плазмоклітини випадково генерують антитіла, які можуть дифундувати (переходити) з клітини в клітину довільно. Довільна клітина в деякий момент часу може мати певну кількість антитіл, що є особливими утвореннями. Клітина повинна мати температуру та "знати" температури сусідів. Якщо температура одного з сусідів збільшується, то її температура також зростає, наприклад за законом ,де – попередня температура клітини, – нова, – температура сусідньої клітини, – загальна кількість клітин організму (або якась константа);
в) описати вірусну клітину як особливий тип. Можна вважати, що довільна клітина чи група клітин у певний момент часу можуть стати вірусними. При виникненні вірусної клітини створюється конфліктна ситуація, під час якої зростає температура сусідніх здорових клітин (закон зростання залежить від потужності вірусу, наприклад , де p – потужність вірусної клітини, s – деяка константа), а потім – усього організму (закон подальшої зміни – див. п. а)). Антитіла рухаються з певною швидкістю (фіксованою для кожного організму) в напрямку збільшення температур. Якщо в якийсь момент часу сумарна потужність антитіл у сусідніх з вірусною клітинах стає більше потужності вірусної клітини, то остання стає здоровою й набуває кількість антитіл, що дорівнює різниці їх вихідної сумарної кількості в клітинах, які боролися з вірусною, і потужності вірусної клітини. Тоді боротьба починається з іншою вірусною клітиною, температури перерозподіляються. Якщо всі сусіди клітини стали здоровими, то її температура зрівнюється з температурою сусідів. Якщо потужність вірусу така, що кількість антитіл сусідньої клітини не може компенсувати її, то вірус заражує відповідну клітину, і вона сама стає вірусом з потужністю, рівною різниці потужності вірусу й кількості антитіл у ній. Якщо заражено більше половини клітин організму, то він гине;
г) ввести залежність потужності вірусів від температури організму.
9