Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

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

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

Author24 — интернет-сервис помощи студентам
Упражнение 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2011, 12:02
Ответы с готовыми решениями:

Подскажите, пожалуйста в чем моя ошибка в этом примере?
// 2_2010.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt;...

В чем может быть ошибка в этом коде?
Вот условия задачи. Дано: две строки текста. Надо: вывести результаты сравнения этих строк ...

Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём ошибка
Выскакивает ошибка Stack around the voriable 'text' was corrupted. Подскажите пожалуйста в чём...

Подскажите, в чём ошибка?
#include&lt;iostream&gt; using namespace std; int main() { setlocale(0, &quot;rus&quot;); // локализация...

4
237 / 210 / 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
237 / 210 / 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2011, 13:10
Помогаю со студенческими работами здесь

Не подскажите в чем ошибка?
private void button1_Click(object sender, EventArgs e) { try { ...

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

Подскажите, в чем ошибка?
Добрый день! есть такой метод процедуры: internal void AddToBd(Button button, TextBox tab_number,...

подскажите в чём ошибка?
#include &lt;iostream&gt; using namespace std; void func(char ar,int nar) { int i=0; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru