Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
292.35 Кб
Скачать

39. Код работы с циклической очередью, переделанный из кода стека

#include "stdafx.h"

#include <ctype.h>

#include <iostream>

using namespace std;

#include <conio.h>

#define SIZE 2

class q_type

{

char queue[SIZE]; // очередь в виде массива

int head,tail; // голова и хвост

public:

q_type(); // конструктор

~q_type(); // диструктор

void push(char ch); // втолкнуть в стек

char pop(); // вытолкнуть из стека

};

q_type::q_type()

{

head=tail=-1;

}

q_type::~q_type()

{

}

void q_type::push(char ch)

{

if(head==tail) { head=tail=-1;} // зацикливание очереди

tail++; // 0,1,2

if(tail==SIZE)

{

cout<<"\n queue is overflow\n";

tail--;

return;

}

queue[tail]=ch; //a,b

}

char q_type::pop()

{

if(head==tail)

{

cout<<"queue is underflow\n";

return 0;

}

head++;

return queue[head];

}

int main()

{

q_type s1,s2;

int i;

s1.push('a');

s1.push('b');

s1.push('c');

s2.push('x');

s2.push('y');

s2.push('z');

for(i=0;i<2;i++) cout <<"Item from s_1: "<<s1.pop()<<"\n";

for(i=0;i<2;i++) cout <<"Item from s_2 : "<<s2.pop()<<"\n";

// запись после выталкивания всех элементов,т.е. работает зацикливание очереди

s1.push('i');

s1.push('j');

s2.push('k');

s2.push('n');

for(i=0;i<2;i++) cout <<"Item from s_1: "<<s1.pop()<<"\n";

for(i=0;i<2;i++) cout <<"Item from s_2 : "<<s2.pop()<<"\n";

_getch();

return 0;

}

40. Код работы со стеком, переделанный из кода циклической очереди

#include "stdafx.h"

#include <ctype.h>

#include <iostream>

using namespace std;

#include <conio.h>

#define SIZE 5 // всего 5 ячеек, начиная с 0

class stack

{

int stck[SIZE];

int tos;

public:

void init();

void put(int num); // вставка элемента

int push(); // выталкивание элемента

};

void stack::init()

{

tos=0;

}

void stack::put(int num) // блок вставки в очередь

{

if(tos==SIZE)

{

cout<<"\n stack is overflow\n";

return;

}

stck[tos]=num; // 0,1,2,3,4

tos++;

/* 1,2,3,4,5 - вершина стека имеет индекс на 1 больше, чем индекс последнего элемента */

}

int stack::push() // блок выталкивания из очереди

{

if(tos==0)

{

cout<<"\n Queue is underflow\n";

return 0;

}

tos--;

return stck[tos]; // извлечение элемента

}

void main()

{

stack s;

int i;

s.init();

for(i=0;i<SIZE;i++) s.put(i); // 0,1,2,3,4

s.put(5); // для проверки

for(i=0;i<SIZE;i++) cout <<"\n Item from stack is "<<s.push()<<"\n for(i=0;i<SIZE;i++) s.put(i);

for(i=0;i<SIZE;i++) cout <<"\n Item from stack is "<<s.push()<<"\n";

_getch();

}

41. Генерирование случ. Чисел с показательным распределением

/*

Программа генирирования последовательности случайных чисел

линейным конгруэнтным методом и с показательным распределением

*/

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

#include <conio.h>

#define TOTAL 20 // размер генерируемой последовательности

#define PERIOD 1000 // период повторения чисел

#define MULTIPLIER 7 // множитель

#define INCREMENT 7 // приращение

#define mean_time_request 5

// среднее время заявки при показательном распределении

int main()

{

int a[TOTAL];

// массив сгенерированных целых случайных чисел линейным конгруэнтным методом

float b[TOTAL];

//массив сгенерированных дробных случайных чисел линейным конгруэнтным методом

float aa[TOTAL];

// массив сгенерированных целых псевдослучайных чисел по показательному закону

char ch;

// признак выбора метода генерации чисел

a[0]=1; // начало последовательности ХХ[]

b[0]=1/PERIOD; // начало последовательности UU[]

cout<<"Do you like to use the linear congruous method? [y/n] \n";

cin>>ch;

if((ch=='y')||(ch=='Y'))

{

// линейный конгруэнтный метод

for(int i=1;i<=TOTAL-1;i++)

{

a[i]=(MULTIPLIER*a[i-1]+INCREMENT)%PERIOD;

b[i]=(float) a[i]/PERIOD;

}

cout<<"New array of the random integer numbers is ";

cout<<"\n";

for(int i=0;i<=TOTAL-1;i++) cout<<" "<<a[i];

cout<<" \n New array of the random fractional numbers is ";

cout<<"\n";

for(int i=0;i<=TOTAL-1;i++) cout<<" "<<b[i];

}

cout<<"\n Do you like to use the exponential distribution method? [y/n] \n";

cin>>ch;

if((ch=='y')||(ch=='Y'))

{

//метод показательного распределения

for(int i=1;i<=TOTAL-1;i++)

{

a[i]=(MULTIPLIER*a[i-1]+INCREMENT)%PERIOD; // целое число

b[i]=(float) a[i]/PERIOD; // дробное число

//формула показательного распределения

aa[i]=(float)-mean_time_request*log(b[i]);

}

cout<<" \n New random integer array is obtained by the exponential distribution method \n ";

for(int i=1;i<=TOTAL-1;i++) cout<<" "<<aa[i];

_getch();

return 0;

}

else cout<<"\n Method is not choosen!";

_getch();

return 0;

}