٩٧ رﺎﻬﺑ ‐ ﻪﺘﻓﺮﺸﯿﭘ ﺴﯾﻮﻧ ﻪﻣﺎﻧﺮﺑ یﺮﻫﻮﺟ ﻦﯿﺴﺣ :ﻂﺳﻮﺗ ﺲﯾرﺪﺗ ﺳﻮﻃ ﻦﯾﺪﻟاﺮﯿﺼﻧ ﻪﺟاﻮﺧ هﺎ ﺸﻧاد ‐ ﺿﺎﯾر هﺪ ﺸﻧاد
ﻢﻫدﺰﯿﺳ سرد ﻪﺻﻼﺧ
:سرد ﻦﯾا ﻢﯿﻫﺎﻔﻣ یزﺎﺳ ﻪﯿﺒﺷ ﻪﻣﺎﻧﺮﺑ :یدرﻮﻣ ﻪﻌﻟﺎﻄﻣ
ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ یزﺎﺳ ﻪﯿﺒﺷ ١
ﺮﻬﺷ ﻒﻠﺘﺨﻣ طﺎﻘﻧ رد ﺎﻬﺳﺎﻤﺗ ناﺰﯿﻣ زا یرﺎﻣآ ﺗﺎﻋﻼﻃا دراد ﺪﺼﻗ هاﺮﻤﻫ ﻦﻔﻠﺗ ﺗاﺮﺑﺎﺨﻣ ﺖﮐﺮﺷ ﯾ ﺪﯿﻨﮐ ضﺮﻓ دﻮﺧ ﺖﯿﻟﻮﺒﻘﻣ و ﯽﯾارﺎﮐ ﻪﻠﯿﺳو ﻦﯾﺪﺑ و ﺪﻨﮐ ﻫﺪﻧﺎﻣزﺎﺳ یﺮﺗ ﻪﻨﯿﻬﺑ هﻮﯿﺸﺑ ار دﻮﺧ ﺗاﺮﺑﺎﺨﻣ یﺎﻬﺟﺮﺑ ﺎﺗ دروآ ﺖﺳﺪﺑ .دﺮﺑ ﻻﺎﺑ ار مﺎﺠﻧا ﻨﻔﻠﺗ سﺎﻤﺗ یﺮﺳ ﯾ ،یﺪﻌﺑ ود یا هدوﺪﺤﻣ رد ﻢﯿﻨﮐ ﻣ ضﺮﻓ ، ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ یزﺎﺳ ﻪﯿﺒﺷ یاﺮﺑ نآ رد ﻢﯿﻨﯿﺒﺑ ﻢﯿﻫاﻮﺧ ﻣ .ﺪﺑﺎﯾ ﻣ ﻪﻤﺗﺎﺧ ﺲﭙﺳ و ﺖﺳا لﺎﻌﻓ هﺎﺗﻮﮐ ﻧﺎﻣز تﺪﻣ یاﺮﺑ ﻨﻔﻠﺗ سﺎﻤﺗ ﺮﻫ .دﻮﺷ ﻣ ضﺮﻓ ،یزﺎﺳ ﻪﯿﺒﺷ ندﺮﮐ هدﺎﺳ یاﺮﺑ .ﺪﻨﺘﺴﻫ لﺎﻌﻓ ﻨﻔﻠﺗ سﺎﻤﺗ ﺪﻨﭼ ﻂﺳﻮﺘﻣ رﻮﻄﺑ هاﻮﺨﻟد ی هدوﺪﺤﻣ ﯾ رد ﺪﺣاو ﻌﯾزﻮﺗ زا ﺰﯿﻧ سﺎﻤﺗ نﺎﻣز تﺪﻣ ﻦﯿﻨﭽﻤﻫ .ﺪﻧﻮﺷ ﻣ ﺪﯿﻟﻮﺗ ﻪﯿﺣﺎﻧ ﺮﺳاﺮﺳ رد ﺖﺧاﻮﻨ ﯾ ﻊﯾزﻮﺗ ﺎﺑ ﺎﻬﺳﺎﻤﺗ ﻪﮐ ﻢﯿﻨﮐ ﻣ .ﺪﻨ ﯿﻣ یوﺮﯿﭘ ﺖﺧاﻮﻨ ﯾ
ﻪﮕﻧ ار لﺎﻌﻓ یﺎﻬﺳﺎﻤﺗ تﺎﻋﻼﻃا ﺎﻬﻨﺗ ﺎﻣ ﻪﻣﺎﻧﺮﺑ ﻢﯿﻫاﻮﺧ ﻣ ،ﻢﯾراﺪﻧ یزﺎﯿﻧ ﻠﺒﻗ یﺎﻬﺳﺎﻤﺗ یراﺪﻬﮕﻧ ﻪﺑ نﻮﭼ یاﺮﺑ ﺎﺟ و ﺪﻧﻮﺷ فﺬﺣ ﻪﻈﻓﺎﺣ زا ار ﻤﯾﺪﻗ یﺎﻬﺳﺎﻤﺗ ﻪﮑﻨﯾا یاﺮﺑ ﻢﯿﺷﺎﺑ ﻪﺘﺷاد یﺪﯿﻬﻤﺗ ﺪﯾﺎﺑ رﻮﻈﻨﻣ ﻦﯾا یاﺮﺑ .دراد نﺎ ﻣﻻا ﺘﺣ ﻪﮐ ﺖﺳا ﻦﯾا ﺎﻣ فﺪﻫ .دراد دﻮﺟو رﺎﮐ ﻦﯾا مﺎﺠﻧا یاﺮﺑ ﻔﻠﺘﺨﻣ یﺎﻫ هار .دﻮﺷ زﺎﺑ ﺪﯾﺪﺟ یﺎﻬﺳﺎﻤﺗ هدﺎﻔﺘﺳا ﺖﺑﺎﺛ هزاﺪﻧا ﺎﺑ ﻪﯾارآ ﯾ زا عوﺮﺷ یاﺮﺑ ﻼﻌﻓ .ﻢﯿﻨﮐ هدﺎﻔﺘﺳا ﺎﯾﻮﭘ و ﻪﻨﯿﻬﺑ ﻞ ﺸﺑ ﻪﻈﻓﺎﺣ زا ﻪﮐ ﻢﯿﻨﮐ ﻌﺳ .دﻮﺑ ﺪﻫاﻮﺧ هﺪﻧز یﺎﻬﺳﺎﻤﺗ یﺎﻫدرﻮﮐر ﻪﺑ ﺮﮔ هرﺎﺷا یوﺎﺣ ﺎﻬﻨﺗ ﻪﯾارآ ﻦﯾا ﻪﺘﺒﻟا .ﻢﯿﻨﮐ ﻣ
.ﻢﯿﻨﮐ ﻣ ﻓﺮﻌﻣ ار ﻪﻣﺎﻧﺮﺑ ﻠﺻا یﺎﻬﺳﻼﮐ و یﺮﺳاﺮﺳ یﺎﻫﺮﯿﻐﺘﻣ ﻪﻣادا رد
global variables یﺮﺳاﺮﺳ یﺎﻫﺮﯿﻐﺘﻣ ﻓﺮﻌﻣ ٢
.ﺪﻧا هﺪﺷ ﺖﺒﺛ globals.h ﻞﯾﺎﻓ رد ﻪﮐ ﺪﻧا هﺪﺷ هﺮﯿﺧذ یﺮﺳاﺮﺳ یﺎﻫﺮﯿﻐﺘﻣ ﺐﻟﺎﻗ رد ﻪﻣﺎﻧﺮﺑ ﻠﮐ تﺎﻤﯿﻈﻨﺗ // globals.h
const int MAX=500;
int TIME=0;
int SIDEX=100;
int SIDEY=40;
int MAX_AGE=30;
int NEWCALLS=7;
.دراد ﻣ ﻪﮕﻧ دﻮﺧ رد ار ﺎﻬﺳﺎﻤﺗ (ﻪﺑ ﺮﮔ هرﺎﺷا) ﻪﯾارآ هزاﺪﻧا ﺮﯿﻐﺘﻣ ﻦﯾا MAX • ﻪﻣﺎﻧﺮﺑ .ﻢﯿﻨﮐ ﻣ عوﺮﺷ0زا یدادراﺮﻗ ترﻮﺼﺑ ار ﺖﻋﺎﺳ .ﺪﻫد ﻣ نﺎﺸﻧ ار ﻪﻣﺎﻧﺮﺑ یﺮﺳاﺮﺳ ﺖﻋﺎﺳ TIME • ﺎﻫداﺪﺧر نﺎﻣز ﻪﮐ ﺪﻨﮐ ﻣ ﻤﮐ ﻦﯾا .ﺪﯾاﺰﻓا ﻣ ﺖﻋﺎﺳ ﻪﺑ ﺪﺣاو ﯾ رﺎﺑ ﺮﻫ و دﺮﺑ ﻣ ﺶﯿﭘ ار نﺎﻣز یزﺎﺳ ﻪﯿﺒﺷ ﻪﻠﺣﺮﻣ عوﺮﺷ رد .دﻮﺷ ﻣ عوﺮﺷ ﺎﻬﺘﯿﻟﺎﻌﻓ زا ﺪﯾﺪﺟ ﻪﻠﺣﺮﻣ ﯾ ﺖﻋﺎﺳ ﺶﯾاﺰﻓا ﺮﻫ ﺎﺑ ﻦﯿﻨﭽﻤﻫ .ﻢﯿﻨﮐ ﺖﺒﺛ ار .ﺪﻧﻮﺷ ﻣ ﻪﺘﺨﯾر رود ﻪﻈﻓﺎﺣ زا ﻪﺘﻓﺎﯾ ﻪﻤﺗﺎﺧ یﺎﻬﺳﺎﻤﺗ و ﺪﻧﻮﺷ ﻣ ﻪﻓﺎﺿا ﺪﯾﺪﺟ سﺎﻤﺗ یﺮﺳ ﯾ ﺪﯾﺪﺟ ﻪﮐ ﺪﻫد ﻣ نﺎﺸﻧ ار ﻠﯿﻄﺘﺴﻣ هدوﺪﺤﻣ لﻮﻃ ،ﺖﺳا هﺪﺷ هداد نﺎﺸﻧ ﻞ ﺷ رد ﻪﮐ رﻮﻄﻧﺎﻤﻫ SIDEX •
.ﺪﻨﻫد ﻣ خر نآ رد ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ .ﺪﻨﻫد ﻣ خر نآ رد ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ ﻪﮐ ﺪﻫد ﻣ نﺎﺸﻧ ار ﻠﯿﻄﺘﺴﻣ هدوﺪﺤﻣ ضﺮﻋ SIDEY • دﺎﺠﯾا ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ نﺎﻣز تﺪﻣ .ﺪﻫد ﻣ نﺎﺸﻧ ار ﻨﻔﻠﺗ سﺎﻤﺗ ﯾ نﺎﻣز تﺪﻣ ﻦﯾﺮﺘﺸﯿﺑMAX_AGE •
.دﻮﺷ ﻣ بﺎﺨﺘﻧاMAX_AGEو1ﻦﯿﺑ یدﺪﻋ ، ﻓدﺎﺼﺗ ترﻮﺼﺑ هﺪﺷ .ﻪﻠﺣﺮﻣ ﺮﻫ رد ﺪﯾﺪﺟ ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ داﺪﻌﺗ NEWCALLS •
ﻠﺻا یﺎﻬﺳﻼﮐ ﻓﺮﻌﻣ ٣
.دراد ﻣ ﻪﮕﻧ ار یﺪﻌﺑ ود تﺎﺼﺘﺨﻣ ﯾ سﻼﮐ ﻦﯾا .ﺖﺳا Point سﻼﮐ ،ﺎﻨﺒﻣ یﺎﻬﺳﻼﮐ زا ﯾ Point سﻼﮐ // point.h
#include<iostream>
using namespace std;
class Point{
private:
int x;
int y;
public:
Point(int a=0,int b=0):x(a),y(b){}
int getX(){return x;}
int getY(){return y;}
void setXY(int a,int b);
void print(int);
};
void Point::print(int t=0){
cout<<"("<<x<<","<<y<<")";
}
void Point::setXY(int a,int b) {
if( x< 0 || y < 0)
cout<<"Err: invalid coordinates";
x=a;
y=b;
}
سﺎﻤﺗ ﯾ ﻪﺑ ﻪﻃﻮﺑﺮﻣ تﺎﻋﻼﻃا سﻼﮐ ﻦﯾا ﺎﯿﺷا .ﺖﺳا ﻪﻣﺎﻧﺮﺑ ﺳﺎﺳا یﺎﻬﺳﻼﮐ زا ﯾ ﻦﯾا Call سﻼﮐ ﻪﮕﻧ ار ﻪﻃﻮﺑﺮﻣ سﺎﻤﺗ تﺎﺼﺘﺨﻣ location ﺮﯿﻐﺘﻣ .دراد ﻠﺻا (ﺮﯿﻐﺘﻣ) ﺪﻠﯿﻓ ود سﻼﮐ ﻦﯾا .ﺪﻧراد ﻣ ﻪﮕﻧ ار ﻨﻔﻠﺗ ﺖﻋﺎﺳ ﻦﺘﺷاد ﺎﺑ سﺎﻤﺗ ﻪﻤﺗﺎﺧ نﺎﻣز .دراد ﻣ ﻪﮕﻧ دﻮﺧ رد ار سﺎﻤﺗ ﻪﻤﺗﺎﺧ نﺎﻣزexp_timeﺮﯿﻐﺘﻣ و دراد ﻣ هﺪﻧزﺎﺳ رد ﻫدراﺪﻘﻣ .دﻮﺷ ﻣ ﺺﺨﺸﻣ سﺎﻤﺗ نﺎﻣز تﺪﻣ یاﺮﺑ ﻓدﺎﺼﺗ دﺪﻋ ﯾ و (TIME) ﻢﺘﺴﯿﺳ ﻧﻮﻨﮐ .ﺪﻨﮐ ﻣ ﺖﻓﺎﯾرد ار ﻢﺘﺴﯿﺳ ﻧﻮﻨﮐ ﺖﻋﺎﺳ t ﺮﺘﻣارﺎﭘ .دﻮﺷ ﻣ مﺎﺠﻧا سﻼﮐ // call.h
#include<cstdlib>
#include "point.h"
#include "globals.h"
class Call{
private:
Point location;
int exp_time;
public:
static int count;
static int max_count;
Call(int,int, int);
Point getLocation(){return location;}
int getExpTime(){return exp_time;}
~Call(){count--;}
};
Call::Call(int a=0,int b=0){
location.setXY(a,b);
exp_time = TIME + rand() % MAX_AGE; //calculate finish time count++;
if(count> max_count) max_count=count;
}
ﻦﯾﺮﺘﺸﯿﺑmax_count یﺎﺘﺴﯾا ﺮﯿﻐﺘﻣ .ﺖﺳا ﻧﻮﻨﮐ یﺎﻬﺳﺎﻤﺗ داﺪﻌﺗ ﺖﺒﺛ count یﺎﺘﺴﯾا ﺮﯿﻐﺘﻣ زا فﺪﻫ .دراد ﻣ ﻪﮕﻧ دﻮﺧ رد ار ﻪﻣﺎﻧﺮﺑ یاﺮﺟا لﻮﻃ رد هﺪﻧز سﺎﻤﺗ داﺪﻌﺗ
یﺎﻫﻮﺟ و سﺮﭘ زا ﯾ .ﺖﺳا هﺪﺷ ﻪﻓﺎﺿا زﺎﯿﻧ درﻮﻣ یﺎﻫﻮﺟ و سﺮﭘ ﻫﺪﻧﺎﻣزﺎﺳ یاﺮﺑ ﻦﯾا Query سﻼﮐ ﯽﯾﻮﺟ و سﺮﭘ ﺖﺳا ﻦ ﻤﻣ .ﺪﻧا هﺪﺷ ﻊﻗاو هاﻮﺨﻟد ﻞﯿﻄﺘﺴﻣ ﯾ رد ﻪﮐ ﺖﺳا یا هﺪﻧز یﺎﻬﺳﺎﻤﺗ رﺎﻤﺷ ﻦﺘﻓﺮﮔ ،لﻮﻤﻌﻣ و سﺮﭘ عﻮﻧ یاﺮﺑ ﺎﻬﻨﺗ ار سﻼﮐ ﻼﻌﻓ .ﺪﻫاﻮﺨﺑ ار هاﻮﺨﻟد ﻋﺎﻌﺷ ﻪﺑ هﺮﯾاد ﯾ ﻞﺧاد هﺪﻧز یﺎﻬﺳﺎﻤﺗ رﺎﻤﺷ ﺮ ﯾد (.دﺮﮐ ﺪﻫاﻮﺧ ﺮﯿﯿﻐﺗ ﺗآ سﻼﺟ رد سﻼﮐ ﻦﯾا) .ﻢﯾا هدﺮﮐ یزﺎﺳ هدﺎﯿﭘ rectangle یﻮﺟ // query.h
#include<iostream>
#include<cstdlib>
#include "globals.h"
using namespace std;
enum QueryType { rectangle=1, circle };
class Query{
private:
QueryType type;
int x1;
int y1;
int x2;
int y2;
int radius;
int result;
public:
int getX1(){return x1;}
int getY1(){return y1;}
int getX2(){return x2;}
int getY2(){return y2;}
void setResult(int r){result=r;}
int getResult(){return result;}
QueryType getType(){return type;}
int getRadius(){return radius;}
Query(QueryType t, int a, int b, int c, int d):
type(t),x1(a),y1(b),x2(c),y2(d){}
Query(QueryType t){
result=0;
if(t==rectangle){
x1= rand()% (SIDEX-2)+1;
y1=rand()% (SIDEY-2)+1;
x2=min(SIDEX,x1+rand()% (SIDEX-2)+1);
y2=min(SIDEY,y1+rand()% (SIDEY-2)+1);
} } };
سار ود تﺎﺼﺘﺨﻣ یراد ﻪﮕﻧ یاﺮﺑ ﺢﯿﺤﺻ ﺮﯿﻐﺘﻣ یﺮﺳ ﯾ ﻪﻠﻤﺟ زا ﺖﺳا ﺮﯿﻐﺘﻣ ﺪﻨﭼ یوﺎﺣ Query سﻼﮐ ﯾ .دراد هﺪﻧزﺎﺳ ود سﻼﮐ .ﺪﻨﮐ ﻣ ﺖﺒﺛ ار ﺮﻈﻧ درﻮﻣ یﻮﺟ و سﺮﭘ ﻪﺠﯿﺘﻧ ﻪﮐ result ﺮﯿﻐﺘﻣ و ،ﺮﻈﻧ درﻮﻣ ﻞﯿﻄﺘﺴﻣ هﺪﻧزﺎﺳ .ﺪﻨ ﯿﻣ ﺖﻓﺎﯾرد ار ﻞﯿﻄﺘﺴﻣ سار ود تﺎﺼﺘﺨﻣ و (ﺖﺳا ﻞﯿﻄﺘﺴﻣ ﺎﻬﻨﺗ ﻼﻌﻓ ﻪﮐ) ﻮﺟ و سﺮﭘ عﻮﻧ هﺪﻧزﺎﺳ دﺎﺠﯾا ار ﻓدﺎﺼﺗ تﺎﺼﺘﺨﻣ ﺎﺑ ﻞﯿﻄﺘﺴﻣ ﯾ دﻮﺧ و ﺪﻨﮐ ﻣ ﺖﻓﺎﯾرد ﺮﺘﻣارﺎﭘ ناﻮﻨﻋ ﻪﺑ ار ﻮﺟ و سﺮﭘ عﻮﻧ ﺎﻬﻨﺗ ﺮ ﯾد .ﺪﻨﮐ ﻣ
و ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ ﻪﯾارآ یوﺎﺣ ﻪﮐ ﺖﺳا ﻪﻣﺎﻧﺮﺑ سﻼﮐ ﻦﯾﺮﺗ ﻠﺻا ﻊﻗاو رد ﻦﯾا ManageCalls سﻼﮐ .ﺖﺳا ﻪﻣﺎﻧﺮﺑ ﻠﺻا رﻮﺗﻮﻣ سﻼﮐ ﻦﯾا .ﺖﺳا یزﺎﺳ ﻪﯿﺒﺷ مﺎﺠﻧا ﮕﻧﻮ ﭼ //dynamicpoints.cpp
#include<iostream>
#include<ctime>
#include<conio.h>
#include "call.h"
#include <windows.h>
class ManageCalls{
private:
Call* calls[MAX];
Query current_q;
int first_free_index();
void init();
void release_memory();
void goToXY(int x,int y);
void draw_rectangle(int x1, int y1, int x2, int y2);
public:
void add_random_call();
void execute_query(Query &q);
void scan_calls();
void print_stats();
void draw();
ManageCalls(){init();}
~ManageCalls(){release_memory();}
};
Calls* calls[MAX] • .ﺖﺳا Calls سﻼﮐ زا ﯽﯿﺷ ﯾ ﻪﺑ ﺮﮔ هرﺎﺷا عﻮﻧ زا ﺎﻫﺮﮔ هرﺎﺷا زا یا ﻪﯾارآ
Query current_q; • .دراد ﻣ ﻪﮕﻧ ار ﻧﻮﻨﮐ یﻮﺟ و سﺮﭘ ﻪﺑ طﻮﺑﺮﻣ تﺎﻋﻼﻃا
int first_free_index(); • ار ﺪﺷﺎﺑ ﻟﺎﺧ یﺮﮔ هرﺎﺷا یوﺎﺣ ﻪﮐ ﻪﯾارآ زا ﻠﺤﻣ ﻦﯿﻟوا .ﺖﺳا utility function ﻤﮐ ﻊﺑﺎﺗ ﯾ
.ﺪﻧادﺮﮔ ﻣﺮﺑ int ManageCalls::first_free_index(){
for(int i=0;i<MAX;i++)
if(calls[i]==NULL) return i;
return -1;
}
void init(); • ﻧاﻮﺧاﺮﻓ سﻼﮐ هﺪﻧزﺎﺳ رد ﻊﺑﺎﺗ ﻦﯾا .ﺪﻨﮐ ﻣ ﻪﯿﻟوا ﻫدراﺪﻘﻣ ار calls ﻪﯾارآ ﻪﮐ ﺖﺳا ﻤﮐ ﻊﺑﺎﺗ ﯾ
.دﻮﺷ ﻣ void ManageCalls::init(){
// for accessing the Console
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
for(int i=0;i<MAX;i++) calls[i]=NULL;
}
void release_memory(); • delete ﻧاﻮﺧاﺮﻓ ﺎﺑ ار new ﺮ ﻠﻤﻋ ﻂﺳﻮﺗ ﻪﺘﻓﺎﯾ ﺺﯿﺼﺨﺗ یﺎﻫ ﻪﻈﻓﺎﺣ ﻪﮐ ﺖﺳا ﺮ ﯾد ﻤﮐ ﻊﺑﺎﺗ ﯾ
.دﻮﺷ ﻣ ﻧاﻮﺧاﺮﻓ سﻼﮐ بﺮﺨﻣ رد ﻊﺑﺎﺗ ﻦﯾا .ﺪﻨﮐ ﻣ دازآ void ManageCalls::release_memory(){
cout<<"RELEASING MEMORY ...";
for(int i=0;i<MAX;i++) if(calls[i]!=NULL)
delete calls[i];
}
void goToXY(int x,int y); • .هاﻮﺨﻟد تﺎﺼﺘﺨﻣ ﯾ ﻪﺑ لﻮﺴﻨﮐ ﻪﺤﻔﺻ cursor ﺮﮕﻧﺎﺸﻧ ندﺮﺑ یاﺮﺑ ﺖﺳا ﻤﮐ ﻊﺑﺎﺗ ﻦﯾا
void ManageCalls::goToXY(int x=0,int y=0) {
HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
COORD c;
c.X=x;
c.Y=y;
SetConsoleCursorPosition(h,c);
}
void draw_rectangle(int x1, int y1, int x2, int y2); • .ﺪﺸﮐ ﻣ هﺪﺷ هداد تﺎﺼﺘﺨﻣ ﺎﺑ ﻞﯿﻄﺘﺴﻣ ﯾ .ﺖﺳا ﻤﮐ ﻊﺑﺎﺗ ﻦﯾا
void ManageCalls::draw_rectangle(int x1=0, int y1=0, int x2=0, int y2=0){
if(x2 <= x1 || y2 <= y1) return;
goToXY(x1,y1);
for(int i=1;i<=(x2-x1);i++) cout<<"-";
goToXY(x1,y2);
for(int i=1;i<=(x2-x1);i++) cout<<"-";
goToXY(x1,y1);
for(int i=1;i<=(y2-y1);i++) {
goToXY(x1,y1+i);
cout<<"!";
}
goToXY(x2,y1);
for(int i=1;i<=(y2-y1);i++) {
goToXY(x2,y1+i);
cout<<"!";
} }
void add_random_call(); • ﯽﯿﺷ ﻪﺑ new ﺮ ﻠﻤﻋ زا هدﺎﻔﺘﺳا ﺎﺑ ﺎﯾﻮﭘ ﻞ ﺷ ﻪﺑ ﻪﻈﻓﺎﺣ .ﺪﻨﮐ ﻣ دﺎﺠﯾا ار ﺪﯾﺪﺟ ﻨﻔﻠﺗ سﺎﻤﺗ ﯾ ﻊﺑﺎﺗ ﻦﯾا
.ﺖﺳا ﻪﺘﻓﺮﮔ راﺮﻗ calls ﻪﯾارآ رد ﻧﺎ ﻣ رد هﺪﺷ دﺎﺠﯾا ﯽﯿﺷ سردآ .دﻮﺷ ﻣ هداد صﺎﺼﺘﺧا هﺪﺷ دﺎﺠﯾا
void ManageCalls::add_random_call(){
int l=first_free_index();
if(l==-1)
cout<<"NO FREE SPACE!!";
else{
calls[l]= new Call(rand()% SIDEX+1, rand() % SIDEY+1);
} }
void execute_query(Query &q); • ﺮﯿﻐﺘﻣ رد ﻮﺟ و سﺮﭘ ﻪﺑ ﻪﻃﻮﺑﺮﻣ ﻪﺠﯿﺘﻧ .ﺪﻨﮐ ﻣ اﺮﺟا ار نآ و هدﺮﮐ ﺖﻓﺎﯾرد ار ﻮﺟ و سﺮﭘ ﯾ ﻊﺑﺎﺗ ﻦﯾا
.دﻮﺷ ﻣ ﻢﺳر ﻮﺟ و سﺮﭘ ﻪﺑ طﻮﺑﺮﻣ ﻞﯿﻄﺘﺴﻣ ﺖﯾﺎﻬﻧ رد .دﻮﺷ ﻣ ﺖﺒﺛcurrent_q void ManageCalls::execute_query(Query &q){
current_q=q;
int count=0;
for(int i=0;i<MAX;i++) if(calls[i]!=NULL)
if(calls[i]->getLocation().getX() < q.getX2() &&
calls[i]->getLocation().getX() > q.getX1() &&
calls[i]->getLocation().getY() < q.getY2() &&
calls[i]->getLocation().getY()>q.getY1() ) count++;
current_q.setResult(count);
draw_rectangle(q.getX1(),q.getY1(),q.getX2(),q.getY2());
}
void scan_calls(); • ﻪﻈﻓﺎﺣ زا ،ﺪﺷﺎﺑ هﺪﺷ یﺮﭙﺳ نآ نﺎﻣز ﻪﮐ ﺳﺎﻤﺗ ﺮﻫ .ﺪﻨﮐ ﻣ ﭼ ﺮﺧآ ﻪﺑ لوا زا ار calls ﻪﯾارآ ﻊﺑﺎﺗ ﻦﯾا
.دﻮﺷ ﻣ فﺬﺣ
void ManageCalls::scan_calls(){
for(int i=0;i<MAX;i++) if(calls[i]!=NULL){
if(calls[i]->getExpTime() < TIME){
delete calls[i];
calls[i]=NULL;
} } }
void print_stats(); • .ﺪﻨﮐ ﻣ پﺎﭼ لﻮﺴﻨﮐ ﻪﺤﻔﺻ ﺖﺳار ﺖﻤﺳ رد ار ﻧﻮﻨﮐ یﻮﺟ و سﺮﭘ ﻪﺑ طﻮﺑﺮﻣ ﺞﯾﺎﺘﻧ و ﻧﻮﻨﮐ رﺎﻣآ ﻊﺑﺎﺗ ﻦﯾا void ManageCalls::print_stats(){
goToXY(SIDEX+4,1);
cout<<"array size="<<MAX;
goToXY(SIDEX+4,3);
cout<<"time="<<TIME;
goToXY(SIDEX+4,5);
cout<<"new calls per sec="<<NEWCALLS;
goToXY(SIDEX+4,7);
cout<<"call age limit="<<MAX_AGE;
goToXY(SIDEX+4,9);
cout<<"max calls="<<Call::max_count;
goToXY(SIDEX+4,11);
cout<<"total now="<<Call::count;
goToXY(SIDEX+4,13);
current_q.print();
goToXY(SIDEX+4,15);
cout<<"result="<<current_q.getResult();
goToXY(SIDEX+4,19);
cout<<"press q for exit";
}
void draw(); • ﻨﻔﻠﺗ سﺎﻤﺗ ﺮﻫ یاﺮﺑ .ﺪﻨﮐ ﻣ ﻢﺳر لﻮﺴﻨﮐ ﻪﺤﻔﺻ رد ار ﻨﻔﻠﺗ یﺎﻬﺳﺎﻤﺗ ﻞﺤﻣ ﻪﺑ طﻮﺑﺮﻣ ﺮﯾﻮﺼﺗ ﻊﺑﺎﺗ ﻦﯾا
.دﻮﺷ ﻣ پﺎﭼ نآ هﺪﻧﺎﻤﯿﻗﺎﺑ ﺮﻤﻋ void ManageCalls::draw(){
system("cls");
draw_rectangle(0,0,SIDEX+2,SIDEY+1);
goToXY(0,0);
for(int i=0;i<MAX;i++) if(calls[i]!=NULL){
goToXY(calls[i]->getLocation().getX(),calls[i]->getLocation().getY());
cout<<calls[i]->getExpTime()-TIME;
}
goToXY(0,0);
}
یزﺎﺳ ﻪﯿﺒﺷ یاﺮﺟا ۴
ﺎﺑ .دﻮﺷ ﻣ ﺮﻔﺻ TIME ﺖﻋﺎﺳ زﺎﻏآ رد .دﻮﺷ ﻣ مﺎﺠﻧا یزﺎﺳ ﻪﯿﺒﺷ یاﺮﺑ مزﻻ یﺎﻫ ﻧاﻮﺧاﺮﻓ ﻪﻣﺎﻧﺮﺑ main ﻊﺑﺎﺗ رد یﺎﻬﺳﺎﻤﺗ .دور ﻣ ﻮﻠﺟ ﻪﺑ ﺪﺣاو ﯾ نﺎﻣز ﺪﯿﻠﮐ رﺎﺸﻓ ﺮﻫ ﺎﺑ .دﻮﺷ ﻣ عوﺮﺷ یزﺎﺳ ﻪﯿﺒﺷ ﺮﺑرﺎﮐ ﻂﺳﻮﺗ ﺪﯿﻠﮐ ﯾ رﺎﺸﻓ لﻮﺴﻨﮐ ﻪﺤﻔﺻ یور ﻧﻮﻨﮐ یﺎﻬﺳﺎﻤﺗ رﺎﺑ ﺮﻫ .ﺪﻧﻮﺷ ﻣ فﺬﺣ ﻪﻈﻓﺎﺣ زا هﺪﺷ یﺮﭙﺳ یﺎﻬﺳﺎﻤﺗ و هﺪﺷ دﺎﺠﯾا ﺪﯾﺪﺟ لﻮﺴﻨﮐ ﻪﺤﻔﺻ یور نآ ﺞﯾﺎﺘﻧ و دﻮﺷ ﻣ دﺎﺠﯾا ﻓدﺎﺼﺗ یﻮﺟ و سﺮﭘ ﯾ رﺎﺑ ﺮﻫ ﻦﯿﻨﭽﻤﻫ .ﺪﻧﻮﺷ ﻣ هداد ﺶﯾﺎﻤﻧ .ﺪﺑﺎﯾ ﻣ ﻪﻤﺗﺎﺧ یزﺎﺳ ﻪﯿﺒﺷ q ﺪﯿﻠﮐ رﺎﺸﻓ ﺎﺑ ﺖﯾﺎﻬﻧ رد .دﻮﺷ ﻣ پﺎﭼ
int Call::count=0;
int Call::max_count=0;
int main(){
cout<<"press any key to start ... ";
char c=getch();
srand(time(0)); // initial the seed for the random numbers ManageCalls mc;
while(c!='q'){
TIME++;
for(int i=0;i<NEWCALLS;i++) mc.add_random_call();
mc.scan_calls();
mc.draw();
Query q(rectangle);
mc.execute_query(q);
mc.print_stats();
c=getch();
}
system("cls");
return 0;
}
.ﺪﻫد ﻣ نﺎﺸﻧ ار ﻮﺟ و سﺮﭘ ﯾ ﻠﺧاد ﻞﯿﻄﺘﺴﻣ .ﻪﻣﺎﻧﺮﺑ ﺟوﺮﺧ زا یا ﻪﻧﻮﻤﻧ :١ ﻞ ﺷ