- •Введение
- •Глава 1. Основы.
- •Int main()
- •1.2. Методика создания программ в Microsoft Visual Studio.
- •Void main(){
- •1.3. Ввод-вывод.
- •1.4. Переменные и константы.
- •Int I; // объявление целочисленной переменной
- •42 // Десятичная константа
- •0X42 // шестнадцатеричная константа, начинается с 0х
- •042 // Восьмеричная константа, начинается с 0
- •1.5. Арифметические операции.
- •Void main()
- •1.6. Встроенные функции. Математические функции. Состав math.H.
- •Void main()
- •Int rand(void); // функция используется без аргумента
- •Глава 2. Операторы и выражения.
- •2.1. Логические выражения и операторы
- •2.1.1. Оператор if else
- •If (условие)
- •If (условие)
- •2.1.2. Конструкция if else if
- •Int number;
- •Int number;
- •2.1.3. Условный оператор.
- •2.1.4. Оператор switch.
- •Int dvalue;
- •2.2. Операторы цикла.
- •2.2.1. Оператор for
- •Void main()
- •Int I; // создаем переменную цикла
- •Void main()
- •Int I; // переменную цикла можно определить и вне цикла
- •2.2.2. Изменение шага цикла
- •Void main()
- •2.2.3. Цикл while.
- •2.2.4. Цикл do while
- •Void main()
- •2.3. Операторы break и continue
- •Void main()
- •Void main()
- •2.4. Типичные ошибки при использовании операторов цикла
- •Глава 3. Производные типы данных.
- •3.1. Ссылки и указатели.
- •Int test; // объявили целочисленную переменную
- •Int & s_test; // ошибка! ссылка не связана с переменной
- •Int *p1; // объявлен указатель на целое с именем p1
- •3.2. Массивы и строки.
- •Int z[10]; //массив из 10 целых чисел
- •Int ar[3]; // объявлен целочисленный массив из 3 элементов
- •Int varr[4]; // объявление массива
- •3.2.2. Многомерные массивы.
- •Int z[3][4]; //массив из 12 целых чисел
- •3.2.3. Строки
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •If(strstr(st,st2)) //если подстрока встречается, выводим
- •3.1.5. Динамическое определение одномерных массивов.
- •3.1.6. Динамические двумерные массивы.
- •3.1.7. Указатели, массивы и арифметика указателей.
- •Int tacs[3];
- •Void main()
- •3.2. Структуры
- •Int age; // элементы структуры
- •Int hours;
- •Int mins;
- •Void main()
- •Int hours;
- •Int mins;
- •Void main()
- •4. Функции, определяемые пользователем
- •4.1. Объявление и определение функции
- •Int max(int , int ); // в прототипе достаточно указать только тип и
- •Void main() {
- •Int MyRand(){
- •Int func(){ return 1;} // правильное выражение
- •Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с
- •Void swap(int p, int q)
- •Int bigger(int a,int b)
- •4.2. Передача параметров функций
- •5. Заголовочные файлы.
- •6. Работа с файлами
- •6.1 Простой файловый ввод/вывод
- •6.2 Тонкости работы с файлами
- •7.1. Определение классов.
- •Void main()
- •7.2. Как объявлять функции класса?
- •7.3. Конструкторы и деструкторы классов.
- •8. Графика OpenGl.
- •Void callback Draw()
- •Void main()
- •8.1. Создание анимации с помощью библиотеки xgl
- •Приложения Управление выводом
- •Управление шириной вывода
5. Заголовочные файлы.
Заголовочные файлы C++
Каждая создаваемая вами программа на C++ начинается с одного или нескольких операторов #include. Эти операторы указывают компилятору включить содержимое заданного файла (заголовочного файла) в вашу программу, как если бы программа содержала операторы, которые находятся во включаемом файле. Заголовочные файлы содержат определения, используемые компилятором для операций различных типов. Существуют заголовочные файлы, которые определяют операции В/В (ввода/вывода) C++, системные функции (например, функции, возвращающие текущие дату и время) и многое другое.
Заголовочные файлы, подобно программам на C++, представляют собой файлы в формате ASCII, содержимое которых вы можете просмотреть или напечатать. Чтобы лучше понять содержимое заголовочных файлов, найдите время для того, чтобы напечатать заголовочный файл IOSTREAM.H, содержимое которого вы будете использовать в каждой создаваемой вами программе на C++. Обычно заголовочный файл IOSTREAM.H расположен в подкаталоге с именем INCLUDE, который находится в каталоге, содержащем файлы компилятора C++. Используйте текстовый редактор, чтобы просмотреть и напечатать содержимое заголовочных файлов.
Замечание: Никогда не изменяйте содержимое заголовочных файлов. Это может привести к ошибкам компиляции в каждой создаваемой вами программе.
6. Работа с файлами
Небольшой объем информации можно передавать в программу с помощью клавиатуры, а результаты работы программы выводить на экран дисплея. Однако скоро становится ясным, что многие задачи требуют организации ввода/вывода информации из/в файл. Язык С++ поддерживает как старый способ работы с файлами, унаследованный от С, так и более новый, основанный на понятии потокового ввода/вывода. Файловый ввод/вывод в этом случае во многом подобен стандартному вводу/выводу (cin и cout) , основанному на понятии класса. Кратко о классах будет сказано далее, пока же мы рекомендуем запомнить некоторые формальные правила.
6.1 Простой файловый ввод/вывод
Для использования файлов следует:
подключить заголовочный файл fstream.h
создать объект класса fstream;
поставить этот объект в соответствие определенному файлу;
использовать его так же, как объект cin (для ввода) или cout (для вывода).
Имя объекта, предназначенного для работы с файлом, может быть любым, допустимым в С++. Например, fout, outFile, didi и т.д.
Рассмотрим возможные варианты работы с файлами на примерах. Вот так можно записать текст в файл.
fstream fin; // создаем объект класса fstream
fin.open("test",ios::in); // ставим ему в соответствие файл, открываем
//для чтения
fstream(fout);// допускается и такой тип объявления
fout.open (”a.dat”, ios::out); // а в этот файл будем записывать
char* str=”test string”;
fout>>str; // записываем строку в файл
// по окончанию работы с файлами, их следует закрыть:
fin.close();
fout.close();
В приведенном примере можно совместить объявление и инициализацию файловой переменной:
fstream fin("test",ios::in);
fstream fout(”a.dat”, ios::out);
Организовать корректное чтение из файла немного сложнее. Дело в том, что текстовый по типу файл заканчивается служебным символом eof – конец файла. При попытке прочесть информации больше, чем есть в файле, произойдет ошибка. Чтобы правильно произвести чтение из файла обычно используют цикл while() с проверкой конца файла встроенной функцией eof(). Следующий листинг показывает, как подсчитать количество символов в текстовом файле.
setlocale(LC_ALL,"Russian");
fstream fin("test.txt",ios::in);
char temp;
int counter=0;
while(!fin.eof()) // пока не конец файла
{
fin>>temp; //считываем символ в temp
counter++; //подсчет символов
}
cout<<”всего символов в файле равно ”<<counter<<endl;
При записи следует выполнить схожие действия. Предположим, в файле 1.txt содержится последовательность целых чисел. Следует переписать их в другой файл – 2.txt.
#include <fstream.h>
void main()
{
int temp, i=0;
fstream f("1.txt", ios::in);
fstream f2("2.txt", ios::out);
while(!f.eof) // чтение в цикле с проверкой конца файла
{
f>>temp;
i++;
f2<<i<<" - "<<temp<<endl;
}
f.close();
f2.close();
}
В следующем примере рассмотрен процесс «пузырьковой» сортировки элементов массива, которые считываются из одного файла, например, 1.txt и уже отсортированные по возрастанию записываются в другой файл (2.txt).
#include <fstream.h>
void main()
{
//Объявление вспомогательной переменной temp и счетчика,
//счетчик в начале равен нулю
int temp, counter=0;
//Открываем файл для чтения
fstream f("1.txt", ios::in);
while(!f.eof)
{
f>>temp;
counter++;
}
f.close();
//Объявление динамического массива типа int
// с количеством элементов counter
int *b=new int[counter];
// снова открываем файл и считываем числа в массив
f.open("1.txt", ios::in);
for(int i=0; i<counter; i++)
{
f>>b[i];
}
// мы последовательно сравниваем
// соседние элементы массива и, если надо, меняем их местами
// Сортировку повторить
// counter раз
for(i=0; i<counter-1; i++)
for(int j=i+1; j<counter; j++)
if(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
//Открываем второй файл на запись
fstream f2("2.txt", ios::out);
//Выполняем запись в файл
for(i=0; i<counter; i++)
{
f2<<b[i]<<" ";
}
f.close();
f2.close();
}