Я работаю над заданием, и профессор не хочет, чтобы мы использовали какой-либо другой код для вставки значений, отличных от его предоставленного псевдокода.Я неправильно истолковал этот псевдокод?
Краткое объяснение того, что я делаю. Я создаю динамический массив целых чисел, и они должны быть вставлены по порядку (от самого низкого до самого высокого).
Вот псевдокод он обеспечил:
for (i = valueNum - 1; array[i] is the wrong spot for newValue; --i) array[i] = array[i-1]
где массив [я] является неправильным местом для NEWVALUE:
(i > 0) AND (value at array[i-1] is greater than newValue)
Он также включил эту информацию:
Вы также должны убедить себя что вышеуказанный псевдокод применим к (то есть, он также охватывает) случай, когда новое значение, подлежащее сохранению, является значением # 1, в котором новое значение, которое должно быть сохранено, больше или равно самому высокому существующему значению и случай, когда новое значение, которое нужно сохранить, меньше или равно самому низкому существующему значению.
Итак, это выглядит довольно прямолинейно. Я дал ему попробовать:
void IntArray::insert(int nInt)
{
/* check if resize is needed */
if(mySize == capacity)
{
int newCapacity = capacity * 1.5;
if(newCapacity == capacity)
newCapacity = capacity + 1;
capacity = newCapacity;
}
/* here is where my mistake was */
int i;
mySize++;
for(i = mySize -1; i > 0 && data[i-1] > nInt; --i)
{
data[i] = data[i - 1];
}
data[i] = nInt;
}
Похоже, что это правильно следует псевдокод, но это не кажется, что это будет когда-нибудь работать, если mySize
либо 0, либо 1. Может кто-то мне точку в правильном направлении?
Вы пытались запустить его с mySize в 0 или 1? Что происходит? –
Простое изменение «емкости» без изменения хранилища не очень поможет, не так ли? Вам не нужно что-то выделять? Вы также никогда не сохраняете новое значение. –
@DamienBlack Он просто не входит в цикл, потому что он не соответствует условному утверждению. – Bobbin4Apples