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

вывод сортировки по алфавиту (ошибка) - C++

Восстановить пароль Регистрация
 
Fedor Alifirenk
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 35
11.11.2010, 19:52     вывод сортировки по алфавиту (ошибка) #1
Скажите пожалуйста в чем ошибка прога не дорабатывает идею. Вот условие:
Ввести данные. Отсортировать список студентов по принадлежности к кафедре. В рамках кафедры разместить информацию по алфавиту. Вывести результаты сортировки.


вот мой код:

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
#include<iostream>
using namespace std;
struct Student{
        char name[30];
        char facult[30];
}ob[10];
void Show(Student *obj,char str[30]){
        for(int i=0;i<10;i++){
                if(!(strcmp(str,ob[i].facult)))              
                cout<<obj[i].name<<" - "<<obj[i].facult<<"\n";
        }
}
void SortName(Student *ob,char str[30])
{
        int n=10;
        for(int i=1;i<n-1;i++){
                if(!(strcmp(str,ob[i].facult))){           
                for(int j=n-1;j>=i;j--){
                        if(ob[j].name[0]>ob[j+1].name[0]){
                                char temp[30];
                                strcpy(temp,ob[j].name);
                                strcpy(ob[j].name,ob[j+1].name);
                                strcpy(ob[j+1].name,temp);
                        }
                }
                }
        }
 
 
}
int main(){
        char kaf[30];
        for(int i=0;i<10;i++){
                cout<<"Vedite FIO "<<i<<" studenta: ";
        gets(ob[i].name);
        cout<<"Vvedite kafedru: ";
        gets(ob[i].facult);
        }
        cout<<"Vvedite kafedru dlya pokaza: ";
        gets(kaf);
        SortName(ob,kaf);
        Show(ob,kaf);
        cin.get(); 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.11.2010, 01:56     вывод сортировки по алфавиту (ошибка) #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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
 
#define NAME_LEN 32
#define NAME_MASK "%31[^\n]%*c"
 
char * win2dos(const char * str){
    static char buf[NAME_LEN];
    CharToOemA(str, buf);
    return buf;
}
 
char * dos2win(const char * str){
    static char buf[NAME_LEN];
    OemToCharA(str, buf);
    return buf;
}
 
typedef struct {
    char name[NAME_LEN];
    char facult[NAME_LEN];
} student_t;
 
int cmp_asc(const void * a, const void * b){
    int ret;
    
    if ( ! ( ret = strcmp(((student_t*)a)->facult, ((student_t*)b)->facult) ) )
        return strcmp(((student_t*)a)->name, ((student_t*)b)->name);
    
    return ret;
}
 
int main(void){
    student_t * students;
    size_t size, i;
    char buf[NAME_LEN];
    
    printf("%s: ", win2dos("Количество студентов"));
    scanf("%u%*c", &size);
    if ( ( students = (student_t*)calloc(size, sizeof(student_t)) ) == NULL ){
        fprintf(stderr, win2dos("Ошибка выделения памяти!\n"));
        exit(1);
    }
    
    for ( i = 0; i < size; ++i ){
        printf("%s #%u\n", win2dos("Студент"), i + 1);
        printf("%s:   ", win2dos("Фамилия"));
        scanf(NAME_MASK, buf);
        strcpy(students[i].name, dos2win(buf));
        printf("%s: ", win2dos("Факультет"));
        scanf(NAME_MASK, buf);
        strcpy(students[i].facult, dos2win(buf));
    }
    
    printf("\n%s:\n", win2dos("Сортированный список"));
    printf("%s\n------------------------------\n", win2dos("Фамилия              Факультет"));
    qsort(students, size, sizeof(student_t), cmp_asc);
    for ( i = 0; i < size; ++i ){
        printf("%-20s ", win2dos(students[i].name));
        printf("%s\n", win2dos(students[i].facult));
    }
    
    free(students);
    exit(0);
}
На самом деле далеко не лучший вариант - сортировать нужно массив указателей, а не сами структуры, но тогда и код сложнее... а так вроде работает
вывод сортировки по алфавиту (ошибка)
Fedor Alifirenk
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 35
14.11.2010, 19:39  [ТС]     вывод сортировки по алфавиту (ошибка) #3
спасибо конечно вам, но мне как для уровня первого курса сложно во всем коде разобраться

Добавлено через 4 часа 59 минут
help me please
Fedor Alifirenk
1 / 1 / 0
Регистрация: 23.10.2010
Сообщений: 35
18.11.2010, 19:14  [ТС]     вывод сортировки по алфавиту (ошибка) #4
народ помогите!!!!!!!!!
Yandex
Объявления
18.11.2010, 19:14     вывод сортировки по алфавиту (ошибка)
Ответ Создать тему
Опции темы

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