Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Исходный текст программы






 

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 Kursovaya_Form

{

public partial class Form1: Form

{

struct proc // структура процессов

{

public string name;

public int priority;

public int time_in;

public int time_execution;

}

public Form1 ()

{

InitializeComponent();

}

private void button1_Click (object sender, EventArgs e)

{

int r = File. ReadAllLines («d: \\data.txt»).Length; // переменная, указывающая колличество процессов

proc[] all = new proc[r]; // определение массива стуктур процессов

bool right_input = true; // при некорректных входных данных получает значение false

int ex_prc_id = 0; // номер исполняемого процесса в массиве

int time = 0;

bool status = true; // при выполнении всех процессов получает значение false

// попытка считывания данных

try

{

string line;

string path = «d: \\data.txt»;

StreamReader sr = new StreamReader(path);

int j = 0;

while ((line = sr. ReadLine())! = null)

{

string[] spots = line. Split (', ');

all[j].name = spots[0];

all[j].time_in = int. Parse (spots[1]);

all[j].priority = int. Parse (spots[2]);

all[j].time_execution = int. Parse (spots[3]);

// проверка приоритета

if (all[j].priority > 5 || all[j].priority < 1)

{

throw new Exception();

}

richTextBox1. AppendText (all[j].name + «Time in:» + all[j].time_in +» Priority:» + all[j].priority +» Ex: «+ all[j].time_execution + «\n»);

j++;

 

}

sr. Close();

 

}

catch (Exception ex) // выдача ошибки

{

right_input = false;

MessageBox. Show («Некорректные входные данные»);

}

if (right_input) // следующие действия выполняются, если входные данные корректны

{

for (int i = 1; i < r; i++) // выбор процесса, с наименьшим временем и большим приоритетом. Будет выполняться первым.

{

if (all [ex_prc_id].time_in > all[i].time_in)

{ex_prc_id = i; }

if (all [ex_prc_id].time_in == all[i].time_in & & all [ex_prc_id].priority < all[i].priority)

{ex_prc_id = i; }

}

while(status) // бесконенчный цикл, является таймером

{

int s = 0;

string line=»»; // содержит имена процессов в очереди

for (int i = 0; i < r; i++) // выбор процесса для выполнения

{

// зануление приоритета выполненного процесса

if (all [ex_prc_id].time_execution == 0) all [ex_prc_id].priority = 0;

// выбор процесса, получающего управление процессором

if (all[i].time_in < = time & & all [ex_prc_id].priority < all[i].priority & & all[i].time_execution! = 0)

{ex_prc_id = i; }

// проверка выполнения процессов, если равно 0 – выход из цикла

s += all[i].priority;

}

// инициализация переменной line, содержит имена процессов в очереди

for (int i = 0; i < r; i++)

{if (all[i].time_in < = time & & i! =ex_prc_id & & all[i].time_execution! = 0) line += all[i].name+»»; }

// если все процессы выполнены

if (s == 0) status = false;

// заполнение таблицы

if (all [ex_prc_id].time_in < = time & & all [ex_prc_id].time_execution > 0)

{

dataGridView1. Rows. Add (time, all [ex_prc_id].name, «выполнение», line);

all [ex_prc_id].time_execution –;

}

else {dataGridView1. Rows. Add (time, «», «бездействие»); }

 

time++;

}

}

}

}

}

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал