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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Помощ за задача по С++

Featured Replies

Здравейте! Имам да направя следната задача: Напишете рекурсивна програма която запълва двумерен масив n x 2^n с нули и единици така че масивът да представя всички n-битови двоични числа.Например за n=2(на снимката) .

11997204_1061576510532503_562250901_n.jpе

  •  
  •  

Написъл съм функцията за конвертиране от десетично в двоично само.Ако може някой да ми помогне ще съм му много благодарен :)

#include<iostream>
using namespace std;
int decimal_binary(int n, int &rem, int &i, int &binary)  /* Funkciq, koqto konvertira ot desetichna v dvoichna */
{
    rem = n % 2; // ostatyk ot chisloto razdeleno na 2
    n /= 2; // delim chisloto na 2
    binary += rem*i; // sumirame dvoichnoto chislo s proizvedenieto na ostatyka po i 
    i *= 10; // uvelichavame i s 10
    cout << "Vavedete stoinost za 2(na stepen )";
    cin >> num;

    n = 2 ^ num;

    if (n != 0) {
        decimal_binary(n, rem, i, binary);
    }
    else {
        return binary; // vryshtame dvoichnoto chislo
    }
}

Редактирано от mi7aka (преглед на промените)

Погледни темата

 

  • Автор

Погледнах,но там е за конвертиране от десетичен в двоичен което аз съм го направил ..

Току що, mi7aka написа:

Погледнах,но там е за конвертиране от десетичен в двоичен което аз съм го направил ..

В тази задача е абсолютно ненужно да конвертираш десетично число в двоично.

Последната колона на масива я попълваш 0,1,0,1... Предпоследната 0,0,1,1,0,0.... следващата 0,0,0,0,1,1,1,1,0,0,0,0 и така по степените на две.

  • Автор

Ако може да я напише някой тъй като съм начинаещ в тази област и не мога да конструирам..благодаря предварително

П.С. благодаря на тия които ми помогнаха с идеи но за съжаление не мога да ги осъвършенствам

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

unsigned n;
string s;
vector <string> vs;

string& decrement(string& s)
{
	unsigned i;
	for (i = s.length() - 1; i >= 0; i--)
	{
		if (s[i] == 1)
		{
			s[i] = 0;
			break;
		}
		s[i] = 1;
	}
	return s;
}

string& fillbindig(unsigned p)
{
	if (p == vs.size() - 1)
	{
		return vs[p];
	}
	vs[p] = (fillbindig(p + 1));
	return decrement(vs[p]);
}


int _tmain(int argc, _TCHAR* argv[])
{
	unsigned i, j;
	cin >> n;
	for (i = 0; i < n; i++) s.push_back(1);
	for (i = 0; i < (1 << n); i++) vs.push_back(s);
	fillbindig(0);
	for (i = 0; i < (1 << n); i++)
	{
		for (j = 0; j < n; j++)
		{
			cout << (int)vs[i][j];
		}
		cout << endl;
	}
	return 0;
}

 

  • Автор

Благодаря ти ! 

Но незнам дали ще мога да я обясня тъй като е написана по много сложен начин :D

Функцията "decrement" служи за намиране на символен низ, който е по малък с единица от параметъра, ако се интерпретира като цяло двоично число без знак.

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

Векторът се инициализира във функцията "main" с "n" на квадрат низове състоящи се от "n" единици.

"fillbindig" е рекурсивна функция, която вика сама себе си със се по големи параметри, докато достигне до извикване на последния елемент (стринг / двоично число изразено чрез низ) на вектора, в който случай връща низ състоящ се от "n" единици, което се явява двоично число равно на 2 на ента минус 1. Оттам нанататъчи функцията започва да връща низове за по предните елементи като ги декрементира с 1, докато стигне до низ състоящ се от "n" нули, който се пада да се напише в първия елемент на вектора имащ индекс нула.

 

#include <iostream>
#include <iomanip>
#include <cstring>

using namespace std;

void fil(int m[], int x, int ix)
{
     if (x>1) fil(m,x/2,ix+1);
     m[ix]=x%2;
}

int main()
{
    int n,s;
    
    cout<<"n = ";
    cin>>n;
    
    if (n<1) return 1;
    
    s=1<<n;
    int a[s][n];
    memset(a,0,s*n*sizeof(int));
    
    for (int i=0; i<s; ++i)
    {
        cout <<setw(5)<< i <<":";
        fil(a[i],i,0);
        for (int j=n-1; j>=0; --j)
            cout << ' ' << a[i][j];
        cout<<endl;
    }
}

 

Редактирано от ined (преглед на промените)

Мисля, че трябва да е нещо такова

#include <iostream>

using namespace std;

int all[1024][10];
int b[10];
int number = 0;

void binaries(int *b, int bits, int pos)
{
   if (pos == bits)
   {
       for (int i = 0; i < bits; i++) 
       {
           all[number][i] = b[i];
       }
       number++;
       return;   
   }
   b[pos] = 0;
   binaries(b, bits, pos + 1);
   b[pos] = 1;
   binaries(b, bits, pos + 1);
}

int main()
{
   int i, n;
   cin >> n;
   
   binaries(b, n, 0);
   
   for (i = 0; i < number; i++)
   {
       for (int j = 0; j < n; j++) 
       {
           cout << all[i][j] << ' ';
       }
       cout << '\n';
   }
   return 0;
}

 

Редактирано от plamenbm86 (преглед на промените)

#include <iostream>
#include <cstring>
using namespace std;

int n;
char* chp;

void decrement(char* s)
{
	unsigned i;
	for (i = n - 1; i >= 0; i--)
	{
		if (s[i] == 1)
		{
			s[i] = 0;
			break;
		}
		s[i] = 1;
	}
	return;
}

void fillbindig(unsigned p)
{
	if (p == (1 << n) - 1)
	{
		return;
	}
	fillbindig(p + 1);
	memcpy(chp + p * n, chp + (p + 1) * n, n);
	decrement(chp + p * n);
	return;
}


int main()
{
	int i;
	cout << "n = ";
	cin >> n;
	chp = new char[n * (1 << n)];
	for (i = 0; i < n * (1 << n); i++) chp[i] = 1;
	fillbindig(0);
	for (i = 0; i < n * (1 << n); i++)
	{
		if ((i != 0) && (i % n == 0)) cout << endl;
		cout << (int)chp[i];
	}
	delete[] chp;
	return 0;
}

 

Редактирано от Реджеп Иведик (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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