Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужно вывести список покупателей в алфавитном порядке. / 10 сообщений из 10, страница 1 из 1
22.11.2016, 21:56
    #39352273
Алина25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
ПОМОГИТЕ ПОЖАЛУЙСТА!!! Нужно вывести список покупателей в алфавитном порядке. Пробовала разные способы не получается ошибку выбивает и всё вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
#include<iostream>
using namespace std;

class Customer
{
private:
	char Fam[30];
	char Name[20];
	char Ot[40];
	char Adr[30];
	int Tel;
    int Nom;
	int cht;
public:

	void Set()
	{
		cout << "Vvedite Familiu: "; cin >> Fam;
		cout << "Vvedite Name: "; cin >> Name;
		cout << "Vvedite Otchestvo: "; cin >>Ot;
		cout << "Adress: "; cin >> Adr;
		cout << "Telefon: "; cin >> Tel;
		cout << "Nomer card: "; cin >>Nom;
        cout << "Nomer cheta: "; cin >>cht;
		cout << endl;
	}

	void display()
	{
		cout << "Familia: " << Fam << endl;
		cout << "Name: " << Name << endl;
		cout << "Otchestvo: " << Ot << endl;
		cout << "Adress: " << Adr << endl;
		cout << "Telefon: " << Tel << endl;
		cout << "Card: " << Nom << endl;
        cout << "Chet: " << cht << endl;
	}
	int getCard() { return Nom; }
    char getFam() { return Fam[30]; }

};




void alf(Customer spis[],  int n)
{   char* Sw; 
	for(  int i = 0; i < n-1; i++)
        {for( int j = i+1; j < n; j++)                      
		if(strcmp(spis[i].getFam(), spis[j].getFam()) > 0)   // (а)НЕ РАБОТАЕТ сортировка в алфавитном порядке
            {
                Sw = spis[i].getFam();
                spis[i].getFam() = spis[j].getFam();
                spis[j].getFam ()= Sw;
 
            }
}
            cout << endl;
            for(int i = 0; i < n; i++)
            cout << spis[i].getFam() << endl;
	
}

    void SpisCard(Customer spis[],int n)   // пункт (б)
    {   int x,k,i;
        cout<<"Nachalo:"; 
        cin>>x;
        cout<<"Konec:"; 
        cin>>k;
        for(i=0;i<n;i++)
           if ((spis[i].getCard()>x)&&(spis[i].getCard()<k))
           spis[i].display();
           cout << "\n================================" << endl;
     }


int main()
{
	Customer *spis;
	int n; 

	cout << "Input kolichestvo pokypateley: "; cin >> n;
	spis = new Customer[n];
	for (int i = 0; i < n; i++)
	{
		cout << "\n================================" << endl;
		spis[i].Set();
		spis[i].display();
	}

	cout << "\n================================" << endl;
	SpisCard(spis, n);

	//cout << "\n================================" << endl;
	//busSMERT(spis, n);



	delete[] spis;
	system("pause");
}
...
Рейтинг: 0 / 0
23.11.2016, 04:50
    #39352346
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Алина25,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
char getFam() { return Fam[30]; } - тут возвращается только один символ, переделай на char* getFam() {}

тут:
   Sw = spis[i].getFam();
   spis[i].getFam() = spis[j].getFam();
   spis[j].getFam ()= Sw;
надо менять между собой не Name, а Customer целиком, т.е. делать swap(spis[i] , spis[j] )

дальше не смотрел
...
Рейтинг: 0 / 0
23.11.2016, 18:10
    #39352948
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
m_Sla,

Принципиально неверный подход, неверна работа со строками.

Нужно либо использовать std::string (или std::vector), либо использовать функции работы с C-style строками.
...
Рейтинг: 0 / 0
23.11.2016, 18:28
    #39352964
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
MasterZiv,

char getFam() { return Fam[30]; }

-- ну это вообще ниже плинтуса. Нужно понимать, что такое char, char*, char[] и std::string, и чем они все отличаются.
...
Рейтинг: 0 / 0
23.11.2016, 18:30
    #39352967
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Наверное это

Код: plaintext
1.
char getFam() { return Fam[30]; }



тебе нужно делать так:

Код: plaintext
1.
const char* getFam() const { return &Fam[0]; }



...
...
Рейтинг: 0 / 0
23.11.2016, 20:12
    #39353049
Алина25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
MasterZiv, я только начинаю программировать и работать с классами и строками мне пока сложновато. В университете не очень хорошо это всё объясняют, уже месяц мучаюсь с этой программой.
...
Рейтинг: 0 / 0
23.11.2016, 21:33
    #39353078
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Алина25,

Нужно понимать, что такое char, char*, char[] и std::string, и чем они все отличаются. -- понимаешь ?
...
Рейтинг: 0 / 0
27.11.2016, 04:57
    #39355291
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Алина25, ваш код почти правильный, я его немного поправил, и он заработал.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
#include <assert.h>
#include <string.h>
#include <algorithm> // для swap
#include <iostream>

using namespace std;

// количество элементов в массиве
#define LEN(array) static_cast<int>(sizeof(array) / sizeof(array[0]))

class Customer {
private:
  char _fam[30];
  char _name[20];
  char _ot[40];
  char _adr[30];
  int _tel;
  int _nom;
  int _cht;

public:
  void set(const char fam[], const char name[], const char ot[], const char adr[], int tel, int nom, int cht) {
    int fam_len = strlen(fam); // strlen не считает завершающий нулевой char ('\0')
    assert(fam_len + 1 <= LEN(_fam));
    memcpy(_fam, fam, fam_len + 1); // «+ 1» потому что копируем char-ы вместе с завершающим нулевым char-ом

    int name_len = strlen(name);
    assert(name_len + 1 <= LEN(_name));
    memcpy(_name, name, name_len + 1);

    int ot_len = strlen(ot);
    assert(ot_len + 1 <= LEN(_ot));
    memcpy(_ot, ot, ot_len + 1);

    int adr_len = strlen(adr);
    assert(adr_len + 1 <= LEN(_adr));
    memcpy(_adr, adr, adr_len + 1);

    _tel = tel;
    _nom = nom;
    _cht = cht;
  }

  void display() const {
    cout << "Familia: " << _fam << endl;
    cout << "Name: " << _name << endl;
    cout << "Otchestvo: " << _ot << endl;
    cout << "Adress: " << _adr << endl;
    cout << "Telefon: " << _tel << endl;
    cout << "Card: " << _nom << endl;
    cout << "Chet: " << _cht << endl;
  }

  int getCard() const {return _nom;}

  const char* getFam() const {return _fam;}
};

// сортирует в алфавитном порядке
void alf(Customer spis[], int n) {
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      if (strcmp(spis[i].getFam(), spis[j].getFam()) > 0) {
        swap(spis[i], spis[j]);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    cout << spis[i].getFam() << endl;
  }
}

int main() {
  Customer spis[9];
  spis[0].set("Romanov", "", "", "", 0, 0, 0);
  spis[1].set("Lenin", "", "", "", 0, 0, 0);
  spis[2].set("Stalin", "", "", "", 0, 0, 0);
  spis[3].set("Khrushchev", "", "", "", 0, 0, 0);
  spis[4].set("Brezhnev", "", "", "", 0, 0, 0);
  spis[5].set("Andropov", "", "", "", 0, 0, 0);
  spis[6].set("Gorbachev", "", "", "", 0, 0, 0);
  spis[7].set("Yeltsin", "", "", "", 0, 0, 0);
  spis[8].set("Putin", "", "", "", 0, 0, 0);
  alf(spis, LEN(spis));
  return 0;
}

Вывод на консоль:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Andropov
Brezhnev
Gorbachev
Khrushchev
Lenin
Putin
Romanov
Stalin
Yeltsin
...
Рейтинг: 0 / 0
27.11.2016, 18:55
    #39355511
Алина25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Спасибо всем большое за помощь!!!
...
Рейтинг: 0 / 0
28.11.2016, 17:36
    #39356205
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно вывести список покупателей в алфавитном порядке.
Алина25,

Так себе помощь...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужно вывести список покупателей в алфавитном порядке. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]