Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/599: Рейтинг темы: голосов - 599, средняя оценка - 4.71
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
1

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

13.04.2011, 16:04. Показов 123924. Ответов 10
Метки нет (Все метки)

Ознакамливаюсь со структурами. Все прекрасно, осталось только отсортировать символьные массивы по алфавиту.
Вот мой текст, в комментариях есть все задания.Программа вроде прокомментирована в основных местах

И ещё немного не по теме, но все таки..)
Допустим если я ввожу в имя 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)
0

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

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2011, 16:04
Ответы с готовыми решениями:

Сортировка по алфавиту
Ввести в компьютер такую информацию об автомобиле: фамилия и инициалы владельца, модель автомобиля,...

Сортировка по алфавиту
На вход подается некоторое количество описаний книг (автор, название, количество страниц)....

Сортировка по алфавиту
Нужно отсортировать список студентов за месяцем рождения, Студенты, месяц у которых одинаков -...

Сортировка по алфавиту
Вот программа , там сортировка по нумерации поездов, а нужна по ПУНКТАМ назначения, кто знает...

10
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++;
        }
    }
примерно так, была подобная работа
0
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 17:10  [ТС] 3
куча ошибок...

Добавлено через 53 минуты
update
0
Заблокирован
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;
}
5
Изображения
 
19 / 19 / 2
Регистрация: 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;
0
1547 / 913 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
13.04.2011, 18:41 6
C++
1
2
3
4
5
student temp;
// И в циле уже обмениваем так:
temp = laba[i];
laba[i] = laba [j];
laba[j] = temp;
2
19 / 19 / 2
Регистрация: 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;
}
но так не работает...
или я что-то пропустил??
1
1547 / 913 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
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;
    }
2
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 19:50  [ТС] 9
выдает 2 ошибки, ругается на стрелку
0
Миниатюры
Сортировка по алфавиту  
1547 / 913 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
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;
    }
5
19 / 19 / 2
Регистрация: 30.11.2010
Сообщений: 164
13.04.2011, 19:55  [ТС] 11
ой, это я код не тот выложил. Спасибо, вроде бы работает нормально
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2011, 19:55

Сортировка по алфавиту
С клавиатуры ввести автора и название книги и посторить список по алфавиту.

Сортировка по алфавиту
#include &lt;iostream&gt; #include&lt;cstring&gt; using namespace std; int main() { int...

Сортировка по алфавиту
Правильные глаголы находятся и все нормально выводится, но сортировка по алфавиту не работает...

Сортировка по алфавиту
Необходимо произвести сортировку по алфавиту по полю name. #include &quot;stdafx.h&quot; #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.