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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.69
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
#1

функция square() - C++

06.06.2011, 20:09. Просмотров 3770. Ответов 10
Метки нет (Все метки)

реализовать функцию square() методом повторного сложения (т.е. не используя оператор умножения)


спасибо)

Добавлено через 48 минут
помогите плиз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.06.2011, 20:31     функция square() #2
А можно поподробнее, что должна делать эта функция? Точнее, какие аргументы она должна принимать, и что возвращать.
fluxx
4 / 4 / 1
Регистрация: 31.03.2011
Сообщений: 34
06.06.2011, 20:39  [ТС]     функция square() #3
она должна возводить в квадрат числа от 1 до 10 , вывести на экран

1 1
2 4
3 9
4 16
...
10 100
diagon
Higher
1924 / 1190 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.06.2011, 20:56     функция square() #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int mult(int a,int b){
    int temp=a;
    while (--b)
        a+=temp;
    return a;
}
int square(int n){
    return mult(n,n);
}
int main(){
    for (int i=1; i < 11;i++)
        std::cout << i << ' ' << square(i) << std::endl;
    return 0;
}
Anton223
Сообщений: n/a
23.04.2012, 23:13     функция square() #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
    using namespace std;
 
int square (int x)
{
    int k=0;
    for (int i=0;i<x;++i)
    k+=x;
    return k;
}
 
 
int main()
{
    for (int i=1; i<=100; i++ )
        cout << i << " " << square(i) << endl;
}
upiter789
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 1
04.12.2015, 17:20     функция square() #6
Цитата Сообщение от Anton223 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
    using namespace std;
 
int square (int x)
{
    int k=0;
    for (int i=0;i<x;++i)
    k+=x;
    return k;
}
 
 
int main()
{
    for (int i=1; i<=100; i++ )
        cout << i << " " << square(i) << endl;
}
Объясните мне, пожалуйста, как работает цикл в int square.
Какое значение изначально присвоено х? Где участвует i?
Я только начинаю изучать С++ и, вроде бы, программа не сложная, но сам разобраться не могу.
DOLINSKYI
0 / 0 / 0
Регистрация: 16.08.2015
Сообщений: 7
23.03.2017, 02:16     функция square() #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Программа возводит в квадрат числа от 0-99 и выводит на экран.
#include <locale>
#include <std_lib_facilities.h>
int square(int x) { //Функция square, каторая использует только оператор сложения.
    int c = 0;
    for (int y = 1; y <= x; ++y) {
        c += x;
    }
    return c;
}
 
int main()
{
    std::locale::global(std::locale("")); //Выводит кирилицу.
    for (int i = 0; i < 100; ++i) {
        cout << i << '\t' << square(i) << '\n';
    }
    system("pause");
    return 0;
 
}
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3614 / 1889 / 501
Регистрация: 18.10.2014
Сообщений: 3,451
23.03.2017, 04:01     функция square() #8
Цитата Сообщение от fluxx Посмотреть сообщение
функцию square() методом повторного сложения (т.е. не используя оператор умножения)
Не совсем понятно, что является "повторным сложением", а что нет.

Реализовать степень через сложение можно по той же схеме, по которой реализуется возведение в степень через умножение: Создать функцию вычисления степени числа с показателем (без использования функции pow)

То есть если нам надо вычислить произведение a*b и мы знаем разложение множителя b в сумму степеней двойки b = b1+b2+...+bk, то a*b = a*b1+a*b2+...+a*bk и каждое слагаемое в этой сумме легко вычислимо через последовательные операции сложения a с самим собой a+=a.

Получаем такую функцию вычисления квадрата через сложение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
unsigned square(unsigned x)
{
  unsigned s = 0;
  
  for (unsigned add = x; x != 0; add += add, x >>= 1)
    if ((x & 1) != 0)
      s += add;
      
  return s;
}
 
int main()
{
  std::cout << square(123) << std::endl;
}
Цикл при этом выполняет не x итераций, как в "наивном" методе, а только примерно log2 x итераций.

Это является "повторным сложением" или нет?
_Ivana
2838 / 1663 / 143
Регистрация: 01.03.2013
Сообщений: 4,759
Записей в блоге: 2
23.03.2017, 04:14     функция square() #9
Ну да, именно так.
C++
1
2
3
4
5
unsigned d(unsigned x) { return x + x; }
 
unsigned go(unsigned x, unsigned y) { return !y ? 0 : d(go(x,y>>1)) + (y&1 ? x : 0); }
 
unsigned square(unsigned x) { return go(x,x); }
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3614 / 1889 / 501
Регистрация: 18.10.2014
Сообщений: 3,451
23.03.2017, 04:15     функция square() #10
Delete
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2017, 04:23     функция square()
Еще ссылки по теме:

C++ Класс SQUARE (квадрат)
Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений C++
Перегрузка операций: friend-функция или функция-член класса C++
Чистая виртуальная функция функция не имеет оператора переопределения C++
Функция sqrt: существует более одного экземпляра. Функция перегруженная C++

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

Или воспользуйтесь поиском по форуму:
_Ivana
2838 / 1663 / 143
Регистрация: 01.03.2013
Сообщений: 4,759
Записей в блоге: 2
23.03.2017, 04:23     функция square() #11
Ну или чуть поварьировав
C++
1
2
3
4
5
typedef const unsigned cu_t; 
 
cu_t go(cu_t x, cu_t y) { return !y ? 0 : (go(x,y>>1)<<1) + (y&1 ? x : 0); }
 
cu_t square(cu_t x) { return go(x,x); }
Yandex
Объявления
23.03.2017, 04:23     функция square()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru