49913 (Практичні аспекти створення програмного забезпечення), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Практичні аспекти створення програмного забезпечення", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49913"

Текст 2 страницы из документа "49913"

{Enter -- виконати}

Case Ord(CommandKey) Of

13: ExecuteAction;

{вибрати наступний униз}

75: Begin

For i := 1 to ItemsCount do

If items[i].selected then break;

Items[I].Selected := False;

If i = 1 then I := ItemsCount Else

I:=I-1;

Items[I].Selected := True;

End;

{вибрати наступний угору}

77: Begin

For I:=1 to ItemsCount do

If Items[i].selected then break;

Items[i].Selected := False;

If I = Itemscount then I:=1 else I:=I+1;

Items[I].Selected := True;

end;

end;

{надрукувати меню на екран}

Print;

{якщо Еск -- вийти}

Until Ord(CommandKey) = 27;

end;

{вивiд меню на екран}

Procedure TMenu.Print;

var i:integer;

width: integer;

Position: Integer;

TempText: String;

begin

{тiльки якщо пункти є}

If ItemsCount > 0 then

Begin

Width:=getMaximalWidth + 4;

{ робимо заголовок}

TempText:='ЗАДАЧА О НАЗНАЧЕНИЯХ';

CreateTextWindow(1, 1, 80, 4, LightGray, Black);

GotoXY(ScreenWidth div 2 - Length(TempText) div 2, 2);

Write(TempText);

{робимо меню i друкуємо його}

CreateTextWindow(1, 4, 80, 6,green, White);

For I:=1 to ItemsCount do

begin

GotoXY( Width * I - Width div 2 - Length(Items[i].Caption) div 2, 2);

If Items[I].Selected then TextColor(Yellow) Else TextColor(White);

Write(Items[I].Caption);

end;

End;

end;

{знайти найширший пункт}

Function TMenu.getMaximalWidth: Integer;

var max: integer;

i: integer;

begin

if ItemsCount > 0 then

begin

max := Length(Items[1].Caption);

For I:=1 to ItemsCount do

begin

If Length(Items[i].Caption) > max then

Max := Length(Items[i].Caption);

end;

end;

getMaximalWidth := max;

end;

{виконати дiю}

Procedure TMenu.ExecuteAction;

Var N: Integer;

Begin

if ItemsCount > 0 then

begin

For N:=1 to ItemsCount do

begin

If Items[N].Selected Then ProcedureType(Items[N].Action);

end;

end;

End;

{додати пункт до меню}

Procedure TMenu.AddItem(Caption: String; Action: ProcedurePointer);

begin

If ItemsCount < MaxMenuItems then

begin

ItemsCount := ItemsCount + 1;

Items[ItemsCount].Caption := Caption;

If ItemsCount = 1 Then

Items[ItemsCount].Selected := True

Else Items[ItemsCount].Selected := False;

Items[ItemsCount].Action := Action;

end;

end;

{встановити потрiбний текстовий режим та знайти ширину i висоту екрану}

Procedure ScreenInitialization;

Begin

CheckBreak := False;

OriginalMode := LastMode;

TextMode( Lo(LastMode) + Font8x8);

ScreenWidth := Lo(WindMax) + 1;

ScreenHeight := Hi(WindMax) + 1;

TextBackground(Black);

TextColor(White);

End;

{процедура виходу}

Procedure ExitProc;

begin

Halt;

end;

{вивiд допомоги}

Procedure PrintHelp;

var s: file of char;

buffer:char;

begin

CreateTextWindow(1, 7, ScreenWidth, ScreenHeight, Black, White);

assign(s, 'help.txt');

reset(s);

while not eof(s) do

begin

read(s, buffer);

write(buffer);

end;

end;

{запит з клавiатури значення (1)}

Function InputValue(Comment: String): Integer;

Var Temp: Integer;

Len: Integer;

I, J: Integer;

begin

Len:= Length(comment);

J := 1;

While J <> 0 do

begin

CreateTextWindow( ScreenWidth div 2 - Len div 2 - 2,

ScreenHeight div 2 - 6 div 2,

ScreenWidth div 2 + Len div 2+ 2,

ScreenHeight div 2 + 6 div 2,

Blue, White);

TextColor(Yellow);

GotoXY( 3, 3); Write(Comment);

TextColor(White);

Window( ScreenWidth div 2 - Len div 2,

ScreenHeight div 2 + 2 div 2,

ScreenWidth div 2 + Len div 2,

ScreenHeight div 2 + 4 div 2);

TextColor(White);

{$I-}

Readln(Temp);

{$I+}

If IOResult <> 0 then J:=1 Else J:=0;

end;

CreateTextWindow(1, 7, ScreenWidth, ScreenHeight, Black, White);

InputValue := Temp;

end;

Procedure ASSIGMENTPROBLEM(N: Integer; C: MyArray);

var I, J0,m,m0,h2, I0,j1,last,up,low, J, k, cnt, s, ss: Integer;

V, u, d: MySimpleArray;

VJ, v0,h, dj, min,z : Real;

x,y, Col, free, lab: array[1..MaxN] of Integer;

label 41, 50, 43, 60, 55, 70, 80, 999;

begin

For I:=1 to N do

X[i] := 0;

For J0:=1 to N do

begin

J:=N - J0 + 1;

VJ := C[j,1];

I0 := 1;

For I:= 2 To N do

If C[i,j] < vj Then begin vj := C[i,j]; I0 := i; end;

V[j] := vj;

Col[j] := j;

If X[i0] = 0 then begin x[i0]:=j; y[j]:=i0; end

else begin x[i0] := -1 * ABS( X[i0] ); y[j]:=0; end;

end;

m:=0;

For I:=1 to N do

begin

If x[i] = 0 then

begin

m:=m+1;

free[m]:=i;

break;

end; {if}

If x[i] < 0 then

x[i]:=-1*x[i]

else

begin

j1:=x[i]; min:=Huge;

For J:=1 to N do

begin

If j = j1 then break;

If c[j,i] - v[j] < min then Min := c[j,i] - v[j];

end; {for}

v[j1] := v[j1] - min;

end;{else}

end;

Cnt:=0;

If m = 0 then goto 999;

41:

m0:=m; k:=1; m:=0;

50:

i:=free[k]; k:=k+1;

v0 := c[1, i] - v[1];

j0:=1; vj:=Huge;

For j:=2 to N do

begin

h:=c[j,i] - v[j];

If H < vj then

begin

if H >= v0 then

begin vj := h; j1 := j; end

else begin vj:=v0; v0 := h; j1:=j0; j0:=j; end;

end;

end;

i0:=y[j0];

if v0 < vj then

v[j0] := v[j0] - vj + v0

else

begin

if i0 = 0 then goto 43;

j0:=j1; i0 := y[j1];

end;

if i0 = 0 then goto 43;

if v0 < vj then

begin

k := k - 1;

free[k]:=i0;

end else

begin

m:=m+1;

free[m]:=i0;

end;

43:

x[i] := j0;

y[j0] := i;

if k <= m0 then goto 50;

cnt := cnt + 1;

if (m > 0) AND (cnt < 2) then Goto 41;

m0 := m;

For M:=1 to M0 do

begin

i0:=free[m];

For J:=1 to N do

begin

d[j]:=c[j,i0] - v[j];

lab[j]:=i0;

end;

up:=1;

low := 1;

60:

last:=low - 1;

min := d[col[up]];

up := up+1;

for k:=up to n do

begin

j := col[k];

dj := d[j];

if dj <=min then

begin

if dj < min then begin min:=dj; up:=low; end;

col[k]:=col[k];

col[up] := j;

up := up+1;

end;

end;

for h2:=low to up - 1 do

begin

j:=col[h2];

if y[j] = 0 then Goto 70;

end;

55:

j0:=col[low];

low:=low+1;

i:=y[j0];

h:=c[j0, i] - v[j0] - min;

for k:=up to n do

begin

j:=col[k];

vj:=c[j,i] - v[j] - h;

if vj < d[j] then

begin

d[j] := vj;

lab[j]:=i;

if vj = min then

begin

if y[j] = 0 then Goto 70;

col[k]:=col[up];

col[up]:=j;

up:=up+1;

end;

end;

end;

if low = up then goto 60;

goto 55;

70:

for k:=1 to last do

begin

j0 := col[k];

v[j0] := v[j0] + d[j0] - min;

end;

80:

i:=lab[j];

y[j]:=i;

k:=j;

j:=x[i];

x[i]:=k;

if i0 <> i then Goto 80;

end;

999:

z := 0;

For I:=1 to N do

begin

u[i]:=c[x[i],i] - v[x[i]];

z:=z+c[x[i],i];

end;

Writeln;

TextColor(LightBlue);

For I:=1 to N do begin

Writeln(' ДЛя комп"ютера ', I, ' задача ', y[i], ' найкраще пiдiйде.');

end;

end;

procedure PROG;

var i, j: integer;

si, sj: string;

begin

Num:=InputValue('Введiть кiлькiсть комп"ютерiв:');

For I:=1 to Num do

For J:=1 to Num do

begin

str(i, si);

str(j, sj);

Input[I,J]:=InputValue('Коефiцiєнт ' + si + '-ї задачi на комп"ютерi ' + sj);

end;

ASSIGMENTPROBLEM(num, input);

end;

procedure priklad;

var

FC: File of Char;

I, J: Integer;

BUFFER: Char;

begin

CreateTextWindow(1, 7, ScreenWidth, ScreenHeight, Black, White);

Assign(FC, 'EXAMPLET.TXT');

Reset(FC);

While not EOF(FC) do

begin

Read(FC, BUFFER);

Write(Buffer);

end;

close(FC);

Num:=5;

Input[1,1]:=9; Input[2,1]:=20; Input[3,1]:=60; Input[4,1]:=15; Input[5,1]:=21;

Input[1,2]:=38; Input[2,2]:=71; Input[3,2]:=69; Input[4,2]:=49; Input[5,2]:=60;

Input[1,3]:=28; Input[2,3]:=13; Input[3,3]:=80; Input[4,3]:=28; Input[5,3]:=34;

Input[1,4]:=58; Input[2,4]:=34; Input[3,4]:=13; Input[4,4]:=37; Input[5,4]:=25;

Input[1,5]:=30; Input[5,5]:=3; Input[2,5]:=53; Input[3,5]:=20; Input[4,5]:=21;

ASSIGMENTPROBLEM(num, input);

end;

begin

{встановлюємо екран}

ScreenInitialization;

{додаємо до меню пунктики}

With Menu do

begin

AddItem('Prog', @PROG);

AddItem('Справка', @printHelp);

AddItem('Пример', @priklad);

AddItem('Выход', @exitProc);

Activate;

end;

end.

Керівництво користувача

Дана програма призначена для використання в операційній системі MS DOS.

Для запуску програми потрібно запустити файл Lena.exe. Після запуску програми на екрані з’являється меню, яке містить три пункти – “Данные”, “Результат” та “?”. Пункт меню “Данные” складається з підпунктів “Из файла”, “Вручную”, “Выход”. Вибравши “Из файла”, ви вводите матрицю вагів, збережену в якомусь файлі. Вибравши “Выход”, програма закривається. “Результат” має підпункти “На экран” і “В файл”. Вибравши один з цих підпунктів, ви або виводите результат на екран, або відповідно зберігаєте його у файл. Пункт меню “?” має підпункт “Справка”.

Технічні вимоги до використання

Для запуску даної програми необхідна наявність персонального комп’ютера IBM PC.

Мінімальні вимоги до ПК:

Intel Pentium 100 мГц;

операційна система MS DOS;

пам’ять 288 байт;

дисковод або CD ROM;

клавіатура.

Висновок

У цій курсовій роботі вирішена задача про призначення.

Розроблено алгоритм рішення поставленої задачі.

Програма складена і налагоджена у середовищі програмування Турбо Паскаль.

У процесі налагодження була отримана цілком працездатна програма.

Проведено тестування програми. Аналіз результатів показав, що задача успішно виконана.

Довідкова література

1. Б.Іванов “Дискретная математика. Алгоритмы и программы”.

2. Н.Вірт “Алгоритми + Структури даних = Програма”.

3. Т.Рюттен, Г.Франкен “Турбо Паскаль 6.0”.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5120
Авторов
на СтудИзбе
444
Средний доход
с одного платного файла
Обучение Подробнее