Lyke Tanera Ответов: 2

Не могли бы вы помочь мне преобразовать этот C++ в язык C


#include <stdio.h>
#include <stdlib.h>
#include "genlib.h"
#include <strlib.h>
#include "random.h"
#include "queue.h"

#define SimulationTime    720
#define ArrivalProbability   0.1
#define MinServiceTime       1
#define MaxServiceTime      4

typedef struct 
{

   int customerNumber;
   int arrivalTime;
   int serviceTime;

} *customerT;

typedef struct {

   queueADT queue;
   customerT activeCustomer;
   int time;
   int numCustomers;
   int numServed;
   long totalWaitTime;
   long totalLineLength;

} simDataT;

static bool traceFlag = FALSE;
static void InitializeSimulation(simDataT *sdp);
static void RunSimulation(simDataT *sdp);
static void EnqueueCustomer(simDataT *sdp);
static void ProcessQueue(simDataT *sdp);
static void ServeCustomer(simDataT *sdp);
static void DismissCustomer(simDataT *sdp);
static void ReportResults(simDataT *sdp);

main()

{

   simDataT simData;

   Randomize();

   InitializeSimulation(&simData);

   RunSimulation(&simData);

   ReportResults(&simData);

}

static void InitializeSimulation(simDataT *sdp)

{

   sdp->queue = NewQueue();

   sdp->activeCustomer = NULL;

   sdp->numServed = 0;

   sdp->totalWaitTime = 0;

   sdp->totalLineLength = 0;

}

static void RunSimulation(simDataT *sdp)

{

   for (sdp->time = 0; sdp->time < SimulationTime; sdp->time++) {

       if (RandomChance(ArrivalProbability)) {

           EnqueueCustomer(sdp);

       }

       ProcessQueue(sdp);

   }

}

static void EnqueueCustomer(simDataT *sdp)

{

   customerT c;

   sdp->numCustomers++;

   c = New(customerT);

   c->customerNumber = sdp->numCustomers;

   c->arrivalTime = sdp->time;

   c->serviceTime = RandomInteger(MinServiceTime, MaxServiceTime);

   Enqueue(sdp->queue, c);

   if (traceFlag) {

       printf("%4d: Customer %d arrives and gets in line\n",

              sdp->time, sdp->numCustomers);

   }

}

static void ProcessQueue(simDataT *sdp)

{

   if (sdp->activeCustomer == NULL) {

       if (!QueueIsEmpty(sdp->queue)) {

           ServeCustomer(sdp);

       }

   } else {

       if (sdp->activeCustomer->serviceTime == 0) {

           DismissCustomer(sdp);

       } else {

           sdp->activeCustomer->serviceTime--;

       }

   }

   sdp->totalLineLength += QueueLength(sdp->queue);

}

static void ServeCustomer(simDataT *sdp)

{

   customerT c;

   c = Dequeue(sdp->queue);

   sdp->activeCustomer = c;

   sdp->numServed++;

   sdp->totalWaitTime += (sdp->time - c->arrivalTime);

   if (traceFlag) {

       printf("%4d: Customer %d reaches cashier\n",

              sdp->time, c->customerNumber);

   }

}

static void DismissCustomer(simDataT *sdp)

{

   if (traceFlag) {

       printf("%4d: Customer %d leaves cashier\n",

              sdp->time, sdp->activeCustomer->customerNumber);

   }

   FreeBlock(sdp->activeCustomer);

   sdp->activeCustomer = NULL;

}

static void ReportResults(simDataT *sdp)

{

   printf("Simulation results given the following parameters:\n");

   printf(" SimulationTime:    %4d\n", (int) SimulationTime);

   printf(" ArrivalProbability: %7.2f\n",

                                  (double) ArrivalProbability);

   printf(" MinServiceTime:    %4d\n", (int) MinServiceTime);

   printf(" MaxServiceTime:    %4d\n", (int) MaxServiceTime);

   printf("\n");

   printf("Customers served:    %4d\n", sdp->numServed);

   printf("Average waiting time: %7.2f\n",

          (double) sdp->totalWaitTime / sdp->numServed);

   printf("Average line length: %7.2f\n",

          (double) sdp->totalLineLength / SimulationTime);

}


Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
#include "genlib.h"
#include <strlib.h>
#include "random.h"
#include "queue.h"

#define SimulationTime    720
#define ArrivalProbability   0.1
#define MinServiceTime       1
#define MaxServiceTime      4

 struct QNode
{

   int customerNumber;
   int arrivalTime;
   int serviceTime;

} *customerT;

struct queue
{

   queueADT queue;
   customerT activeCustomer;
   int time;
   int numCustomers;
   int numServed;
   long totalWaitTime;
   long totalLineLength;

} simDataT;

static bool traceFlag = FALSE;

void InitializeSimulation(struct QNode  *sdp);
void RunSimulation(struct QNode  *sdp);
void EnqueueCustomer(struct QNode  *sdp);
void ProcessQueue(struct QNode  *sdp);
void ServeCustomer(struct QNode  *sdp);
void DismissCustomer(struct QNode  *sdp);
void ReportResults(struct QNode  *sdp);

int main()
{
    
   simDataT simData;
   Randomize();
   InitializeSimulation(&simData);
   RunSimulation(&simData);
   ReportResults(&simData);

}
void InitializeSimulation(struct QNode *sdp)
{
    sdp->queue = NewQueue();
    sdp->activeCustomer=NULL;
    sdp->numServed=
}

2 Ответов

Рейтинг:
17

CPallini

Это уже есть C код.


Lyke Tanera

Где твой ответ, который я не могу увидеть?

CPallini

Код, который вы опубликовали, уже является C. Это не код C++.

Lyke Tanera

окей,,
но не могли бы вы помочь мне преобразовать их в связанный список очередей на языке Си?.

CPallini

*** ЭТО УЖЕ КОД C ***
(и queue.h, queue.c отсутствуют в коде, который вы опубликовали).

Maciej Los

Что ж... Иногда очевидные вещи не так очевидны...
5ed!

Рейтинг:
0

OriginalGriff

C++ - это надмножество C: все, что работает в C, будет работать в C++.
Обратное неверно: может быть чрезвычайно трудно перевести хорошо написанный C++ даже в плохой C, а к "хорошему" C почти невозможно, потому что C++ предназначен для объектно-ориентированного, А C-нет.

К счастью для вас - как уже сказал вам CPallini - код, который вы показываете, уже является кодом C и не содержит никаких специфических элементов C++. Таким образом, он не нуждается в преобразовании и должен запускать fiune (в зависимости от вашего компилятора и параметров, конечно).


CPallini

+5 за упоминание одного из отцов информатики. :-Д :-Д :-Д

Maciej Los

Соглашаться.