очередь в с ++ .. домашняя работа - PullRequest
2 голосов
/ 24 марта 2011

У меня есть домашнее задание. Я пытаюсь решить это, но мне нужна помощь ..

  1. Используйте очередь ADT и не изменяйте никакие функции или процедуры ADT. Вы должны создать конструкцию машины, которая будет представлять машину, которая будет стоять в очереди на станции, чтобы помыть кузов машины. Каждый автомобиль имеет свой идентификатор, который выглядит как 124ate [6 символов в длину] и имя, например, например. Superpan и год производства как целочисленная переменная. В вашей программе вы не должны явно вызывать ADT очереди, вместо этого используйте глобальные функции для их вызова (неявно).
  2. Ваша основная программа должна иметь только объявления и вызовы глобальных функций, никакие структуры не должны использоваться.
  3. Ваш вывод должен выглядеть следующим образом:
    1. Парк нового автомобиля
    2. Распечатать количество машин
    3. перемести самую раннюю приближающуюся машину
    4. Распечатать Все автомобили
    5. выход

Мой ответ:

#include <iostream>
#include "queue.h"
#include <string>

using namespace std ;

struct car {
    char ID[6];
    int year;
    string name;
}

int main ()
{
    int num;
    car car1;
    Queue <car> q1;

    do {
        cout << "mniu \n"
          << "1. Park new car \n"
          << "2. Print the number of cars \n"
          << "3. move earliest coming car \n"
          << "4. Print All cars \n"
          << "5. exit \n";

        cin >> num;

        switch (num)
        {
        case 1:
            int n;
            cout << "enter id:\n";
            cin >> car1.ID;
            cout << "enter name:\n";
            cin >> car1.name;
            cout << "enter year:\n";
            cin >> car1.year;

            q1.enqueue (car1);
            break;

        case 2:
            cout << "number of cars: " << q1.queueCount();
            break;

        case 3:
            q1.dequeue(car1);
            break;

        case 4:
            while (q1.queueCount()!=0)  
                cout << q1.front();

        case 5:
            cout << "Thank you /n End program";
            break;

        default:
            cout << "failed number. chose from 1 to 5 \n";
        }
    }

    while (num==5);

    return 0;

}

Мой вопрос:

  1. Как можно распечатать узел очереди за узлом, не удаляя его?
  2. "Ваша основная программа должна иметь только объявления и вызовы глобальных функций, никакие структуры не должны использоваться. "Означает ли это, что мой код неправильный, потому что я пишу все в основном .. Я не понимаю этого.

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

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

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

int main() {
    MyDataStruct x;
    ReadInput(x);
    ProcessData(x);
    WriteOutput(x);
}

Обратите внимание, что в main нет циклов for, нет выражений сложения-продажи-и-налогового учета, в принципе ничего не требует обработки. Все хорошее - либо в ваших глобальных функциях, либо в методах ваших структур данных.

Применяя это к вашей программе, ваш main может выглядеть так:

int globalExitFlag;
int main() {
    Queue<car> q;
    Car c;
    while( !globalExitFlag ) {
       int cmd;
       cmd = PrintMenuAndAcceptOneAnswer(q, c);
       DoOneCommand(q, c, cmd);
    }
}

Затем вы можете поместить значения вашего cin в PrintMenuAndAcceptOneAnswer, а печать и манипулирование очередью - в DoOneCommand. Конечно, вы должны написать PrintMenuAndAcceptOneAnswer и DoOneCommand самостоятельно. Я бы далее разбил эти подпрограммы - например, DoOneCommand должен вызывать DoPrintAllCars, DoExit, DoParkOneCar и т. Д.

Наконец, я поставил while в этом main(), что я считаю уместным. Обратите внимание на глобальную переменную. Я предполагаю, что когда вы обрабатываете команду «exit», вы устанавливаете эту переменную, чтобы указать, что обработка должна завершиться.

Удачи, и вернитесь, чтобы рассказать нам, как ваше задание работает для вас.

0 голосов
/ 24 марта 2011
  1. это очередь, поэтому вы можете сохранить в ней первый узел, распечатать каждый элемент, удалить и отправить его обратно в очередь, пока не увидите (во второй раз!) 1-й элемент.
  2. да, вы не должны писать всю программу в основном, а использовать функции и другие файлы, организованные в некотором логическом значении.

РЕДАКТИРОВАТЬ:

1.

car first = q1.dequeue();
q1.enqueue(first);
  //ADD HERE: print first...
while (q1.peek() != first) {
  car element = q1.dequeue();
  q1.enqueue(first);
  //ADD HERE: print element...
}


добавьте свою печать, где комментарии "ДОБАВИТЬ ЗДЕСЬ: ..." равны

2.Вы должны добавить такие функции, как getUserInput () и printQueue () для обработки всех этих сценариев, основной просто вызовет эти функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...