- •Нижегородский государственный университет им. Н.И. Лобачевского
- •Оглавление
- •Предисловие
- •Глава 1. Вычисление значений функций
- •1.1. Операторы циклов
- •1.2. Операторы ветвления
- •Когда в программе нужно выбрать один из многочисленных вариантов, бывает целесообразным применять оператор-переключатель switch. Этот оператор называется ещё оператором множественного выбора [1].
- •Switch (выражение)
- •1.3. Алгоритмы, необходимые для написания программ
- •Глава 2. Суммирование рядов
- •Глава 3. Позиционная запись числа
- •Глава 4. Делители целого числа
- •5.1. Сортировка вставкой
- •5.2. Метод пузырька
- •5.3. Сортировка выбором
- •5.4. Быстрая сортировка
- •Глава 6. Работа с файлами. Построение массивов без повторений
- •6.1. Работа с файлами
- •6.2. Построение массивов без повторений
- •Глава 7. Обработка последовательности символов
- •7.1. Алгоритм выделения слова из строки
- •7.2. Выбор слов, подходящих под шаблон
- •7.3. Перевод прописных символов в строчные
- •Глава 8. Побитовые операции
- •Глава 9. Преобразование и построение матриц
- •Содержимое файла “input.Txt”
- •Глава 10. Структуры
- •Выделение памяти под объект coat
- •Содержимое файла "input.Txt".
- •Содержимое файла "outout.Txt"
- •Содержимое файла "input.Txt"
- •11. Динамические структуры данных
- •11.1. Односвязные списки
- •11.2. Очереди
- •11.3. Стеки
- •Содержимое файла “input.Txt”
- •Содержимое файла “input.Txt”
- •Список литературы
Содержимое файла “input.Txt”
Рис. 11.10. Информация, находящаяся в файле «input.txt»
//L11_4.cpp
#include <fstream>
#include <iostream>
using namespace std;
struct ochered
{
char c;
ochered *next; //Указатель на следующий элемент
};
//Прототип функции постановки в очередь:
void add_ochered(ochered **begin, ochered **end, char nc);
//Прототип функции удаления из очереди:
void del_ochered(ochered **begin, ochered **end);
struct stek
{
char c;
stek *next; //Указатель на следующий элемент
};
//Прототип функции постановки в стек:
stek* add_stek(stek *top, char nc);
//Прототип функции удаления из стека:
stek* del_stek(stek*);
//Прототип функции печати содержимого очереди:
void print_och(ochered *begin, char *sn);
//Прототип функции печати содержимого стека:
void print_stek(stek *top, char *sn);
void add_ochered(ochered **begin, ochered **end, char nc)
{
ochered *new_el;
new_el=new ochered; //Создание нового элемента
(*new_el).c=nc;
(*new_el).next=NULL;
if(*begin==NULL) //Очередь пуста.Элемент вносится как единственный
{
(*begin)=(*end)=new_el;
return;
}
//Внесение нового элемента в очередь:
(**end).next=new_el;
(*end)=new_el;
}
void del_ochered(ochered **begin, ochered **end)
{
ochered *ptr;
ptr=*begin;
if(*begin==NULL) //Очередь пуста
{
cout<<"Очередь пуста";
return;
}
//Передвигается начало очереди:
(*begin)=(**begin).next;
//Освобождается память, выделенная для удаляемого элемента:
delete ptr;
}
void print_och(ochered *begin, char *sn)
{
ofstream ff(sn);
ochered *ptr=begin;
while(ptr!=NULL)
{
ff<<(*ptr).c;
ptr=(*ptr).next;
}
}
stek* add_stek(stek *top, char c)
{
stek* new_el;
new_el=new stek; //Создание нового элемента
new_el->c=c;
new_el->next=NULL;
if(top==NULL) //Стек пуст.Элемент вносится как единственный
top=new_el;
else
{
//Внесение нового элемента в стек:
new_el->next=top;
top=new_el;
}
return top;
}
stek*del_stek(stek *top)
{
stek *tmp;
tmp=top;
if(top==NULL) //Стек пуст
{
cout<<"Стек пуст";
return NULL;
}
//Передвигается начало стека:
top=top->next;
//Освобождается память, выделенная для удаляемого элемента:
delete tmp;
return top;
}
void print_stek(stek *top, char *sn)
{
ofstream ff(sn,ios::app);
stek *ptr=top;
while(ptr!=NULL)
{
ff<<(*ptr).c;
ptr=(*ptr).next;
}
}
int main( )
{
ifstream ff("input.txt");
char cc[81];
int i;
ochered *begin,*end;
stek *top;
begin=end=NULL;
top=NULL;
ff.getline(cc, 80);
while(!ff.eof())
{
for(i=0; cc[i]!='\0'; i++)
{
if(cc[i]>='A' && cc[i]<='z')
top=add_stek(top, cc[i]);
else
if(cc[i]>='0'&&cc[i]<='9')
add_ochered(&begin, &end, cc[i]);
}
ff.getline(cc, 80);
}
ff.close();
char so[8]="out.txt";
print_och(begin, so);
print_stek(top, so);
return 0;
}
Результат выполнения программы листинга 11.4 приведен на рис. 11.11.
Рис. 11.11. Результат работы программы листинга 11.4
Упражнения
В файле “input.txt” задан текст. Ввести структуру, отражающую уникальное слово и частоту его встречаемости в тексте. Создать очередь, элементы которой тип введенной структуры. Результат записать в файл.
В файле “input.txt” задан текст. Ввести структуру, отражающую уникальное слово и частоту его встречаемости в тексте. Создать односвязный список, содержащий слова в алфавитном порядке, и результаты записать в файл.
В файле “input.txt” задана последовательность чисел и символов арифметических операций (+, -, *, /). Если из файла считывается число, то оно помещается в стек. Если считывается символ, то из стека извлекаются два числа и над ними производится данная арифметическая операция (если она допустима), и результат вновь помещается в стек. Если операцию по каким-либо причинам выполнить невозможно (не хватает чисел в стеке или делитель равен нулю), то на экран выдается сообщение о причине и необходимо прекратить выполнение программы. Если чтение из файла “input.txt” заканчивается успешно, то выдать информацию о количестве проведенных операций.
В файле “input.txt” задан список абитуриентов ННГУ с указанием фамилии, имени и отчества, а также суммы баллов, набранных по профильным предметам. Составить односвязный список абитуриентов по убыванию суммы баллов и результаты записать в файл.
В файле “input.txt” задан список сотрудников фирмы с указанием даты их поступления на работу. Для описания дат создать структуру. Написать функцию сравнения двух дат. Составить односвязный список сотрудников в порядке возрастания даты их поступления на работу.
Для описания дат создать структуру и написать функцию сравнения двух дат. Разработать структуру для описания интервала, состоящего из двух дат. В файле “input.txt” задан список из нескольких пар дат – концов интервала. Составить из них очередь. Определить, существует ли непустое пересечение этих интервалов.
В файле “input.txt” задан список студентов ММФ ННГУ с указанием фамилии, имени и отчества, а также название предмета и экзаменационная оценка. Составить односвязный список студентов в алфавитном порядке с указанием среднего балла.
Создать структуру для описания комплексных чисел. Написать функции действий с комплексными числами (сложение, вычитание, умножение, деление, нахождение модуля). В файле “input.txt” задан список из четного числа комплексных чисел. Для каждой пары комплексных чисел выполнить все четыре арифметических действия и результат записать в файл. Если действия выполнить нельзя, вывести об этом сообщение.
В файле “input.txt” задан список заданий для выполнения на ЭВМ. Задание включает: номер задания, длительность выполнения (в минутах) и фамилию исполнителя. Разработать структуру заданий. Создать из заданного списка очередь на выполнение работ. Определить общее время работы в часах и минутах.
В файле “input.txt” задан список заданий для выполнения на ЭВМ. Задание включает: номер задания, длительность выполнения (в минутах) и фамилию исполнителя. Разработать структуру заданий. Создать односвязный список по убыванию длительности выполнения задания. Полученные данные записать в файл.
Для описания дат создать структуру и написать функцию проверки правильности вводимой даты. В файле “input.txt” задан список дат. При чтении из файла отмечать неправильно записанные даты и заносить их в стек. Определить число неправильно введенных дат и вывести на экран.
Для описания дат создать структуру и написать функцию проверки правильности вводимой даты. В файле “input.txt” задан список дат. При чтении из файла игнорировать неправильно записанные даты. Правильно записанные даты заносить в очередь. Определить число правильно введенных дат и вывести на экран.
Для описания дат создать структуру и написать функции: проверки правильности вводимой даты и сравнения двух дат. В файле “input.txt” задан список дат. При чтении из файла игнорировать неправильно записанные даты, а из правильно записанных дат создать односвязный список по возрастанию дат. Определить число неправильно введенных дат и вывести на экран.
Создать структуру очереди, хранящую символ. В файле «input.txt” задан текст. Преобразовать его следующим образом: сначала должны идти цифры в том порядке, в котором они встречаются в файле ”input.txt”, а затем буквы кириллицы в том же порядке, в котором они встречаются в файле ”input.txt”.
Создать структуры очереди и стека, хранящие символ. В файле ”input.txt” задан текст. Преобразовать его следующим образом: сначала должны идти латинские буквы в том же порядке, в котором они встречаются в файле ”input.txt”, а затем цифры в обратном порядке, чем в файле ”input.txt”.
Создать структуры очереди и стека, хранящие символ. В файле ”input.txt” хранится текст. Преобразовать его следующим образом: сначала должны идти знаки препинания (, . ; : ! -) в том порядке, в котором они встречаются в файле ”input.txt”, а затем буквы кириллицы в обратном порядке, чем в файле ”input.txt”.
Создать структуры очереди и стека, хранящие символ. В файле ”input.txt” задан текст. Преобразовать его следующим образом: сначала должны идти латинские буквы в том порядке, в котором они встречаются в файле ”input.txt”, а затем буквы кириллицы в обратном порядке, чем в файле ”input.txt”.
Создать структуру для описания моментов времени (часы, минуты, секунды). Написать функцию сравнения двух моментов времени. Разработать структуру для описания участников олимпиады. В файле ”input.txt” задан список участников, содержащий фамилию, имя, отчество и показанный результат. Составить односвязный список по возрастанию показанных результатов и распечатать информацию о первых шести участниках.
Создать структуру для описания моментов времени (часы, минуты, секунды). Написать функцию сравнения двух моментов времени. Разработать структуру для описания участников олимпиады. В файле ”input.txt” задан список участников, содержащий фамилию, имя, отчество и показанный результат. Составить односвязный список по убыванию показанных результатов и распечатать информацию о первых шести участниках.
Для описания дат создать структуру и написать функцию, определяющую расстояние в днях между двумя датами. В файле “input.txt” задан список фирм с указанием даты их основания. Составить односвязный список фирм в а порядке возрастания длительности их работы на текущую дату.
Для описания дат создать структуру и написать функцию, определяющую расстояние в днях между двумя датами. В файле “input.txt” задан список сотрудников фирмы с указанием начала их контракта и даты его окончания. Составить односвязный список сотрудников в алфавитном порядке с указанием числа дней работы в данной фирме.
Для описания дат создать структуру и написать функцию сравнения двух дат. Ввести структуру для описания интервала, состоящего из двух дат. В файле “input.txt” задан список сотрудников фирмы с указанием дат начала и конца их командировки, а также города, куда они были направлены. Определить, какие из сотрудников могут встретиться в командировке, и создать очередь из этих сотрудников.
Для описания дат создать структуру и написать функцию сравнения двух дат. В файле “input.txt” задан список продуктов, хранящихся на базе, с указанием срока годности. Создать очередь из продуктов, срок годности которых истек на данную дату. Вывести на экран список продуктов, годных к реализации.
Для описания дат создать структуру и написать функцию сравнения двух дат. В файле “input.txt” задан список продуктов, хранящихся на базе, с указанием срока годности. Создать стек из продуктов, годных к реализации на данную дату. Вывести на экран информацию о продуктах, срок реализации которых истек.
Для описания дат создать структуру и написать функции: сравнения двух дат и определения расстояния в днях между двумя датами. В файле “input.txt” задан список продуктов, хранящихся на базе, с указанием срока годности. Создать очередь из продуктов, срок годности которых истекает не позднее, чем через пять дней до заданной даты. Вывести на экран список продуктов, годных к реализации, но не вошедших в созданную очередь.