Консультация № 175678
27.12.2009, 21:31
0.00 руб.
0 1 1
Уважаемые эксперты, помогите пожалуйста исправить 2 функции в программе. Хотя бы подскажите как.
Функция sdvig_right - сдвигает строчку с восмеричными числами на k позиций. Восмеричные числа заданы массивом, т.е. a[1]=1 a[2]=2 a[3]=3 образуют восмеричное число 123. Пример вводим элементы массива 12345 и сдвиг на 2 позиции, программа выводит 1234500(т.е. добавляет 2 нуля), а нужно чтобы выводил 1112345(т.е. добавил 2 единицы в начало).
Функция sdvig_left() - сдвигает строчку с восмеричными числами на k позиций. Восмеричные числа заданы массивом, т.е. a[1]=1 a[2]=2 a[3]=3 образуют восмеричное число 123. Пример вводим элементы массива 12345 и сдвиг на 2 позиции, программа выводит 123(т.е. удаляет 2 последних числа), а нужно чтобы выводил 345(т.е. удалял первые 2 числа).

Приложение:
void Octal::sdvig_right()
{


cout<<"Na skolko sdvigat?"<<endl;
int k=0;
cin>>k;
unsigned char *b = new unsigned char [n+k];
for(int i=0; i<=n; i++)
{
b[i+k] = a[i];
}
delete []a;

n = n+k;

a = new unsigned char [n+k];
for(i=0; i<=n+k-1; i++)
a[i] = b[i];
for(i=0; i<k; i++)
a[i] = '0';


}



void Octal::sdvig_left()
{
cout<<"Na skolko sdvigat?"<<endl;
int k=0;
cin>>k;
unsigned char *b = new unsigned char [n-k];
for(int i=0; i<=n-k; i++)
{
b[i] = a[i+k];
}
for(i=0; i<=n-k; i++)
a[i] = b[i];
for(i=n+1-k; i<=n; i++)
a[i] = '0';
}

Обсуждение

Неизвестный
28.12.2009, 14:12
общий
это ответ
Здравствуйте, Azarov88.
Основная ошибка: циклы нужно делать от i=0 до i < [длина строки]. Потому что , если n - длина строки stroka, то stroka[n]='\0', т.е. символ конца строки...
В функции sdbig_right() надо изменить цикл так:
for(i=0; i<n; i++) //а не i<=n
{
b[i+k] = a[i];
}
теперь заполняем a:
for(i=k; i<n+k; i++)
a[i] = b[i];
for(i=0; i<k; i++)
a[i] = '1'; //добавляем единицы на первые k-1 позиции
a[n+k]='\0'; //заканчиваем строку

В функции же sdvig_left надо так:
for(i=0; i<n-k; i++)
{
b[i] = a[i+k];
}

теперь заполняем a:
for(i=0; i<n-k; i++)
a[i] = b[i];
a[i+1]='\0';
5
Форма ответа