Каждый раз, когда этот код запускается в UNIX, он зависает и отображает новую строку без подсказки. Компилируется без ошибок. Кто-нибудь знает, что здесь происходит?
/*
This program uses a Monte Carlo simulation to maximize widget profits.
*/
#include <stdio.h>
#include <stdlib.h>
// constant values used in the simulation
#define MIN_WIDGETS 1000 // minimum widgets per month
#define MAX_WIDGETS 1500 // maximum widgets per month
#define MIN_COST 0.25 // minimum cost per widget
#define MAX_COST 0.82 // maximum cost per widget
#define MIN_CONVERSION 0.01 // minimum converstion rate
#define MAX_CONVERSION 0.05 // maximum converstion rate
#define MIN_PROFIT 38 // minimum profit per sale
#define MAX_PROFIT 43 // maximum profit per sale
#define FIXED_OVERHEAD 400 // fixed overhead cost
#define NUM_SIMULATIONS 100 // number of simulations performed
void main()
{
// to keep track of inputs in highest-profit simulation
int bestW = 0; // widgets per month
float bestC = 0; // cost per widget
float bestR = 0; // rate of converstion
float bestP = 0; // profit per sale
float bestProfit = 0; // highest profit
srand(time(0)); // initialize the random number generator
float h = FIXED_OVERHEAD;
int i; // loop index
for(i = 0; i < NUM_SIMULATIONS; i++)
{
// initialize inputs for this individual simulation
int w = 0; // quantity of widgets bought
float c = 0; // cost of a widget
float r = 0; // conversion rate
float p = 0; // profit per sale
float profit = 0; // profit
// simulate quantity of widgets bought per month, between MIN_WIDGETS and MAX_WIDGETS
w = random() % (MAX_WIDGETS + 1); // to set the maximum value of w at MAX_WIDGETS
while (w < MIN_WIDGETS) {
w = random() % (MAX_WIDGETS + 1); // fetch new random number that may fit parameters
}
// simulate cost per widget, between MIN_COST and MAX_COST
c = random() % 100; // to convert random number into an integer between 0 and 99
while (c < (MIN_COST*100) || c > (MAX_COST*100)) {
c = random() % 100; // fetch new random number that may fit parameters
}
c = c / 100.0; // convert cost back from cents into dollars
// simulate conversion rate, between MIN_CONVERSION and MAX_CONVERSION
r = random() % 100; // to convert random number into an integer between 0 and 99
while (r < (MIN_CONVERSION*100) || r > (MAX_CONVERSION*100)) {
r = random() % 100; // fetch new random number that may fit parameters
}
r = r / 10.0; // convert back into fraction
// simulate profit per sale, between MIN_PROFIT and MAX_PROFIT
p = random() % ((MAX_PROFIT + 1)*100); // to convert random number into an integer between 0 and 4300
while (p < MIN_PROFIT*100) {
p = random() % (MAX_PROFIT + 1); // fetch new random number that may fit parameters
}
p = p / 100.0; // convert back into floating point with two decimal places after period
profit = (w * r * p) - (h + c * w);
printf("Current profit is $%.2f, with %d widgets at a %.2f cost per widget with a %.1f conversion rate and %.2f profit/sale.\n",
profit, w, c, r, p);
if (profit > bestProfit) {
bestW = w;
bestC = c;
bestR = r;
bestP = p;
bestProfit = profit;
}
}
printf("Maximum profit is $%.2f, with %d widgets at a %.2f cost per widget with a %.1f conversion rate and %.2f profit/sale.\n",
bestProfit, bestW, bestC, bestR, bestP);
}