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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

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

Featured Replies

Здравейте.

 

Имам проблем с търсенето на цикли в граф. По условие на задачата имам да намеря най-късия цикъл в ориентиран граф, тоест ако графа ми е: (A,B,C,D), връзките между елементите на графа са: (A->B), (A->A), (B->C), (B->A),  (C->D), (C->A), (D->A) и така циклите са ми: А->B->C->D->A; A->B->C->A; A->B->A; A->A, програмата трябва да изведе най-късия, в случая A->A. За да я реша предполага, че първо трябва да открия всички цикли, след това да ги сложа всеки в отделен списък и накрая да изведа най-малкия списък, в който ще е най-късия цикъл (A->A), но не знам как да го реализирам. В момента съм направил връзките (арките) между отделните елементи:

#include <iostream>

using namespace std;

const int N = 10;

struct elem
{
	char key;
	elem *next;	
} *g1[N];

void init(elem *g[N])
{
	for (int i = 0; i < N; i++)
		g[i] = NULL;
}

int search_node(char c, elem *g[N])
{
	for (int i = 0; i < N; i++)
		if (g[i])
			if (g[i]->key == c)
			{
				return 1;
			}

	return 0;
}

int search_arc(char from, char to, elem *g[N])
{
	if (search_node(from, g) && search_node(to, g))
	{
		int i = 0;

		while (g[i]->key != from) i++;

		elem *p = g[i]->next;

		while (true)
		{
			if (p == NULL)
			{
				break;
			}

			if (p->key == to)
			{
				return 1;
			}

			p = p->next;
		}
	}

	return 0;
}

void add_node(char c, elem *g[N])
{
	if (search_node(c, g))
		cout << "Node already exists.\n";

	int i = 0;
	while (g[i] && (i < N)) i++;

	if (g[i] == NULL)
	{
		g[i] = new elem;
		g[i]->key = c;
		g[i]->next = NULL;
	}
	else
	{
		cout << "Maximum nodes reached.\n";
	}
}

void add_arc(char from, char to, elem *g[N])
{
	if (search_arc(from, to, g))
		cout << "Arc already exists.\n";
	else
	{
		if (!search_node(from, g))
			add_node(from, g);

		if (!search_node(to, g))
			add_node(to, g);

		int i = 0;
		while (g[i]->key != from) i++;

		elem *p = new elem;
		p->key = to;
		p->next = g[i]->next;

		g[i]->next = p;
	}
}

void print(elem *g[N])
{
	for (int i = 0; i < N; i++)
	{
		if (g[i] != NULL)
		{
			elem *p = g[i];

			while (p)
			{
				cout << p->key << "\t";
				p = p->next;
			}

			cout << endl;
		}
	}
}

void iscycle(elem *g[N])
{

}

int main()
{
    system ("cls");

	cout << "init: " << endl;
	init(g1);

	cout << "graph 1: " << endl;
	add_arc('a', 'b', g1);
	add_arc('a', 'a', g1);
	add_arc('b', 'c', g1);
	add_arc('b', 'a', g1);
	add_arc('c', 'a', g1);
	add_arc('c', 'd', g1);
	add_arc('d', 'a', g1);

	print(g1);

	cout << "cycles: ";
	iscycle(g1);
               
    system("pause");
	return 0;

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

Здравейте колеги.

 

Имам проблем с една програма. Стигнал съм до едно положение и се чудя как да опиша следните функции : 

 

1.Четене на точка по подаден индекс от вектор
2.Инициализация на съдържанието на вектора с точки със случайни стойности по Z по зададена размерност за X(N)
3. Добавяне на елемент във вектора, параметър CBar3D
4.Четене на точка по зададен индекс на вектора
5. Създава и връща вектор от CBar3D, изчислени като разлика спрямо подадена като параметър(средна)стойност(int) по координата Z
6. Изчислява средна стойност на графиката по координата Z
 
Пращам ви това, което съм направил до момента.

#include<iostream>
#include<fstream>
#include<string>
#include<math.h>
#include<cstdlib>
#include<vector>
#include<iterator>
#include<list>
#include<algorithm>
#include<functional>
using namespace std;
	class CBar3D
{
	private:
		double x, y, z;
		static int pnum;
		static int a;

	public:
		CBar3D()
		{
			x = y = z = 0;
			pnum++;
	
		}

		CBar3D(double a, double b, double c)
		{
			x=a; y=b; z=c; pnum++; 
		}	
	double get_x() const
	{
		return x;
	}	
	void set_x(double a)
	{
		x=a;
	}
	double get_y() const
	{
		return y;
	}
	void set_y(double b)
	{
		y=b;
	}
	double get_z() const
	{
		return z;
	}
	void set_z(double c)
	{
		z=c;
	}
	bool operator<(CBar3D x)
	{
		if ( this->get_x() == x.get_x())
			return this->get_y() < x.get_y();
		else
		{
		return false;
		}
	}
	void print()
	{
		cout << "\n a=" << x << "\n b=" << y <<"\n c=" << z <<endl;
	}
	static void PrintPNum()
	{
		cout<<"randum sotinost= "<<pnum;
	}
		friend ostream& operator>>(ostream&str,  CBar3D &A);
		friend istream& operator<<(istream&str,  CBar3D &A);
	};
	 ostream& operator<<(ostream& str, const  CBar3D&A)
{
	str << A.get_x() << " " << A.get_y() <<" "<< A.get_z << endl;
	return str;
}
istream& operator>>(istream& str, CBar3D&A)
{double a,b,c;
	str >> a;
	str >> b;
	str >> c;
	A.set_x(a);

	return str;
}
static void Printa()
	{
		int a, chislo;
		do
		{
			cout << "vyvedete chislo a="; 
			cin >> a;
			chislo = rand() % 100 + 1;
			if (a==chislo)
			{
				cout << "Tova e chisloto \n\n\n\n";
				
			}
			else 
			{
				cout << "Tova ne e chisloto \n\n\n\n";
				
			};
		}
		while (a!=chislo);
	}
	class CGraphic
{
private:
	string imegraf;
	int razmer;
	vector<CBar3D> vv;
	double d;
	list <CGraphic> st;

public:		
	CGraphic(string imegr, string FileName)
	{
		ifstream file ( FileName.c_str());
 if(!file)
			throw "Can't open file";
		while(!file.eof())
		{
			CGraphic s ;
			file>>s;

			st.push_back(s);
	}
		file.close();
	}
	void Output(ostream&  konzola)
	{
		copy(st.begin(),st.end(),ostream_iterator<CGraphic>(konzola, " "));
	}

  CGraphic(string imegr, int N) 
  { 
	  imegraf=imegr;
	  razmer=N;
  
  for (int i=1;i<=N;i++)
	  vv.push_back(CBar3D(i,5,rand()%30));
  }
   string getimegr() const
   {
	   return imegraf;
   }
   void setimegr( const string imegr )
   {
	   imegraf=imegr;
   }
   int getN() const
   {
	   return razmer;
   }
   void setN(const int N)
   {
	   razmer=N;
   }
   CGraphic()
   {    d = 0.0; }

  CGraphic(double x)
  {  d = x; }

  CGraphic &operator=(double x)  
  {
	  d=x;
  return *this;
  }

  double getd() const
  {
	  return d; 
  }
   void setd(double x)
	{
		x=d;
	}
  
		friend ostream& operator>>(ostream&str,  CGraphic &B);
		friend istream& operator<<(istream&str,  CGraphic &B);
	};
		ostream& operator<<(ostream& str, const  CGraphic&B)
{
	str << B.getd() << " " << B.getimegr() <<" "<< B.getN << endl;
	return str;
}
istream& operator>>(istream& str, CGraphic&B)
{double d,int N, double x;
	str >> d;
	str >> N;
	str >> x;
	B.setd(x);

	return str;
}
		vector<CBar3D> newvector(int sr)
		{
			vector<CBar3D> temp;

		}
	void setvector(CBar3D vv)
	{
	
	}
		int srednoZ()
	{
        
	}
	void main(int argc, char** argv)
	{
		{
			{	
			vector<int> vv;// дефиниране на празен вектор
			for (int i=0; i<10; i++) vv.push_back(i);// добавяне на още 10 елемента. Чрез vv.push_back(i) добавяме елемент
		cout << "Sled dobavqne na oshte 10 elementa: " << vv.size() << endl;
		cout << "Съдържанието на масива от вектори е:";
		}
    vector<int> vectorOne(10);
    
	cout << "Размер на вектора е: " << vectorOne.size() << " elements." << endl;
    cout << "Капацитет на вектора е: " << vectorOne.capacity() << " elements." << endl;
    
	for (long index=0; index<(long)vectorOne.size(); ++index) vectorOne.at(index)=rand();
    
	cout << "Вектора съдържа следните елементи:" << endl;
    for (long index=0; index<(long)vectorOne.size(); ++index) 
	{
        cout << vectorOne.at(index) << " ";
    }
		cout << endl << endl;
		
		system("pause");	
	}
}

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

Здравейте, искам да напиша програма, която да въвежда 10 букви от клавиатурата, след което да извежда най-малката от тях. Имам два проблема: единия е, че цикър for се върти само до петия елемент, а след това изпечатва последния въведен. Ако махна цикъла, за една буква сравнението е акуратно, но ако искам да въведа повече букви, нещо ми убягва. Ще се радвам да ми помогнете. :)

#include <stdio.h>

int main()
{
    char ch1,ch2;
    int    i;
    ch2 = 'z';
    printf("\n Enter characters: ");
    for(i=0; i<=9; i++)
    {
            ch1 = getchar();
            if (ch1 <= ch2)
            ch2 = ch1;
     }
    printf("\n The lowest letter is: %c\n",ch2);
	system("pause");
	return 0;
}

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

Цикъла ти се изпълнява 11 пъти и ако вкараш 10 букви и ентер 11-та ще е той и ще е най-малката (ASCII кода за стрелка надолу е 10)

Ок, ограничих брояча до 9 (нали от 0 до 9 са 10 символа), но резултата е същия. Явно нещо ми убягви при ASCII кодовете. Би ли обяснил?

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

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

Моля помогнете ми с 1ва задача.

С втората се справих.

 

 

20151226_131911.jpg

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

Здравейте! :)

Пиша в темата защото имам проблем и се надявам някой да успее да ми помогне.Студент първокурсник съм и ми се налага да направя курсова по Програмиране (уж я направих),но трябва да направя и блок схема ...... а нямам никаква идея как... Задачата ми е :  "Да се състави алгоритъм и програма използващи функция, чрез която да се въвеждат в едномерни масиви две числови редици, всяка с по N на брой реални числа (N<10). Да се прехвърлят и съхранят в нови редици само тези стойности, които в двете редици с входни данни съвпадат по индекс и стойност. "
 Писана е на Microsoft Visual C++ 6.0 ,Някой може ли да помогне с блок-схема?

#include <stdio.h>

#define M 9

          // Прототипи:

void vhod (float a[], int br);

void printmas (float a[], int br);

void main ()

{ 

float  x[M], y[M], eq[M];

int i, j, n;

do

       { printf ("Broi na chislata : N>0;N<10 =");

          scanf ("%d", &n);

        }

  while (n<1||n>M);

  printf ("Vuvedi chisla za X:\n");  // извиква се функция vhod за масив x

          vhod (x,n);

  printf ("Vuvedi chisla za Y:\n");  // извиква се функция vhod за масив y

          vhod (y,n);

  printf ("\nVuvedeni chisla za X:\n");

          printmas (x,n);               //извиква се функция printmas за x

   printf ("\nVuvedeni chisla za Y:\n");

          printmas (y,n);               // извиква се функция printmas за y

 

                   for (i=0,j=0;i<n;i++)

                             if (x[i]==y[i])

                             z[j++]=x[i];

  printf ("\nSuvpadashti chisla:\n");

          printmas (z , j);     // извиква се функция printmas за z

 

}

/*       Функция vhod от тип void.

          Резултатите са в масива         */

 

  void vhod (float a[],int br)

  {

          int i;

          for (i=0;i<br; i++)

          {       

                    printf("element %d=",i+1);

                   scanf ("%f, ",&a[i]);

          }

  }

           /* Функция printmas от тип void.

                Резултатите са на екрана */

void printmas (float a[], int br)

  {

          int i;

          for (i=0; i<br; i++)

          printf ("%f, ",a[i]);

          printf ("\n");

   }

 

 

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

  • 11 месеца по-късно...
на 29.04.2006 г. в 0:42, TyRsEn написа:

Курсовата задача е следната:

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

 

 

При пускането и обаче (Borland C++ 3.1, курсовата задача трябва да е правена на него) се оказа, че има 3 грешки и като цяло не е точно това, което правим в университета.

 

Ето една задачка правена в час:

 

 

Моля хората, които разбират от програмиране да помогнат за евентуалното написаване на програмата или ако може горната с 3-те грешки да се оправи, но да има вид като тази в час (накрая да е с "return 0;", а не с "getch();", да е с по-простички функции (не с min=99999999999 и разни въвеждания на масиви).

 

БЛАГОДАРЯ НА ВСИЧКИ ОТГОВОРИЛИ!!!

Моля за помощ за курсова работа .

 

16.1. Програмистът Гошо Тарикатски съхранява сорсовете на своите програми в специален сейф. За да го обезопаси срещу крадци решил да създаде сложна система за отключване. Тя се задействала от два различни пулта, от които се въвеждале две трицифрени числа. След като се въведат числата се стартира програма, която генерира кода за сейфа по следния начин:

·         Събира първата цифра на първото число с последната цифра на второто число. Ако резултатът е двуцифрено число, цифрите му се събират. Получената цифра се записва като първа за кода.

·         Втората цифра се получава като по същият начин се обработят вторите цифри на двете числа.

·         След сумирането на последната цифра на първото число и първата цифра на второто по посочената схема, се получава третата цифра на кода.

Гошо е много добър програмист, но е затрупан от поръчки, затова възлага на вас да съставите алгоритъм и напише програма на С++ за получаване на кода. На вход се задават две трицифрени числа, след което се извежда получения по горната схема код, който също е трицифрено число.

 

16.2. Дадено е естественото число n. Съставете алгоритъм и напишете програма, която проверява дали n съдържа три еднакви цифри.

 

16.3. За група от М студента са зададени оценките по 5 дисциплини (Анализ, Геометрия, Програмиране, Чертане, Физика). Да се състави алгоритъм и напише програма за намиране на най-често срещаната оценка на всеки студент от групата.

 

16.4. Даден е двумерен масив Z с k реда и n стълба. Да се състави алгоритъм и напише програма, която създава нов масив M, като стойността на Mi е равна на най-малката положителна стойност в i-ия ред на Z.

преди 15 минути, Лозева написа:

Моля за помощ за курсова работа .

 

16.1. Програмистът Гошо Тарикатски съхранява сорсовете на своите програми в специален сейф. За да го обезопаси срещу крадци решил да създаде сложна система за отключване. Тя се задействала от два различни пулта, от които се въвеждале две трицифрени числа. След като се въведат числата се стартира програма, която генерира кода за сейфа по следния начин:

 

·         Събира първата цифра на първото число с последната цифра на второто число. Ако резултатът е двуцифрено число, цифрите му се събират. Получената цифра се записва като първа за кода.

 

·         Втората цифра се получава като по същият начин се обработят вторите цифри на двете числа.

 

·         След сумирането на последната цифра на първото число и първата цифра на второто по посочената схема, се получава третата цифра на кода.

 

Гошо е много добър програмист, но е затрупан от поръчки, затова възлага на вас да съставите алгоритъм и напише програма на С++ за получаване на кода. На вход се задават две трицифрени числа, след което се извежда получения по горната схема код, който също е трицифрено число.

 

 

 

16.2. Дадено е естественото число n. Съставете алгоритъм и напишете програма, която проверява дали n съдържа три еднакви цифри.

 

 

 

16.3. За група от М студента са зададени оценките по 5 дисциплини (Анализ, Геометрия, Програмиране, Чертане, Физика). Да се състави алгоритъм и напише програма за намиране на най-често срещаната оценка на всеки студент от групата.

 

 

 

16.4. Даден е двумерен масив Z с k реда и n стълба. Да се състави алгоритъм и напише програма, която създава нов масив M, като стойността на Mi е равна на най-малката положителна стойност в i-ия ред на Z.

 

Разгледай какво прави оператора %, масиви/вектори и итерация върху тях. 

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

Прогромо с функция main() и избор на функция за.
1.Въвъеждане от клавиатурата на размерност (с проверка за коректност) и елементи на масив цели числа K(M) (K<=30);
2.Изчисляване на средно аритметичното от четните положителни числа в масива;
3.Изчисляване на броя на нулевите числа в масива;
4.Извеждане на екран резултатите от съответното изчисляване, както и на въведените числа в масива (с походящи текстове) 

  • 1 година по-късно...

Някой може ли да помогне? Значи имам 20 часа за които трябва да реша този проблем. 
Иамм следната задача : 

Програма с функция main() и избор чрез меню на функции за:

Въвеждане от клавиатура на размерност (с проверка за коректност) и елементи на масив от цели числа C(K) (K<=25);

Формиране на нов масив CN(K) само от нечетните по стойност елементи и определяне на средно-аритметичната им стойност;

Презаписване на масива C(K) в масив CS(K) и сортиране на този масив в низходящ ред;

Извеждане на екран информация за съответния масив с пояснителен текст.

Направил съм я задачата. Тръгна ми няколко пъти, но вече не ще :Д Някой по-голям разбирач нека да погледне. Ще черпя ! 

https://pastebin.com/U8FHWwDx

  • 1 година по-късно...

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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