Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

C++ Две задачи

Featured Replies

Някой може ли да ми помогне със следните две задачи за C++ •Да се дефинира функция, която проверява дали дадено естествено число е степен на 2. •Да се дефинира функция, която установява дали в дадена редица от естествени числа има поне две числа, които са степени на 2.

  • Автор

Първата си я написах, но нещо не работи...

#include "stdafx.h"
#include <iostream>
using namespace std;
void func() 
{ 
	double n;
	cout<<"Vuvedi chislo: ";
	cin>>n;
	for(n;n>2;n/2)
	{
		if(n=2)
			cout<<"Stepen na 2 e!";
		else
			cout<<"Ne e stepen na 2!";
	}
}
int main() 
{
func();
return 0;
}

Каквото и число да въведа след минаването през цикъла for n е равно на 2 защо така се получава? Примерно при 7 би трябвало да раздели и да стане 3,5 да раздели пак и да стане 1,75 и да спре да дели и да ми даде, че 7 не е степен на 2 а ми дава, че е степен и след минаванетп през for-а n=2?

#include "stdafx.h"
#include <iostream>
using namespace std;

void func() 
{ 
    	double n;
    	cout<<"Vuvedi chislo: ";
    	cin>>n;
    	while (n>=2)
    	{
			n=(int)(n/2);
			cout<<n;
    	}

            	if (n==2)
                    	cout<<"Stepen na 2 e!";
            	else
                    	cout<<"Ne e stepen na 2!";
}
int main() 
{
func();
return 0;
}

#include "stdafx.h"
#include <iostream>
using namespace std;

void func() 
{ 
    	double n;
    	cout<<"Vuvedi chislo: ";
    	cin>>n;
    	while (n>=2)
....
Така няма ли да е по-бързо, особено при големи числа?

while (n>=2)
    	{
                    	if((n/2)!=(int)(n/2))
							{
							   cout<<"Ne e stepen na 2!";
							   exit;
							}
						n=(n/2);

    	}

            	if (n==2)
                    	cout<<"Stepen na 2 e!";

Да. Няма да е необходимо да се минава през всички цикли. Не съм програмист на C. Аз дори съм забравил да махна един ред в цикъла за извеждане на резултата след делене.

  • Автор

Мерси за помоща само може ли да ми обясните идеята на този ред n=(int)(n/2)

Мерси за помоща само може ли да ми обясните идеята на този ред

n=(int)(n/2)

Цялата част на резултата от делението на N на 2

Тук бих подходил по друг начин. Ако log2X дава цяло число, то X е степен на двойката. Много по-малко код за писане и поддръжка!

АКо я има стандартна функция... Иначе трябва да е log10X/log102 и навлизаме в дробни числа и става....

По-лесно би било със аритметичен (май) шифт надясно, но там логиката се усложнява :wors:

Степенуването/коренуване с показател две и логаритмуването при същата основа са есенциални операции, и направо ми е чудно защо в ги няма в някои езици. Ето как се логаритмува с основа две в C и C++.

Степенуването/коренуване с показател две и логаритмуването при същата основа са есенциални операции, и направо ми е чудно защо в ги няма в някои езици. Ето как се логаритмува с основа две в C и C++.

Това е на С++, в С няма вградени функции, всичко е външно. И имам спомени че логаритъм при основа две не е част от стандартните библиотеки с функции, а влиза в някои математически библиотеки

Хъм, отдавна не съм ръчкал C. Но виж какво казва документацията за log2 - Header File: math.h ( C ) or cmath ( C++ ). Пък и на човека заданието му е за C++. Поне така пише в поста...

Хъм, отдавна не съм ръчкал C. Но виж какво казва документацията за log2 - Header File: math.h ( C ) or cmath ( C++ ). Пък и на човека заданието му е за C++. Поне така пише в поста...

Мда, съгласен съм че е за С++ въпроса, прав си. Но между другото при основа 2 го има чак в С99, аз като стар човек съм учил ANSI C, явно за това съм останал с такова впечатление :rolleyes:

Е, то C99 също е ANSI C - просто е последен ревижън.

П.П. Закачам се, разбрахме се за какво иде реч. И аз вече нямам време и нерви да ги следя всичките. За това ползвам чичо Гошо - много знае този човек, дано не доживеем деня, когато ще започне и да прилага знанията си...

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.