ЛЕКЦИЯ 1
РАЗРАБОТКА И ВЫПОЛНЕНИЕ ПРОГРАММ
В СРЕДЕ BUILDER C ++
1.1 Разработка консольного приложения в среде BUILDER C ++
BUILDER C ++ - это инструмент профессионального программирования в среде Windows. Основная сила пакета – использование библиотек классов. Специальные программы-мастера пишут за пользователя значительную часть проекта – программы. Интегрированная среда BUILDER C ++ дает возможность создавать и использовать самые сложные проекты. Программа в этой среде – это проект, который состоит из набора файлов, размещенных в рабочих областях. В среде можно также реализовывать обычные (без использования стандартных классов) программы на языке С++. Для этого используется консольный режим.
Для реализации программы необходимо последовательно выполнить следующие действия:
Запустить среду BUILDER C ++;
Выполнить команду File/Close all.
Выполнить команду File/New, появится окно New, в нем выбрать Other.
Переходим на вкладку New Items и выбираем из списка строку Consol Wizard с установками
Sourсe Type
Use VCL
C++ Console Application
И подтверждаем их нажатием ОК.
В окне разрабатываемого приложения появится имя Unit1.cpp.
5. Для записи файла со своим именем на диск выполняем File/Save project as или File/Save all.
Далее, используя меню, выбираем или формируем свой каталог, в котором будем работать с проектом. Формирование отдельной папки для проекта обязательно! При этом название модуля Unit1.cpp лучше не изменять. Далее выбираем название своего проекта, например Pro1, который будет создан в виде файлов Pro1.bpr, Pro1.res, Unit1.cpp .
6. Если мы продолжаем работу над программой, с которой работали раньше, используем команду File/Open Projects и открываем соответствующий файл с расширением .bpr.
7. Если необходимый файл с расширением .сpp находится на дискете, следует вначале создать проект и в нем внутри заменить его файл (.cpp) на файл с расширением .cpp, который находится на дискете. Для этого можно использовать программу работы с файлами Windows Comander или Far .
8. Набираем текст программы на С++, откомпилируем и выполним его командой Run нажатием соответствующих иконок или клавишами F9, Alt+F9.
Структура программы
Программа представляет собой последовательность инструкций в машинных кодах, которые управляют поведением вычислительного средства. каждая программа на языке С++ включает в себя подключение заглавных файлов с помощью директивы препроцессора #include<имя заглавного файла.h> (include – включайте), главную функцию main() и, если это необходимо, несколько других функций, созданных пользователем.
Общая структура простой программы на языке С++ имеет вид:
#include<имя заглавного файла.h>
void main()
{тело главной функции;}
Спецификатор типа void главной функции показывает, что она не возвращает никакого результата.
Фигурные скобки означают начало и конец блока вычислений, и могут быть вложены сколько угодно раз.
Комментарии. В процессе создания программы используются комментарии. Текст комментариев игнорируется компилятором, но позволяет программисту описывать значение той или иной части программы. В языке С++ используются две разновидности комментариев:
/* текст */ - многострочный комментарий, который не может быть вложенным и
// текст - одно строчный комментарий до конца строки.
Переменные и типы данных. Для того, чтобы программа могла на протяжении своего выполнения сохранять определенные данные, используются переменные и константы. Одним из базовых понятий свойств программы есть идентификатор – имя переменной, имя функции или метка. В программе идентификатор может содержать латинские буквы, цифры, символ подчеркивание и обязательно начинается с буквы или символа подчеркивание. Идентификатор не должен совпадать с ключевыми словами. Ключевые слова – это зарезервированные языком идентификаторы, которые непосредственно используются для написания программ.
Для использования переменной в программе она должна быть объявлена. Создание идентификаторов осуществляется про таком объявлении.
Переменная – это объект программы, который занимает в общем виде насколько ячеек памяти, и необходим для сохранения данных. При объявлении переменной для нее резервируется область памяти, размер которой зависит от конкретного типа переменной. Любая константа, переменная, значения или функции выражений в языке С++ характеризуются своим типом.
Ниже приведен перечень базовых типов переменных и их размер в байтах.
Таблица 1.1.
Основные типы данных для ПК на базе платформы Intel
-
Тип
Размер, байт
Значение
Bool
1
true (1) или false(0)
unsigned short int (неподписанный короткий)
2
от 0 до 65 535
short int (короткий)
2
от –32 768 до 32 767
unsigned long int (неподписанный длинный)
4
от 0 до 4 294 967 295
long int (длинный)
4
от –2 147 483 648 до 2 147 483 647
int (16 разрядов)
2
от –32 768 до 32 767
int (32 разряда)
4
от –2 147 483 648 до 2 147 483 647
unsigned int (16 разрядов)
2
от 0 до 65 535
unsigned int (32 разряда)
4
от 0 до 4 294 967 295
Char (символ)
1
от 0 до 256
Float (плавающий тип)
4
от 1.2е-38 до 3.4е38
Double (двойной)
8
от 2.2е-308 до 1.8е308
long double
10
от 3.4е-4932 до 3.4е 4932
Void (пустой, не имеет значения)
2 или 4
–
Например,
bool dd = true; - логическая переменная dd=1;
bool dd1 = 1; - логическая переменная dd1=true;
int a = 1, b = 0; - целые переменные a = 1, b = 0;
сhar sim =’A’; - символическая переменная sim =’A’;
float Age = 18.5; - десятичная переменная Age = 18.5 плавающего типа;
void MyFunction(); - функция не возвращает никакого значения;
double Pi; - переменная удвоенной точности.
Константы отличаются от переменных тем, что значение, присвоенное константе первоначально, не может быть изменено на протяжении выполнения всей программы. Объявление констант происходит по следующей схеме:
сonst [тип] идентификатор = значение;
Например:
const double Pi = 3.1415; // константа Pi принимает значение 3.1415;
const a=1; // по умолчанию тип int.
Ввод-вывод данных. В процессе ввода-вывода все данные рассматриваются как поток отдельных байтов. Функции ввода-вывода для потока позволяют обрабатывать данные разных размеров и форматов: от одиночного символа до больших структур данных. Программист может использовать функции или библиотеки, разрабатывать собственные и включать их в библиотеку. Для доступа к библиотеке этих классов нужно включить в программу соответствующие файлы заголовков, например:
#include <iostream.h> .
По умолчанию стандартный ввод, вывод и вывод сообщений об ошибке относятся к консоли пользователя (клавиатура и экран). Это означает, что всякий раз, когда программа ожидает ввода со стандартного потока, данные должны поступать с клавиатуры, а если программа выводит, то на экран.
Наиболее часто в С++ используется потоковый ввод данных, операции которого включены в состав классов istream (stream – поток) или iostream. Он может осуществляться с определенным в этих классах входным потоком cin или выходным потоком, который определен пользователем. Для чтения символов из этого потока указывается операция выбора из потока, которая обозначается с помощью символов “ >> “. Это перегруженная операция, которая определена для всех простых типов и показателя на char.
Формат записи оператора cin имеет вид:
cin >> values ; (values – значения)
Например, для ввода значений переменных х и у можно написать:
cin >> x >> y;
Вывод данных может быть неформатированным и форматированным. Чаще всего для вывода используется определенная операция <<, которая записывается вместе с именем выходного потока cout. Таким образом, запись:
cout << x;
обозначает вывести значение переменной х (или записать в поток). Этот оператор выбирает необходимую функцию преобразования данных в поток байтов.
Формат записи cout :
cout << data [ << data << "\n"];
где data – это переменные, константы или выражения, "\n" (то же самое, что и endl) – управляющий символ перехода на начало новой строки.
Для дополнительного управления выходными данными используются манипуляторы setw(n) и setprecision(k) (precision – точность). Манипулятор setw(n) служит для указания длины поля, которое выделяется для вывода следующих данных (здесь n – количество позиций в строке), setprecision(k) предназначен для указания количества позиций в дробной части действительных чисел. Для использования этих манипуляторов нужно подключать заглавный файл <iomanip.h>.
Для форматированного ввода данных используется функция scanf из заглавного файла <stdio.h>. Функция scanf имеет изменяющееся число параметров, но как фактические параметры она использует адреса переменных, а не их значения. При этом перед соответствующим параметром ставится знак & - символ выбора адреса переменной. Например, &x обозначает «адрес переменной х», а не значение, которое эта переменная имеет в данный момент. Строка форматов функции scanf указывает, какие данные ожидаются на входе. Если функция встречает в форматной строке знак %, за которым всплывает знак преобразования, то она будет пропускать на входе символы до тех пор, пока не встретит какой-нибудь непустой символ. Таким образом, функция scanf изменяет значение переменных в программе.
Форма записи этой функции имеет вид:
scanf ( "строка форматных кодов", список имен переменных ); .
Для форматированного вывода данных используется функция из того же заглавного файла <stdio.h>. Чаще всего функция printf используется для вывода значений переменных. Первым аргументом в обращении к функции ставится строка форматов, а последующими, если они есть, выводимые объекты.
Каждая спецификация преобразования отвечает одному из аргументов, которые всплывают за форматной строкой, и между ними устанавливается взаимно однозначное соответствие, например:
printf ("Значение а, b, с равны: %d %d %d \n", a, b, c);
Здесь буква d в спецификации преобразования указывает, что значение аргумента должно быть напечатано как десятичное целое число.
При выводе используются те же спецификации, что и при вводе:
% с – для отдельного символа;
% s – для символьной строки;
% x – для шестнадцатеричной буквы;
% 0 – для восьмеричных чисел;
% f – для чисел в плавающей форме.
Использование математических функция в языке С++ требует подключение заглавного файла #include <math.h>
Таблица 1.2
Математические функции заглавного файла <math. h>
Прототип функции |
Имя |
Содержание |
double acos (double _x); |
acos (x) |
Арккосинус |
double asin (double _x); |
asin (x) |
Арксинус |
double atan (double _x); |
atan (x) |
Арктангенс |
double atan2 (double _y, double _x); |
atan2 (y, x) |
Арктангенс от y/x |
double ceil (double _x); |
ceil (x) |
Округление в большую сторону |
double cos (double _x); |
cos (x) |
Косинус x, в радианах |
double cosh (double _x); |
cosh (x) |
Косинус, гиперболический |
double exp (double _x); |
exp (x) |
eх, e в степени x |
double fabs (double _x); |
fabs (x) |
Абсолютное значение |x| типа double |
double floor (double _x); |
floor (x) |
Возвращает ближайшее целое, не больше x |
double fmod (double _x, double_y); |
fmod (x) |
Остаток от деления x на y |
double log (double _x); |
log (x) |
Натуральный логарифм |
double log10 (double _x); |
log10 (x) |
Десятичный логарифм |
double pow (double _x, double_y); |
pow (x, y) |
xу, x возведенные в степень y |
double sin (double _x); |
sin (x) |
Синус x, в радианах |
double sinh (double _x); |
sinh (x) |
Синус, гиперболический |
double sqrt (double _x); |
sqrt (x) |
Корень их x, x>0 |
double tan (double _x); |
tan (x) |
Тангенс x, x в радианах |
double tanh (double _x); |
tanh (x) |
Тангенс, гиперболический |
int abs (int _x); |
abs (x) |
Модуль x типа int |
double atof (const char*_s); |
atof (s) |
Преобразует строку символов в число с плавающей запятой |
double hypot (double_x, double_y); |
hypot (x, y) |
Корень из (x2+y2) |
long labs (long _x); |
labs (x) |
Абсолютная величина типа long |x| |
double pow10 (int _p) |
pow10 (p) |
Возвращает 10р |
В скобках функции в первой колонке указаны типы значений, которые приобретает функция.
Пример 1.1. Вычислить значение площади круга по его радиусу, который вводится с клавиатуры.
#include <iostream.h>
void main()
{ const double Pi = 3.1415;
float Rad; double Square=0;
cout<<”Input radius, radius =”; cin>>Rad;
Square=Pi*Rad*Rad;
cout<<"Square = "<<Square<< endl; }
Пример 1.2. По введенным значения подсчитать сумму денег (пенсии), которая будет на вашем счету в банке через определенное количество лет.
#include<iostream.h>
//расчет накопительного вклада
void main()
{
int i,j,let;
double proce,mes,sum=0.0,vsnos=0.0;
cout<<"vvedite mes vklad"<<endl;
cin>>mes;
cout<<"vvedite godovoy proce"<<endl;
cin>>proce;
cout<<"vvedite kol-vo let"<<endl;
cin>>let;
for(i=1;i<let;i++)
{
for(j=1;j<12;j++)
{sum=sum+mes;
vsnos=vsnos+mes*1.0;}
sum=sum+proce*sum*0.01;
}
cout<<"resultat nakoplenia"<<endl;
cout<<" za "<< let<<" let "<<" vsnos= "<<vsnos <<endl;
cout<<"summa pensia = "<<sum<<endl;
}
1.3. Контрольные вопросы и задания
1. Расскажите о структуре программы на языке С++.
2. Какие типы данных вам известны?
3. Чем отличаются переменные от констант?
4. Как можно ввести информацию в компьютер?
5. Как можно вывести информацию?
6. Что такое консоль?
7. Дайте определение понятиям «операционная система», «компилятор», «система программирования».
8. Назовите среду для реализации программ языком С++.
Лекция 2 вычисление значений функций
2.1. Использование оператора условного перехода.
Оператор условного перехода имеет такой формат записи:
If (а) оператор 1 ; еlse оператор 2 ;
где А – выражение. Если значение этого выражения «истина» (не нуль), то выполняется оператор 1, если оно «неправда», выполняется оператор 2; в случае, когда отсутствует ветка еlse – выполняется следующий оператор.
2.2. Операторы цикла.
В языке С++ используются три оператора цикла: while, do, for.
Оператор цикла while (А) оператор 1 ; с предусловием оператор 1 – какой-либо простой, сложный или пустой оператор, А – любое допустимое выражение.
Выполняется этот оператор так: если результат выражения А не равен нулю («истина»), то выполняется цикл (т.е. оператор 1), а если равен нулю («неправда»), то цикл не выполняется и управление передается следующему за while оператору.
Оператор цикла for имеет такую форму записи:
for ( [выражение1]; [выражение2]; [выражение3] ) оператор;
где выражение1 – выражение инициализации, которое обычно используется для установки начального значения; это оператор присвоения; выражение2 – условие, которое определяет при каком условии цикл повторяется; выражение3 – итерации, которое определяет шаг изменения для переменных, которые управляют циклом после каждого выполнения.
Оператор реализуется так:
- сначала выполняется выражение инициализации (эта рекомендация может использоваться до оператора for);
- вычисляется значение условного выражения;
- если результат – «истина» (не равен нулю), то выполняется оператор цикла;
- снова проверяется условие;
- как только условное выражение становится равным нулю («неправда»), управление передается оператору, который размещается в программе после оператора цикла for.
Поскольку проверка условия выполняется перед циклом, то оператор в середине цикла может ни разу не выполняться, если условие порвоначально ошибочно.
Оператор цикла do обычно используется в тех случаях, когда тело цикла должно выполняться хоты бы один раз, и имеет такую структуру записи:
do
оператор
while (А);
где А – условное выражение.
Выполняется оператор do так: сначала выполняется вход в тело цикла и выполняется оператор (он может быть простой или сложный), после этого проверяется условие и, если оно выполняется, т.е. «истина» (не равно нулю), то цикл повторяется, а если «неправда» - происходит выход из цикла.
Пример:
Вычислить значение функции , найти ее максимальное значение и соответствующее значение аргумента на отрезке с шагом .
#include <iostream.h>
#include <math.h>
void main()
{ double x,xm,x1=0.0,x2=3.2,y,ym,
hx=0.2;
cout<<" znachenia funkcii"<<endl;
xm=x1;
ym=fabs(pow(xm,1.0/3)*sin(xm));
for(x=x1;x<=x2;x+=hx)
{ y=fabs(pow(x,1.0/3)*sin(x));
if(y>ym)
{ym=y; xm=x;}
cout<<"x="<<x<<"\t"<<"y="<<y<<endl;
}
cout<<"xmax="<<xm<<"\t"<<"ymax="<<ym<<endl;
cin>>xm;
}
Результат выполнения программы имеет следующий вид:
Задача домой:
Вычислить функцию:
При каком значении х функция будет минимальной?