Вопрос № 176287: Помогите пожалуйста исправить/переделать слегка программу. В ходе переделки, у меня появилась проблема которую я не понимаю как исправить. Код программы в приложении. Задание: Работа с восьмеричными числами. Восмеричные числа записываются в массив...
Вопрос № 176287:
Помогите пожалуйста исправить/переделать слегка программу. В ходе переделки, у меня появилась проблема которую я не понимаю как исправить. Код программы в приложении. Задание: Работа с восьмеричными числами. Восмеричные числа записываются в массив, т.е. например вводим число 15(массив получается a[0]=1 a[1]=5) и выводится число 15. Программа должна выполнять операции(сложение, вычитание, умножение и т.д.) с восмеричными числами. Пример: меню программы: 1 - сложение 2 - вычитание ..... 8
- сдвиг влево Выбираем например действие 1(сложение). Программа просит ввести два восмеричных числа и складывает их. Далее выбираем действие 2(вычитание). Программа просит ввести новые два восмеричных числа и вычитает их. Как нужно переделать: программа полностью работает нормально, но преподавателю не нравится, что у меня при каждом выборе действия, нужно вводить новые восмеричные числа. Поэтому препод. сказал мне сделать так, чтобы 1 раз ввел два восмеричных чис
ла и при кажом выборе действия выдовался сразу результат. Т.е. меню будет выглядеть вот так: 1 - введите 1 восмеричное число 2 - введите 2 восмеричное число 3 - сложение .....
Как это сделать я знаю, но возникают проблемы со сдвигом влево и вправо. После переделки при выборе сдвига влево или вправо число сохраняется(т.е. последующие действия будут совершаться с новым числом). Помогите мне пожалуйста переделать нормально программу.
Отвечает Лейла, 4-й класс :
Здравствуйте, Azarov88. Подправленная программа в приложении. Теперь после сдвига вправо/влево вы продолжаете работать со старыми значениями. Для этого было изменено: 1. начальные числа задаются один раз. Их объявление до цикла while (true) (чтобы они не обнулялись). Octal obj1; Octal obj2; Задаются здесь: case 'z': obj1.vvod(); obj2.vvod(); break;
2. всегда работаем с промежуточным obj3, не затирая obj1 и obj2: case '8':obj3=obj1; obj3.sdvig_right();
case '9':obj3=obj1; obj3.sdvig_left();
Программа также работала с новыми значениями после операций obj1.incr(); и obj1.decr(); потому что затирались старые значение obj1
Исправляем так: obj3.incr(obj1); //в параметрах передаем объект-цифру, а результат записывается в obj3. obj3.decr(obj1);
Соответственно, заголовки процедур изменяем так: void Octal::incr(Octal &M) и void Octal::decr(O
ctal &M)
Добавлен уточненный вариант программы по просьбе автора ответа
-----
∙ Отредактировал: Сучкова Татьяна Михайловна, Администратор
∙ Дата редактирования: 31.01.2010, 00:50 (время московское)