Составление программы для вычисления операции вычитания двух целых чисел (со знаком)

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Новосибирский Государственный Технический Университет

Кафедра ССОД

Расчётно-графическая работа

по операционным системам

за 5 семестр

Выполнил: Горбылёв А.

Факультет: АВТ

Группа:    Аи-42

Преподаватель: Еленычев С. В.

Вариант: 25

Новосибирск, 2006 г

Задание: Составить программу для вычисления операции вычитания двух целых чисел (со знаком). На экран выводить результат в следующем формате: «147 – 140 = 7». После завершения каждой операции вычитания результат сохранять в файле в том же виде, в котором он выводится на экран. Операции вычитания и вывода результата в файл реализовать в отдельных потоках.

1.  Назначения функций

·   void main () – главная функция исполняемой программы. Она также является основным потоком, в котором выполняется вычитание, создание нового потока и объекта синхронизации;

·  CreateEvent – функция создания объекта синхронизации – события;

·  SetEvent – после выполнения вычитания сбрасывает событие в сигнальное состояние;

·  CreateThread – функция создания дополнительного потока;

·  CloseHandle – функция закрытия объекта синхронизации – события;

·  DWORD WINAPI save (LPVOID event) – функция записи результата вычитания в файл, которая выполняется в дополнительном потоке;

·  WaitForSingleObject – функция ожидания сброса объекта синхронизации в сигнальное состояние

·  fopen – функция открытия файла;

·  fprintf – функция записи строки в файл.

2.  Описание алгоритма.

В функции main сначала создаётся объект синхронизации – событие и дополнительный поток. После этого вводятся с клавиатуры значения переменных a, b и c; выполняется вычитание. Событие сбрасывается в сигнальное состояние, т.е. оно сигнализирует о том, что вычитание выполнено и второй поток может записать результаты в файл. Вывод результатов на экран. В дополнительном потоке открывается файл (если его нет, то он создаётся). Если открыть файл не удалось, программа выводит сообщение об ошибке и завершает своё выполнение. Если открыть файл удалось, то в него записывается та же строка результатов, что выводилась на экран. В конце программы выводится сообщение об окончании работы программы.

3.  Информация, вводимая с клавиатуры, и записанная в файл.

a = 874 b = 358

Результат вычитания: 874 – 358 = 516.

В файл записана следующая информация: 874 – 358 = 516.

4.  Блок-схема алгоритма

                                                           

                                                                                                  начало                    

 


                                          a   b   c

 


                      начало                                                          создание потока

                                                                     и события

                       событие

  

Ожидание сброса события                                     Ввод с клавиатуры значений

в сигнальное состояние                                       a и b, вычитание, сброс события

                                                                                       в сигнальное состояние

 


                                                нет

           открытие файла

 


                          да

           запись в файл

            результатов

 


         конец

5.  Листинг программы с комментариями

#include <stdio.h>

#include <iostream.h>

#include <windows.h>

int a, b, c;    //глобальные переменные, в которых хранятся результаты вычитания

DWORD WINAPI save (LPVOID event)   //функция записи в файл

{     

       if (WaitForSingleObject(event, INFINITE) == WAIT_OBJECT_0)//проверяется, сброшено ли событие

       {                                                         //в сигнальное состояние

              FILE *f;

              if ((f = fopen("file.txt", "w")) == NULL)              //открытие файла

              {

                     printf ("Error!/n");

                     return (0);

              }

              else

              {

                     fprintf (f, "%d - %d = %d", a, b, c);           //запись результата в файл

                     printf ("End program\n");

                     return (1);

              }

       }

}

void main ()

{

       HANDLE event = CreateEvent(NULL, FALSE, FALSE, "event"); //создание события

       DWORD dwThreadID;                      

       HANDLE hThread;

       hThread = CreateThread (NULL, 0, save, event, 0, &dwThreadID);

                                                           //создание дополнительного потока,

                                                           //который выполняет функцию записи в файл

       printf ("Enter a:  ");                          //|

       scanf ("%d", &a);                               //|

       printf ("\nEnter b:  ");                        //> ввод чисел и само вычитание

       scanf ("%d", &b);                               //|

       c = a - b;                                      //|

       SetEvent (event);                                   //сброс события в сигнальное состояние

       printf ("\n%d - %d = %d\n", a, b, c);               //вывод результата

       _sleep (10);

       CloseHandle(event);                                //закрытие события

}

6.  Список литературы

1.   Конспект лекций;

2.   Керниган Ричи – Язык С. (электронный вариант).

Похожие материалы

Информация о работе