Технология подготовки и решения задачи на компьютере

Технология подготовки и решения задачи на компьютере включает:

o ознакомление с поставленной задачей – анализ исходных данных, условий и целей решения задачи, формулировку требований к программе, разработку точного описания того, что она должна делать и каких результатов необходимо достичь с ее помощью;

o составление плана решения – определение структур данных, состава и последовательности требуемых преобразований, выбор способа решения, разработку алгоритма;

o осуществление решения – переработку согласно составленному плану входной информации в выходную информацию, разработку программы с использованием той или иной технологии программирования;

o проверку правильности решения задачи – отладку, тестирование, счет, интерпретацию результатов, получение выводов. Полученный вариант программы подвергается систематическому тестированию. Нельзя делать вывод, что программа работает правильно, лишь на том основании, что она выдала результаты (результаты не обязательно будут правильными, в программе может оставаться большое количество логических ошибок). Для каждой программы обязательно проводятся работы по обеспечению ее качества и эффективности, анализируются и улучшаются временные характеристики.

 

Функция как компонент структуры программы

Функция в программировании — это поименованная часть программы, которая может вызываться из других частей программы нужное количество раз. Логически программа на С++ представляет собой набор функций, одна из которых, главная, имеет имя main() (в простейшем случае функция main() является единственной). Программа начинает работу с функции main(), являющейся точкой входа в программу и получающей управление первойпосле запуска программы на выполнение.

Обычно программа на С++состоит из большого числа небольших функций. Рассмотрим примеры программ, демонстрирующих вывод в стиле С и в стиле С++:


/* proba_1_1.cpp вывод в стиле С */ #include[4] <stdio.h> //для ввода/вывода #include <conio.h> //для _getch() int main() { printf ("Ivanov Ivann"); printf ("Okn"); _getch();// функция _getch() приостанавливает выполнение программы до «нажатия любой // клавиши», это позволит увидеть результат вывода return 0[5]; }
//proba_1_2.cpp вывод в стиле С++ */ #include <iostream> //для ввода/вывода #include <conio.h> //для _getch() int main() { std[6]::cout << "Ivanov Ivann"; std::cout << "Ok"<< std::endl[7] ; _getch(); return 0; }
//proba_1_3.cpp вывод в стиле С++ с использованием пространства имен std*/ #include <iostream> #include <conio.h> using namespace std[8]; int main() { cout << "Ivanov Ivann"; cout << "Ok"<< endl; _getch(); return 0; }

Результат выполнения любой из программ в режиме консольных приложений:

Ivanov Ivan

Ok

Пояснения к примерам:

Для удобства работы целесообразно в начало каждого текстового файла программы помещать строку комментария с именем файла. В третьей и четвертой строках программ – директивы препроцессора, обеспечивающие включение в программу средств связи со стандартными потоками ввода/вывода данных и прототипа функции _getch(). В строке, содержащей заголовок функции main(),служебное словоint указывает, что функция возвращает целое значение. Круглые скобки после main()соответствуют синтаксису заголовка любой функции. В них помещается, при необходимости, список параметров.

В фигурных скобках представлено тело функции (последовательность описаний, определений и операторов, каждое из которых заканчивается символом «точка с запятой»). В наших примерах тело функции содержит только операторы вывода текста. С++ обеспечивает выполнение вывода в стандартный поток std::cout с использованием оператора <<, а ввода из стандартного потока std::cin – с использованием оператора >>. В то же время, доступны, как и в С, функции вывода printf() и ввода scanf().

Одна из принципиальных особенностей С++ – расширение действия стандартных операций, или перегрузка. Конструкция (лексема) <<,при условии, что слева от нее находится имя объекта std::cout ( std::cout <<) означает операцию«поместить в поток»,в противном случае,означает, как и в языке С, операцию сдвига влево двоичного представления значения левого операнда (например, запись x <<2 означает сдвиг значения переменной x на 2 разряда влево, т.е. умножение на 4).

Оператор return – оператор возврата, завершающий выполнение программы и передающий в точку ее вызова значение выражения (returnвыражение;). Для функции main() это значение должно быть равно нулю (return0;), если исполнение программы прошло успешно. Так как программа «запускается» на исполнение по команде операционной системы, то и возврат будет выполнен к операционной системе (точнее, в стандартный модуль, который автоматически «прикомпоновывается» к программе и из которого осуществляется ее вызов).

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

Формат заголовка функции:

void имя_функции ( ) // нет ни параметров, ни возвращаемого значения

void имя_функции (void ) // нет ни параметров, ни возвращаемого значения

void имя_функции (список_параметров) // есть параметры и нет возвращаемого значения

тип_функции имя_функции (список_параметров)

// есть параметры и есть возвращаемое значение

тип_функции имя_функции ( ) // нет параметров и есть возвращаемое значение

 

Прототип функции – это заголовок функции, заканчивающийся символом «;» :

char* strcpy(char*, const char*);

Объявление функции–указание ее прототипа.

Сигнатура функции– часть заголовка функции, позволяющая средствам трансляции идентифицировать функцию среди других. В С++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её параметров, что составляет сигнатуру функции в этом языке: заголовок функции, за вычетом типа_функции:

имя_функции (список_параметров)

Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса:

Complex::add (Complex& x, Complex& y)
//функция
add принадлежит классу Complex

Тело функции – группа операторов, реализующая алгоритм решения некоторой части задачи. Тело функции должно быть заключено в фигурные скобки:

{описание данных

операторы;

return [выражение]; // [выражение ] может отсутствовать

}

Тип функции – это тип возвращаемого функцией значения. Оператор return выражение; возвращает значение выражения в точку вызова функции. Оператор return; записываемый без выражения означает, что функция не имеет возвращаемого значения и имеет тип void. При этом управление из функции возвращается либо при выполнении этого оператора, либо при достижении правой фигурной скобки, завершающей функцию (при отсутствии ключевого слова return).

 

return; //функция не возвращает значения и имеет тип void;

return 3; //возвращаемое функцией значение = 3;

return (a + b); //возвращаемое значение = значению выражения (а + b);

//скобки необязательны, используются для улучшения читаемости кода

Тело функции main() – это блок программы. Любой фрагмент текста программы в фигурных скобках называют составным оператором (блоком операторов) или просто блоком. В общем случае, тело любой функции может содержать сколько угодно блоков.

Определение функции–это совокупность ее заголовка и тела.

Вызов функции – указание имени функции и в круглых скобках списка фактических параметров (аргументов), которые необходимо ей передать (если они есть):

_getch(); //вызов функции ожидания нажатия клавиши на клавиатуре strcpy(s,"aaaaa");//вызов функции копирования строки "aaaaa" в строку s int i = f1(5);//переменной i присваивается значение результата вызова функции f1 f2(x); double x = sin(1.2) + cos(0.7);//переменной x присваивается значение суммы результатов вызова
//функций синуса и косинуса от заданнных аргументов

Оператор вызова функции состоит из ее имени, за которым в круглых скобках располагается список фактических параметров (если они есть) или только из идентификатора функции, если параметров нет. Выполнение оператора вызова функции приводит к активизации действий, описанных в ее теле: если в программе встречается имя функции, то происходит ее вызов (обращение к ней), т.е. функции передается управление. После завершения работы функции управление возвращается в точку ее вызова. Функция, которая вызывает какую-либо другую функцию, называется вызывающей функцией, а функция, которую вызывают на выполнение, называется вызываемой функцией.

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

double CUB_X (double x)

{
return (x*x*x);

}

void main ()

{

double a = 10.0, y;

y = CUB_X(a);

return ;
}

 

Вызвать функцию можно после ее объявления или определения. Объявление функции из стандартной библиотеки выполняется подключением соответствующего файла директивой препроцессора #include.

Если функция возвращает значение некоторого типа, то необходимо принять (сохранить) это значение в переменную того же типа, либо вывести его на экран, либо использовать в составном выражении. Например, функция sqrt() (#include <math.h>), извлекающая квадратный корень, принимает как аргумент значение, из которого корень следует извлечь, и возвращает значение этого корня:

double x=2.0; double dbl = sqrt(x); cout << dbl << " " << sqrt(5.0);

С++ не позволяет определять функции внутри других функций. Связь между функциями осуществляется с помощью передаваемых функции фактических параметров (аргументов) и возвращаемых значений или через глобальные (внешние) переменные. Определение «внешние» используется главным образом для того, чтобы подчеркнуть отличие от «внутренних» информационных объектов – аргументов и переменных, определяемых внутри функции.

 

Примеры простых программ