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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Помощ за задачи на C/C++ (merged)

Featured Replies

Привет на всички. Значи имам една задача, която трябва да направя, но проблемът е, че съм нов в тази основа, и не мога наистина да се оправя. Тя е следната:

 

 

 

Да се създаде свързан списък от цели положителни числа, до въвеждането на 0. Да се сортира чрез метода на пряката селекция и да се изведе на екрана. Да се въведе цифра от клавиартурата и да се изтрият всички елементи от списъка, несъответстващи на тази цифра. Променения списък да се изведе на екрана.

 

Значи, постарах се поне да издокарам програмата до някъде.

#include "stdafx.h"#include<stack>#include<list>#include<iostream>#include<queue>using namespace std;stack<int>st;queue<int>qu;int main(){ list<int>l1; list<int>::iterator it1; stack<int>st; queue<int>qu; int x, n, p; cin>>x;while(x != 0)  {cout<<"Enter an element";   cin>>x;    if(x>0, x) st.push(x);   if(x<0) qu.push(x);  }cout<<"Enter an element";    cin>>x;    }

По-нататък ме е срам да продължа, защото не знам наистина как да я издокарам. Знам, че би трябвало да се ползва метода Quicksort, но си нямам и на идея как да я довърша. Ако може малко помощ, и малко обяснения относно това кое откъде идва, след като се продължи този доста-зле направен код (ако разбира се е дори правилно оформен), ще ви бъда искрено благадарен :) 

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

  • Отговори 941
  • Прегледи 234,5k
  • Създадено
  • Последен отговор

Издокарал си я, ама защо със стек като искат в условието списък? Мога да ти я започна ама си напиши сам сортирането, метода на пряката селекция не е Quicksort, а намираш най-малкия елемент и го заместваш с началото на списъка, от оставащите елементи намираш пак най-малкия и го заместваш с втория елемент от списъка и това го повтаряш докато не стигнеш до края на списъка.

#include <iostream>#include <list>using namespace std;int main (){  list<int> lst;  list<int>::iterator i;  int x;  cout << "Please enter some integers (enter 0 to end):n";  do {    cin >> x;    if (x) lst.push_back (x);  } while (x);  // tuka tryabva da go sortirash.    for(i=lst.begin(); i != lst.end(); ++i) cout << *i << " ";  cout << endl;  system("pause");}

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

Аха, има нещо такова. Все още не мога да направя разлика.

 

Мерси за помощта. От тук нататък мисля, че мога да се справя.

Здравейте!  Може ли да ми помогнете със задача за C++

В едномерен масив да се въведат стойности естествени числа. Да се създаде и изведе масив съдържащ индексите на елементите на първия масив, които се делят на 3 и 5. Благодаря Ви !

#define Razmer 5
 
#include <iostream.h>
#include <conio.h>
 
int main(void)
{
int A[Razmer] = {0};
int B[Razmer] = {0};
int i, j;
 
for(i=1; i<=Razmer; i++) { 
printf("A[%u] = ", i);
scanf("%u", &A);
}
 
printf("n");
 
 
for(i=1, j=0; i<=Razmer; i++) {
if(A%3==0&&A%5==0) {
B[j] = A
printf("B[%u] = A[%u] = %un", j, i, B[j++]); 
}
}
 
getch();
   
return 0;
}

 

това е кода работи но ми трябва с cin вместо scanf,  cout и вместо  printf , ined ще може ли помощ 

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

  • 2 седмици по-късно...

Благодаря за помощта, inet! Работи както трябва, а аз ще добавя коментарите и ще се опитам да намаля времето по някакъв начин.

Сигурно вече не ти трябва, ама донякъде може да се намали времето с 20 ~ 25% ако се усложни малко кода, частта за s я разделяш на две части - първо проверяваш дали s = t2 - f е просто число и ако да - само тогава проверяваш дали в интервала t2/2 до s няма друго просто число. 

#include <iostream>using namespace std;unsigned long i, nr, f, s, t, t2, pr;int main(){    t = 5;    cout << "NR = ";    cin >> nr;    do {        t++;        t2 = t * t;        f=t2/2;        if (f%2==0) f++;        do {            f-=2;            pr = 1;            for (i=3; i<t; i+=2)                if (f%i==0) {                   pr = 0;                   i = t;               }                    } while (pr==0);                s=t2 - f;        if (s%2==1) {            pr = 1;            for (i=3; i<t; i+=2)               if (s%i==0) {                   pr = 0;                   i = t;               }                        if (pr) {            // проверка дали са няма и друго просто число между тях.                s -= 2;                   while (pr && s >=t2/2) {                   pr = 0;                   for (i=3; i<t; i+=2)                       if (s%i==0) {                         pr = 1;                         i = t;                   }                   s -=2;                           }  // while            }                     if  (pr) nr--;        }            } while (nr);        s = t2 - f;    cout << endl << t2 << "   (" << f << " + " << s << ")n";    system("pause");}

а може и да му посдъвчеш малко манджичката, примерно до първите 4000 числа.

#include <iostream>#define MX 40using namespace std;unsigned long i, nr, f, s, t, t2, pr;unsigned long IX[MX] = {5, 1969, 4801, 7619, 10789, 14519, 18589, 22543,                     26053, 29855, 33215, 37117, 41227, 45285, 49313, 52721,                     56855, 60825, 63863, 66659, 68851, 71387, 73499, 75919,                    78259, 81135, 83693, 86283, 89121, 91817, 96743, 103871,                     109763, 114903, 118965, 122883, 126829, 130509, 133375, 135723};           int main(){        cout << "nNR = ";    cin >> nr;           i = (nr-1) / 100;    if (i >= MX) i = MX-1;    t = IX[i];    nr -= i * 100;      do {       t++;       t2 = t * t;       f=t2/2;       if (f%2==0) f++;       do {          f-=2;          pr = 1;          for (i=3; i<t; i+=2)              if (f%i==0) {                pr = 0;                i = t;             }       } while (pr==0);               s=t2 - f;       if (s%2==1) {          pr = 1;          for (i=3; i<t; i+=2)             if (s%i==0) {                pr = 0;                i = t;             }                      if (pr) {             s -= 2;                while (pr && s >=t2/2) {                pr = 0;                for (i=3; i<t; i+=2)                    if (s%i==0) {                      pr = 1;                      i = t;                   }                s -=2;                         }  // while          }                   if  (pr) nr--;        }     } while (nr);        s = t2 - f;    cout << endl << t2 << "   (" << f << " + " << s << ")  " << t << endl;    system("pause");}

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

Нe няма нужда вече! Справих се с задачата с ваша помощ и направих някои промени. Отново благодаря!

#define Razmer 10 #include <iostream>using namespace std; int main(void){     int A[Razmer] = {0};     int B[Razmer] = {0};     int i, j;         for(i=0; i<Razmer; i++) {         cout << "A[" << i << "] = ";        cin >> A[i];        }            cout << endl;             for(i=0, j=0; i<Razmer; i++)         if (A[i]%15==0) {           B[j] = i;            cout << "B[" << j++ << "] = " << i;           cout << "   A[" << i << "] = " << A[i] << endl;            }              system("pause");}

[edit] сега забелязах, че представения от тебе код не отговаря на условието в #375 пост - пише втория масив да садържа индексите, а не елементите делящи се на 3 и 5;

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

#define Razmer 10 #include <iostream>using namespace std; int main(void){     int A[Razmer] = {0};     int B[Razmer] = {0};     int i, j;         for(i=0; i<Razmer; i++) {         cout << "A[" << i << "] = ";        cin >> A[i];        }            cout << endl;             for(i=0, j=0; i<Razmer; i++)         if (A[i]%15==0) {           B[j] = i;            cout << "B[" << j++ << "] = " << i;           cout << "   A[" << i << "] = " << A[i] << endl;            }              system("pause");}

[edit] сега забелязах, че представения от тебе код не отговаря на условието в #375 пост - пише втория масив да садържа индексите, а не елементите делящи се на 3 и 5;

 

май е така само който се делят на 3 и 5 сигурно съм объркал условието благодаря ти много  ined.

май е така само който се делят на 3 и 5 сигурно съм объркал условието благодаря ти много  ined. if(A%3==0&&A%5==0) промених обаче место да е на 15

  • 2 седмици по-късно...

Здравейте, трябва да направя програма която да въвеждаш масив от n числа, след което въвеждаш стойностите на масива, след което да извежда максималното и минималното число. Ето докъде я докарах:

 

Публикувано изображение

 

 

 

Публикувано изображение

 

Извежда ми някакви космически числа, а аз съм въвел 7 и 33. 

Здравейте, трябва да направя програма която да въвеждаш масив от n числа, след което въвеждаш стойностите на масива, след което да извежда максималното и минималното число. Ето докъде я докарах:

 

 

 

 

 

 

 

Извежда ми някакви космически числа, а аз съм въвел 7 и 33. 

В началото инициализрате мин и макс променливите с а[0] което обикновено е неопределено. Задайте мин да е някакво много голямо  число , примерно 2^31 a а макс да е много малко, примерно -мин

Аз не виждам където и да било да въвеждаш стойностите на масива.

Виж на това не обърнах внимание. Да не говорим че автора с cin >> i променя параметъра на цикъла :)

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

Извежда ми някакви космически числа, а аз съм въвел 7 и 33. 

// 100% компилационна грешкаint n;cin>>n;int a[n];

Дължината на такъв статичен масив може да бъде САМО константа. Това, което си се опитал да направиш става с динамичен масив.

Въвеждането на данни в масива доста си го оплескал:

//грешноcin>>i;//правилноcin>>a[i];

Алгоритъмът ти е верен, затова направо ще ти напиша решението: 

#include <iostream>using namespace std;int main(){	//array initialization	int n;	cout<<"Enter the number of elements. > "; cin>>n;	int *a = new int[n];	//input	for (int i = 0; i < n; i++)	{		cout<<"Enter element number "<<i+1<<".> "; 		cin>>a[i];	}	//variables	int min = a[0];	int max = a[0];	for (int i = 0; i < n; i++)	{		if (a[i]<min) min = a[i];		if (a[i]>max) max = a[i];	}	cout<<"MAX = "<<max<<endl;	cout<<"MIN = "<<min<<endl;	system("pause");	return 0;}
// 100% компилационна грешкаint n;cin>>n;int a[n];
Дължината на такъв статичен масив може да бъде САМО константа.

 

Значи според тебе това по-долу не само, че няма да работи ами няма и да може да се компилира...Сигурен ли си?

#include <iostream>using namespace std;int main(){	int n, min, max;	cout<<"Enter the number of elements: ";         cin>>n;	int a[n];	for (int i = 0; i < n; i++)	{		cout<<"a["<<i<<"] = "; 		cin>>a[i];		if ((i==0)||(a[i]<min)) min = a[i];		if ((i==0)||(a[i]>max)) max = a[i];	}            cout<<"MAX = "<<max<<endl;	cout<<"MIN = "<<min<<endl;	system("pause");	return 0;}

 

Значи според тебе това по-долу не само, че няма да работи ами няма и да може да се компилира...Сигурен ли си?

 

Публикувано изображение

Микромеките какво да ги коментирам, на Dev C++ съвсем нормално се компилира и изпълнява горната програма.

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

  • 3 седмици по-късно...

Здравейте! 

 

Имах задача да направя програма, която да наподобява тото. 

Двумерни масиви, с по 5 (за 5от 35) и 6( за останалите две тегления)

Предварително задавам тези числа, после в друг масив въвеждам моите числа и програмата ми казва броя на съвпаденията при първо и второ теглене (за сега е с 2 тегления). 

 

Идеята ми е, да завърша програмата, като я направя действащо тото, но имам нужда от помощ.

 

По какъв начин да генерирам 6 случайни числа от 49 например, които после да запиша в масива за 6/49? 

Идеята е нещо да генерира 6 рандом числа, да ги записва в двумерен масив, за да се получи на практика нещо като тото. 

 

Това, което имам до момента е следното:

#include <iostream>#include <string>using namespace std;int main (){    int toto[2][6]={{14,13,17,8,25,32},{37,42,7,18,2,33}}, toto2[2][6]={{41,19,29,6,36,44},{20,24,36,11,39,45}},toto3[2][5]={{24,11,7,6,2},{2,35,30,16,5}};    int chisla[6];         int br[2]={0};    cout<<"Vuvedete vashite 6 chisla za teglene 6/49"<<endl;    cout<<endl;    for (int m=0; m<6;m++)    {    cout<<"Chislo"<<m+1<<" ";    cin>>chisla[m];        }        for (int i=0; i<2; i++)    {        for(int k=0; k<6; k++)        {                //cout<<*(*(toto+i)+k)<<'t';                                for(int e=0;e<6;e++)                {                if(chisla[e]==toto[i][k]) br[i]++;                }                        }        cout<<endl;    }        cout<<"Vashiyat rezultat ot 1-vo teglene:"<<" "<<br[0]<<endl<<"Vashiqt rezultat ot 2-ro teglene: "<<br[1]<<endl;        cout<<endl;        cout<<"Vuvedete vashite chisla za teglene 6/42"<<endl;    cout<<endl;    int chisla1[6];           for (int v=0; v<6;v++)    {    cout<<"Chislo"<<v+1<<" ";    cin>>chisla1[v];        } int count[2]={0};         for (int i=0; i<2; i++)    {        for(int k=0; k<6; k++)        {        //cout<<*(*(toto2+i)+k)<<'t';                for(int j=0;j<6;j++)                {                if(chisla1[j]==toto2[i][k]) count[i]++;                }        }        cout<<endl;    }    cout<<"Vashiyat rezultat ot 1-vo teglene:"<<" "<<count[0]<<endl<<"Vashiqt rezultat ot 2-ro teglene: "<<count[1]<<endl;    cout<<endl;        cout<<"Vuvedete vashite chisla za teglene 5/35"<<endl;    cout<<endl;    int chisla2[5];           for (int q=0; q<5;q++)    {    cout<<"Chislo"<<q+1<<" ";    cin>>chisla1[q];        } int counter[2]={0};         for (int i=0; i<2; i++)    {        for(int k=0; k<6; k++)        {        //cout<<*(*(toto2+i)+k)<<'t';                for(int j=0;j<6;j++)                {                if(chisla1[j]==toto2[i][k]) counter[i]++;                }        }    } cout<<"Vashiyat rezultat ot 1-vo teglene:"<<" "<<counter[0]<<endl<<"Vashiqt rezultat ot 2-ro teglene: "<<counter[1]<<endl;    system("pause");    return 0;} 

Ако някой има възможност и му се занимава, нека удари едно рамо. : )

rand()%49+1 ти генерира число от 1 до 49, ще трябва да включиш и проверка ако генерираното число вече е изтеглено да генерира ново.

 

за да генерира що годе случайни числа може да ползваш за инициализация времето srand (time(NULL));

#include <iostream>#include <stdlib.h> #include <time.h>using namespace std;int i, j, k, x, t[6];main() {   srand (time(NULL));   for (i=0; i<6; i++) {       do {          k = 0;          x = rand()%49+1;          for (j=0; j<i; j++)              if (x==t[j]) k=1;       } while (k);       cout << x << " ";       t[i] = x;   }         cout << endl << endl;   system("pause");}

как да оправя тези грешки

   string menuNames[menuAmmount];        for(int i=0;i<menuAmmount;i++)    {                menuNames[i]=menuNamesAfterParse.substr(0, menuNamesAfterParse.find_first_of('|') );        if(i!=(menuAmmount-1))        {            menuNamesAfterParse = menuNamesAfterParse.substr(menuNamesAfterParse.find_first_of('|'));                    menuNamesAfterParse = menuNamesAfterParse.substr(1);        }    }
 error C2057: expected constant expression
 error C2466: cannot allocate an array of constant size 0
 error C2133: 'menuNames' : unknown size

string menuNames[menuAmmount];

Здравейте !

 

Проблема се дължи на това, че menuNames трябва да получи константно число menuAmount, при такова деклариране на масива. T.e. menuAmount трябва да е предварително дефинирана константа, а не да се изчита от входа.

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

 

Поздрави !

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

  • 2 месеца по-късно...

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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