Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/119: Рейтинг темы: голосов - 119, средняя оценка - 4.90
5 / 5 / 2
Регистрация: 31.03.2011
Сообщений: 34

Функция square() методом повторного сложения

06.06.2011, 20:09. Показов 24948. Ответов 13
Метки нет (Все метки)

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


спасибо)

Добавлено через 48 минут
помогите плиз
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2011, 20:09
Ответы с готовыми решениями:

Выполнить умножение с помощью повторного сложения
Реализуйте функцию square О, не используя оператор умножения; иначе говоря, выполните умножение х*х с помощью повторного сложения...

Функция square-digits-sum
Работа программы то правильная,но я должен получать список take и drop я описал,но всё также не работает: ...

Описание класса Вектор с методом передвижения по X и методом сложения векторов
Ребят помоготи слелать программу: Описание класса Вектор с методом передвижения по X и методом сложения векторов.

13
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.06.2011, 20:31
А можно поподробнее, что должна делать эта функция? Точнее, какие аргументы она должна принимать, и что возвращать.
0
5 / 5 / 2
Регистрация: 31.03.2011
Сообщений: 34
06.06.2011, 20:39  [ТС]
она должна возводить в квадрат числа от 1 до 10 , вывести на экран

1 1
2 4
3 9
4 16
...
10 100
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.06.2011, 20:56
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;
}
2
Anton223
23.04.2012, 23:13
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;
}
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 1
04.12.2015, 17:20
Цитата Сообщение от 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?
Я только начинаю изучать С++ и, вроде бы, программа не сложная, но сам разобраться не могу.
0
2 / 2 / 0
Регистрация: 16.08.2015
Сообщений: 31
23.03.2017, 02:16
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;
 
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
23.03.2017, 04:01
Цитата Сообщение от 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 итераций.

Это является "повторным сложением" или нет?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.03.2017, 04:14
Ну да, именно так.
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); }
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
23.03.2017, 04:23
Ну или чуть поварьировав
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); }
2
 Аватар для KvikS
0 / 0 / 0
Регистрация: 05.07.2022
Сообщений: 2
05.07.2022, 16:52
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// функция square()
#include <iostream>
 
using namespace std;
 
int square(int x) {
 
    int k = 0;
    for (int p = 0; p < x; ++p)//пояснение/ допустим x = 2; проверка p<x == 0<2, да и значит k+2;
                               //цикл продолжается но р уже равен 1; 1<2, да значит k(2)+2= 4
                               //и р уже равен 2; 2<2 нет, цикл заканчивается и выводится return который равен 4
    k += x;
    return k;
}
int main() {
    for (int i = 1; i <= 10; i++) 
    cout << i << " = " << square(i) << endl;
}
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
05.07.2022, 20:31
KvikS, и в чём смысл твоего поста в теме столетней давности?
0
 Аватар для KvikS
0 / 0 / 0
Регистрация: 05.07.2022
Сообщений: 2
11.07.2022, 21:35
Kuzia domovenok, если мне это понадобилось сейчас и я искала ответ на постах столетней давности, то и сейчас это кому то понадобится
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
12.07.2022, 22:26
C++
1
2
3
4
5
6
7
int square(int x)
{
int x2 = 0, X = abs(x);
for(int i = 0; i < X; i++)
   x2 += X;
return x2;
}
C++
1
2
3
4
5
int square(int x)//в принципе без оператора умножения)
{
double X = 1.0 / x / x;
return 1.0 / X;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2022, 22:26
Помогаю со студенческими работами здесь

Перемещение прямоугольников нарисованных на канве методом повторного перерисовывания
Я хотела сделать перемещение прямоугольников нарисованных на канве методом повторного перерисовывания. Для этого я использовала функцию...

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована...

Функция seekq, вместо повторного считывания файла (txt)
Всем привет, ребят. Я тут новый и это мой первый пост :) И вопрос у меня вот какой.. Мне нужно переписать этот код так, чтобы считывание...

Функция запрещающая редактировать поле после повторного открытия докум
Друзья не подскажете какой функцией можно запретить редактирование конкретного поля документа пользователем при повторном открытии формы...

Добавьте возможность сложения (сложения через оператор сложения) для дроби с целым числом. (не только с дробью)
Есть код, не могу написать как складывать дробь с целым числом, а не только с дробью. + Создайте дочерний класс OperationsOnFraction и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru