Обратим внимание на то, что при написании программ необходимо иметь в виду следующие алгоритмы, которые встречаются и при вычислении значений функций.
1) Ограничение на входные данные приводит к необходимости проверки при их введении. Для этого можно использовать следующие циклы.
а) цикл с предусловием while (условие).... Условие должно принимать значение «истина» при неправильном вводе данных. Например, необходимо ввести натуральное число n. Это осуществляется следующим циклом с предусловием:
cin >> n;
while (n <= 0)
{
cout << ”Введите натуральное число “;
cin >> n;
}
б) цикл с постусловием do... while (условие). Условие должно принимать значение «истина» при неправильном вводе данных. Например, необходимо ввести натуральное число n. Это осуществляется следующим циклом с постусловием:
do
{
cout << ”Введите натуральное число “;
cin >> n;
}while (n <= 0);
2) Следует помнить о необходимости проверки аргументов функций, если область определения функции отлична от всего пространства.
3) Еще один часто встречающийся алгоритм при вводе данных – необходимо ввести n элементов массива x[i], значения которого уникальны. Это можно осуществить с помощью следующего цикла с параметрами:
for(i=0; i<n; i++)
{
cout << "Введите x("<<i+1<<") = ";
cin >> x[i];
for(j=0; j<i; j++)
if(x[i] == x[j]) // Если встретился такой же элемент,
{ // необходимо его ввести вновь,
i--; // причем его индекс будет повторяться
break; // до тех пор, пока значение не будет
} // уникальным.
}
Листинг 1.1. Задана прямая линия ax + by + c =0, причем коэффициенты a и b не равны нулю (необходимо проверить при вводе). Определить, лежит ли точка с координатами (x 0, y 0) выше или ниже прямой. Вычислить y= ln(5+3 x) при x = d+hk, k =0, 1, 2, …, 10, если точка лежит выше прямой, и y =0, если точка лежит на прямой линии или ниже ее. Вывести на экран дисплея информацию, если функцию вычислить нельзя.
//stdafx.h
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <math.h> // Библиотека математических функций
#include <tchar.h>
#include <iostream>
using namespace std; // Использовать пространство имен std
//L1_1.cpp
#include “stdafx.h”
int main()
{
setlocale(LC_CTYPE, “russian”); // Функции обработки символов
double x,y,a,b,c;
do // Контроль того, что a и b не равны нулю
{
cout << «Введите коэффициенты прямой a b c «;
cin >> a >> b >> c;
}while(a == 0 || b == 0);
cout << «Введите начальную точку и шаг «;
cin >> d >> h;
cout << ’\n’;
cout << «x y Результат\n\n»;
cout.precision(5); // Вывод 5 значащих цифр
for(i=0; i<=10; i++)
{
x=d+i*h;
if(5+3*x <= 0)
{
cout.width(32); // Выводить в 32 позициях
cout << «Функцию вычислить нельзя\n»;
}
else
{
y=log(5+3*x);
if(a*x+b*y+c<0)
{
cout.width(4); // Выводить в 4 позициях
cout << x;
cout.width(8); // Выводить в 8 позициях
cout << y;
cout << «Точка лежит под прямой \n»;
}
else
{
cout.width(4); // Выводить в 4 позициях
cout << x;
cout.width(8); // Выводить в 8 позициях
cout << 0;
cout << «Точка лежит над прямой \n»;
}
}
}
return 0;
}
Результат работы программы листинга 1.1 приведен на рис. 1.1:
Рис. 1.1. Результат работы программы листинга 1.1