• Как исправить ошибку "ссылка на объект не указывает на экземпляр объекта"?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Эта ошибка означает, что вместо объекта - нуль.
    1. Запускаете программу в режиме отладки;
    2. Воспроизводите ошибку;
    3. Переходите по ссылке в указанную точку исходного кода;
    4. Исправляете ошибку.
    Ответ написан
    1 комментарий
  • В чём различие между i++ и i+1, когда речь идёт в о массивах?

    15432
    @15432
    Системный программист ^_^
    А давайте я укажу на все ошибки в вашей программе?

    1) for(int i = 1 ...)
    Самое бросающееся в глаза. Индексация массивов начинается с нуля. Соответственно, условие в цикле должно быть
    for(int i = 0; i < N; ++i)
    (И не придется заводить массив на N+1 элементов)

    2) exit(0)
    Любая ваша проверка сразу же приведет к завершению программы. Поэтому ваша программа изначально работает некорректно - происходит сравнение только двух первых элементов

    3) пресловутый i++
    Рассмотрим полную команду
    if (p[i] < p[i++])
    По приоритетам, первой выполнится "i++", после чего значение i увеличится на единицу, в результате чего итоговое сравнение будет эквивалентно
    i += 1;
    if (p[i] < p[i]) ...
    Более того, даже если не учитывать неправильное сравнение и выход в первой же проверке, за один цикл for значение i оказывается увеличенным дважды (i++ в конце цикла и i++ в условии), что тоже далеко не нормально.

    4) мелочи вроде
    -printf(\n);
    вместо того, чтобы дописать \n в конец прошлого текста
    -использование short, когда эффективнее использовать int

    В общем, тренируйтесь, познавайте принцип работы команд, совершенствуйте знание языка и впредь старайтесь избегать подобных ошибок :)

    как можно быстро исправить эту программу:

    int main()
    {
      setlocale(LC_ALL, "RUSSIAN");
      int i;
      int p[N];
      for (i = 0; i < N; ++i) //вводим все числа
      {
        printf("\n Введите элемент массива p[i] = ");
        scanf_s("%d", &p[i]);
      }
    
      for (i = 0; i < N; ++i) //печатаем, что ввели - для проверки
        printf("%5d ", p[i]);
    
      for (i = 0; i < N - 1; ++i) //проходимся по всем числам до предпоследнего
      { //потому что последнее не с чем сравнивать, за ним дальше чисел нет
        if (p[i] >= p[i+1]) //проверяем только случай, когда условие возрастания не выполняется
        {
          printf("\n Элементы массива - НЕ возрастающая последовательность\n");
          exit(0); //сразу же выходим из программы, т.к. определили невозрастание
        } //иначе продолжаем сравнивать элементы!
      }
    //мы до сих пор не вышли из программы, значит, последовательность всё же возрастающая
      printf("\n Элементы массива - возрастающая последовательность");
    }
    Ответ написан
    9 комментариев
  • В чём различие между i++ и i+1, когда речь идёт в о массивах?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    i+1 - возвращает значение i+1.
    i++ - увеличивает значение i на 1, возвращает значение i до увеличения.
    ++i - увеличивает значение i на 1, возвращает новое значение i.
    Ответ написан
    5 комментариев
  • Найдите, пожалуйста, ошибку в коде c++?

    MrNexeon
    @MrNexeon
    Уберите точку с запятой ; в конце строки for (counter = 1; counter <= 8; counter++);
    Ответ написан