указатели и сортировка

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
anshelika
Сообщения: 1
Зарегистрирован: 04 янв 2014, 12:53

Задание: Ввести а и b - два массива структур. Каждая структура содержит сведения о студентах (ФИО, номер группы, изучаемые дисциплины, успеваемость и т.п.). Отсортировать элементы массива а по ФИО, а элементы b по успеваемости. Результат вывести на экран. Работу с массивами организовать через указатели. Поиск осуществлять отдельной пользовательской функцией.И

Не знаю как осуществить работу через указатели и отсортировать массив А по ФИО
Код C:

Код: Выделить всё

#include <stdio.h>
#include <iostream>
 
const int n=10;
int size=0;
 
typedef struct a{
char FIO[3];
int Numbgr;
char Disc[n];
int ocen;
}sta;
 
sta masA[100];
 
typedef struct b{
char FIO[3];
int Numbgr;
char Disc[n];
int ocen;
}stb;
 
stb masB[100];
 
void inputA(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("\n FIO:");
            printf("\n Familija ");
            scanf("%s", &masA[i].FIO[0]);
            printf("\n Imja ");
            scanf("%s", &masA[i].FIO[1]);
            printf("\n Otchestvo ");
            scanf("%s", &masA[i].FIO[2]);
        }while(!strcmp(masA[i].FIO, ""));// выполняется  пока строчка не пуста
        printf("\n Numbgr:");
        scanf("%d", &masA[i].Numbgr);
        do {
            printf("\nDiscipliny: ");
            scanf("%s", &masA[i].Disc);
        }while(!strcmp(masA[i].Disc, ""));
            printf("\nOcenki: ");
            scanf("%s", &masA[i].ocen);
        }
}
      
    void inputB(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("\n FIO:");
            printf("\n Familija ");
            scanf("%s", &masB[i].FIO[0]);
            printf("\n Imja ");
            scanf("%s", &masB[i].FIO[1]);
            printf("\n Otchestvo ");
            scanf("%s", &masB[i].FIO[2]);
        }while(!strcmp(masB[i].FIO, ""));// выполняется  пока строчка не пуста
        printf("\n Numbgr:");
        scanf("%d", &masB[i].Numbgr);
        do {
            printf("\nDiscipliny: ");
            scanf("%s", &masB[i].Disc);
        }while(!strcmp(masB[i].Disc, ""));
            printf("\nOcenki: ");
            scanf("%s", &masB[i].ocen);
        }
    }
 
    void sortByPrice(int size) { //Сортировка методом выбора
    double tmp;
    int i, j, pos;
    for(i = 0; i < size; ++i) 
    { 
        pos = i; 
        tmp = masB[i].ocen;
        for(j = i + 1; j < size; ++j) 
        {
            if (masB[j].ocen < tmp) 
            {
               pos = j; 
               tmp = masB[j].ocen; 
            }
        }
        masB[pos].ocen = masB[i].ocen; 
        masB[i].ocen = tmp; 
    }      
}  
    void showA(int size){
    printf("+---------------+--------+---------------+---------------+----------+\n");
    printf("+-----FIO-----+--Numbgr--+---Disc----+---Ocen---+\n");
    printf("+             +          +           +          +\n");
    for(int i = 0; i < size; i++) {
    printf("+%-2d.%-2d.%-2d|%-8.2lf|%-15s|%-15s +\n", 
        masA[i].FIO[0], masA[i].FIO[1], masA[i].FIO[2], masA[i].Numbgr, masA[i].Disc, masA[i].ocen);}
    printf("+---------------+---------------+---------------+----------+\n");
    }
 
    void showA(int size){
    printf("+---------------+--------+---------------+---------------+----------+\n");
    printf("+-----FIO-----+--Numbgr--+---Disc----+---Ocen---+\n");
    printf("+             +          +           +          +\n");
    for(int i = 0; i < size; i++) {
    printf("+%-2d.%-2d.%-2d|%-8.2lf|%-15s|%-15s +\n", 
        masA[i].FIO[0], masA[i].FIO[1], masA[i].FIO[2], masA[i].Numbgr, masA[i].Disc, masA[i].ocen);}
    printf("+---------------+---------------+---------------+----------+\n");
    }
 
    void showB(int size){
    printf("+---------------+--------+---------------+---------------+----------+\n");
    printf("+-----FIO-----+--Numbgr--+---Disc----+---Ocen---+\n");
    printf("+             +          +           +          +\n");
    for(int i = 0; i < size; i++) {
    printf("+%-2d.%-2d.%-2d|%-8.2lf|%-15s|%-15s +\n", 
        masB[i].FIO[0], masB[i].FIO[1], masB[i].FIO[2], masB[i].Numbgr, masB[i].Disc, masB[i].ocen);}
    printf("+---------------+---------------+---------------+----------+\n");
    }
 
    int main (void){
printf("Vvedite kol-voctudentov? ");
scanf("%d", &size);
inputA(size);
inputB(size);
sortByPrice(size);
showA(size);
showB(size); 
getchar ();
getchar ();
return 0;
}
Помогите пожалуйсто!!! и подкорректируйте код, если есть ошибки...
Ответить