1

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

Cyber Tortik написав:

Привіт. Виконую завдання: Дано інформацію про готель (скільки чоловік і в якому номері
проживають), де i – номер корпусу, j – номер поверху, k – номер кімнати.
Визначити різницю між кількістю зайнятих та порожніх номерів у n-му
корпусі на z-му поверсі використовуючи динамічне виділення пам’яті. Для звертання до елементів
масивів застосувати адресну арифметику.
На вигляд ніби все гаразд, але при компіляції похибка (Unhandled exception at 0x00007FF68B812845 in labb5.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.).

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

#include <iostream>
using namespace std;

int main() {
    int i = 0, j = 0, k = 0;

    do {
        cout << "\nHow much body of buildings?: ";
        cin >> i;
    } while (i < 0);
    do {
        cout << "\nHow much floors?: ";
        cin >> j;
    } while (j < 0);
    do {
        cout << "\nHow much rooms?: ";
        cin >> k;
    } while (k < 0);


    int*** Hotel = new int** [i];
    for (int b = 0; b < i; b++) {
        Hotel[i] = new int* [j];
        for (int f = 0; f < j; f++) {
            Hotel[i][j] = new int[k];
        }
    }

    for (int b = 0; b < i; b++) {
        cout << "\nBody of the building " << b + 1 << " : ";
        for (int f = 0; f < j; f++) {
            cout << "\nFloor " << f + 1 << " : ";
            for (int r = 0; r < k; r++) {
                do {
                    cout << "\nRoom " << r + 1 << " : ";
                    cin >> *(*(*(Hotel + b) + f) + r); ---------------Похибку показує тут.
                } while (6 < (*(*(*(Hotel + b) + f) + r)) < 0);
            }
        }
    }

    short int n, z, e = 0, f = 0, d;
    cout << "\nDifference between: \n";

    do {
        cout << "\nBody of the building: ";
        cin >> n;
    } while (n > i);

    do {
        cout << "\nFloor: ";
        cin >> z;
    } while (z > j);


    for (int r = 0; r < k; r++) {
        if (*(*(*(Hotel+n)+z)+r) >= 1) {
            f++;
        }
        if (*(*(*(Hotel+n)+z)+r) == 0) {
            e++;
        }
    }

    d = f - e;

    cout << "\nDifference between filled and empty rooms is: " << d << endl;

    cout << "Full: " << f << endl;
    cout << "Empty: " << e << endl;

    for (int b = 0; b < i; b++)
    {
        for (int f = 0; f < j; f++)
        {
            for (int r = 0; r < k; r++)
            {
                delete[] Hotel[k];
            }
            delete[] Hotel[i][j];
        }
        delete[] Hotel[i];
    }
    delete[] Hotel;

    system("pause");
    return 0;
}

2

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

Привіт. Виконую завдання: Дано інформацію про готель (скільки чоловік і в якому номері
проживають), де i – номер корпусу, j – номер поверху, k – номер кімнати.
Визначити різницю між кількістю зайнятих та порожніх номерів у n-му
корпусі на z-му поверсі використовуючи динамічне виділення пам’яті. Для звертання до елементів
масивів застосувати адресну арифметику.
На вигляд ніби все гаразд, але при компіляції похибка (Unhandled exception at 0x00007FF68B812845 in labb5.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.).

#include <iostream>
using namespace std;

int main() {
    int i = 0, j = 0, k = 0;

    do {
        cout << "\nHow much body of buildings?: ";
        cin >> i;
    } while (i < 0);
    do {
        cout << "\nHow much floors?: ";
        cin >> j;
    } while (j < 0);
    do {
        cout << "\nHow much rooms?: ";
        cin >> k;
    } while (k < 0);


    int*** Hotel = new int** [i];
    for (int b = 0; b < i; b++) {
        Hotel[i] = new int* [j];
        for (int f = 0; f < j; f++) {
            Hotel[i][j] = new int[k];
        }
    }

    for (int b = 0; b < i; b++) {
        cout << "\nBody of the building " << b + 1 << " : ";
        for (int f = 0; f < j; f++) {
            cout << "\nFloor " << f + 1 << " : ";
            for (int r = 0; r < k; r++) {
                do {
                    cout << "\nRoom " << r + 1 << " : ";
                    cin >> *(*(*(Hotel + b) + f) + r);
                } while (6 < (*(*(*(Hotel + b) + f) + r)) < 0);
            }
        }
    }

    short int n, z, e = 0, f = 0, d;
    cout << "\nDifference between: \n";

    do {
        cout << "\nBody of the building: ";
        cin >> n;
    } while (n > i);

    do {
        cout << "\nFloor: ";
        cin >> z;
    } while (z > j);


    for (int r = 0; r < k; r++) {
        if (*(*(*(Hotel+n)+z)+r) >= 1) {
            f++;
        }
        if (*(*(*(Hotel+n)+z)+r) == 0) {
            e++;
        }
    }

    d = f - e;

    cout << "\nDifference between filled and empty rooms is: " << d << endl;

    cout << "Full: " << f << endl;
    cout << "Empty: " << e << endl;

    for (int b = 0; b < i; b++)
    {
        for (int f = 0; f < j; f++)
        {
            for (int r = 0; r < k; r++)
            {
                delete[] Hotel[k];
            }
            delete[] Hotel[i][j];
        }
        delete[] Hotel[i];
    }
    delete[] Hotel;

    system("pause");
    return 0;
}