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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

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

Featured Replies

Абе натиснах едно цитирай...

Да поотговорим на divak:

...

Това #include <conio.h> е добре да се махне, защото не се ползва, пък не е стандартно и на някои компилатори няма да върви.

...

Ползва се, защото децата не се усещат да стартират компилираната програма от командния промпт и използват командата Run на IDE-то или цъкат в Експлоръра. Ефектът е бързо премигане на екранчето при извеждане на резултатите. При два от известните ми - Micro C 3.21 и Comeau 4.4.3 наистина не се ползва.

...

Друго остаряло нещо (вече не се препоръчва), което се вижда в тази програма е ползването на <iostream.h> вместо <iostream>. Но не съм сигурен дали Borland C++ 3.1 ще работи с <iostream> - може да пробваш дали ще се компилира (ще трябва да добавиш и using namespace std, както е в примера, който дадох).

...

Трудно е да искаш от компилатор пуснат на 10.06.1992 да знае мръсните думички using и namespace, че и да използва прекомпилирани хедъри. С <iostream.h> работи.

...

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

...

Е да особено, ако си написал конструкция от вида

...
c = min(a--, b++);
а иначе си е нормален метод, а по-напредналите могат да изпозват и
...enum _N { N = 100 };
в случая на цели числа.

...

Сега като гледам името min по принцип не е много хубаво да се ползва, че може да има конфликт с разни съществуващи "стандартни" макроси (VC++ 6.0 и/или 5.0 май правеше проблеми с това).

...

При Borland C++ 3.1 са дефинирани в <stdlib.h>, а той не е включен, но забележката е правилна.

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

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

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

Ето и задачата:

Даден е двумерен числов масив КА(n,l) елемента. Намерете и отпечатайте броя на елементите, чиято стойност е по-голяма от предварително въведено число N.

Наистина ще бъда много благодарна на всеки, който може да ми помогне.

Благодаря ви, предварително!

  • Администратор

Ако не бързаш много, мога да ти я напиша тази седмица P.S. пиши ми ЛС, че току виж забравя :P

@Marika 1) Какъв компилатор ползвате (производител и версия)? 2) Масивът от цели числа ли е или са с плаваща запетая? 3) Как се инициализират данните, предварително ли са зададени или се въвеждат от клавиатурата (отнася се за n, l, КА(n, l), N)? 4) Само броя им ли наистина искат или и индексите им в масива, заедно със стойността на съответния елемент?

Няма да е лошо предварително да почетеш сама, а не да питаш и да чакаш наготово. Това би-трябвало да върви... не съм го тествал, обаче логиката иначе е вярна.

#include <iostream.h>

#define n		10
#define l		10

int main ()
{
	int KA[n][l];
	int i, j, N;
	
	for ( i = 0; i < n; i++ )
	for ( j = 0; j < l; j++ )
	{
		cout << "\nVudedi KA( " << i << ", " << j << " ): ";
		cin >> KA[i][j];
	}
	
	cout << "\nVuvedi N:";
	cin >> N;
	
	for ( i = 0; i < n; i++ )
	for ( j = 0; j < l; j++ )
	{
		if ( KA[i][j] > N )
		cout << "Element KA( ", << i << ", " << j << " ) = " << KA[i][j] << " > ot N = " << N;
	}
	
	return 1;
}

@gubarez

...Намерете и отпечатайте броя на елементите...

int i, j, k = 0, N;
if ( KA[i][j] > N )
		{
		   cout << "Element KA(" << i << ", " << j << " ) = " << KA[i][j] << " > ot N = " << N << endl;
		   ++k;
		}
cout << "Broj na elementite ot masiva > " << N << " = " << k << endl;
	
	return 0;
Така вече и ще работи и ще дава отговор и на задачата. бтв не е задължително масивът да е квадратен. А да и една излишна запетая имаше, липсваха и нови редове при извеждането, логиката е правилна. Код на грешка 1, който връщаше main(), не е много добър избор.

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

Надявам се някой да може да ми помогне с Курсовата задача, защото нещо изобщо не се справям Публикувано изображение

Даден е масив от низове. Да се състави и изведе на екрана друг масив, съдържащ индексите на всички елементи, които съдържат символ, въведен от клавиатурата.

Разгледах няколко подобни теми даже се опитах да използвам част от сорс кода написан в тях, обаче стана просто един грандиозен провал :)

Мерси за вниманието.

  • Администратор

Някой да ти помогне или да ти я напише? Ако е да ти помогне кажи в кое е проблема Иначе - зависи как реализираш низа. Дали като char*, като String или като basic_string? P.S. а също и масива как декларираш :whist:

Здравейте, аз също изпитвам затруднения с една курсова задача.

Задачата е: Да се намери периметъра на многоъгълник чрез зададени координати на върховете му.

Стигнах до тук:

#include <iostream.h>
#include <math.h>
void main()

{ int n, i, j;
  float p;
  cout<<"Vavedete broi varhove: "; cin>>n;
  float x[100], y[100];
  for (i=1; i<=n; i++)
  { cout<<"x["<<i<<"]="; cin>>x[i];
	cout<<"y["<<i<<"]="; cin>>y[i]; cout<<endl; } 
  p=0; 
  for (i=1; i<n; i++)
  { j=i++;
	p=p+sqrt(pow(x[j]-x[i],2)+pow(y[j]-y[i],2)); }
  p=p+sqrt(pow(x[1]-x[n],2)+pow(y[1]-y[n],2));
  cout<<"p="<<p<<endl; }

Но когато му задам координати на един прост квадрат със страни равни на 1, ми изкарва, че периметъра е 3.

Най-трудната част от програмата за мен е намирането на страните чрез координатите на точките и сумирането им:

p=0; 
  for (i=1; i<n; i++)
  { j=i++;
	p=p+sqrt(pow(x[j]-x[i],2)+pow(y[j]-y[i],2)); }
  p=p+sqrt(pow(x[1]-x[n],2)+pow(y[1]-y[n],2));
  cout<<"p="<<p<<endl; }

Пиша я на Borland C++ 3.1. Ако някой има идея какво да се направи, моля да сподели.

Предварително благодаря! Публикувано изображение

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

Почнах да я тествам и така и не компилирах, като видях това:

for (i=1; i<n; i++)

{ j=i++;

p=p+sqrt(pow(x[j]-x,2)+pow(y[j]-y,2)); }

Не знам какво си мислил, ама това много обърква логиката на програмката.

j=i++; означава j=i; i++;(или i+=1; или i=i+1;)

може би си искал да е j=i+1;

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

може би си искал да е j=i+1;

Промених го както си ми написал и този път се получи точно!

Много ти благодаря! :yanim:

The face,

ето някои насоки, които се надявам, че ще ти помогнат:

1) Ако няма други изисквания и/или ограничения - ползвай за низовете стандартния клас string (всъщност класът е basic_string, а a string е негова специализация с тип на символите char). Намира се в следния header файл: #include <string>

2) Реализирай подзадачката: проверка дали даден символ (char) се съдържа в даден низ (string).

Упътване: ползвай готовия метод find на string и провери дали връща npos или не.

3) Реализирай въвеждането на символ от клавиатурата в променлива от тип char.

4) За резултатния масив може да направиш int масив с капацитет - същия брой елементи като дадения; + променлива за броя на елементите на новия масив. Алтернативно може да ползваш стандартния клас vector, ако това е допустимо (т.е. зависи резултатът трябва ли да е "чист масив").

Реализирай операцията "добавяне на елемент" в този масив.

5) Напиши един цикъл за последнователно (по реда на индексите) обхождане на елементите на дадения масив и за всеки от тях извикай (2) - в зависимост от резултата или добавяш индекса на елемента в резултатния масив или не.

6) Реализирай извеждане на екрана на елементите на масив и го приложи върху резултатния масив.

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

Успех :)

Почнах да я тествам и така и не компилирах, като видях това:

for (i=1; i<n; i++)

{ j=i++;

p=p+sqrt(pow(x[j]-x,2)+pow(y[j]-y,2)); }

Не знам какво си мислил, ама това много обърква логиката на програмката.

j=i++; означава j=i; i++;(или i+=1; или i=i+1;)

може би си искал да е j=i+1;

Това е очевадно, преди 40 дни поосрахме комплексното поле, но не ни е срам...

Задачката беше малко по-сложна, но идеята е същата:

// Dev-C++ 4.9.9.2
#include <iostream>
using namespace std;
#include <math.h>
#include <conio.h>  // for getch() only 

// Warning complex type is not supported here!!!
double	  __cdecl cmod(double *z1, double *z0)
{
	  double x = z1[0] - z0[0], y = z1[1] - z0[1];
	  return  sqrt((x * x) + (y * y));
}
		  
main()
{
#define  POINTS	 60

	  double c[POINTS + 1][2] = {
			 {0.0, 0.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0},
			 {-3.0, -3.0}, {-2.0, 2.0}, {1.0, 1.0} };
	  double a[POINTS + 1] = { 0.0 }, p = 0.0, m;
	  unsigned l, n;
	  
	  do
	  {
			   cout << "Enter value for l, between 4 and 60 ((l %% 3) == 0) -> ";
			   cin >> l;
	  }
	  while ((l < 4) || (l > POINTS) || (l % 3));
	  
	  for (n = 1; n < l; n++)
	  {

		  if ((n % 3) == 1)
		  {
				a[n] = cmod(c[n], c[0]);
				if (n == 1)
				{
				   m = a[n];
				   continue;
				}
				if (a[n] < m)
				   m = a[n];
		  }
		  p += cmod(c[n + 1], c[n]);
	  }

	  cout << "The lenght of polyline for points A1, A2 ... A" << l << " is " << p << endl;
	  cout << "The nearest distance for points in III-quadrant is " << m << endl;
	  cout << "It's occured for point(s) ";

	  for (n = 1; n <= l; n += 3)
		  if (a[n] == m)
			  cout << "A" << n << " ";
	  cout << endl;

	  getch();
}
Даже и wqwe не откри грешката ми. Но определено липсата на сравнения в цикъла ми хареса, за разлика от двукратното извикване на pow, вместо простото умножение. Да не споменавам оня Паскализъм p = p + ...

Е p += ... трябва да е преди if, но си е човешко да се греши! Даже и празен ред съм бил оставил за преместването...

... Да не споменавам оня Паскализъм p = p + ...

Е, Паскализъм. Недей така. Засягам се. И в паскал има p++, само че се казва inc(p) или inc(p,1). Друг е въпроса, че даскалите в училище го премълчават( а дали въобще го знаят).

И естествено си прав, че в наши дни не се обръща достатъчно внимание на фигурата на кода.

Преди 12 години трябваше да помагам за написване на програма-речник.

Тук нещата са по-прости:

#include <string.h>
char *str[MAX_STR], ch[2] = { '\0' };
bool idx[MAX_STR] = { false };
...
cin >> ch[0];
for (...)
if strtok(str, ch); // NULL if not found!
idx[x] = true;
...
Е и малко копиране на стрингове трябва и заделяне на памет за тях, но ме сгърчи гастрита и трябва да поприключвам.

Е, Паскализъм. Недей така. Засягам се. И в паскал има p++, само че се казва inc(p) или inc(p,1). Друг е въпроса, че даскалите в училище го премълчават( а дали въобще го знаят).

И естествено си прав, че в наши дни не се обръща достатъчно внимание на фигурата на кода.

Да ама там си е post factum, интересно как се реализира --p++ ?
  • Администратор

Да не говорим че inc() е стандартна функция, но не и оператор Какво правим за *= например?

Eeee, вие почнахте да се заяждате. А то даже не е въпрос на език, а на linker. Друг е въпроса, че определени linker-и вървят с определени езици. Обаче в такъв случай, какво е gpc? П.П. какъв е смисъла от "--p++" ?

Да сега да очакваме пряко включване от C# програмисти,относно непригодността на C и C++.Накрая всички ще се съгласят че задачата е най-добре да се напише на асемблер :nono: .

Да сега да очакваме пряко включване от C# програмисти,относно непригодността на C и C++.Накрая всички ще се съгласят че задачата е най-добре да се напише на асемблер :nono: .

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

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

  • Администратор

Да ама там си е post factum, интересно как се реализира --p++ ?

А защо да не се реализира всъщност?

inc(dec(p));
По всички правила би трябвалод а работи

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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