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

Тема в разделе "C/C++/C#", создана пользователем aaaaaa, 26 май 2011.

Статус темы:
Закрыта.
  1. aaaaaa

    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;
    }
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А тебе функцию сортировки обязательно собственноручно писать? Стандартной нельзя воспользоваться?
     
  3. aaaaaa

    aaaaaa Гость

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

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

    Вложения:

    • __________.png
      __________.png
      Размер файла:
      9,1 КБ
      Просмотров:
      22
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Что-то вроде вот этого у тебя должно получится:
    Код (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-в букве. Саму программу не проверял.
     
  5. aaaaaa

    aaaaaa Гость

    Спасибо, помогло ;)
     
Загрузка...
Похожие Темы - Структуры сорировки
  1. TSoprano
    Ответов:
    1
    Просмотров:
    1.007
  2. vlada
    Ответов:
    6
    Просмотров:
    1.457
  3. Anastasia18
    Ответов:
    1
    Просмотров:
    1.203
  4. b0006
    Ответов:
    0
    Просмотров:
    1.173
  5. dimat
    Ответов:
    0
    Просмотров:
    2.289
Статус темы:
Закрыта.

Поделиться этой страницей