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

Как сделать ровный вывод состояния регистров - C++

Восстановить пароль Регистрация
 
porshe
 Аватар для porshe
52 / 46 / 17
Регистрация: 18.07.2014
Сообщений: 194
22.07.2014, 21:12     Как сделать ровный вывод состояния регистров #1
Всем исключительно доброго времени дня или ночи.
Я начинающий, так что прошу сильно меня не пинать.
В общем, вот в чём дело:
По заданию в книге Дейтел Х. Дейтел П - Как программировать на С++, нужно вывести на экран таблицу, изображение которой прикреплено. Но у меня появилось несколько вопросов:
  1. Как сделать такой же ровный вывод состояния регистров? .
    Пишу вывод состояния регистров так:
    Кликните здесь для просмотра всего текста
    C++
    1
    2
    3
    4
    5
    6
    
        cout << "\nРЕГИСТРЫ: \n" << endl << showpos;
        cout << "accumulator " << setw( 5 ) << ac << endl;
        cout << "instruction pointer( ip ) " << setw( 5 ) << (int)ip << endl;
        cout << "instruction register( ir ) " << setw( 5 ) << (int)ir << endl;
        cout << "operation code( oc ) " << setw( 5 ) << (int)oc << endl;
        cout << "operand( op ) " << setw( 5 ) << (int)op << endl;

    Но выводится так, будь то бы метод setw(n) тупо выводит n пробелов. В итоге, получается не то, что я хотел. Я везде почитал про эту функцию, но как ей пользоваться, так и не нашёл( не понял ).

  2. Как показать ведущие нули? То есть допустим есть число: 23, а его надо показать, как +0023. Можно ли сделать это без if'ов( или хотя бы обойтись минимальным количеством )?

На этом всё. Заранее благодарю за помощь.
Миниатюры
Как сделать ровный вывод состояния регистров  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 21:12     Как сделать ровный вывод состояния регистров
Посмотрите здесь:

Как сделать такой вывод? C++
C++ Список: как сделать вывод не в обратном порядке а в прямом
C++ Вывод через структуры ,как сделать?
Как сделать вывод в таблице? C++
C++ Как сделать вывод в консоль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
22.07.2014, 21:37     Как сделать ровный вывод состояния регистров #2
Плохо искали
C++
1
setw(n)
определяет ширину поля вывода

Добавлено через 3 минуты
Для чего вам ведущие нули. Не совсем понятно что вы вообще хотите сделать.
porshe
 Аватар для porshe
52 / 46 / 17
Регистрация: 18.07.2014
Сообщений: 194
22.07.2014, 21:44  [ТС]     Как сделать ровный вывод состояния регистров #3
Цитата Сообщение от Евгений89 Посмотреть сообщение
определяет ширину поля вывода
что есть ширина поля вывода?
Если вызовем setw(15) а затем попытаемся напечатать строку длинной в 16 символов, то последний символ не напечатается? А если попытаемся напечатать строку длинной в 3 символа, то напечатается перед ней ещё 12 лишних пробелов?

Цитата Сообщение от "Евгений89 Посмотреть сообщение
Не совсем понятно что вы вообще хотите сделать.
Такое задание в книге - реализовать симулятор компьютера "Симплетрон". Так же в определённый момент нужно показывать дамп памяти и состояние регистров, везде нужно показывать ведущие нули.
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
22.07.2014, 22:18     Как сделать ровный вывод состояния регистров #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Погуглил:
Что означает cout << setw(3)
√ ширина поля вывода устанавливается равной 3
выводимые строки сокращаются до 3 символов
выводимые строки дополняются до 3 символов
нельзя ввести больше 3 символов за один раз.

Добавлено через 3 минуты
А судя по рисунку вам нужно через двумерный массив по строкам шаг сделать +1, а по столбцам +10

Добавлено через 15 минут
If вам всего один нужен в теле цикла у вас 5 символов в функции sets(5) , так вот если строка пуста то пишем 0 и будут тогда у вас впереди нули. 00023 тип того будет
porshe
 Аватар для porshe
52 / 46 / 17
Регистрация: 18.07.2014
Сообщений: 194
22.07.2014, 22:28  [ТС]     Как сделать ровный вывод состояния регистров #5
А как всё таки сделать ровный показ состояния регистров? У меня никак не получается
jupi
0 / 0 / 0
Регистрация: 21.07.2014
Сообщений: 3
22.07.2014, 22:50     Как сделать ровный вывод состояния регистров #6
Почему бы не воспользоваться табуляцией \t?
porshe
 Аватар для porshe
52 / 46 / 17
Регистрация: 18.07.2014
Сообщений: 194
23.07.2014, 09:29  [ТС]     Как сделать ровный вывод состояния регистров #7
Цитата Сообщение от jupi Посмотреть сообщение
Почему бы не воспользоваться табуляцией \t?
Будет то же самое, что и с пробелами.

Добавлено через 47 минут
Я нашёл решение проблемы. И оно как всегда простое. Достаточно воткнуть setw перед выводом строк.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
cout << setw( 30 ) << left << "accumulator " << ac << endl;
cout << setw( 30 ) << left << "instruction pointer( ip ) " << ip << endl;
cout << setw( 30 ) << left << "instruction register( ir ) " << ir << endl;
cout << setw( 30 ) << left << "operation code( oc ) " << oc << endl;
cout << setw( 30 ) << left << "operand( op ) " << op << endl;


Всем спасибо за помощь.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 11:55     Как сделать ровный вывод состояния регистров #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от porshe Посмотреть сообщение
Как сделать такой же ровный вывод состояния регистров? .
Для каждой строчки:
C++
1
2
    std::cout << std::setw(30) << std::setiosflags(std::ios::left)  << "instruction pointer( ip ) "
              << std::setw(5)  << std::setiosflags(std::ios::right) << (int)ip << std::endl;
Цитата Сообщение от porshe Посмотреть сообщение
Как показать ведущие нули? То есть допустим есть число: 23, а его надо показать, как +0023. Можно ли сделать это без if'ов( или хотя бы обойтись минимальным количеством )?
Можно. Для этого достаточно задать новый символ заполнитель:
C++
1
std::cout.fill ('0');
И тогда такая строчка:
C++
1
std::cout << setw( 4 ) << 23 << endl;
Выведет 0023.
Для построения таблицы используйте полученные выше знания.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 14:49     Как сделать ровный вывод состояния регистров
Еще ссылки по теме:

Как сделать вывод чисел в виде квадрата? C++
Как сделать вывод суммы каждого столбца? C++
C++ Windows-приложение для мониторинга состояния SMART регистров жесткого диска

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

Или воспользуйтесь поиском по форуму:
porshe
 Аватар для porshe
52 / 46 / 17
Регистрация: 18.07.2014
Сообщений: 194
23.07.2014, 14:49  [ТС]     Как сделать ровный вывод состояния регистров #9
Спасибо
Yandex
Объявления
23.07.2014, 14:49     Как сделать ровный вывод состояния регистров
Ответ Создать тему
Опции темы

Текущее время: 09:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru