Форум программистов, компьютерный форум CyberForum.ru

Из LIFO в FIFO, С++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать пустой список из 100 элементов http://www.cyberforum.ru/cpp-beginners/thread594010.html
Создать пустой список из 100 элементов... Пожалуйстаааа
C++ Визуализатор по быстрой сортировке Хоара на С++ Всем доброго времени суток, я начинающий программист и на этом форуме не случайно. Конец семестра, а я до сих пор не знаю как реализовать визуализатор (тоесть программа которая пошагово и автоматически наглядно показывает все действия программы) по быстрой сортировке Хоара. Сам курсовик я написал, а вот на счет визуализатора никто помоч не может. Прошу помощи) Всем заранее спасибо, буду очень... http://www.cyberforum.ru/cpp-beginners/thread594002.html
Вычислить значение функции C++
Вычислить значение функции \gamma =\sum_{k=1}^{n} \frac{t}{k^4} на интервале с шагом c, n- произвольное целое число, t=15
C++ Обмен данными между двумя приложениями по системе клиент-сервер
Всем доброго времени суток. Хочу сразу же уточнить, что готовый код меня не интересует. Нужны дельные советы или ссылки где можно почитать что то необходимое. Суть задачи в следующем: реализовать обмен данными между двумя приложениями по системе клиент-сервер в пакетном режиме в реальном времени (программы запущены одновременно, сервер мгновенно отвечает на запросы клиента). Пересылаемые данные...
C++ О классе, методе пузырька и выводе в файл, как сделать? http://www.cyberforum.ru/cpp-beginners/thread593971.html
Можно в очень понятной форме мне кое, что объяснить: 1) например нам надо посчитать S=v*t , и для v и t есть класс с 2мя объектами. Как сделать так, что бы пользователю предлагали выбрать один из объектов, а потом то, что он выбрал, то бы и считалось. 2)Потом расставить этот S в методе пузырька, как это сделать 3)и потом вывод в файлик ну хотябо с первым помогите :( Добавлено через 6...
C++ Считывание пикселя и вывод на экран его цвета Подскажите пожалуйста, как это можно реализовать или где про это можно что-то прочитать. Есть 2мерная матррица,которая складывается друг на друга в 3 слоя, в новой 3мерной матрице каждая полка(3 элемента) должна считываться как 3 пикселя и на экране соответствено выводится ее цвет. подробнее

Показать сообщение отдельно
Виталюска
379 / 379 / 127
Регистрация: 26.09.2010
Сообщений: 1,983
02.06.2012, 11:18     Из LIFO в FIFO, С++
народ помогите пожалуйста переделать код программы так, чтобы очередь была не лифо а фифо, сама программа прилагается и текст отдельно тоже
Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace model
{



    public partial class MainForm : Form
    {


        public class Distribution
        {
            private Random rand;
            public Distribution()
            {
                rand = new Random(unchecked((int)DateTime.Now.Ticks));
            }
            public double Exponential(double lambda)
            {
                return -(1 / lambda) * Math.Log(1 - rand.NextDouble());
            }
            public double Normal(double sigma, double mu)
            {
                const int n = 500;
                double sum = 0;
                double z;
                for (int i = 0; i < n; i++)
                    sum += rand.NextDouble();
                z = (sum - (n / 2)) / (Math.Sqrt(n / 12));
                return z * sigma + mu;
            }
            public double Poisson(double lambda)
            {
                return this.Exponential(lambda);

            }
            public double Erlang(int length, double lambda)
            {
                double sum = 0;
                for (int i = 0; i < length; i++)
                    sum = sum + Exponential(lambda);
                return sum;
            }

        }


        private Queue<string> recentFilesQueue;
        private Distribution distribution;
        private DataGridViewRow row;
        private string fileName = "";
        double[] sysEvents;

        double emptyServerStart;
        double timeWait;
        int timeModeling;

        //int withoutQueueL1;
        //int withoutQueueL2;


        Stack<int> stack1;
        Stack<int> stack2;
        Stack<double> startinquee1;
        Stack<double> timeinquee1;



        int active;
        int step;


        public MainForm()
        {
            InitializeComponent();

            distribution = new Distribution();

            sysEvents = new double[5];
            emptyServerStart = 0;
            timeWait = 0;

            //withoutQueueL1 = 0;
            //withoutQueueL2 = 0;



        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }

        private void bCalc1_Click(object sender, EventArgs e)
        {
            tLabelParameter.Text = "Erlang";
            listBoxDistributon.Items.Clear();
            for (int i = 0; i < 500; i++)
            {
                listBoxDistributon.Items.Add(Math.Round(distribution.Erlang(
                Int32.Parse(tbErlangLength.Text),
                Double.Parse(tbErlangLambda.Text)), 2));

            }


        }

        private void bCalc2_Click(object sender, EventArgs e)
        {
            tLabelParameter.Text = "Poisson";
            listBoxDistributon.Items.Clear();
            for (int i = 0; i < 500; i++)
            {
                listBoxDistributon.Items.Add(Math.Round(distribution.Poisson(
                Double.Parse(tbPoissonLambda.Text)), 2));
            }
        }

        private void bCalc3_Click(object sender, EventArgs e)
        {
            tLabelParameter.Text = "Normal";
            listBoxDistributon.Items.Clear();
            for (int i = 0; i < 500; i++)
            {
                listBoxDistributon.Items.Add(Math.Round(distribution.Normal(
                Double.Parse(tbNormalSigma.Text),
                Double.Parse(tbNormalMu.Text)), 2));
            }
        }

        private void bCalc4_Click(object sender, EventArgs e)
        {
            tLabelParameter.Text = "Exponent";
            listBoxDistributon.Items.Clear();
            for (int i = 0; i < 500; i++)
            {
                listBoxDistributon.Items.Add(Math.Round(distribution.Exponential(
                Double.Parse(tbExponentialLambda.Text)), 3));
            }
        }





        private void menuBuild_Run_Click_Click(object sender, EventArgs e)
        {


            distribution = new Distribution();

            stack1 = new Stack<int>();
            stack2 = new Stack<int>();
            startinquee1 = new Stack<double>();
            timeinquee1 = new Stack<double>();


            // read distribution parameters
            int req1ErlangLenght = Int32.Parse(tbErlangLength.Text);
            double req1ErlangLambda = Double.Parse(tbErlangLambda.Text);
            double req2PoissonLambda = Double.Parse(tbPoissonLambda.Text);
            double req1SrvTimeNormalMu = Double.Parse(tbNormalMu.Text);
            double req1SrvTimeNormalSigma = Double.Parse(tbNormalSigma.Text);
            double req2SrvTimeExpLambda = Double.Parse(tbExponentialLambda.Text);
            timeModeling = Int32.Parse(tbTMod.Text);

            step = 0;

            bool withSrv1Time;
            bool withSrv2Time;

            // initializing statistics variables
            timeWait = 0;


            //withoutQueueL1 = 0;
            //withoutQueueL2 = 0;
            bool srv1Seize = false; // Server 1 Status
            bool srv2Seize = false; // Server 2 Status

            sysEvents[0] = 0; //Tm
            sysEvents[1] = distribution.Erlang(req1ErlangLenght, req1ErlangLambda);
            sysEvents[2] = distribution.Poisson(req2PoissonLambda);
            sysEvents[3] = timeModeling + 1;
            sysEvents[4] = timeModeling + 1;



            // start modeling
            dataGridView1.Rows.Clear();

            AddNewEvent("Start ", sysEvents[0], sysEvents[1], sysEvents[2],
                sysEvents[3], sysEvents[4], srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

            int res;
            res = NextStep(true);
            withSrv2Time = false;

            while (sysEvents[0] <= timeModeling)
            {


                switch (res)
                  {


                    case 1:


                        sysEvents[1] += distribution.Erlang(req1ErlangLenght, req1ErlangLambda);

                        if (!srv1Seize)
                        {
                            sysEvents[3] = sysEvents[0] +
                            distribution.Normal(req1SrvTimeNormalSigma, req1SrvTimeNormalMu);
                            srv1Seize = true;

                            active = 1;


                            AddNewEvent("L1->Srv1.", sysEvents[0], sysEvents[1], null,
                            sysEvents[3], null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);
                        }


                        else
                        {

                            stack1.Push(1);
                            startinquee1.Push(sysEvents[0]);

                            AddNewEvent("L1->Que1.", sysEvents[0], sysEvents[1], null,
                            null, null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);
                        }

                        break;


                    case 2:


                        sysEvents[2] += distribution.Poisson(req2PoissonLambda);

                        if (!srv1Seize)
                        {

                            sysEvents[3] = sysEvents[0] + distribution.Exponential(req2SrvTimeExpLambda);
                            srv1Seize = true;

                            active = 2;

                            AddNewEvent("L2->Srv1.", sysEvents[0], null, sysEvents[2],
                            sysEvents[3], null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                        }


                        else
                        {

                            stack1.Push(2);
                            startinquee1.Push(sysEvents[0]);

                            AddNewEvent("L2->Que1.", sysEvents[0], null, sysEvents[2],
                            null, null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                        }

                        break;


                    case 3:


                        srv1Seize = false;

                        AddNewEvent("Srv1 Rel.", sysEvents[0], null, null, null, null,
                             srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                        if (active == 2)
                        {


                            if (!srv2Seize)
                            {


                                sysEvents[4] = sysEvents[0] + distribution.Exponential(req2SrvTimeExpLambda) / 2;
                                srv2Seize = true;

                                withSrv2Time = true;


                                AddNewEvent("L2->Srv2.", sysEvents[0], null, null,
                                    null, sysEvents[4], srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);
                            }

                        }

                        else
                        {

                            stack2.Push(2);

                            AddNewEvent("L2->Que2.", sysEvents[0], null, null,
                            null, null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                        }



                        if (stack1.Count > 0) // queue not empty
                        {

                            srv1Seize = true;

                            if (stack1.Pop() == 1)
                            {

                                timeinquee1.Push((sysEvents[0] - startinquee1.Pop()));

                                sysEvents[3] = sysEvents[1] +
                                distribution.Normal(req1SrvTimeNormalSigma, req1SrvTimeNormalMu);


                                AddNewEvent("Q1L1->Srv1", sysEvents[0], null, null,
                                sysEvents[3], null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                            }


                            else
                            {

                                timeinquee1.Push((sysEvents[0] - startinquee1.Pop()));

                                sysEvents[3] = sysEvents[2] +
                                distribution.Exponential(req2SrvTimeExpLambda);


                                AddNewEvent("Q1L2->Srv1", sysEvents[0], null, null,
                                sysEvents[3], null, srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                            }

                        }

                        else
                        {

                            emptyServerStart = sysEvents[0];

                        }
                        break;



                    case 4:


                        srv2Seize = false;

                        AddNewEvent("Srv2 Rel.", sysEvents[0], null, null, null, null,
                             srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);


                        if (stack2.Count > 0) // queue2 not empty
                        {
                            stack2.Pop();

                            srv2Seize = true;
                            withSrv2Time = true;

                            sysEvents[4] = sysEvents[4] + distribution.Exponential(req2SrvTimeExpLambda) / 2;

                            AddNewEvent("Q2L2->Srv2", sysEvents[0], null, null,
                                   null, sysEvents[4], srv1Seize, srv2Seize, stack1.Count, stack2.Count, stack1, stack2);

                        }
                        else
                        {
                            withSrv2Time = false;

                        }
                        break;



                }

                res = NextStep(withSrv2Time);

            }

            CreateStatistics();

        }



        private int NextStep(bool withSrv2Time)
        {

            int count = 4;

            if (!withSrv2Time)
                count = 3;


            double min = sysEvents[1];
            int iMin = 1;

            for (int i = 1; i <= count; i++)
            {

                if (sysEvents[i] < min)
                {

                    min = sysEvents[i];
                    iMin = i;

                }

            }

            sysEvents[0] = sysEvents[iMin];
            return iMin;


        }


      private void AddNewEvent(string evnt, double Tm,
             System.Nullable<double> L1, System.Nullable<double> L2,
      System.Nullable<double> h1, System.Nullable<double> h2, bool srv1Status, bool srv2Status,
            int n1, int n2, Stack<int> stack1, Stack<int> stack2)
        {


            Stack<int> stackTmp1 = new Stack<int>();
            Stack<int> stackTmp2 = new Stack<int>();
            stackTmp1 = stack1;
            stackTmp2 = stack2;

            row = new DataGridViewRow();
            row.CreateCells(dataGridView1);
            row.HeaderCell.Value = step.ToString();

            row.Cells[0].Value = evnt;
            row.Cells[1].Value = Math.Round(Tm, 2);
            row.Cells[2].Value = "--";
            row.Cells[3].Value = "--";
            row.Cells[4].Value = "--";
            row.Cells[5].Value = "--";

            if (L1.HasValue)
                row.Cells[2].Value = Math.Round(L1.Value, 2);

            if (L2.HasValue)
                row.Cells[3].Value = Math.Round(L2.Value, 2);

            if (h1.HasValue)
                row.Cells[4].Value = Math.Round(h1.Value, 2);

            if (h2.HasValue)
                row.Cells[5].Value = Math.Round(h2.Value, 2);

            if (step == 1)
                row.Cells[4].Value = Math.Round(sysEvents[3], 2);

            if (step == 1)
                row.Cells[5].Value = Math.Round(sysEvents[4], 2);


            if (srv1Status)
                row.Cells[6].Value = "Seize";
            else
                row.Cells[6].Value = "Release";


            if (srv2Status)
                row.Cells[7].Value = "Seize";
            else
                row.Cells[7].Value = "Release";


            row.Cells[8].Value = n1;
            row.Cells[9].Value = n2;

            StringBuilder q1 = new StringBuilder();
            int count = stackTmp1.Count;

            foreach (int i in stack1)
                q1.Append(i.ToString() + " ");

            row.Cells[10].Value = q1;

            StringBuilder q2 = new StringBuilder();
            count = stackTmp2.Count;

            foreach (int i in stack2)
                q2.Append(i.ToString() + " ");

            row.Cells[11].Value = q2;



            dataGridView1.Rows.Add(row);

            step++;


            if (emptyServerStart > 0)
            {


                timeWait = timeWait + (Tm - emptyServerStart);
                emptyServerStart = 0;

            }




        }




        private void CreateStatistics()
        {

            listBox1.Items.Clear();
            double averagetimeinquee1 = 0.0;

            double cWait = timeWait / timeModeling;

            if (startinquee1.Count > 0)
            {
                foreach (double i in startinquee1)
                    timeinquee1.Push(timeModeling - i);
            }


            averagetimeinquee1 = timeinquee1.Average();

            listBox1.Items.Add(String.Format(" koef prostoja :\t{0} ", Math.Round(cWait, 4)));
            listBox1.Items.Add(String.Format(" srednee vremja v o4eredi 1 :\t " + Math.Round(averagetimeinquee1, 4)));




        }

        private void saveToolStripButton_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
            saveFileDialog1.RestoreDirectory = true;
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {

                string fileName = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(fileName);
                int count = listBoxDistributon.Items.Count;


                if (fileName == "")
                {
                    MessageBox.Show("File Name is empty!");
                    return;
                }
                else
                {
                    for (int i = 0; i < count; i++)
                        sw.WriteLine(listBoxDistributon.Items[i]);

                    sw.Close();
                }
            }


        }



        private void saveSim_Click(object sender, EventArgs e)
        {


            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
            saveFileDialog1.RestoreDirectory = true;
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string fileName = saveFileDialog1.FileName;
                StreamWriter sw = new StreamWriter(fileName);
                if (fileName == "")
                {
                    MessageBox.Show("File Name is empty!");
                    return;
                }
                else
                {
                    sw.WriteLine("Tm\t\tL1\t\tL2\t\tH1\t\tH2\t\tSrv1\t\tSrv2\t\tn1\t\tn2\t\tQueue1\t\tQueue2");

                    int count = dataGridView1.RowCount;
                    for (int i = 0; i < count; i++)
                    {
                        sw.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}",
                        dataGridView1.Rows[i].Cells[0].Value,
                        dataGridView1.Rows[i].Cells[1].Value,
                        dataGridView1.Rows[i].Cells[2].Value,
                        dataGridView1.Rows[i].Cells[3].Value,
                        dataGridView1.Rows[i].Cells[4].Value,
                        dataGridView1.Rows[i].Cells[5].Value,
                        dataGridView1.Rows[i].Cells[6].Value,
                        dataGridView1.Rows[i].Cells[7].Value,
                        dataGridView1.Rows[i].Cells[8].Value,
                        dataGridView1.Rows[i].Cells[9].Value,
                        dataGridView1.Rows[i].Cells[10].Value,
                        dataGridView1.Rows[i].Cells[11].Value);
                    }


                    sw.WriteLine("");
                    sw.WriteLine("Statistics:");

                    count = listBox1.Items.Count;
                    for (int i = 0; i < count; i++)
                        sw.WriteLine(listBox1.Items[i].ToString());


                    sw.Close();
                }
            }
        }



    }
}
Вложения
Тип файла: rar model.rar (61.3 Кб, 6 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru