Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Исходный текст программы ⇐ ПредыдущаяСтр 2 из 2
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++; } } } } }
|