1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
program UpdateGraph; uses Graph,Crt; var xMax,yMax,i:integer; st:string[10]; x:extended; procedure GraphInit; var grDriver,grMode,ErrCode: integer; begin grDriver := Detect; InitGraph(grDriver, grMode,''); ErrCode := GraphResult; if ErrCode <> grOk then begin Writeln('Graphics error:', GraphErrorMsg(ErrCode)); ReadKey; Halt; end; xMax:=GetMaxX; yMax:=GetMaxY; end; procedure Body;{MainForm} begin Line(xMax-140,3,xMax-140,yMax-3); Line(62,450,xMax-140,450); OutTextXY(508,10,'y = a*cos(x)+b*x'); OutTextXY(507,300,'a ='); OutTextXY(507,317,'b ='); OutTextXY(386,461,'Close'); Rectangle(380,455,430,474); OutTextXY(186,461,'Input'); Rectangle(180,455,230,474); OutTextXY(266,461,'Clear'); Rectangle(260,455,310,474); OutTextXY(536,34,'x'); OutTextXY(590,34,'y'); Line(516,45,623,45); Line(562,30,562,270); Rectangle(xMax-123,30,xMax-16,270); end; procedure Coord;{CoordinateNet} var NumHoriz,NumVert:string[10]; begin for i:=-10 to 10 do begin Str(i,NumHoriz); case i of 0..9:OutTextXY(270+(21*i),438,NumHoriz); 10:OutTextXY(475,438,NumHoriz); -9..-1:OutTextXY(262+(21*i),438,NumHoriz); end; end; for i:=-10 to 10 do begin Str(i*10,NumVert); case i of -9..-1:OutTextXY(33,221+(-21*i),NumVert); 0:OutTextXY(48,222,NumVert); 1..9:OutTextXY(40,220+(-21*i),NumVert); 10:OutTextXY(33,12,NumVert); end; end; SetColor(DarkGray); Rectangle(62,14,482,433); {Vertical lines} for i:=1 to 20 do begin case i of 1..10:Line(41+(21*i),14,41+(21*i),433); 12..19:Line(41+(21*i),14,41+(21*i),433); 20:Line(41+(21*i),35,41+(21*i),433); end; end; {Horizontal lines} for i:=1 to 19 do begin case i of 1..9:Line(63,14+(21*i),482,14+(21*i)); 11..19:Line(63,14+(21*i),482,14+(21*i)); end; end; SetColor(LightGreen); Line(272,14,272,433); Line(62,225,482,225); SetColor(White); end; procedure xValues; begin for i:=1 to 21 do begin x:=-11+i; Str(x:2:0,st); OutTextXY(530,44+(10*i),st); end; end; Begin GraphInit; Body; Coord; xValues; ReadKey; End. |

От автора: В данной статье мы познакомимся со специальным свойством NaN (Not-A-Number), которое является значением, представляющим не-число.
Тип числа в JavaScript содержит целые числа и числа с плавающей запятой:
|
const integer = 4; const float = 1.5; typeof integer; // => ‘number’ typeof float; // => ‘number’ |
Плюс есть два специальных числовых значения: Infinity (число больше, чем любое другое число) и NaN (представляющее концепцию «не число»):

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
|
const infinite = Infinity; const faulty = NaN; typeof infinite; // => ‘number’ typeof faulty; // => ‘number’ |
Хотя непосредственная работа с NaN редко встречается, оно может неожиданно появиться после неудачной операции с числами.
Давайте подробно рассмотрим специальное значение NaN: как проверить, содержит ли переменная NaN, и сценарии, которые в которых генерируется значения «не число».
1. Число NaN
Тип числа в JavaScript — это набор всех числовых значений, включая «не число», положительную бесконечность и отрицательную бесконечность.
«Not A Number» можно получить с помощью специального выражения NaN или как свойство глобального объекта или функции Number:
|
typeof NaN; // => ‘number’ typeof window.NaN; // => ‘number’ typeof Number.NaN; // => ‘number’ |
«Не число» — это значение, которое не представляет действительное число, несмотря на то, что оно имеет тип числа. Через NaN полезно представлять ошибочные операции с числами. Например, умножение числа на undefined не является допустимой операцией, поэтому дает NaN:
Также попытка разобрать недопустимую числовую строку, например, ‘Joker’ приводит к NaN:
|
parseInt(‘Joker’, 10); // => NaN |
2. Проверка на равенство с NaN
Интересным свойством NaN является то, что оно не равно ни одному значению, даже самому себе:
Это поведение полезно для определения, является ли переменная NaN:
|
const someNumber = NaN; if (someNumber !== someNumber) { console.log(‘Is NaN’); } else { console.log(‘Is Not NaN’); } // logs «Is NaN» |
Выражение someNumber !== someNumber равно true, только если someNumber является NaN. Таким образом, приведенный выше фрагмент регистрирует в консоли «Is NaN». JavaScript содержит встроенные функции для определения NaN: isNaN() и Number.isNaN():
|
isNaN(NaN); // => true isNaN(1); // => false Number.isNaN(NaN); // => true Number.isNaN(1); // => false |
Разница между этими функциями заключается в том, что Number.isNaN() не преобразуется свой аргумент в число:
|
isNaN(‘Joker12’); // => true Number.isNaN(‘Joker12’); // => false |
isNaN(‘Joker12’) преобразует аргумент ‘Joker12’ в число, которое является NaN. Таким образом, функция возвращает true.
С другой стороны, Number.isNaN(‘Joker12’) проверяет аргумент без преобразования. Функция возвращает false, потому ‘Joker12’ не равно NaN.
3. Операции, дающие NaN
3.1 Парсинг чисел
В JavaScript вы можете преобразовать числовые строки в числа. Например, вы можете легко преобразовать строку ‘1.5’ в число с плавающей запятой 1.5:
|
const numberString = ‘1.5’; const number = parseFloat(numberString); number; // => 1.5 |
Когда строка не может быть преобразована в число, функция синтаксического анализа возвращает NaN: указывая, что синтаксический анализ не выполнен. Вот некоторые примеры:

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее
|
parseFloat(‘Joker12.5’); // => NaN parseInt(‘Joker12’, 10); // => NaN Number(‘Joker12’); // => NaN |
При парсинге чисел рекомендуется проверить, не является ли результат парсинга NaN:
|
let inputToParse = ‘Invalid10’; let number; number = parseInt(inputToParse, 10); if (isNaN(number)) { number = 0; } number; // => 0 |
Парсинг inputToParse не удался, поэтому parseInt(inputToParse, 10) возвращается NaN. Условие if (isNaN(number)) оценивается, как true, и 0 назначается number.
3.2 undefined в качестве операнда
При использовании undefined в качестве операнда в арифметических операциях, таких как сложение, умножение и т д. мы получаем NaN. Например:
|
function getFontSize(style) { return style.fontSize; } const fontSize = getFontSize({ size: 16 }) * 2; const doubledFontSize = fontSize * 2; doubledFontSize; // => NaN |
getFontSize() — это функция, которая обращается к свойству fontSize из объекта стиля. При вызове getFontSize({ size: 16 }) результатом будкт undefined (свойство fontSize не существует в объекте { size: 16 }). fontSize * 2 оценивается как undefined * 2, что дает NaN.
«Not A Number» генерируется, когда в качестве значения в арифметических операциях используется отсутствующее свойство или функция, возвращающая undefined. Отсутствие undefined в арифметических операциях — это хороший способ предотвратить получение NaN.
3.3 NaN как операнд
Значение NaN также генерируется, когда операндом в арифметических операциях является NaN:
|
1 + NaN; // => NaN 2 * NaN; // => NaN |
NaN распространяется на арифметические операции:
|
let invalidNumber = 1 * undefined; let result = 1; result += invalidNumber; // appendresult *= 2; // duplicate result++; // increment result; // => NaN |
Операции с переменной result прерываются после добавления к result значения invalidNumber (которое является NaN).
3.4 Неопределенные формы
Значение NaN создается, когда арифметические операции имеют неопределенные формы. Деление 0 / 0 и Inifinity / Infinity:
|
0 / 0; // => NaN Infinity / Infinity; // => NaN |
Умножение 0 и Infinity:
Сложение бесконечных чисел с разными знаками:
|
—Infinity + Infinity; // => NaN |
3.5 Неверные аргументы математических функций
Квадратный корень из отрицательного числа:
|
Math.pow(—2, 0.5); // => NaN (—2) ** 0.5; // => NaN |
Или логарифм отрицательного числа:
4. Заключение
Понятие «не число», выраженное в JavaScript с помощью NaN, полезно для представления ошибочных операций над числами. NaN не равно ни одному значению, даже самому себе. Рекомендуемый способ проверить, содержит ли переменная NaN — использовать Number.isNaN(value).
Преобразование числовых строк в числа, в случае неудачи может дать NaN. Рекомендуется проверять, не возвращают ли parseInt(), parseFloat() или Number() NaN.
Если undefined или NaN используются в качестве операнда в арифметических операциях, это обычно приводит к NaN. Правильная обработка undefined (предоставление значений по умолчанию для отсутствующих свойств) является рекомендованным подходом для предотвращения этой ситуации.
Неопределенные формы или недопустимые аргументы для математических функций также приводят получению NaN. Но это случается редко. Вот мой практический совет: «Получили NaN? Ищите undefined!»
Автор: Dmitri Pavlutin
Источник: //dmitripavlutin.com
Редакция: Команда webformyself.

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Узнать подробнее

JavaScript. Быстрый старт
Изучите основы JavaScript на практическом примере по созданию веб-приложения
Смотреть
Неописанная переменная
begin S := 1; // Неизвестное имя S end.
Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).
Отсутствующая ;
begin var S: integer S := 1; // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка! end.
begin var S := 1 S := S + 1 // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end. end.
Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.
Несовместимость типов при присваивании
begin var S: integer := 1.3; // Нельзя преобразовать тип real к integer end.
Безболезненно можно присваивать только данные одного типа. Если данные — разных типов, то в редких случаях можно преобразовать данные одного типа в данные другого. Например, целое можно преобразовать в вещественное, а символ — в строку. Обратные преобразования не допускаются.
Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:
begin var S := 1.3; // Тип real будет выведен компилятором автоматически end.
Отсутствие закрывающего апострофа литеральной строки
begin var x := 2; // x получает тип integer var y := 3; // y получает тип integer writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа end.
Закрыть апостроф надо на той же строке, где расположен открывающий апостроф
Ошибки расстановки запятых и апострофов при выводе строк и выражений
begin var x := 2; // x получает тип integer var y := 3; // y получает тип integer writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов end.
Слишком много запятых и апострофов рядом, потому начинающие часто путаются 🙂
Надо уяснить правила:
- запятые разделяют разные элементы вывода
- все, что находится в апострофах, будет выведено на экран без изменений
Ошибка ввода
begin var x: integer; read(x); // введите блаблабла и посмотрите, что получится end.
Это — ошибка во время выполнения. Программа пытается преобразовать введенную строку в число, не может это сделать и завершается с ошибкой.
Аналогичный фрагмент в более современном и предпочтительном синтаксисе:
begin var x := ReadInteger; end.
Ошибка неинициализированной переменной
begin var x: integer; // Забыли инициализировать или ввести x var r := x * x; // r получает тип integer writeln('Квадрат числа ', x, ' = ', r); end.
Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.
Деление на 0
begin var x := 0; var c := 666 div x; // Здесь происходит деление на 0 end.
Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.
Корень из отрицательного числа
begin writeln(sqrt(-1)); // Корень из отрицательного числа end.
В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number
Ссылки
- Программы для начинающих
- Сайт PascalABC.NET: Программы и алгоритмы для начинающих
При таком коде:
while(u)
{
sum += u->d.a;
++count;
}
u в цикле не меняется, поэтому мы получим бесконечный цикл, если u != 0 либо, если u == 0 совсем не зайдем в цикл, и в дальнейшем получим деление нуля на ноль, что в результате дает значение «не является числом» (Not-a-Number, NaN).
Из википедии:
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- …
- деление нуля на ноль
Подробнее о делении нуля на нуль
u в Вашем коде равен нулю потому, что в цикле вывода Вы его меняете:
while(u)
{
cout << u->d.a << endl;
u = u->next;
}
после этого цикла u будет равен нулю.
Для исправления чуть переделаем код:
// Vivod (prosto idem po spisku)
List *p = u;//введем указатель, который будем использовать для прохода по списку перед выводом
while (p) {//В цикле работаем только с p, а не с u
cout << p->d.a << endl;
p = p->next;
}
// srednee arifm
if (u) {//Список не пуст
int sum = 0, count = 0;
p = u;//снова ставим p в равным u, для прохода с начала списка
while(p)//в цикле также работаем с p, а не с u
{
sum += p->d.a;
++count;
p = p->next;//не забываем перейти к следующему элементу
}
cout << "Average = " << double(sum)/count << endl;
} else {
cout << "Empty list" << endl;
}
Также Вы забыли про освобождение памяти.
Но в любом случае, Ваш список — это подход, скорее, для языка C, а не для C++.
Improve Article
Save Article
Improve Article
Save Article
NaN, an acronym for Not a Number is an exception that usually occurs in the cases when an expression results in a number that is undefined or can’t be represented. It is used for floating-point operations. For example:
- The square root of negative numbers
- Division by zero
- Taking the log of zero or a negative number etc.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = 2, b = -2;
cout << sqrt(a) << endl;
cout << sqrt(b) << endl;
return 0;
}
How to check for NaN in C++?
Method 1: Using compare (“==”) operator.
In this method, we check if a number is complex by comparing it with itself. If the result is true, then the number is not complex i.e., real. But if the result is false, then “nan” is returned, i.e. the number is complex.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
a == a ? cout << "Its a real number" << endl
: cout << "Its NaN" << endl;
b == b ? cout << "Its a real number" << endl
: cout << "Its NaN" << endl;
return 0;
}
Output
Its a real number Its NaN
Method 2: Using inbuilt function “isnan()”
Another way to check for NaN is by using “isnan()” function, this function returns true if a number is complex else it returns false. This C library function is present in <cmath> header file.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
isnan(a) ? cout << "Its NaN" << endl
: cout << "Its a real number" << endl;
isnan(b) ? cout << "Its NaN" << endl
: cout << "Its a real number" << endl;
return 0;
}
Output
Its a real number Its NaN
This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Improve Article
Save Article
Improve Article
Save Article
NaN, an acronym for Not a Number is an exception that usually occurs in the cases when an expression results in a number that is undefined or can’t be represented. It is used for floating-point operations. For example:
- The square root of negative numbers
- Division by zero
- Taking the log of zero or a negative number etc.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = 2, b = -2;
cout << sqrt(a) << endl;
cout << sqrt(b) << endl;
return 0;
}
How to check for NaN in C++?
Method 1: Using compare (“==”) operator.
In this method, we check if a number is complex by comparing it with itself. If the result is true, then the number is not complex i.e., real. But if the result is false, then “nan” is returned, i.e. the number is complex.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
a == a ? cout << "Its a real number" << endl
: cout << "Its NaN" << endl;
b == b ? cout << "Its a real number" << endl
: cout << "Its NaN" << endl;
return 0;
}
Output
Its a real number Its NaN
Method 2: Using inbuilt function “isnan()”
Another way to check for NaN is by using “isnan()” function, this function returns true if a number is complex else it returns false. This C library function is present in <cmath> header file.
CPP
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float a = sqrt(2);
float b = sqrt(-2);
isnan(a) ? cout << "Its NaN" << endl
: cout << "Its a real number" << endl;
isnan(b) ? cout << "Its NaN" << endl
: cout << "Its a real number" << endl;
return 0;
}
Output
Its a real number Its NaN
This article is contributed by Manjeet Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.