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

Розовая методичка

.pdf
Скачиваний:
453
Добавлен:
29.03.2016
Размер:
2.02 Mб
Скачать

В выходном файле добавится строка: 1 1 1 2 2 2 2 3 4 5 Перевернем список и опять выведем его в выходной файл:

l.reverse();

for (iter = l.begin(); iter != l.end(); iter++)

{

out << *iter << " ";

}

out << endl;

Получим: 5 4 3 2 2 2 2 1 1 1

И, наконец, удалим из списка рядом стоящие повторящиеся элементы:

l.unique();

for (iter = l.begin(); iter != l.end(); iter++)

{

out << *iter << " ";

}

out << endl;

Получим: 5 4 3 2 1 Замечание. Подумайте, что будет выведено в выходной поток, если во входном

будет содержаться последовательность: 1 1 1 2 2 1 2 2 3 4 5 3 .

6.4.Решение практических задач с использованием библиотеки STL

1.Дана последовательность натуральных чисел. Перед каждым элементом, равным х вставить элемент, равный у. Входная последовательность целых чисел и заданные числа х и у хранятся в файле input.txt (в первой строке файла через пробел записаны х и у, во второй — последовательность чисел), выходная последовательность целых чисел записывается в файл output.txt.

#include <fstream> #include <stack> using namespace std;

int main()

{

stack <int> t,t1; int i,x,y;

ifstream in("input.txt"); ofstream out("output.txt"); in >> x >> y;

while (in >> i) //считываем данные из файла в стек

{

t.push(i);

}

in.close();

while (!t.empty()) //пока первый стек не пуст

{

//запоминаем значение верхнего элемента из первого стека

81

i=t.top();

t1.push(i); //помещаем это значение во второй стек if (i==x) //если это значение равно х, то

{

t1.push(y); //во второй стек записываем значение у

}

t.pop(); //удаляем верхний элемент из первого стека

}

//выводим содержимое второго стека в выходной файл while (!t1 .empty())

{

out << t1.top() << " "; t1.pop();

}

 

out.close();

 

return 0;

 

}

 

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

 

_______input.txt_________

____________output.txt_____________

7 0

0 7 0 7 1 3 0 7 5 2 5 0 7 2 0 7 9 3 0 7 0 7

7 7 1 3 7 5 2 5 7 2 7 9 3 7 7

 

2. Дан файл input.txt, компонентами которого являются натуральные числа. Создать на основе файла очередь. Все элементы, равные х, заменить на у. Результат вывести

в выходной файл output.txt.

#include <fstream> #include <queue> using namespace std;

int main()

{

queue <int> t,t1; int i,x,y;

ifstream in("input.txt"); ofstream out("output.txt"); in >> x >> y;

while (in >> i) //считываем данные из файла в очередь

{

t.push(i);

}

in.close();

while (!t.empty()) //пока первая очередь не пуста

{

i=t.front(); //запоминаем значение первого элемента if (i!=x) //если это значение равно х

{

t1 push(i); //то помещаем это значение во вторую очередь

82

}

else

{

t1 .push(y); //иначе во вторую очередь помещаем значение у

}

t.pop(); //удаляем первый элемент из очереди

}

while (!t1.empty()) //выводим вторую очередь в выходной файл

{

out << t1.front() << " "; t1.рoр();

}

out.close(); return 0;

}

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

 

_______input.txt________

_______output.txt_______

70

0 0 1 3 0 5 2 5 0 2 0 9 3 0 0

7 7 1 3 7 5 2 5 7 2 7 9 3 7 7

 

3. Дан файл, компонентами которого являются целые числа. Создать на основе данных файла упорядоченную по убыванию структуру данных без использования какого-либо

алгоритма сортировки.

#include <list> #include <fstream> using namespace std;

int main()

{

list <int> l; int value;

ifstream in("input.txt"); ofstream out("output.txt");

//считываем первый элемент из входного потока и помещаем //его в список

in >> value; l.push_back(value);

list <int>::iterator iter; //описываем итератор unsigned int i;

while (in >> value) //пока не достигнут конец входного потока

{

//пропускаем все элементы списка, большие value for(i=1,iter=l.begin();((i<l.size())&&(*iter>value));i++,iter++);

//если дошли до конца списка и все числа больше value

if (i==l.size()&&*iter>value)

l.push_back(value); //то вставляем value в конец списка

83

else

{

l.insert(iter, value); //иначе нашли элемент в списке, } //меньший value, и вставляем value слева от этого элемента

}

in.close();

//выводим содержимое списка в выходной файл for (iter=l.begin();iter!=l.end();iter++)

{

out << *iter << " ";

}

 

out.close();

 

return 0;

 

}

 

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

 

______input.txt_______

_______output.txt______

7 7 1 3 7 5 2 5 7 2 7 9 3 7 7

9 7 7 7 7 7 7 7 5 5 3 3 2 2 1

6.5. Практикум №4

Замечание При решении задачи самостоятельно выберите необходимый классконтейнер. Свой выбор обоснуйте.

1.Пусть символ # определен в текстовом редакторе как стирающий символ Backspace, т.е. строка abc#d##c в действительности является строкой ас.

Дан текстовый файл, в котором встречается символ #. Преобразовать его с учетом действия этого символа.

2.В текстовом файле записана без ошибок формула вида:

<формула>=<цифра>|М(<формула>, <формула>)|m(<формула>, <формула>)

где | - или

<цифра>=0|1|2|3|4|5|6|7|8|9

М обозначает вычисление максимума, m - минимума Вычислить значение этой формулы. Например, М(т(3,5),М(1,2))=3

3.В текстовом файле записана без ошибок формула вида:

<формула>=<цифра>|р(<формула>, <формула>)|m(<формула>, <формула>)

где | - или

<цифра>=0|1|2|3|4|5|6|7|8|9 m(а, b) = (a-b) mod 10, р(а, b) = (a+b) mod 10.

Вычислить значение этой формулы. Например, m(9, р(р(3, 5), m(3, 8))) = 6.

4. Дан текстовый файл. За один просмотр файла напечатать элементы файла в следующем порядке: сначала все символы, отличные от цифр, а затем все цифры, сохраняя исходный порядок в каждой группе символов.

Дан файл, содержащий информацию о сотрудниках фирмы: фамилия, имя, отчество, пол, возраст, размер зарплаты. За один просмотр файла напечатать элементы файла в следующем порядке: сначала все данные о мужчинах, потом все данные о женщинах,

сохраняя исходный порядок в каждой группе сотрудников.

84

6.Дан файл, содержащий информацию о сотрудниках фирмы: фамилия, имя, отчество, пол, возраст, размер зарплаты. За один просмотр файла напечатать элементы файла в следующем порядке: сначала все данные о сотрудниках младше

30лет, потом данные об остальных сотрудниках, отсортировав данные о сотрудниках в каждой группе по размеру зарплаты.

7.Дан файл, содержащий информацию о студентах: фамилия, имя, отчество, номер группы, оценки по трем предметам текущей сессии. За один просмотр файла напечатать элементы файла в следующем порядке: сначала все данные о студентах, обучающихся на 4 и 5, потом данные об остальных студентах, отсортировав данные о студентах в каждой группе по алфавиту.

8*. Дан многочлен от одной переменной, например: у4-у+1, z2-8.9z+1.2z2 или - 5Х3+5- 6.7Х4-Х. Разработать класс Polinom, поле которого - многочлен, хранящийся в виде

связного списка, со следующими функциональности:

a)проверка корректности исходной записи многочлена;

b)представление многочлена в виде списка с полями: коэффициент при переменной, степень;

c)приведение подобных в многочлене;

d)распечатка по списку многочлена в нормальном виде (подобные члены в многочлене приведены и расположены в порядке убывания степеней);

e)подсчет значения многочлена для заданного значения х;

f)умножение многочлена на число;

g)сложение двух многочленов;

h)произведение двух многочленов;

i)нахождение производной n-ного порядка;

j)нахождение интеграла n-ного порядка;

k)нахождение рациональных корней данного многочлена.

Полную структуру класса продумайте самостоятельно. Работу класса продемонстрировать на примерах.

85

ЛИТЕРАТУРА

1.Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. Структуры данных и алгоритмы. - М.: Издательский дом «Вильямс», 2000.

2.Батраева И.А., Кудрина Е.В., Огнева М.В., Родин А.М. Программируем на C++: Учеб, пособие в 3 ч. 4.2: Структуры данных и алгоритмы. — Саратов: Изд-во «Научная книга», 2004.

3.Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. - М:

МЦНМО, 2001.

4.Круз Р.Л. Структуры данных и проектирование программ. — М.: Бином. Лаборатория знаний, 2008.

5.Кубенский А.А. Структуры и алгоритмы обработки данных: объектноориентированный подход и реализация на C++. - СПб.: БХВ-Петербург, 2004.

6.Лаптев В.В. C++ Объектно-ориентированное программирование. . - СПб: Питер,

2008.

7.Лафоре Р. Объектно-ориентированное программирование в C++. Классика

Computer Science. 4-е изд. - СПб.: Питер, 2007.

8.Липпман С.Б., Лажойе Ж. Язык программирования C++. Вводный курс. 4-е изд- е. Изд. дом "Вильямс", 2007 г..

9.Огнева М.В., Кудрина Е.В. Основы программирования на языке C++: Учеб, пособие в 2 ч. Часть 2. — Саратов: ООО Издательский центр «Наука», 2009. — 100 с.

10.Павловская Т.А. C/C++. Программирование на языке высокого уровня. - СПб:

Питер, 2006.

П.Шилдт Г. Самоучитель C++: Пер. с англ. — 3-е изд. — СПб.: БХВПетербург,

2005.

86

 

СОДЕРЖАНИЕ

 

1. Введение в объектно-ориентированное программирование..............................................................

4

2. Стиль программирования.....................................................................................................................

6

2.1.

Правила объявления идентификаторов ..................................................................................

6

2.2.

Форматирование текста...........................................................................................................

8

2.3.

Правило записи операторов ...................... ............................................................................

8

2.4.

Комментарии............................................................................................................................

9

2.6.

Магические числа ....................................................................................................................

9

3. Классы и объекты ...............................................................................................................................

10

3.1.

Основные понятия .................................................................................................................

10

3.2.

Конструкторы.........................................................................................................................

13

3.3.

Деструкторы ...........................................................................................................................

16

3.4.

Статические члены класса ....................................................................................................

16

3.5.

Перегрузка операций ............................................................................................................

18

3.6.

Пример простого класса........................................................................................................

20

3.7.

Практикум №1 .....................................................................................................................

23

4. Наследование ......................................................................................................................................

27

4.1.

Основные понятия ................................................................................................................

27

4.2.

Наследование конструкторов................................................................................................

28

4.3.

Виртуальные функции..........................................................................................................

30

4.4. Абстрактные классы и чисто виртуальные функции ..........................................................

32

4.5.

Практикум №2 .....................................................................................................................

35

5. Объектно-ориентированая реализация списков ..............................................................................

38

5.1.

Основные понятия .................................................................................................................

39

5.2.

Стек .........................................................................................................................................

39

5.3. Решение практических задач с использованием стеков......................................................

43

5.4. Применение исключений и шаблонов..................................................................................

47

5.5.

Очередь...................................................................................................................................

49

5.6. Решение практических задач с использованием очереди ...................................................

53

5.7. Однонаправленный список общего вида .............................................................................

55

5.8. Решение практических задач с использованием однонаправленных списков ..................

61

5.9.

Двунаправленный список......................................................................................................

63

5.10.Решение практических задач с использованием двунаправленных списков…………... 72

5.11.

Практикум №3 .................................................................................................................

74

6. Реализация списков с помощью библиотеки стандартных шаблонов ............................................

77

6.1.

Класс-контейнер stack ...........................................................................................................

77

6.2.

Класс-контейнер queue........................................................................................................

78

6.3.

Класс-контейнер list...............................................................................................................

79

6.4

Решение практических задач с использованием библиотеки STL......................................

81

6.5

 

Практикум №4 ......................................................................................................................

84

Литература ..............................................................................................................................................

86

87

Эта страница не хочет удаляться, так что пускай здесь будет послесловие.

Ну и замучился же я форматировать всё это дело в ворде! FineReader – ужасная гадость! Везде разные шрифты, разные размеры, наклон, весь текст во фреймах, отступы рандомные. Но всё же я смог не бросить всё, и доделать до конца. Хотя под конец уже забил на редактирование кода.

Не знаю, что здесь ещё написать, поэтому, пользуясь случаем, хочу порекомендовать всем немного музыки:

Исполнитель: Blue Sky Black Death

Альбомы: Glaciers Melted, Noir, Violet, Euphoric tape (I, II, III). Направления: Abstract, instrumental hip-hop, chill wave

Звучат просто шикарно, обожаю этих ребят!

И ещё немного отличных исполнителей по жанрам:

Инди-рок:

Alt-J, Foster the People, Bondage Fairies, Uncle Outrage, OK GO, M83

Чилаут:

Odesza, Dan Croll, iamamiwhoami, Adam Fielding, Chrome Sparks, Little People, 88 ULTRA

Эмбиент, глитч:

Solar fields, Маяк, ЭЛЕКТРОНИКА 302, Sk'p, Jiony, Ryoji Ikeda, Jerobeam Fenderson, Hollan Holmes, Klin, aivi & surasshu

Вичуха, вапор:

Summer of Haze, Corp., SUICIDEWΛVЕ, kislotnoe probujdenie, Clams Casino,BL▲CK C∆T , V▲LH▲LL, Crystal Castles, George Crys.t.al, MACINTOSH PLUS, IAMTHEKIDYOUKNOWWHATIMEAN, Lay Bac, MUNGUUGNUM, † CΛIN †,

t e l e p a t h , Universe Inside, CROSSPARTY

Синтипоп, ретровейв:

Hotline Miami OST (обе части), Betamaxx, Tyson, Trevor Something, Mitch Murder, Atrey, Com Truise, Lost Years, Miami Nights 1984, Le Cassette

Драм:

Pendulum, Prodigy, Нейромонах Феофан, Wolfgun, Grafix & Fred V

Чиптьюн:

Reboot Me, Kitsune2, Gamegate, KOSMOPOP2, Kubbi, Henry Homesweet, Chipzel, LHS/DFS, SoulEye, Balloonbear

Спидкор, happycore:

Renard, Truxton, Futret, The Quick Brown Fox, Negaren, Goreshit, Kitcaliber, SqueZ,

Nero’s day at Disneyland, Ecchi-chan, Akamushi