• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Структуры и сорировки.

  • Автор темы aaaaaa
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

aaaaaa

Задание:
Описать структуру с именем Toy, содержащую следующие поля: Title (название игрушки), Price (цена в рублях), Age (нижняя граница возраста). Написать программу, выполняющую следующие действия:

ввод с клавиатуры данных в массив Shop, состоящий из 7 структур типа Toy;

сортировка методом быстрой сортировки в алфавитном порядке по названиям игрушек;

вывод на экран информации об игрушках, название которых введено с клавиатуры;

если таких игрушек нет, вывести соответствующее сообщение.
________________________________________________________________________________

Собственно программа не работает. Ошибка где-то в функции сортировки, но не могу понять что не так. Помогите пожалуйста найти ошибку.

код:

C++:
#include <iostream>
#include <string.h>
#include <conio.h>

using namespace std;

#define N 7

struct Toy 
{
char Title[30];
int Price;
int Age;
};

void Input (Toy (&)[N]);
void QuickSort (Toy (&)[N]);
void Find (Toy (&)[N]);

int main (void)
{
Toy Shop[N];

Input (Shop);
QuickSort (Shop);
Find (Shop);

getch ();
return 0;
}

void Input (Toy (&g)[N])
{
for (int i = 0; i < N; i++)
{
cout << "Enter name: ";
cin >> g[i].Title;
cout << "Enter price: ";
cin >> g[i].Price;
cout << "Enter age: ";
cin >> g[i].Age;
}
}


void QuickSort (Toy (&g)[N])
{
int i = 0;
int j = N;
Toy temp;
Toy p = g[ N>>1 ];

do {
while ( g[i] < p )
{
i++;
}
while ( g[j] > p )
{
j--;
}
if (i <= j)
{
temp = g[i];
g[i] = g[j];
g[j] = temp;
i++;
j--;
}
} while ( i<=j );

if ( j > 0 ) QuickSort(g, j);
if ( N > i ) QuickSort(g+i, N-i);

for (int l=0; l<N; l++)
{
cout << g[l].Name <<" "<< g[l].Price<<endl;
}
}


void Find (Toy (&g)[N])
{
char name; 
int q = 0; 
cout << "Enter name: ";
cin >> name;

for (int i = 0; i < N; i++)
{
if (g[i].Title > name)
{
cout << g[i].Title << " " << g[i].Price << endl;
q++;
}
}
if (q == 0)
{
cout << "No things." << endl;
}
}
 
L

lazybiz

А тебе функцию сортировки обязательно собственноручно писать? Стандартной нельзя воспользоваться?
 
A

aaaaaa

Нет, стандартной я воспользоваться, к сожалению, не могу, нужно писать самому.

Во лог ошибок из CodeBlocks.
 

Вложения

  • __________.png
    __________.png
    2,9 КБ · Просмотры: 268
L

lazybiz

Что-то вроде вот этого у тебя должно получится:
C++:
#include <iostream>
#include <string.h>
#include <conio.h>

using namespace std;

#define N 7

struct Toy 
{
char Title[30];
int Price;
int Age;
};

void Input (Toy (&)[N]);
void QuickSort(Toy (&)[N], int, int );
void Find (Toy (&)[N]);

int main ()
{
Toy Shop[N];

Input (Shop);
QuickSort( Shop, 0, N );
Find (Shop);

getch ();
return 0;
}

void Input (Toy (&g)[N])
{
for (int i = 0; i < N; i++)
{
cout << "Enter name: ";
cin >> g[i].Title;
cout << "Enter price: ";
cin >> g[i].Price;
cout << "Enter age: ";
cin >> g[i].Age;
}
}

void QuickSort( Toy (&g)[N], int left, int right ) {
int	i = left, j = right;

char pivot = g[(left + right) / 2].Title[0];

/* partition */
while ( i <= j ) {
while ( g[i].Title[0] < pivot ) i++;
while ( g[j].Title[0] > pivot ) j--;
if ( i <= j ) {
Toy	tmp;
tmp = g[i];
g[i] = g[j];
g[j] = tmp;
i++;
j--;
}
};

/* recursion */
if ( left < j ) QuickSort( g, left, j );
if ( i < right ) QuickSort( g, i, right );
}

void Find (Toy (&g)[N])
{
char name[30]; 
int q = 0; 
cout << "Enter name: ";
cin >> name;

for (int i = 0; i < N; i++)
{
if (strcmp( g[i].Title, name ) == 0)
{
cout << g[i].Title << " " << g[i].Price << endl;
q++;
}
}
if (q == 0)
{
cout << "No things." << endl;
}
}
Сортировка должна производится по 1-в букве. Саму программу не проверял.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!