Меню

Ошибка на строке nan запустить

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 в JavaScript

От автора: В данной статье мы познакомимся со специальным свойством 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

  • Read
  • Discuss
  • 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

  • Read
  • Discuss
  • 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.

    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии

    А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка на табло авто
  • Ошибка на странице одноклассников