powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Нужно вывести список покупателей в алфавитном порядке.
10 сообщений из 10, страница 1 из 1
Нужно вывести список покупателей в алфавитном порядке.
    #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
Нужно вывести список покупателей в алфавитном порядке.
    #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
Нужно вывести список покупателей в алфавитном порядке.
    #39352948
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla,

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

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

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

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

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



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

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



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

Нужно понимать, что такое char, char*, char[] и std::string, и чем они все отличаются. -- понимаешь ?
...
Рейтинг: 0 / 0
Нужно вывести список покупателей в алфавитном порядке.
    #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
Нужно вывести список покупателей в алфавитном порядке.
    #39355511
Алина25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем большое за помощь!!!
...
Рейтинг: 0 / 0
Нужно вывести список покупателей в алфавитном порядке.
    #39356205
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алина25,

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


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