Форум

Data.BG Форуми: Домашна работа по Базово програмиране - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Домашна работа по Базово програмиране сортиране по азбучен ред

#1
Потребителят е неактивен   gabrielanikolovapetrova 

  • Група: Потребители
  • Мнения: 1
  • Регистриран: 03-October 18
  • Репутация: 1
  • Пол:Жена
  • Град:Варна
Здравейте! Може ли някой да ми помогне. Правя една задача на С++ за явяване на изпит по Базово програмиране в ТУ Варна. Функцията за сортиране по азбучен ред не ми тръгва. Правих я аналогична на една задачча от форума, но може би съм объркала параметрите. Нямаме право да използваме вектори , защото те се учат по- късно само bublle sort. Задачата е следната: Напишете програма за поддържане на списък с наличните части в магазин за автоасти. За всяка част трябва да се съхранява следната информация: Наименование, Производител, Цена и Налични бройки; Програмата трябва да поддържа следните функции, оформени като текстово меню, от което, потребителя да може да избира: Въвеждане на нова част в списъка, търсене по производител на част, сортиране на списъка по наименование (азбучен ред) и извеждане на текущото съдържание на списъка.
#include <iostream>
#include <string>
using namespace std;
#define n 200
struct autoshop
{
string ime;
string maker;
int broi;
double price;
} gr1[n];
void add_art(int &num);
void search_maker(int num);
void print_list(int &num);
void add_art(int &num);
void sortbyname(int &num);
void add_art(int &num) {
int br;
cout << "\nbr=";
cin >> br;
for (int j = num; j<num + br; j++)
{
cout << "Vavedete dannite za artikul" << j + 1 << endl;
cout << "Vavedete ime:";
cin >> gr1[j].ime;
cout << "Vavedete proizvoditel:";
cin >> gr1[j].maker;
cout << "Vavedete cena na articul:";
cin >> gr1[j].price;
cout << "Vavedete nalicnost:";
cin >> gr1[j].broi;
}
num += br;
}
void search_maker(int num)
{
bool flag = false;
string smaker;
cout << "\vavedete tarsenia proizvoditel:";
cin >> smaker;
for (int i = 0; i<num; i++)
if (smaker == gr1[i].maker)
{
cout << "ime:" << gr1[i].ime << endl;
cout << "proizvoditel:" << gr1[i].maker << endl;
cout << "cena:" << gr1[i].price << endl;
cout << "nalichnost:" << gr1[i].broi << endl;
flag = true;
}
if (!flag)
cout << endl << "Niama articul na tozi proizvoditel" << endl;
}
/*
void sortbyname(int &num)
{ int k;
for (int i = 1; i <= n; i++)
{
int num = i;
strcpy(min, gr1[i].ime);
for (k = i + 1; k <= n; k++)
if (strcpy(min, gr1[k].ime) > 0)
{
strcpy(min, gr1[k].ime);
num = k;
}
gr1[0] = gr1[i];
gr1[i] = gr1[num];
gr1[num] = gr1[0];
for (i = 0; i <= n; i++)
cout << "ime:" << gr1[i].ime << endl;
cout << "proizvoditel:" << gr1[i].maker << endl;
cout << "cena:" << gr1[i].price << endl;
cout << "nalichnost:" << gr1[i].broi << endl;
} */
void print_list(int &num) {
for(int i = 0; i<num; i++)
{
cout << "ime:" << gr1[i].ime << endl;
cout << "proizvoditel:" << gr1[i].maker << endl;
cout << "cena:" << gr1[i].price << endl;
cout << "nalichnost:" << gr1[i].broi << endl;
}
}
void main()
{
int choice, num = 0;
do
{
cout << "\nMenu" << endl;
cout << "\n1. Dobaviane na nov articul:" << endl;
cout << "2. Tarsene na artikul po proizvoditel:" << endl;
cout << "3. Izvejdane na nalichnost:" << endl;
cout << "4. Sortirane po ime na artikul" << endl;
cout << "5.Kraj" << endl;
cout << "\nVavedete vashia izbor:";
cin >> choice;
switch (choice)
{
case 1: add_art(num); break;
case 2: search_maker(num); break;
case 3: print_list(num); break;
// case 4: sortbyname(num); break;
}
} while (choice != 5);
}
1

#2
Потребителят е неактивен   accorp 

  • Група: Потребители
  • Мнения: 4144
  • Регистриран: 02-July 05
  • Репутация: 712
Доста old school C++ :-)

void sortbyname(int &num)
{
	int k;
	for (int i = 1; i <= n; i++)
	{
		int num = i;
		strcpy(min, gr1[i].ime);
		for (k = i + 1; k <= n; k++)
			if (strcpy(min, gr1[k].ime) > 0)
			{
				strcpy(min, gr1[k].ime);
				num = k;
			}
		gr1[0] = gr1[i];
		gr1[i] = gr1[num];
		gr1[num] = gr1[0];
	}
	for (i = 0; i <= n; i++)
		cout << "ime:" << gr1[i].ime << endl;
		cout << "proizvoditel:" << gr1[i].maker << endl;
		cout << "cena:" << gr1[i].price << endl;
		cout << "nalichnost:" << gr1[i].broi << endl;
}


if (strcpy(min, gr1[k].ime) > 0) - това тука винаги ще е различно от NULL, може би си искала да кажеш strcmp/strncmp?
Имаш доста съществени нередности из цялата програма и си личи, че си кърпила здраво. Имаш параметър num, но и локална променлива num. Имаш някакъв си мним swap, ама за буфер ползваш нулевия елемент на масива? Или аз нещо не разбирам?

Моя съвет е да изтриеш всичко и да започнеш бавно и спокойно от начало.
There are only two types of players - those who keep their nerves under control and win championships, and those who do not.
0

#3
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново
Доста old school C++ :-)
...
Моя съвет е да изтриеш всичко и да започнеш бавно и спокойно от начало.
...

Абе, тия младежи не ги ли учат на алгоритмите на Хоар? (всъщност на най-малкия ми син след като ми хареса една от задачите му я направих с qsort() , но даскалицата му казала -- Ама аз това не съм го преподавала!? Е, тук след въвеждане на нови елементи освен нея и bsearch() си иска за търсенето, ама то не е изрично казано да не се сползват библиотечни функции...)

БТВ -- string не е съвсем удобен член на структура, но може. Щом само и единствено им искат сортиране по метода на мехурчето просто нямам нерви...
БТВ2 --доста интересно ще е сортиране по указатели.

Мнението беше редактирано от georgedimov: 06.10.18 - 19:50

0

#4
Потребителят е неактивен   accorp 

  • Група: Потребители
  • Мнения: 4144
  • Регистриран: 02-July 05
  • Репутация: 712

Преглед на мнениеgeorgedimov, на 05.10.18 - 15:13, каза:

Абе, тия младежи не ги ли учат на алгоритмите на Хоар? (всъщност на най-малкия ми син след като ми хареса една от задачите му я направих с qsort() , но даскалицата му казала -- Ама аз това не съм го преподавала!? Е, тук след въвеждане на нови елементи освен нея и bsearch() си иска за търсенето, ама то не е изрично казано да не се сползват библиотечни функции...)

БТВ -- string не е съвсем удобен член на структура, но може. Щом само и единствено им искат сортиране по метода на мехурчето просто нямам нерви...


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

void SortByName( void )
{
	int     i       = 0;
	int     j       = 0;
	bool    comp    = 0;
	PART    buffer;

	if( this->partsCnt >= 2 )
	{
#if defined(AUTOSHOP_USE_BUBBLE_SORT) && !defined(AUTOSHOP_USE_QSORT)
		for( i = 0; i < (this->partsCnt-1); i++ )
		{
			for( j = i+1; j < this->partsCnt; j++ )
			{
				comp = ComparePartsByName( this->parts[i], this->parts[j] );

				if( !comp )
				{
					buffer = this->parts[i];
					this->parts[i] = this->parts[j];
					this->parts[j] = buffer;
				}
			}
		}
#elif !defined(AUTOSHOP_USE_BUBBLE_SORT) && defined(AUTOSHOP_USE_QSORT)
		std::sort( std::begin(this->parts), std::begin(this->parts) + this->partsCnt, ComparePartsByName );
#else
#error Make your goddamned mind!
#endif
	}
}


static bool ComparePartsByName( const PART & aP, const PART & bP )
{
	bool    ret     = false;
	int     len     = std::min( aP.name.length(), bP.name.length() );
	int     i       = 0;

	for( i = 0; i < len; i++ )
	{
		ret = (int)aP.name[i] < (int)bP.name[i];

		if( aP.name[i] != bP.name[i] )
		{
			break;
		}
	}

	return ret;
}

There are only two types of players - those who keep their nerves under control and win championships, and those who do not.
1

#5
Потребителят е неактивен   nakibest 

  • Mr. Company PC Guy
  • Група: Потребители
  • Мнения: 20689
  • Регистриран: 26-December 02
  • Репутация: 2457
  • Пол:Мъж
  • Град:Ботевград
  • Интереси:tennis, VB, C++ Builder, Win32 API
Тия препроцесорни макроси защо си ги наслагал!? Едва ли преп(р)одавателят иска да ги вижда.. :unsure:

Мнението беше редактирано от nakibest: 06.10.18 - 15:14

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

#6
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеnakibest, на 06.10.18 - 15:13, каза:

Тия препроцесорни макроси защо си ги наслагал!? Едва ли преп(р)одавателят иска да ги вижда.. :unsure:

ми, то да не виждаш програмния код си е тъпота...
1

#7
Потребителят е неактивен   accorp 

  • Група: Потребители
  • Мнения: 4144
  • Регистриран: 02-July 05
  • Репутация: 712
Няма голяма помощ тръсването на целия код. Това парче може да си го вземе, да го реже и портне, и е готова :-)
There are only two types of players - those who keep their nerves under control and win championships, and those who do not.
1

#8
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново
...
Може да се мъчат да предотвратят кражби, нека не ги отписваме с лека ръка. При все, мислех си за нещо простичко, ефективно и не прекалено спомагателно (от тип ursus):
...
Аз нямам нищо против мечкитв (дори гризли) , ама с тия шаблони просто ша я скъсат...
БТВ -- да помагам ли на момичето или ДАЖЕ да?
БТВ2 -- защо само аз виждам в условието нещо като списък може и двусвързан?!

Мнението беше редактирано от georgedimov: 09.10.18 - 21:09

0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login