Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет по Лабораторной работе №1

.docx
Скачиваний:
5
Добавлен:
13.12.2016
Размер:
46.26 Кб
Скачать

Министерство образования и науки

Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра автоматизированных систем управления (АСУ)

Отчет по лабораторной работе № 2

по дисциплине «Структуры и алгоритмы обработки данных»

Выполнил:

Студент гр. 435-1

____________________ Швалова С.И.

«____» ______________ 2016 г.

Проверил:

Руководитель

Доцент каф. АСУ

___________________ Горитов А.Н

«____» ______________ 2016 г.

Томск 2016

1. Тема работы

Ознакомление со очередью и операциями, определенными для него (push, pop, top).

2. Задание

Вариант №12

Написать программу, которая читает из файла последовательность чисел и помещает все четные в одну очередь, а нечетные в другую.

3. Алгоритмы

Алгоритм функции push:

1. Проверить есть ли место в очереди

2. Положить в ячейку, на которую указывает указатель значение.

3. Передвинуть указатель down на единицу.

4. Конец.

Алгоритм функции pop:

1. Объявить переменную elem.

2. Проверить является ли стек пустым.

2.1. Если стек пуст, то выдать сообщение об ошибки.

3. Сдвинуть указатель down на единицу.

4. Присвоить elem значение ячейки, на которую указывает указатель.

5. Возвратить сохраненное значение.

6. Конец.

Алгоритм функции main:

1. Объявить указатель на очередь, массивы, вспомогательные переменные.

2. Считать значение из файла.

3. Проверить на четность.

4. Внести в нужную очередь.

5. Вывести очереди на экран.

6. Закрыть файл.

7. Конец программы.

4. Текст программы

#include "stdafx.h"

typedef struct Queue

{

int elem[100]; /// elem — массив из NMAX чисел типа int, предназначенный для хранения элементов очереди;

int top=0;

int down=0; /// top — индекс элемента, находящегося в вершине очереди

} que;

/// Функция, для помещения элемента в очередь

void push(struct Queue *que, int f)

{

if (que->down< 100)

{

que->elem[que->down] = f;

que->down++;

}

else

printf("очередь полона, количество элементов: %d !\n", que->down);

}

/// Функция, для удаления элемента из очереди

int pop(struct Queue *que)

{

int elem;

if ((que->top) > 0)

{

que->top--;

elem = que->elem[que->top];

return(elem);

}

else

{

printf("Очередь пуста!\n");

return(0);

}

}

/// Функция, для проверки пустоты очереди

int isempty(struct Queue *que)

{

return((que->top) == (que->down));

}

// Функция для вывода элементов очереди

void QPrint(struct Queue *que)

{

int i = que->down;

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

printf("%i ",que->elem[counter]);

}

int main()

{

/// Установка кодировки на Windows-1251

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int elem; /// Значение элемента очереди

struct Queue *Q1 = new Queue;

struct Queue *Q2= new Queue;

/// Открытие текстового файла

FILE *List;

errno_t err;

err = fopen_s(&List, "list.txt", "r");

if (err != NULL)

printf("Не удалось открыть файл!\n");

else

printf("Файл открыт успешно!\n");

char *tmp = new char;

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

{

*tmp = fgetc(List);

elem = atoi(tmp);

if (elem % 2 == 0)

push(Q1, elem);

else

push(Q2, elem);

}

printf("\nочередь с четными:\n");

QPrint(Q1);

printf("\nочередь с нечетными:\n");

QPrint(Q2);

err = fclose(List);

if (err != NULL)

printf("Не удалось закрыть файл!\n");

else

printf("\nФайл закрыт успешно!\n");

system("pause");

return 0;

}

5. Результат работы программы

Рисунок 4.1 Результат работы программы

6. Вывод

В ходе данной лабораторной работы я научилась работать со структурой данных очередь и функциями работы с ней.