Премини към съдържанието
  • Добре дошли!

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

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

     

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


Препоръчан отговор

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

 

 

 

Да се създаде свързан списък от цели положителни числа, до въвеждането на 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 (преглед на промените)
Линк към коментара
Сподели в други сайтове

Издокарал си я, ама защо със стек като искат в условието списък? Мога да ти я започна ама си напиши сам сортирането, метода на пряката селекция не е 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 месеца по-късно...

Добавете отговор

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

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

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

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване