Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lexflax
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 627
#1

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

25.11.2011, 12:02. Просмотров 580. Ответов 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2011, 12:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос (подскажите в чем логическая ошибка в этом упражнении) (C++):

подскажите в чем ошибка
поставлена задача: Задан одномерный массив В, состоящем из n вещественных...

подскажите в чем ошибка?
РАБОТА Девятиклассница Лера решила заработать денег на поющую куклу. ...

Подскажите в чем ошибка (С++)
typedef struct { char name, mark; unsigned price, num; } Comp; Comp...

Подскажите в чем ошибка
Вывести матрицу из 20 элементов целого типа. Определить каких элементов больше...

Подскажите в чем ошибка
Не могу понять вроде все правильно а не запускается #include &lt;iostream&gt;...

Подскажите в чем ошибка!
Программа должна выводить адресса букв, но в итоге выводит ошибку &quot;error:...

4
Net_Wanderer
235 / 208 / 29
Регистрация: 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
0
Сыроежка
Заблокирован
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.

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

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

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

почему?
- в ней есть логическая ошибка
Повторяю, что здесь нет логической ошибки. Более того даже ваше объяснение некорректно. Маасив не заполняется, как вы неправильно считаете, а лишь отдельные его члены при некоторых определенных значениях другого указателя могут быть изменены.
То есть если значение первого указателя равно 9, разве маасив заполняется? Нет, конечно. Здесь никакой логической ошибки нет! Здесь есть лишь условие, что если значение первого указателя меньше 10, то мы что-то там можем сделать со вторым указателем. если больше или равно 10, то мы ничего не делаем со вторым указателеи. Это не является логической ошибкой. Так что не сочиняйте! Иммет место лишь быть код, который при заданных очень конкретных начальных условиях не будет выполняться. Но никто не мешает изменить начальные условия, и тогда код будет выполняться. Никакой логической ошибки здесь нет. Все очень логично!
0
25.11.2011, 13:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2011, 13:10
Привет! Вот еще темы с решениями:

Подскажите в чем ошибка
Есть код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int...

Подскажите, в чем ошибка
При компиляции программы компилятор выдает сообщение: undefined reference...

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

Подскажите в чем ошибка
Вывести слова введенной строки, начинающиеся с заданного слова, на экран...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru