Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Программирование. 4 страница




cin>>s1>>s2; // считали две слова

if (s1!=s2) // использовали функцию!= (не равно)

// класса string

{

string s3=s1+" "+s2+"\n"; //конкатенация строк класса //string для создания новой строки

cout<<s3;

 

}

else cout<<"First = "<<s1[0];

}

Опишем наиболее используемые методы класса string.

Метод size_type [1] size() const и метод size_type length() const возвращают размер строки.

Метод insert (size_type posl, const string & str) вставляет строку str в вызывающую строку, начиная с позиции posl.

Метод replace (size_type posl, size_type n1, const string & str) заменяет n1 элементов, начиная с позиции pos1 вызывающей строки, элементами строки str.

Метод string substr (size_type pos=0, size_type n=NPOS) const возвращает подстроку длины n, назиная с позиции pos.

Метод size_type find (const string& str, size_type pos=0) const / size_type rfind (const string& str, size_type pos=0) const ищет самое левое/правое вхождение строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод size_type find (char с, size_type pos=0) const / size_type find (char с, size_type pos=0) const ищет самое левое/ правое вхождение символа с в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод size_type find_first_of (const string& str, size_type pos=0) const/ size_type find_last_of (const string& str, size_type pos=0) const ищет самое левое/ правое вхождение любого символа строки str в вызывающую строку, начиная с позиции pos, и возвращает позицию вхождения или NPOS, если вхождение не найдено.

Метод swap (const string& str) обменивает содрежимое вызывающей строки и строи str.

Метод erase (size_type pos=0, size_type n= NPOS) удаляет n элементов, начиная с позиции pos.

Метод clear () ощищает всю строку.

Метод size_type copy (char * s, size_type n, size_type pos=0) const копирует в символьный массив s n элементов вызывающей строки, начиная с позиции pos. Возращается количество скопированных элементов.

 

 

Пример 2. Решим задачу из примера 6.3., использую класс string. Вывести слова введенной строки, начинающиеся с гласной буквы, на экран столбиком, без разделительных знаков (пробел, табуляция, точка, запятая и т.п.).

void main ()

{

string s,s1,*s2;//Cоздали два объекта класса

//string и указатель на объект классса string

int k=0;

string razd=",.:";

/*Создали объект класса string, с помощью конструктора копирования для хранения разделителей между словами */

string glas="aeoiuy";

/*Создали объект класса string, с помощью конструктора копирования для хранения гласных*/

cout<<"Enter string ";

getline(cin,s);//Считали строку из потока cin

s2=new string [s.length()/2];//Выделили память под

//массив строк

s1=s;

/* Скопировали строку s в строку s1 с помощью переопредленной операции = */

 

int n= s1.find_first_of(razd);

/*Нашли позицию первого разделителя в строке s1*/

while (n!=NPOS)

{

if (n)

{

s2[k]=s1.substr(0,n);

/*Сохранили подстроку до разделителя как очередной элемент массива */

if (glas.find(s2[k][0])!=NPOS)cout<<"\n"<<s2[k];

k++;

}

s1=s1.substr(n+1);

/*Далее рассматриваем только оставшуюся часть строки*/

n=s1.find_first_of(razd);//Нашли позицию очередного

//разделителя

}

s2[k]=s1; //Обработка последнего слова

if (glas.find(s2[k][0])!=NPOS)cout<<"\n"<<s2[k];

}

Отметим, что в данном решении задачи, так же как и в решении задачи в примере 6.3. массив слов введен лишь для демонстрации возможности сохранения слов в массиве для дальнейшей обработки. Однако, в данной задачи не предполагается дальнейшая обработка выделенных из строки слов, поэтому нет необходимости сохранять их в массиве. Поэтому целесообразнее не определять массив строк string *s2, а определить лишь одну строку string s2, которую и использовать для обработки очередного выделенного слова.

 

 

Задание 3. Класс fstream

Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-12 задания 4 из параграфа 1.6, использую класс fstream.

 

Для поддержки файлового ввода и вывода стандартная библиотека С++ содержит классы ifstream (входной файловый поток), ofstream(выходной файловый поток), fstream (двунаправленный файловый поток). Файловый потоки обеспечивают более надежный ввод/вывод, чем стандартные функции библиотеки С. Для использования файловый потоков необходимо подключить к программе заголовочный файл <fsteam.h>.

Над файловыми потоками можно выполнять следующие операции:

- создание потока (потокового объекта)

- открытие потока и связывание его с файлом

- обмен с потоком (ввод/вывод)

- закрытие файла (отсоединение от потока).

Создание потока можно осуществитьс с помощью конструктора без параметров, например

ofstream outFile;// создан выходной поток

Чтобы свзяать поток, созданный таким образом, с файлом используют метод open().

Например,

outFile.open(“1.txt”);

Метод open() может иметь следующие параметры

ios::in Открыть файл для ввода

ios::out Открыть файл для вывода

ios::ate Установить указатель на конец файла

ios::app Открыть в режиме добавления в конец файла

ios::trunc Если файл сущесвтует обрезать его до нулевой длины

ios::binary Открыть в двоичном режиме

ios::nocreate Если файл не существует, установить поток в нулевое значение

ios::noreplace Если файл существует, устновить поток в нулевое значение

Обмен данных с файлами входными и выходными потоками осуществяется также как со стандарными потоками cin и cout соотвественно – с помощью опраций чтения из потока (>>) и записи в поток (<<) и специальных методов.

Например,

char c, s[20];

inFile.get(c);// считали очередной символ в переменную с

inFile>>c;//считали очердной символ в переменную с

inFile.getline(s,sizeof(s)); // считали строку в массив s

outFile.put(c); // записали символ с

outFile<<c<<s; //записали символ с и строку s

 

Контролировать, достигнут ли конец файла при считывании данных из потока, позволяет метод eof(), возращающий нулевое значение, если конец файла не достигнут и ненулевое в простивном случае.

При различных ошибочных ситуациях, напрмер переполнение диска или отсутсвия файла на диске, потоковый объект утанавливается в нулевое значение. Например,

ifstream inFile(“1.txt“);

if (!inFile) cout<<"Не существет такого файла!";

Для закрытия файла (отсоединения от потока) используют метод close(). Например,

outFile.close();

Пример. Решим задачу из примера 6.4, использую класс fstream. Дан текстовый файл, строки которого содержат не более m (m <=20) символов. Считать строки и записать их в файл result.txt в порядке считывания, причем каждая строка должна быть «перевернута».

#include <fstream.h>

 

void main ()

{

char filename[255];

cout<<"Введите имя файла ";

cin>>filename;

ifstream inFile(filename);

/*определили входной файловй поток (для чтения) и прикрепили к нему файл с именем filename */

 

if (inFile) // Если файл успешно открыт

{

ofstream outFile; //определили выходной файловый поток

//(для записи)

outFile.open("result.txt"); //присоединили файл с именем

//"result.txt" к выходному потоку

char s[20];// определяем массив для хранения

//считанной строки

while(!inFile.eof()) //Цикл считывания строк

{

inFile.getline(s,sizeof(s));// Считали очередную строку

int l=strlen(s);

if (s[l-1]!='\n') outFile<<s[l-1];

for (int j=l-2; j>=0; j--) outFile<<s[j];

//цикл записи символов строки в обратном порядке

outFile<<'\n';//запись символа новой строки

}

inFile.close();

outFile.close ();

cout<<"Файл записан";

}

else cout<<"Не существет такого файла!";

}

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

Каждому студенту рекомендуется выполнить хотя бы одно из упражнений 1-10.

 

1. Описать базовый класс CStr - строка. Обязательные поля класса CStr: указатель на char — хранит адрес динамически выделенной памяти для размещения символов строки; значение типа int — хранит длину строки в байтах. Обязательные методы должны выполнять следующие действия: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор, принимающий в качестве параметра символ; конструктор копирования; получение длины строки; очистка строки (сделать строку пустой); деструктор. Переопределить следующие операции: присваивание (=); сложение (+) — конкатенация строк; операция (==) - проверка на равенство. Описать производный от СStr класс CDstr - десятичная строка. Строки данного класса могут содержать только символы десятичных цифр и символы - и +, задающие знак числа. Символы - или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, десятичная строка принимает нулевое значение. Содержимое данной строки рассматривается как десятичное число. Класс CDStr содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; деструктор; метод, преобразующий данную строку в целое число. Переопределить следующие операции: присваивание (=); вычитание (-) — арифметическая разность строк; операция >— проверка на больше (по значению); операция < — проверка на меньше (по значению). Написать демонстрационную программу.

2. Описать базовый класс CStr – строка (см. задачу 1). Описать производный от СStr класс CSStr – шестнадцатеричная строка. Строки данного класса могут содержать только шестнадцатиричные символы. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, строка принимает нулевое значение. Содержимое данной строки рассматривается как знаковое шестнадцатеричное число.. Класс CSStr содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; деструктор, метод, преобразующий данную строку в целое десятичное число, метод изменение знака на противоположный (перевод числа в дополнительный код). Переопределить следующие операции: присваивание (=); сложение (+) — арифметическая сумма строк; операция (==) — проверка на равенство. Написать демонстрационную программу.

3. Описать базовый класс CStr – строка (см. задачу 1). Описать производный от CStr класс CStr_ID – строка - идентификатор. Строки данного класса строятся по правилам записи идентификаторов в языке С и могут включать в себя только те символы, которые могут входить в состав С-идентификаторов. Если исходные данные противоречат правилам записи идентификатора, то создается пустая строка-идентификатор. Класс CStr_ID содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор, принимающий в качестве параметра символ; конструктор копирования; деструктор. Переопределить следующие операции: присваивание (=); больше (>) - проверка на больше. (Строка считается больше другой, если код символа первой строки в i -й позиции, i изменяется от 0 до n -1, где n — длина более короткой строки, больше кода символа в той же позиции во второй строке, длины строк могут не совпадать), меньше (<) - проверка на меньше. Написать демонстрационную программу.

4. Описать базовый класс CStr – строка (см. задачу 1). Описать производный от CStr класс CStr_С – строка – комментарий. Строки данного класса строятся по правилам записи комментариев в С++. Если исходные данные противоречат правилам записи идентификатора, то создается пустая строка-идентификатор. Класс CStr_С содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; перевод всех символов строки в верхний регистр; перевод всех символов строки в нижний регистр; поиск первого вхождения символа в строку; деструктор. Переопределить следующие операции: присваивание (=); сложение (+) - операция конкатенации строк; вычитание (-) — из строки (первый операнд) удаляются все символы, входящие в строку, — второй операнд, при этом может получиться пустая строка. Написать демонстрационную программу.

5. Описать базовый класс CStr – строка (см. задачу 1). Описать производный от CStr класс CСomplex– комплексное число. Строки данного класса состоят из двух полей, разделенных символом i. Каждое из полей может содержать только символы десятичных цифр и символы + и -, задающие знак числа. Символы + и – могут находиться только в первой позиции числа, причем символ + может отсутствовать. Если исходные данные противоречат правилам записи комплексного числа, то комплексное число принимает нулевое значение. Класс CStr_ID содержит следующие методы: конструктор без параметров; конструктор, принимающий в качестве параметра Си-строку (заканчивается нулевым байтом); конструктор копирования; деструктор. Переопределить следующие операции: присваивание (=); операция (==) – проверка на равенство; умножение (-). Написать демонстрационную программу.

6. Создать класс CPoint — точка. На его основе создать классы CcoloredPoint – цветная точка и Cline - линия. На основе класса CLine создать класс CcoloredLine – цветная линия. Все классы должны иметь методы для установки и получения значений всех координат. Классы CcoloredPoint и CcoloredLine должны иметь обязательные поля – 2 точки и имя, обязательные методы для изменения цвета и получения текущего цвета. Классы CLine и CcoloredLine должны иметь конструкторы без параметров, конструктор, принимающий в качестве параметров 2 точки (и цвет), конструктор копирования. Определить методы, проверяющие, являются ли линии параллельные, перпендикулярными. Переопределить операции присваивания (=), сравнения (==) – проверка на совпадение линий. Написать демонстрационную программу.

7. Описать класс Cpoint - точка. Описать класс прямоугольник CRectangle. Обязательные поля класса CRectangle: char* - имя прямоугольника, 4 объекта класса CPoint, 4 поля типа double – стороны прямоугольника. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого прямоугольника); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения площади, метод получения периметра, деструктор. Переопределить операцию присваивания (=). Описать производный класс CQuadrate – квадрат. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого квадрата); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения площади, метод получения периметра, деструктор. Переопределить следующие операции: присваивание (=); операцию (==) – сравнение по площади. Написать демонстрационную программу.

8. Описать класс CPoint - точка. Описать класс прямоугольник CRectangle (см. задачу 7). Описать производный класс CTrapezoid – трапеция. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого квадрата); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения площади, метод получения периметра, деструктор, метод, проверяющий, является ли трапеция равнобедренной. Переопределить операцию присваивания (=). Для классов CRectangle и CTrapezoid определить метод, проверяющий две фигуры на пересечение. Написать демонстрационную программу.

9. Описать класс CPoint - точка. Описать класс четырехугольник CTetragon. Обязательные поля класса CTetragon: char* - имя прямоугольника, 4 объекта класса CPoint, 4 поля типа double – стороны четырех угольника. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого прямоугольника); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения периметра, деструктор. Переопределить операцию присваивания (=), операцию (<) – сравнение по длине периметра. Описать производный класс CRectangle – прямоугольник. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого квадрата); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения периметра, деструктор. Переопределить следующие операции: присваивание (=); операцию (<) – сравнение по длине периметра. Для классов CTetragon и CRectangle определить метод, определяющий факт включения одной фигуры в другую. Написать демонстрационную программу.

10. Описать класс CPoint - точка. Описать класс четырехугольник CTetragon (см. задачу 9). Описать производный класс СParallelogram – параллелограмм. Обязательные методы должны выполнять следующие действия: конструктор без параметров (нулевого параллелограмма); конструктор, принимающий в качестве параметра 4 точки, конструктор копирования; метод получения площади, метод получения периметра, деструктор. Переопределить следующие операции: присваивание (=); операцию (<) – сравнения по площади. Для классов CTetragon и СParallelogram определить метод, перемещения на плоскости. Написать демонстрационную программу.

 

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

1. Березин Б. И., Березин С. Б. Начальный курс С и С++. – М.: Диалог, 2000. – 288 с.

2. Дейтел Х. М., Дейтел П. Дж. Как программировать на C++.– М.: Бином, 2000.- 1024 с.

3. Джамса К. Учимся программировать на языке C++. – М.: Мир, 2000.- 320с.

4. Климова Л.М. Основы программирования на языке С++. М.: Изд-во «Приор», 1999. – 464 с.

5. Крячков А.В., Сухинова И.В., Томшин. В.К. Программирование на С и С++. Практикум – М.: Горячая линия-Телеком, 2000. –344с.

6. Подбельский В.В. Язык С++. – М.: Финансы и статистика, 2000.- 560с.

7. Стауструп Б. Язык программирования С++. – М.: Бином, 1999. – 991с.

8. Шилдт Г. Справочник программиста по С/C++. М.: Вильямс, 2001

 


[1] Идентификатор size_type является синонимом типа unsigned int.

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С++

 

 

Учебное пособие

 

 

Саратов 2006


 

УДК

ББК

 

П62 Шульга Т.Э. Программирование. Основы программирования на языке С++. Учебное пособие для студентов специальности «Математическое обеспечении и администрирование информационных систем» и направления «Бизнес-информатика». - Саратов: изд-во СГСЭУ, 2006.- 64с.

 

ISBN –

 

В пособии излагаются основы языка программирования С++, приведены решения типовых задач и рекомендуемые задания по каждой теме. В пособии описывается структура программы, написанной на С++, типы данных, используемые в языке, операции языка, конструкции выбора, циклов и передачи управления, рассматриваются динамические структуры данных, даются основы процедурного программирования и объектно-ориентированного программирования.

 

Рекомендует к печати ученый совет СГСЭУ.

 

Рецензенты кафедра теоретических основ информатики и информационных технологий СГСЭУ;

к. ф. - м. н. С.В. Папшев

 

ã Шульга Т.Э., 2006

ISBN –5-85559-083-6 ã Изд-во СГСЭУ, 2006


СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ. 4

ГЛАВА 1. Основы программирования на языке высокого уровня. 5

1.1. Структура программы на языке С++. 5

Задания. 7

1.2. Переменные. Основные типы данных. 7

Задание 1. Описание переменных и преобразование типов. 13

Задание 2. Форматирование вывода. 13

1.3. Основные операции. 14

Задания. 15

1.4. Конструкции выбора. 15

Задание 1. Обработка введенного символа. 17

Задание 2. Вычисление значения функции. 17

Задание 3. Применение разветвляющихся алгоритмов при решении простейших задач. 18

Задание 4. Mультиветвление. 18

1.5. Конструкции цикла и передачи управления. 19

Задание 1. Детерминированные циклы. Простейшие задачи. 23

Задание 2. Итерационные циклы. Простейшие задачи. 24

Задание 3. Одномерные массивы.. 24

Задание 4. Вложенные циклы.. 25

Задание 5. Двумерные массивы.. 26

Задание 6. Посимвольная обработка строк. 28

Задание 7. Сортировка массива. 29

1.6.Функции. 30

Задание 1. Определение и вызов функций. 34

Задание 2. Рекурсивные функции. 35

Задание 3. Использование библиотечных функций string.h. 36

Задание 4. Использование библиотечных функций stdio.h. 37

ГЛАВА 2. Динамические структуры данных. 38

Задание 1. Структуры.. 43

Задание 2. Динамический список. 46

Задание 3. Использование стеков и очередей. 49

ГЛАВА 3. Основы объектно-ориентированного программирования. 52

Задание 1. Описание простейшего класса. 58

Задание 2. Класс string. 61

Задание 3. Класс fstream.. 63

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

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




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 654; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.085 сек.