Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2014, 12:41   #1
anshelika
 
Регистрация: 03.01.2014
Сообщений: 6
Восклицание указатели и сортировка

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

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

Код:
#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;
}
anshelika вне форума Ответить с цитированием
Старый 06.01.2014, 16:16   #2
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

1. что тяжелого в сортировке? как Вы оценки сортируете? Выбором? хорошо. а теперь, вместо сортировки числовых значений оценок, отсортируйте по первой букве. как? легко, каждая буква имеет код символа. и они (коды) идут в порядке алфавита так, что код 'A' < код 'B' < ... < код 'Z'

2. Указатели. Тут смотря что хотят. имхо так, если это лабораторная, ибо в функцию передается всегда указатель на массив:
Код:
void sortByPrice(int size, stb *mas)
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru
b2soft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Сортировка списка. Указатели. (Delphi) Bottane4ka Помощь студентам 6 22.12.2011 17:36
Сортировка массива методами предсортировки и слияния, и пирамидальная сортировка. lenny_24 Помощь студентам 2 17.04.2011 18:57
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39