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

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

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

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

25.11.2011, 12:02. Просмотров 541. Ответов 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++):

подскажите в чем ошибка - C++
только сегодня начал знакомство и вот уже проблемка)подскажите пожалуйста в чем ошибка)) Две дроби a/b и c/d можно сложить следующим...

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

Подскажите в чем ошибка - C++
Есть код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt;vec; vector&lt;int&gt;::iterator...

Подскажите в чем ошибка - C++
Вывести матрицу из 20 элементов целого типа. Определить каких элементов больше четных или нечетных { int A, i, m=0, n=0; for(i=0;...

Подскажите в чем ошибка - C++
Нужно создать файл 5.дат и записать в него информацию с структуры аерофлот. Создаю я вот так: #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

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

4
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
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 / 19
Регистрация: 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
Привет! Вот еще темы с ответами:

подскажите в чем ошибка? - C++
В массив А занесены натуральные числа.Найти сумму элементов, которые кратны данному К написал код, но программа не считает сумму,...

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

Подскажите в чем ошибка! - C++
Программа должна выводить адресса букв, но в итоге выводит ошибку &quot;error: invalid type argument of `unary *' &quot; в 17 строке. Почему??? ...

Подскажите, в чем ошибка? - C++
Задача:Напишите программу преобразования последовательности 12 символов-цифр, вводимых из стандартного потока, в числовое значение типа...


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

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

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