Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

(подскажите в чем логическая ошибка в этом упражнении) - C++

25.11.2011, 12:02. Просмотров 514. Ответов 4
Метки нет (Все метки)

Упражнение 2.4
(подскажите в чем логическая ошибка в этом упражнении)
Что делает следующий фрагмент кода? В чем состоит логическая ошибка? (Отметим, что операция взятия индекса ([]) правильно применена к указателю pia. Объяснение этому факту можно найти в разделе 3.9.2.)
C++
1
2
3
4
5
6
7
8
9
int *pi = new int(10);
int *pia = new int[10];
 
while ( *pi < 10 ) {
  pia[*pi] = *pi;
  *pi = *pi + 1;
}
delete pi;
delete[] pia;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2011, 12:02     (подскажите в чем логическая ошибка в этом упражнении)
Посмотрите здесь:

C++ Подскажите в чем ошибка
C++ Подскажите в чем ошибка
Подскажите, в чем ошибка? C++
C++ Подскажите в чем ошибка?!
подскажите в чем ошибка? C++
подскажите в чем ошибка C++
C++ Подскажите, в чем ошибка
C++ Подскажите в чем ошибка
Подскажите в чем ошибка! C++
C++ Подскажите в чем ошибка
Подскажите, в чем ошибка C++
C++ Подскажите, в чем ошибка?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
25.11.2011, 12:08     (подскажите в чем логическая ошибка в этом упражнении) #2
ошибка в том, что начальное значение того, на что указывает pi - 10, поэтому цикл не выполнится ни разу

C++
1
2
3
4
5
6
7
8
9
int *pi = new int(0);
int *pia = new int[10];
 
while ( *pi < 10 ) {
  pia[*pi] = *pi;
  *pi = *pi + 1;
}
delete pi;
delete[] pia;
создает динамический массив pia из 10 элементов, и заполняет его числами от 0 до 9
Сыроежка
Заблокирован
25.11.2011, 12:25     (подскажите в чем логическая ошибка в этом упражнении) #3
lexflax,

Здесь нет логической ошибки! То есть то, что *pi имеет значение 10, а цикл может выполнять лишь для *pi меньше 10, не является логической ошибкой! Да, цикл ни разу не будет выпоняться, но тем не менее это не логическая ошибка. Это просто код, который ни разу не будет выполняться. Это бессмысленно, но тем не менее это нельзя назвать логической ошибкой.

Логтческие ощибки - это нечто совсем другое, чем просто присутствие кода, который при заданных значениях не будет выполняться. Ведь никто не знает, может быть этот кусок кода помещен для отладки программы. То есть когда программисту что-то надо проверить, то он "включает" этот код, изменив значение *pi
Например, допустим в коде есть переменная DEBUG

C++
1
2
3
const bool DEBUG = false;
 
if ( DEBUG ) DoSomething();
Является ли это логической ошибкой? Нет, конечно! Это код для тотладки, который может быть включен заданием этой переменной значения true.

То есть ваш пример некорректный с точки зрения понятия логической ошибки! Никакой логической ошибки нет, а есть код, который при данных начальных значениях не будет выполняться. А это две разные вещи!
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
25.11.2011, 13:03     (подскажите в чем логическая ошибка в этом упражнении) #4
Цитата Сообщение от Сыроежка Посмотреть сообщение
присутствие кода, который при заданных значениях не будет выполняться.
здесь иное, данный код, если не придумывать замысловатых контекстов,должен заполнять массив
а он этого не делает, дальше массив будет обработан (при этом в нем будет находится мусор)
и мало вероятно, что программа даст ожидаемый результат

Почему? - В ней есть логическая ошибка.
Сыроежка
Заблокирован
25.11.2011, 13:10     (подскажите в чем логическая ошибка в этом упражнении) #5
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
здесь совершенно иное

данный код (если не придумывать замысловатых контекстов) должен заполнять массив,
а он этого не делает, дальше массив будет обработан (при этом в нем будет находится мусор)
и мало вероятно, что программа даст ожидаемый результат

почему?
- в ней есть логическая ошибка
Повторяю, что здесь нет логической ошибки. Более того даже ваше объяснение некорректно. Маасив не заполняется, как вы неправильно считаете, а лишь отдельные его члены при некоторых определенных значениях другого указателя могут быть изменены.
То есть если значение первого указателя равно 9, разве маасив заполняется? Нет, конечно. Здесь никакой логической ошибки нет! Здесь есть лишь условие, что если значение первого указателя меньше 10, то мы что-то там можем сделать со вторым указателем. если больше или равно 10, то мы ничего не делаем со вторым указателеи. Это не является логической ошибкой. Так что не сочиняйте! Иммет место лишь быть код, который при заданных очень конкретных начальных условиях не будет выполняться. Но никто не мешает изменить начальные условия, и тогда код будет выполняться. Никакой логической ошибки здесь нет. Все очень логично!
Yandex
Объявления
25.11.2011, 13:10     (подскажите в чем логическая ошибка в этом упражнении)
Ответ Создать тему
Опции темы

Текущее время: 23:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru