1

(11 відповідей, залишених у C/C++)

Q-bart написав:

але я самому таке зробити і як бути в реальному житті - мовчок

Чого мовчки ? Код досить зрозуміло прокоментований, а що роблять функції (та ін.) можна пошукати в інтернеті. Я вирізав тільки той код що відповідає за отримання цілочисельного значення.

/**
* Our own data type for string variables.
*/
typedef char *string;
#include <stdarg.h>
#include <string.h>
#include <limits.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>

/**
* Number of strings allocated by get_string.
*/
static size_t allocations = 0;

/**
* Array of strings allocated by get_string.
*/
static string *strings = NULL;

/**
* Prompts user for a line of text from standard input and returns
* it as a string (char *), sans trailing line ending. Supports
* CR (\r), LF (\n), and CRLF (\r\n) as line endings. If user
* inputs only a line ending, returns "", not NULL. Returns NULL
* upon error or no input whatsoever (i.e., just EOF). Stores string
* on heap, but library's destructor frees memory on program's exit.
*/
string get_string(va_list *args, const string format, ...)
{

    // check whether we have room for another string
    if (allocations * sizeof(string) == SIZE_MAX)
    {
        return NULL;
    }

    // growable buffer for characters
    string buffer = NULL;

    // capacity of buffer
    size_t capacity = 0;

    // number of characters actually in buffer
    size_t size = 0;

    // character read or EOF
    int c;

    // prompt user
    if (format != NULL)
    {
        // initialize variadic argument list
        va_list ap;

        /** Student code will pass in printf-like arguments as variadic
        *  parameters. The student-facing get_string macro always sets args to
        *  NULL. In this case, we initialize the list of variadic parameters
        *  the standard way with va_start.
        */
        if (args == NULL)
        {
            va_start(ap, format);
        }
        /** When functions in this library call get_string they will have
        *  already stored their variadic parameters in a `va_list` and so they
        *  just pass that in by pointer.
        */
        else
        {
            // put a copy of argument list in ap so it is not consumed by vprintf
            va_copy(ap, *args);
        }
        // print prompt
        vprintf(format, ap);
        // cleanup argument list
        va_end(ap);
    }

    // iteratively get characters from standard input, checking for CR (Mac OS), LF (Linux), and CRLF (Windows)
    while ((c = fgetc(stdin)) != '\r' && c != '\n' && c != EOF)
    {
        // grow buffer if necessary
        if (size + 1 > capacity)
        {
            // initialize capacity to 16 (as reasonable for most inputs) and double thereafter
            if (capacity == 0)
            {
                capacity = 16;
            }
            else if (capacity <= (SIZE_MAX / 2))
            {
                capacity *= 2;
            }
            else if (capacity < SIZE_MAX)
            {
                capacity = SIZE_MAX;
            }
            else
            {
                free(buffer);
                return NULL;
            }

            // extend buffer's capacity
            string temp = (string)realloc(buffer, capacity);
            if (temp == NULL)
            {
                free(buffer);
                return NULL;
            }
            buffer = temp;
        }

        // append current character to buffer
        buffer[size++] = c;
    }

    // check whether user provided no input
    if (size == 0 && c == EOF)
    {
        return NULL;
    }

    // check whether user provided too much input (leaving no room for trailing NUL)
    if (size == SIZE_MAX)
    {
        free(buffer);
        return NULL;
    }

    // if last character read was CR, try to read LF as well
    if (c == '\r' && (c = fgetc(stdin)) != '\n')
    {
        // return NULL if character can't be pushed back onto standard input
        if (c != EOF && ungetc(c, stdin) == EOF)
        {
            free(buffer);
            return NULL;
        }
    }

    // minimize buffer
    string s = (string)realloc(buffer, size + 1);
    if (s == NULL)
    {
        free(buffer);
        return NULL;
    }

    // terminate string
    s[size] = '\0';

    // resize array so as to append string
    string *tmp = (string*)realloc(strings, sizeof(string) * (allocations + 1));
    if (tmp == NULL)
    {
        free(s);
        return NULL;
    }
    strings = tmp;

    // append string to array
    strings[allocations] = s;
    allocations++;

    // return string
    return s;
}

/***********************************************************************************************************************/

/**
* Prompts user for a line of text from standard input and returns the
* equivalent int; if text does not represent an int in [-2^31, 2^31 - 1)
* or would cause underflow or overflow, user is prompted to retry. If line
* can't be read, returns INT_MAX.
*/
int get_int(const string format, ...)
{
    va_list ap;
    va_start(ap, format);
    // try to get an int from user
    while (true)
    {
        // get line of text, returning INT_MAX on failure
        string line = get_string(&ap, format);
        if (line == NULL)
        {
            va_end(ap);
            return INT_MAX;
        }

        // return an int if only an int (in range) was provided
        if (strlen(line) > 0 && !isspace((unsigned char)line[0]))
        {
            char *tail;
            errno = 0;
            long n = strtol(line, &tail, 10);
            if (errno == 0 && *tail == '\0' && n >= INT_MIN && n < INT_MAX)
            {
                va_end(ap);
                return n;
            }
        }

        // temporarily here for backwards compatibility
        if (format == NULL)
        {
            printf("Retry: ");
        }
    }
}
int GetInt(void)
{
    return get_int(NULL);
}

int main()
{
    int height;

    height = GetInt();

    printf("number(int) = %i, after while", height);

    //pause
    getchar();
    return 0;
}

Я підозрюю що ви можете не знати що це

int get_int(const string format, ...)

таке. Подивіться тут http://www.cplusplus.com/reference/cstdarg/

Код має багато перевірок (та іт.) які зроблені "на всякий випадок", тому потрібно звернути увагу на таке
Рядки 83 - 119 - тут йде збільшення буферу (тобто рядок можна вводити "будь якої довжини")
Рядки 201-202 - перевірки чи це інт
Якщо все пройшло успішно то strtol повертає long int число, якщо ні то в tail записується наступні символи після числа (якого немає), тобто якщо було введено "qjd" то функція "запише" в tail рядок "qjd", перевіривши рядок на пустоту (*tail == '\0') можна зробити висновок, якщо рядок пустий - функція виконана успішно, якщо рядок не пустий - функція "не виконана успішно"

2

(10 відповідей, залишених у PHP)

Я вже зрозумів, тут якраз в підключені справа... завтра напишу докладніше

3

(10 відповідей, залишених у PHP)

В мене є

  • header.php

  • index.php

  • footer.php

  • style.css

Я хочу вивести на екран (як результат) горизонтальну смугу, вміст і знову горизонтальну смугу. В якості смуги я використовую зображення, і за допомогою CSS стилів це все розміщую
CSS

.flex-container {
    display: -webkit-flex;
    display: flex;
    -webkit-justify-content: center;
    justify-content: center;
}

.flex-item {
    margin: 0px;
}

Я не став скидати весь код, там в мене з'єднання з БД, повно HTML елементів і т.д., просто для прикладу написав як в загальному це виглядає
HTML

<div class="flex-container">
  <div class="flex-item" style="background-image:url(<?=$image?>);background-repeat: repeat-y;width:20px;"></div><!-- HEADER.PHP --> 
  <div class="flex-item">Вміст...</div><!-- INDEX.PHP --> 
  <div class="flex-item" style="background-image:url(<?=$image?>);background-repeat: repeat-y;width:20px;"></div><!-- FOOTER.PHP --> 
</div>

$image - це шлях до картинки, статично шлях задати не можливо - шлях завантажується з БД.

Проблеми такі
1) Мені потрібно два рази, для двох файлів, заходити в БД, спочатку header, а потім footer, тому що footer, звичайно, не бачить змінну яка знаходиться у header (змінну $image)
2) Було б набагато ліпше закинути стилі в файл для стилів, а в div просто додати клас, але в CSS не буде виконуватися PHP код, як передати в CSS файл шлях до зображення, який може динамічно змінитися.

Допоможіть вирішити ці проблеми.

Хочу запитати про GPLv2. Я хочу створити тему для wordpress на основі bootstrap, можливо я буду використовувати ще якість безкоштовні засоби, я маю право "вкинути" в свою інтелектуальну власність "чужий" засіб(код, картинку, музику) який створений під вільною ліцензією GPLv2 або іншою ? Звичайно, потім я буду опубліковувати свою тему для wordpress.

Прихований текст
Я читав ліцензію і знаю про "the freedom to share the changes you make", але все таки хотів би уточнити...

5

(4 відповідей, залишених у HTML та CSS)

Я бачу багато цікавих анімацій css, але навіщо навантажувати сторінку, і ускладнювати відображення її, краще анімації вставляти у вигляді gif. Напевно дивне питання: Є які способи конвертувати css в gif ? Як такі задачі вирішувати ?

Прихований текст
Звичайно я гуглив, але всі "онлайн конвертори" працюють неадекватно

Ось наприклад
html

<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

css

div {
  border-radius:50%;
  position:absolute;
  top:50%; left:75%;
}
div:nth-of-type(odd) { background:black; }
div:nth-of-type(even) { background:white; border:2px solid black; }
div:nth-of-type(11) {
  height:10px; width:10px;
  margin-top:-5px; margin-left:-5px;
  -webkit-animation:slide 3s ease-in-out infinite;
  animation:slide 3s ease-in-out infinite;
}
div:nth-of-type(10) {
  height:20px; width:20px;
  margin-top:-12px; margin-left:-12px;
  -webkit-animation:slide 3s -2.7s ease-in-out infinite;
  animation:slide 3s -2.7s ease-in-out infinite;
}
div:nth-of-type(9) {
  height:40px; width:40px;
  margin-top:-20px; margin-left:-20px;
  -webkit-animation:slide 3s -2.4s ease-in-out infinite;
  animation:slide 3s -2.4s ease-in-out infinite;
}
div:nth-of-type(8) {
  height:60px; width:60px;
  margin-top:-32px; margin-left:-32px;
  -webkit-animation:slide 3s -2.1s ease-in-out infinite;
  animation:slide 3s -2.1s ease-in-out infinite;
}
div:nth-of-type(7) {
  height:80px; width:80px;
  margin-top:-40px; margin-left:-40px;
  -webkit-animation:slide 3s -1.8s ease-in-out infinite;
  animation:slide 3s -1.8s ease-in-out infinite;
}
div:nth-of-type(6) {
  height:100px; width:100px;
  margin-top:-52px; margin-left:-52px;
  -webkit-animation:slide 3s -1.5s ease-in-out infinite;
  animation:slide 3s -1.5s ease-in-out infinite;
}
div:nth-of-type(5) {
  height:120px; width:120px;
  margin-top:-60px; margin-left:-60px;
  -webkit-animation:slide 3s -1.2s ease-in-out infinite;
  animation:slide 3s -1.2s ease-in-out infinite;
}
div:nth-of-type(4) {
  height:140px; width:140px;
  margin-top:-72px; margin-left:-72px;
  -webkit-animation:slide 3s -0.9s ease-in-out infinite;
  animation:slide 3s -0.9s ease-in-out infinite;
}
div:nth-of-type(3) {
  height:160px; width:160px;
  margin-top:-80px; margin-left:-80px;
  -webkit-animation:slide 3s -0.6s ease-in-out infinite;
  animation:slide 3s -0.6s ease-in-out infinite;
}
div:nth-of-type(2) {
  height:180px; width:180px;
  margin-top:-92px; margin-left:-92px;
  -webkit-animation:slide 3s -0.3s ease-in-out infinite;
  animation:slide 3s -0.3s ease-in-out infinite;
}
div:nth-of-type(1) {
  height:200px; width:200px;
  margin-top:-100px; margin-left:-100px;
  -webkit-animation:slide 3s ease-in-out infinite;
  animation:slide 3s ease-in-out infinite;
}
@keyframes slide {
  0% { left:75% }
  50% { left:25%; }
  100% { left:75%; }
}
@-webkit-keyframes slide {
  0% { left:75% }
  50% { left:25%; }
  100% { left:75%; }
}

6

(5 відповідей, залишених у Інше)

Прихований текст

221VOLT написав:
Betterthanyou написав:

Якщо ні, підскачіть як розв'язати задачу.

підскочив!

Прихований текст
то не задача а якийсь мозгосекс
імхо  :D

Уууупс... опечатка, виправив

Задача
За допомогою пружини жорсткістю 96 Н/м брусок масою 2,4 кг рівномірно
тягнуть по столу. Яким є видовження пружини, якщо коефіцієнт
тертя між бруском і столом дорівнює 0,2?

Дані:
R = 96 H/м жорсткість
m = 2,4 кг маса
μ = 0,2 коефіцієнт тертя ковзання
х - ? м видовження

Алгоритм розв'язувати задачу
1) Знайти силу тертя ковзання
2) Знаходження відсоткового відношення двох чисел (Н жорсткості і Н сили тертя сковзання)

Fтертя ковз = μ * N
μ - коефіцієнт тертя ковзання
N - сила нормальної реакції опори

Якщо на горизонтальній поверхні на тіло у вертикальному напрямку не діють ніякі сили, крім сили тяжіння та сили нормальної реакції то N = mg, m - маса, g - прискорення вільного падіння
g = 9,8 H/к

Fтертя ковз = 2,4*9,8*0,2 = 4.7 Н

Якщо 96Н потрібно для 100 см, то 4,7Н
4,7Н / 96Н * 100(%) = 4,8 см
потрібно для 4,8 см (?)

Я не впевнений в правильності мого розв'язку, правильно розв'язана задача ? Якщо ні, підкажіть як розв'язати задачу.

8

(21 відповідей, залишених у JavaScript)

FakiNyan написав:

туторіали для розуміння конкретних штук, а не базису

Тоді можливо ви шукаєте книжку про JavaScript паттерни ?

9

(21 відповідей, залишених у JavaScript)

не книжка, але все таки

10

(5 відповідей, залишених у HTML та CSS)

Є якийсь спосіб зберегти веб сторінку в одному файлі, наприклад коли я хочу конвертувати docx в html ? Я читав про формат MHTML там використовується позиційна система числення Base64 для кодування файлів. Я зберіг(конвертував) файл docx в mhtml і відкрив за допомогою notepad, мене здивували "абсолютні шляхи до файлу", наприклад "file:///C:/8F697F45/file5749.files/props0002.xml" чи "file:///C:/8F697F45/file5749.htm". - що це таке ?
Також не зрозуміло як відкрити MHTML в будь-якому браузері за виключенням windows explorer. Наприклад в опері зображення не відображаються (тільки в windows explorer вміст відображається повністю).
Тут напевно слід сказати що конвертував Microsoft Office 2007 можливо в новіших версіях працює конвертований MHTML, якщо так то напишіть.
Та й взагалі не зрозуміло навіщо MHTML якщо браузери підтримують Base64 у звичайному HTML
Ось приклад

<!doctype HTML public "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
   <head>
      <title>Base64</title>
   </head>
   <body>
<img src="data:image/jpeg;base64,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">
</body>
</html>

Є якийсь спосіб конвертувати DOCX в HTML із всіма файлами ? ("веб сторінка" та "веб сторінка з фільтрами" створює директорію із зображеннями і файлами тому такий варіант не підходить)

11

(6 відповідей, залишених у C/C++)

Я зробив переклад теми "Обмін даними між паралельними процесами у Windows", кому цікаво можете подивитися, всі приклади працюють - я перевіряв.
Можливо потім скину проекти в github, просто зараз не вистачає часу.
За сайт вибачайте, розумію що він жахливий, я взагалі не знайомий з Google Blog тому ближчим часом планую зробити що інше.
Сайт
Word document

Я думаю що в когось з форумчан є вже електронна книга, тому хочу почути вашу пораду. Я читаю безкоштовні книги і старі книги з монітора (тому що я, ті книги, не можу читати в паперовій версії, в паперовій версії їх не існує), але в мене втомлюються очі, тому задумався про покупку електронної книги. В електронній книзі мене бентежать малі розміри дисплею, всього 6 дюймів в більшості книг. Якщо говорити про безперервне читання протягом 4 годин, як буде зручніше, читати з електронної книги чи з монітора ? (Якщо бути більш конкретним, то я хочу купити EvroMedia HD Extra Light).

Kasper написав:

...вони автоматом зберігаються в папку коли створено запис (.../2017/05/...), а потрібно щоб вони зберігались в папку  сьогоднышньоъ дати (.../2017/08/...). ...

Тобто старі файли в папці ".../2017/05/...", а нові ".../2017/08/..." ? Розкидати файли - якось не правильно на мою думку, можливо краще шукати спосіб як можна (автоматично) перейменувати папку з ".../2017/05/..." на ".../2017/08/..." зразу після редагування ?

14

(4 відповідей, залишених у Залізо)

microsoft написав:

Режим сну

У цьому режимі ваш комп’ютер споживатиме зовсім небагато електроенергії та запускатиметься швидше, а ви зможете працювати далі з того місця, де закінчили. Не потрібно переживати, що результати роботи буде втрачено через вичерпання ресурсу акумулятора. Якщо рівень заряду акумулятора стає занизьким, ОС Windows автоматично зберігає всі результати роботи та вимикає ПК. Використовуйте режим сну, якщо збираєтеся відійти від ПК ненадовго – наприклад, щоб випити кави.

Багато комп’ютерів (зокрема, ноутбуків і планшетів) переходять у режим сну, коли ви їх закриваєте або натискаєте кнопку живлення.

Щоб перевести ПК в режим сну:

Відкрийте параметри живлення:
Якщо у вас Windows 10, у полі пошуку на панелі завдань введіть електроживлення, а потім виберіть елемент Електроживлення.
У Windows 8.1 або Windows RT 8.1 проведіть пальцем від краю екрана (якщо ви використовуєте мишу, перемістить вказівник до правого верхнього кута екрана й проведіть ним вниз) і натисніть кнопку Пошук. У полі пошуку введіть Електроживлення, а потім виберіть елемент Електроживлення.
У Windows 7 натисніть кнопку "Пуск" Зображення кнопки , а потім виберіть елементи Панель керування, Система та безпека й Електроживлення.
Виконайте одну з таких дій:
Якщо ви використовуєте настільний комп’ютер, планшет або ноутбук, виберіть елемент Виберіть дії, за які відповідають кнопки живлення. Поруч з елементом Після натискання кнопки живлення виберіть варіант Сон, а потім натисніть кнопку Зберегти зміни.
Якщо ви використовуєте лише ноутбук, виберіть елемент Виберіть дію для закриття кришки ноутбука. Поруч з елементом Після закриття кришки виберіть варіант Сон, а потім натисніть кнопку Зберегти зміни.
Коли ПК потрібно перевести в режим сну, просто натисніть кнопку живлення на настільному комп’ютері, планшеті чи ноутбуку або закрийте кришку ноутбука.
Відповідь на ваше питання: На більшості комп’ютерів ви можете продовжити роботу, натиснувши кнопку живлення. Проте не всі комп’ютери однакові. Деякі можна вивести з режиму сну, натиснувши будь-яку клавішу на клавіатурі, натиснувши кнопку миші або відкривши кришку ноутбука. Перегляньте документацію комп’ютера або відвідайте веб-сайт виробника.

Логічні команди та їх використання
Задача
Задано двадцять однобайтових кодів, у кожному коді, у якому розряди 3,4,5,6,7 дорівнюють відповідно  1,1,0,0,1, поміняти всі розряди на протилежні, якщо ж вказана умова не виконується, то парні розряди поміняти на протилежні, а непарні встановити в нуль.

- Для початку потрібно видалити (встановити в нуль) 0,1,2 розряди коду, щоб легко порівняти код з 1,1,0,0,1, для цього я виконую дію "and" над маскою і кодом. (рядок 22-23)
- Порівняти маску "00011001" і код, в якому вже 0,1,2 розряди встановлені в нуль (рядок 24)
- Відновити початковий код (рядок 25)
- В задачі є схоже завдання в обох розгалуженнях - це поміняти розряди на протилежні, тож цю дію варто виконати перед розгалуженням JE (рядок 26)
- Якщо код і маска "00011001" не є рівними, то непарні розряди зануляться, для встановлення непарним розрядам нуль, потрібно виконати дію "and" над маскою "10101010" і кодом. Дія "not" вже виконана перед цим (рядок 29)

data segment
    ARR1 DB 74d, 225d, 84d, 12d, 36d, 99d, 74d, 124d, 87d, 144d, 223d, 177d, 8d, 41d, 160d, 133d, 154d, 111d, 249d, 20d
    SIZE_OF_ARR1 DB $-ARR1
ends
code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    
    MOV BL, 01Fh ;MASK 00011111b (OR 01Fh)
    MOV BH, 019h ;MASK 00011001b (OR 019h)
    MOV DL, 0AAh ;MASK 10101010 (OR 0AAh)
    
    ;SETUP SIZE OF ARR1
    MOV CH, 0                        
    MOV CL, SIZE_OF_ARR1            
    MOV SI, CX
    DEC SI;START WITH 19 ELEMENT
    
    LOOP1:
    MOV AH, ARR1[SI];SETUP VALUE
    AND AH, BL      ;USE A MASK FOR DELETE THE FIRST THREE BITS
    CMP AH, BH      ;COMPARE THIS BYTE AND A MASK
    MOV AH, ARR1[SI];SETUP AGAIN THE SAME BYTE (VALUE) IN ORDER TO RESTORE THE FIRST THREE BITS
    NOT AH                          
    JE EQUAL
    ;DO NOT EQUAL
    AND AH, DL
    EQUAL:                              
    MOV ARR1[SI], AH
    DEC SI
    LOOP LOOP1
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.

16

(4 відповідей, залишених у Інше)

Vo_Vik написав:

q and not p
Чи нє?

Ні, я ж про це писав

Betterthanyou написав:

Тепер буду використовувати аналоги p∧~q
p = 01010101
q = 00110100
~q = 11001011
p∧~q = 01000001
ну і звичайно
00100000 != 01000001

Чомусь q and not p (воно ж p∧~q) не дорівнює 00100000

Я написав що, на приклад "p = 01010101", а "q = 00110100"
Заперечення q, NOT q =  11001011
Логічне "і", p and (not q) = 01000001

Але якщо робити за таблицею, виходить
  01010101
  00110100
=00100000

00100000 не дорівнює 01000001, тепер зрозуміло ?

17

(4 відповідей, залишених у Інше)

Мені потрібний такий логічний елемент
p ↛  q  result
0      0  0
0      1  1
1      0  0
1      1  0
такий елемент називається "аб'ю́нкція", на вікіпедії написано що аб'ю́нкція рівна p∧~q

Для початку зроблю приклад з використанням таблиці аб'ю́нкції
p = 01010101
q = 00110100
p ↛ q = 00100000

Тепер буду використовувати аналоги p∧~q
p = 01010101
q = 00110100
~q = 11001011
p∧~q = 01000001

ну і звичайно
00100000 != 01000001

Де ж я зробив помилку ?
Мені потрібно замінити аб'ю́нкцію використовуючи будь-які операції із NOT, AND, OR, XOR як це зробити ?

reverse2500 написав:

ще

CALL [ESP]

еквівалент

RET

Перевірив

P2 PROC         
CALL [SP]

Помилка
"wrong parameters: CALL [SP]"

Що означають [] (квадратні дужки) ? - Я подивився що це адрес операнда (а не значення стеку), а для того щоб подивитися значення стек потрібно використати команду "top" (top: отримати верхній елемент (без виштовхування).) - якої в асемблері немає. Звісно що я ще не достатньо добре знаю асемблер, тому якщо я помилився - поправте мене

koala написав:

CALL - це PUSH+JMP, а RET - це POP+JMP.

Якщо ж використати "POP", то виходить замінити ret на call - але навіщо тоді це

P2 PROC        
        POP AX 
CALL AX;В стек появиться адрес AX який потім потрібно буде виштовхнути 
koala написав:

вручну обчислювали?

Так

koala написав:

Хіба не логічніше було б поставити мітки в тих місцях, куди відбуваються переходи, і хоча б їх у стек пхати - не кажу вже про те, щоб описувати перед функцією вимоги до її виклику (стан регістрів і стеку)?

Щось я про це не подумав, вже не хочу перероблювати.

Щодо вимог виклику функцій

DERERMINANT2X2 - для самостійного використання не призначена (спочатку там потрібно видалити додаткові операції, рядок 40)

DETERMINANT3X3 - Стан регістів не важливий, але регістри AX, BX, CX, DX, BP - будуть змінені.
Не записувати в 3-7,9-13,15-19 більше чим +/-181 (елементи матриці не можуть бути більші чим 181 - не вистаціть пам'яті для арифметики ).
В стеку повинні бути (перед цім можна записати AX, BX, CX, DX, BP в стек, щоб потім їх відновити):
1 - куди повернутися після завершення роботи функції
2 - адреса рядка "ADD AX, CX" функції "DERERMINANT2X2"
3 - елемент (комірка) матриці a13
4 - елемент (комірка) матриці a21
5 - елемент (комірка) матриці a32
6 - елемент (комірка) матриці a22
7 - елемент (комірка) матриці a31
8 - адреса рядка "SUB CX, AX" функції "DERERMINANT2X2"
9 - елемент (комірка) матриці a12
10 - елемент (комірка) матриці a21
11 - елемент (комірка) матриці a33
12 - елемент (комірка) матриці a23
13 - елемент (комірка) матриці a31
14 - адреса рядка "MOV CX, AX" функції "DERERMINANT2X2"
15 - елемент (комірка) матриці a11
16 - елемент (комірка) матриці a22
17 - елемент (комірка) матриці a33
18 - елемент (комірка) матриці a23
19 - елемент (комірка) матриці a32
Результат виконання функції буде в регістрі АХ, тобто визначник матриці

20

(3 відповідей, залишених у Інше)

Зрозумів помилку, дякую