
Отчет по Лабораторной работе №1
.docxМинистерство образования и науки
Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра автоматизированных систем управления (АСУ)
Отчет по лабораторной работе № 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. Вывод
В ходе данной лабораторной работы я научилась работать со структурой данных очередь и функциями работы с ней.