profile
Размещено 1 год назад по предмету Информатика от detkabymbym

Помогите пожалуйста написать код
Есть векторная реализация дека с ограниченным входом: #include
#include
#define MAXLENGTH 10
typedef int DataType;

typedef struct Deque
{
int left, right;
DataType data[MAXLENGTH];
} Deque;

void MakeNull (Deque *pDeque);
int Empty (Deque *pDeque);
int Full (Deque *pDeque);
DataType ReadLeft (Deque *pDeque);
DataType ReadRight (Deque *pDeque);
int InRight (DataType x, Deque *pDeque);
DataType OutLeft (Deque *pDeque);
DataType OutRight (Deque *pDeque);

int main()
{
Deque Deque;
int i;
MakeNull(&Deque);
for (i=1; i<=5; i++)
InRight (i, &Deque);
printf("%d ",OutLeft (&Deque));
printf("%d ",OutRight (&Deque));
printf("%d ",OutRight (&Deque));
for (i=1; i<=5; i++)
InRight (i, &Deque);
printf("%d ",OutLeft (&Deque));
printf("%d ",OutLeft (&Deque));
printf("%d ",OutRight (&Deque));
for (i=1; i<=6; i++)
{
if (!Full(&Deque))
InRight (i, &Deque);
else
printf ("Deque is fulln");
}
while (!Empty(&Deque))
printf("%d ",OutLeft (&Deque));
system("pause");
return 0;
}

void MakeNull (Deque *pDeque)
{
pDeque->left = 0;
pDeque->right = MAXLENGTH-1;
}

int Empty(Deque *pDeque)
{
return ( pDeque->right + 1 ) % MAXLENGTH == pDeque->left;
}

int Full(Deque *pDeque)
{
return ( pDeque->right + 2 ) % MAXLENGTH == pDeque->left;
}

int ReadLeft (Deque *pDeque)
{
return pDeque->data[pDeque->left];
}

int ReadRight (Deque *pDeque)
{
return pDeque->data[pDeque->right];
}

int InRight (DataType x, Deque *pDeque)
{
if (Full(pDeque)) return 0;
pDeque->right = ( pDeque->right + 1 ) % MAXLENGTH;
pDeque->data[pDeque->right] = x;
return 1;
}

DataType OutLeft (Deque *pDeque)
{
int temp = pDeque->left;
pDeque->left = (pDeque->left+1)%MAXLENGTH;
return pDeque->data[temp];
}

DataType OutRight (Deque *pDeque)
{
int temp = pDeque->right;
pDeque->right = pDeque->right ? pDeque->right - 1 : MAXLENGTH - 1;
return pDeque->data[temp];
}
Программа тестирования должна
включать в себя следующие инструкции:
- добавление элементов в структуру с фиксацией результата (добавление
произошло или нет). Если структура данных – дек, добавление элементов
должно осуществляться с обоих открытых концов;
- извлечение элемента из структуры с фиксацией результата (извлекли или
нет). Если структура данных – дек, извлечение элементов должно
осуществляться с обоих открытых концов;
- проверка пустоты структуры;
- проверка заполненности структуры.
Структура данных – дек с ограниченным входом.
Напишите программу для моделирования работы конвейера по упаковке
кофе в банки. Банки, заполненные не менее номинального объема,
закупориваются и отправляются на склад, отбракованные снимаются с
конвейера, и кофе возвращается в развесочный автомат.
Пояснения к заданию. Начальный объем кофе в развесочном автомате и
номинальный объем банки задаются пользователем. В цикле, пока не
закончится кофе, производится наполнение банок с некоторой погрешностью
и отправка их на ленту конвейера (в дек). Как только банка поставлена, она
проверяется контролирующим автоматом и при недостаточном наполнении
снимается с конвейера (извлекается из дека с того же конца). Когда первая
наполненная банка доезжает до закупоривающего автомата (дек полон), она
снимается с ленты конвейера (извлекается с другого конца дека). Когда кофе в
развесочном автомате закончится, лента конвейера продолжает движение, пока
все банки не будут отправлены на склад (пока дек не опустеет). Каждое
действие (столько-то кофе насыпано; недосып – банка извлечена, кофе
возвращено в автомат; банка такого-то объема отправлена на склад; кофе в
развесочном автомате закончилось; все банки отправлены на склад) должно
сопровождаться выводом соответствующего сообщения на экран.

  1. Ответ на вопрос
    Ответ на вопрос дан 2e45f9p0

    #include <stdio.h>

    #include <stdlib.h>

    #define MAXLENGTH 10

    typedef int DataType;

    typedef struct Deque {

    int left, right;

    DataType data[MAXLENGTH];

    } Deque;

    void MakeNull(Deque *pDeque);

    int Empty(Deque *pDeque);

    int Full(Deque *pDeque);

    DataType ReadLeft(Deque *pDeque);

    DataType ReadRight(Deque *pDeque);

    int InRight(DataType x, Deque *pDeque);

    int InLeft(DataType x, Deque *pDeque);

    DataType OutLeft(Deque *pDeque);

    DataType OutRight(Deque *pDeque);

    int main() {

    Deque Deque;

    int i;

    int initialCoffeeVolume, nominalCanVolume;

    printf("Введите начальный объем кофе в развесочном автомате: ");

    scanf("%d", &initialCoffeeVolume);

    printf("Введите номинальный объем банки: ");

    scanf("%d", &nominalCanVolume);

    MakeNull(&Deque);

    while (initialCoffeeVolume > 0) {

    int fillError = rand() % 5; // Погрешность наполнения

    int actualVolume = nominalCanVolume - fillError;

    initialCoffeeVolume -= actualVolume;

    if (actualVolume >= nominalCanVolume) {

    if (!Full(&Deque)) {

    InRight(actualVolume, &Deque);

    printf("Банка с объемом %d отправлена на конвейер.n", actualVolume);

    } else {

    printf("Конвейер полон, банка с объемом %d отправлена на склад.n", OutLeft(&Deque));

    }

    } else {

    printf("Недосып - банка с объемом %d извлечена, кофе возвращено в автомат.n", actualVolume);

    initialCoffeeVolume += actualVolume;

    }

    }

    printf("Кофе в развесочном автомате закончилось.n");

    while (!Empty(&Deque)) {

    printf("Банка с объемом %d отправлена на склад.n", OutLeft(&Deque));

    }

    printf("Все банки отправлены на склад.n");

    system("pause");

    return 0;

    }

    // Функции для работы с деком...

    void MakeNull(Deque *pDeque) {

    pDeque->left = 0;

    pDeque->right = MAXLENGTH - 1;

    }

    // Остальные функции аналогичны вашим, добавьте их сюда.

  2. Ответ на вопрос
    Ответ на вопрос дан avval666
    Ответ:
    #include
    #include

    #define MAXLENGTH 10
    typedef int DataType;

    typedef struct Deque {
    int left, right;
    DataType data[MAXLENGTH];
    } Deque;

    void MakeNull (Deque *pDeque);
    int Empty (Deque *pDeque);
    int Full (Deque *pDeque);
    DataType ReadLeft (Deque *pDeque);
    DataType ReadRight (Deque *pDeque);
    int InRight (DataType x, Deque *pDeque);
    DataType OutLeft (Deque *pDeque);
    DataType OutRight (Deque *pDeque);

    int main() {
    Deque deque;
    int coffeeVolume, nominalVolume;
    int currentVolume;

    printf("Enter initial coffee volume: ");
    scanf("%d", &coffeeVolume);
    printf("Enter nominal volume per can: ");
    scanf("%d", &nominalVolume);

    MakeNull(&deque);

    while (coffeeVolume > 0 || !Empty(&deque)) {
    if (coffeeVolume > 0) {
    currentVolume = nominalVolume - (rand() % (nominalVolume / 2)); // some randomness in volume

    if (coffeeVolume >= currentVolume) {
    coffeeVolume -= currentVolume;
    printf("Filled can with %d units of coffee. Remaining coffee: %dn", currentVolume, coffeeVolume);

    if (currentVolume < nominalVolume) {
    printf("Can underfilled! Removing can and returning %d units of coffee to the machine.n", currentVolume);
    coffeeVolume += currentVolume;
    } else {
    if (!Full(&deque)) {
    InRight(currentVolume, &deque);
    } else {
    printf("Conveyor full! Sending can with %d units of coffee to storage.n", OutLeft(&deque));
    InRight(currentVolume, &deque);
    }
    }
    } else {
    printf("Not enough coffee left to fill a can. Remaining coffee: %dn", coffeeVolume);
    coffeeVolume = 0;
    }
    } else {
    if (!Empty(&deque)) {
    printf("Sending can with %d units of coffee to storage.n", OutLeft(&deque));
    }
    }
    }

    printf("All coffee packed and sent to storage.n");
    return 0;
    }

    void MakeNull (Deque *pDeque) {
    pDeque->left = 0;
    pDeque->right = MAXLENGTH - 1;
    }

    int Empty(Deque *pDeque) {
    return (pDeque->right + 1) % MAXLENGTH == pDeque->left;
    }

    int Full(Deque *pDeque) {
    return (pDeque->right + 2) % MAXLENGTH == pDeque->left;
    }

    DataType ReadLeft (Deque *pDeque) {
    return pDeque->data[pDeque->left];
    }

    DataType ReadRight (Deque *pDeque) {
    return pDeque->data[pDeque->right];
    }

    int InRight (DataType x, Deque *pDeque) {
    if (Full(pDeque)) return 0;
    pDeque->right = (pDeque->right + 1) % MAXLENGTH;
    pDeque->data[pDeque->right] = x;
    return 1;
    }

    DataType OutLeft (Deque *pDeque) {
    int temp = pDeque->left;
    pDeque->left = (pDeque->left + 1) % MAXLENGTH;
    return pDeque->data[temp];
    }

    DataType OutRight (Deque *pDeque) {
    int temp = pDeque->right;
    pDeque->right = pDeque->right ? pDeque->right - 1 : MAXLENGTH - 1;
    return pDeque->data[temp];
    }

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.