Важная информация
Показано с 1 по 2 из 2

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

  1. #1 указатели и сортировка 
    Новичок
    Регистрация
    04.01.2014
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Задание: Ввести а и 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;
     }

    Помогите пожалуйсто!!! и подкорректируйте код, если есть ошибки...
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 248 раз(а) в 164 сообщениях
    Если еще актуально, то для сортировки по ФИО тебе достаточно написать функцию сравнения структур и скормить свой массив стандартной функции qsort.

    Что именно не получается по указателям?
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 4
    Последнее сообщение: 01.04.2012, 10:08
  2. Ответов: 7
    Последнее сообщение: 09.12.2011, 16:06
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •