Форум программистов, компьютерный форум CyberForum.ru

Сортировка по алфавиту - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 195, средняя оценка - 4.62
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 16:04     Сортировка по алфавиту #1
Ознакамливаюсь со структурами. Все прекрасно, осталось только отсортировать символьные массивы по алфавиту.
Вот мой текст, в комментариях есть все задания.Программа вроде прокомментирована в основных местах

И ещё немного не по теме, но все таки..)
Допустим если я ввожу в имя 1 слово, все хорошо, а если 2(имя-фамилия), то начинаются неконтролируемые действия??

если есть какие-либо замечания в коду, пишите, буду рад.
Учтите только, что структуры только начал учить

C++
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
//1.написать структуру с именем STUDENT содержащую следующие поля:
//фамилия и инициалы, номер группы, успеваемость(5оценок)  -СДЕЛАЛ
 
//2.Написать программу, выполняющую след. действия:
//а. Ввод с клавиатуры данных в массив из 10 структур типа student,  -СДЕЛАЛ
//   записи должны быть упорядочены по алфавиту -НЕ ЗНАЮ
//б. вывод на экран фамилий и номеров групп для всех студентов,
//   имеющих хотя бы 1 оценку "2"  -СДЕЛАЛ
//в. если таких студентов нет, вывести соответствующее сообщение -СДЕЛАЛ
 
 
 
#include <iostream>
#include <iomanip>
#include <windows.h>
using namespace std;
 
const int n=2;//переделать под 10 студентов потом
 
struct student
{
char name[30];//имя
char group[10];//группа
int mark[5];//оценка
};
 
int  main()
{
setlocale(0,"Rus");
int i;
student laba[n]; 
cout<<"Лабораторная работа №7\n"
    <<"'Работа со строками.'\n"
    <<"Выполнил студент группы РК-102 Болдорат В.О.\n\n\n";
 
for(i=0;i<n;i++)//заполнение структуры
{
cout<<"Вводим данные о студенте № "<<i+1<<endl;
cout<<"Имя:\t";
cin>>laba[i].name;
cout<<"Группа:\t";
cin>>laba[i].group;
cout<<"Оценки(5шт.):\n";
cin  >> laba[i].mark[0] >> laba[i].mark[1] 
     >> laba[i].mark[2] >> laba[i].mark[3] >> laba[i].mark[4];
OemToChar(laba[i].name,laba[i].name);
OemToChar(laba[i].group,laba[i].group);
}   
 
//вывод нач. данных
cout<<"\n\nВаши введенные данные :\n"
    <<"Номер"<<setw(7)<<"Имя"<<setw(22)<<"Группа"<<setw(22)<<"Оценки"
    <<"\n_____________________________________________________________________________\n";
for(i=0;i<n;i++)
cout<<i+1<<setw(15)<<laba[i].name<<setw(20)<<laba[i].group
    <<setw(20)<<laba[i].mark[0]<<setw(3)<<laba[i].mark[1]<<setw(3)<<laba[i].mark[2]
    <<setw(3)<<laba[i].mark[3]<<setw(3)<<laba[i].mark[4]<<endl;
 
//тут будут записи, упорядоченные по алфавиту
 
 
//студенты с "2"
int flag=0;//для проверки кол-ва студентов с "2"
cout<<"\n\n\nСтуденты, имеющие оценку '2'\n";
for(i=0;i<n;i++)
    if(laba[i].mark[0]==2 || laba[i].mark[1]==2 ||  laba[i].mark[2]==2
      || laba[i].mark[3]==2 || laba[i].mark[4]==2)
    {
    cout<<i+1<<setw(15)<<laba[i].name<<setw(20)<<laba[i].group
        <<setw(20)<<laba[i].mark[0]<<setw(3)<<laba[i].mark[1]<<setw(3)<<laba[i].mark[2]
        <<setw(3)<<laba[i].mark[3]<<setw(3)<<laba[i].mark[4]<<endl;
    flag++;
    }
if(flag==0)
cout<<"\n\n\nСтудентов, имеющих оценку '2' нет."<<endl;
return 0;
}
Добавлено через 15 минут
Извиняюсь, забыл. Сортировать нужно по имени (массив name)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2011, 16:04     Сортировка по алфавиту
Посмотрите здесь:

Сортировка по алфавиту C++
сортировка по алфавиту C++
Сортировка по алфавиту C++
C++ Сортировка по алфавиту
C++ Сортировка по алфавиту
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lostmen
0 / 0 / 0
Регистрация: 15.03.2011
Сообщений: 13
13.04.2011, 16:06     Сортировка по алфавиту #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    flag=1;
while (flag!=0)
    {
        flag=0;
        for(i=0; i<n-1; i++) 
        if (strcmp(laba[i].name, laba[i+1].name)>0)
        {
            tmp=wed[i];
            wed[i]=wed[i+1];
            wed[i+1]=tmp;
            flag++;
        }
    }
примерно так, была подобная работа
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 17:10  [ТС]     Сортировка по алфавиту #3
куча ошибок...

Добавлено через 53 минуты
update
IrineK
Заблокирован
13.04.2011, 17:31     Сортировка по алфавиту #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сортировка строк char[] по алфавиту:

C++
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
#include <iostream>
#define N 10
using namespace std;
 
int main()
{   int i,j;
    char words[N][30], cur[30];
    cout<<"Your words:\n";
    for(i=0;i<N;i++)
        cin.getline(words[i],30);
 
    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)
            if(strcmp(words[i],words[j])>0)
            {   strcpy(cur,words[i]);
                strcpy(words[i],words[j]);
                strcpy(words[j],cur);
            }
    cout<<"Results:\n";
    for(i=0;i<N;i++)
        cout<<words[i]<<"\n";
    
    cin.sync(); cin.get();
    return 0;
}
Изображения
 
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 18:30  [ТС]     Сортировка по алфавиту #5
я добавил сортировку, но сортирует только имена, т.е. группа и оценки остаются на тех же местах. Как заставить чтобы цикл и их менял местами соответственно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cout<<"\n\nЗаписи, упорядоченные по алфавиту:"<<endl;
char cur[30];
for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
    if(strcmp(laba[i]->group,laba[j]->group)>0)
        {
            strcpy(cur,laba[i].group);
            strcpy(laba[i].group,laba[j].group);
            strcpy(laba[j].group,cur);
        }
for(i=0;i<n;i++)
cout<<i+1<<setw(15)<<laba[i].name<<setw(20)<<laba[i].group
    <<setw(20)<<laba[i].mark[0]<<setw(3)<<laba[i].mark[1]<<setw(3)<<laba[i].mark[2]
    <<setw(3)<<laba[i].mark[3]<<setw(3)<<laba[i].mark[4]<<endl;
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
13.04.2011, 18:41     Сортировка по алфавиту #6
C++
1
2
3
4
5
student temp;
// И в циле уже обмениваем так:
temp = laba[i];
laba[i] = laba [j];
laba[j] = temp;
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 19:21  [ТС]     Сортировка по алфавиту #7
Ничего не меняет.

Это тогда похоже на пузырьковую сортировку, только здесь вместо чисел структуры. тогда нужно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cout<<"\n\nЗаписи, упорядоченные по алфавиту:"<<endl;
 
student swap,max;
int mid,j;
 
for(i=0;i<n;i++)
{
max=laba[i];
mid=i;
    for(j=i+1;j<n;j++)
        if(strcmp(laba[i].group,laba[j].group)>0)
                {
                mid=j;
                max=laba[i];
                }
swap = laba[i];
laba[i] = laba [j];
laba[j] = swap;
}
но так не работает...
или я что-то пропустил??
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
13.04.2011, 19:37     Сортировка по алфавиту #8
C++
1
2
3
4
5
6
7
8
for(i = 0; i < n; i++)
    for(j = i + 1; j < n; j++)
    if (strcmp (laba[i] -> group, laba[j] -> group) > 0)
    {
        swap = laba[i];
        laba[i] = laba [j];
        laba[j] = swap;
    }
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 19:50  [ТС]     Сортировка по алфавиту #9
выдает 2 ошибки, ругается на стрелку
Миниатюры
Сортировка по алфавиту  
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
13.04.2011, 19:51     Сортировка по алфавиту #10
У вас у самого так было в прошлом посте, я не трогал.
Ну сделайте так:

C++
1
2
3
4
5
6
7
8
for(i = 0; i < n; i++)
    for(j = i + 1; j < n; j++)
    if (strcmp (laba[i].group, laba[j].group) > 0)
    {
        swap = laba[i];
        laba[i] = laba [j];
        laba[j] = swap;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2011, 19:55     Сортировка по алфавиту
Еще ссылки по теме:

C++ Сортировка по алфавиту
Сортировка по алфавиту C++
C++ Сортировка по алфавиту

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Valerko
17 / 17 / 1
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 19:55  [ТС]     Сортировка по алфавиту #11
ой, это я код не тот выложил. Спасибо, вроде бы работает нормально
Yandex
Объявления
13.04.2011, 19:55     Сортировка по алфавиту
Ответ Создать тему
Опции темы

Текущее время: 21:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru