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

Задача про зерна на шахматной доске - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Описать класс «записная книжка» http://www.cyberforum.ru/cpp-beginners/thread730700.html
Описать класс «записная книжка». Предусмотреть возможность работы с произвольным числом записей, поиска записи по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
C++ Ошибка в сортировке #include <iostream> #include <string> #include <algorithm> int const N = 5; using namespace std; class book{ public: http://www.cyberforum.ru/cpp-beginners/thread730691.html
C++ Описать класс "домашняя библиотека"
Помогите, пожалуйста в решении одной из 3х задач.Буду благодарна!!! 1.Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям. Написать программу, демонстрирующую работу с этим классом....
C++ Наибольшая общая подстрока
какие алгоритмы есть для нахождения Наибольшой общей подстроки?
C++ Как вывести матрицу смежности по заданной матрице весов дуг? http://www.cyberforum.ru/cpp-beginners/thread730685.html
Программа, реализующая алгоритм Флойда для поиска кратчайшего пути. Пользователь вводит ко-во вершин, затем указывает веса дуг, если вершины не соединены, то вес дуг = 0. Выводится матрица весов. Как сделать, чтоды выводилась матрица смежностей после матрицы весов? Floyd.h #ifndef _FLOYD_H_ #define _FLOYD_H_ #include <vector> #include <iostream> #include <iomanip> #include <algorithm>...
C++ Тонкость с указателями - взятие указателя на базовый класс Как-то возник в голове вопрос: пусть класс D наследует классы A и B. Если у меня есть объект D, я беру его адрес и типизирую его к базовым классам A и B. Получаю два указателя типа A* и B*. Будут ли они указывать на корректные объекты? Я всегда предполагал, что конструкции типа: Type1 *a = (Type1*)b; это указания компилятору интерпретировать данные по указателю b как данные типа Type1. А... подробнее

Показать сообщение отдельно
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
13.12.2012, 22:10
Цитата Сообщение от ValeryS Посмотреть сообщение
все проще
C++
1
2
3
4
5
for(int k=0; k<i; ++k){
     a = 1<<k;
      b += a;
     cout << k+1<< "\t"<< a<< endl;
 }
Я согласен что если нужно посчитать конечный результат, то цикла здесь не нужно. Тем не менее, пусть нам необходимо вывести количество зерен для каждой клетки. Я ради интереса скомпилил разные варианты выражения a*=2 с включенной оптимизацией в VS2012. Варианты a*=2 и a=a*2 дали абсолютно одинаковый код, но для a=1<<k код отличается. Так как код оптимизирован, то не удается выделить код для одной строки. Вместо этого, я наведу различия:
Assembler
1
2
3
4
5
6
7
8
9
; a *= 2
00B712B0  push        dword ptr ds:[0B73044h]  
00B712B6  mov         ecx,dword ptr ds:[0B7305Ch]  
00B712BC  lea         ebx,[ebx+esi*2]  
00B712BF  add         esi,esi  
00B712C1  push        esi  
00B712C2  inc         edi  
00B712C3  push        edi  
00B712C4  call        dword ptr ds:[0B73034h]
Assembler
1
2
3
4
5
6
7
8
9
10
11
; a = 1 << k;
00F412B0  push        dword ptr ds:[0F43044h]  
00F412B6  mov         ecx,edi  
00F412B8  mov         esi,1  
00F412BD  shl         esi,cl  
00F412BF  mov         ecx,dword ptr ds:[0F4305Ch]  
00F412C5  inc         edi  
00F412C6  push        esi  
00F412C7  push        edi  
00F412C8  add         ebx,esi  
00F412CA  call        dword ptr ds:[0F43034h]
Как видно, второй вариант работает медленнее, а так же менее читабелен.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru