0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
1

Структура "Студент": переделать задачу с использованием указателей

18.07.2014, 21:13. Показов 3185. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать Структуру с именем STUDENT с полями:
1. NAME-фамилия и инициалы;
2.GROUP-номер группы;
3.SES-успеваемость(массив из 5 элементов).Написать программу, выполняющую следующие действия:
-ввод с клавиатуры данных в массив STUD1, состоящий из 10 структур типа STUDENT;записи упорядочиваются по возрастанию номера группы.
- вывод фамилий и номеров группы студентов,имеющих средний балл больше 4.0;
-вывод соответствующего сообщения, если таковых студентов нет.

Помогите пожалуйста, переделать данную задачу с использованием УКАЗАТЕЛЕЙ на си++


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
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std; 
 
struct STUDENT // структура STUDENT
{ 
    string name; 
    int group; 
    float ses[5]; 
};
int main() {   
    setlocale(0,"rus");
    const int size = 10; // количество студентов
    STUDENT stud1[size]; // массив   
 
    for ( int i = 0; i < size; i++)  // ввод информации
    {
        int m=i+1;
        cout << "\nВведите фамилию " << m << "-го студента: "; 
        cin >> stud1[i].name; 
        cout << "\nВведите номер группы: "; 
        cin >> stud1[i].group; 
        cout << "\nВведите 5 оценок:\n"; 
        for (int j = 0; j < 5; j++) {
            cin >> stud1[i].ses[j]; 
        }
    } 
    system ("cls");
    for (int i=0; i<size-1; i++) { // упорядочивание массива
        int imin=i;
        for (int j=i+1; j<size; j++)
         if (stud1[j].group<stud1[imin].group) imin=j;
        STUDENT a=stud1[i];
        stud1[i]=stud1[imin];
        stud1[imin]=a;
    }
    float sr_ball;
    int k=0;
    cout << "\n  Студенты со средним баллом выше 4:";
    for (int i=0; i<size; i++) {
        float sum=0;
        for (int j=0; j<5; j++) sum+=stud1[i].ses[j];
        sr_ball=sum/5;
        if (sr_ball>4) {
            cout << "\nномер группы: " << stud1[i].group << "; фамилия: " << stud1[i].name;
            k++;
        }
    }
    if (k==0) cout << "\nтаких студентов нет";
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2014, 21:13
Ответы с готовыми решениями:

Создать класс "Студент" и классы "Бюджетный студент" и "Коммерческий студент"
Доброго времени суток. Помогите с задачкой. Наследование. Создать класс студент и классы бюджетный...

Структура "Студент". Найти студента с минимальным доходом
Для получения места в общежитии формируется список студентов, который включает ФИО студента,...

Структура "Студент". Перевести всех на следующий курс
составить электронную библиотеку студентов вводящую информацию с клавиатуры для N студентов и...

Структура "Студент", найти студента с максимальными оценками
Вводим список студентов и их оценки.Как вывести студента с максимальным баллом оценок? #include...

7
Модератор
Эксперт С++
13252 / 10392 / 6213
Регистрация: 18.12.2011
Сообщений: 27,798
19.07.2014, 20:05 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
STUDENT* stud1=new STUDENT[size]; // массив   
 
    for (STUDENT* t=stud1;t!=stud1+size;++t)  // ввод информации
    {
         cout << "\nВведите фамилию студента: "; 
        cin >> t->name; 
        cout << "\nВведите номер группы: "; 
        cin >> t->group; 
        cout << "\nВведите 5 оценок:\n"; 
        for (int j = 0; j < 5; j++) {
            cin >> t->ses[j]; 
        }
    }
и далее аналогично..
В конце не забыть
C++
1
delete[] t;
0
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
19.07.2014, 21:47  [ТС] 3
Описать Структуру с именем STUDENT с полями:
1. NAME-фамилия и инициалы;
2.GROUP-номер группы;
3.SES-успеваемость(массив из 5 элементов).Написать программу, выполняющую следующие действия:
-ввод с клавиатуры данных в массив STUD1, состоящий из 10 структур типа STUDENT;записи упорядочиваются по возрастанию номера группы.
- вывод фамилий и номеров группы студентов,имеющих средний балл больше 4.0;
-вывод соответствующего сообщения, если таковых студентов нет.

Помогите пожалуйста, переделать данный фрагмент программы с использованием УКАЗАТЕЛЕЙ на си++




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
 system ("cls");
    for (int i=0; i<size-1; i++) { // упорядочивание массива
        int imin=i;
        for (int j=i+1; j<size; j++)
         if (stud1[j].group<stud1[imin].group) imin=j;
        STUDENT a=stud1[i];
        stud1[i]=stud1[imin];
        stud1[imin]=a;
    }
    float sr_ball;
    int k=0;
    cout << "\n  Студенты со средним баллом выше 4:";
    for (int i=0; i<size; i++) {
        float sum=0;
        for (int j=0; j<5; j++) sum+=stud1[i].ses[j];
        sr_ball=sum/5;
        if (sr_ball>4) {
            cout << "\nномер группы: " << stud1[i].group << "; фамилия: " << stud1[i].name;
            k++;
        }
    }
    if (k==0) cout << "\nтаких студентов нет";
    return 0;
}
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
21.07.2014, 01:16 4
Лучший ответ Сообщение было отмечено Ales как решение

Решение

Я написал на С, но в данном случае это, как вы все понимаете, несущественно. На С++ будет то же самое, только malloc можно заменить на new. А можно и не заменять... Я даже усложнил немного задание: студенты сортируются по группам, в внутри группы - по именам. Почему бы и нет? Строго говоря, условию задачи это не противоречит.

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
#include <stdlib.h>     // malloc, qsort
#include <stdio.h>      // printf
#include <string.h>     // strcpy, strcmp
 
static const char* const NAMES[10] = {
    "Abdulla",
    "Boris",
    "Viktor",
    "Genrih",
    "Damir",
    "Elena",
    "Zigmund",
    "Igor",
    "Kira",
    "Leonid"
};
 
typedef struct student {
    char name[256];
    int group;
} *Student;
 
static Student Student_New(int n)
{
    Student st = (Student) malloc(sizeof(*Student));
    strcpy(st->name, NAMES[n]);
    st->group = n % 3 + 1;
    return st;
}
 
static int compare_students_by_group(const void* a, const void* b)
{
    Student st1 = *(Student*)a;
    Student st2 = *(Student*)b;
    int gr1 = st1->group;
    int gr2 = st2->group;
    if( gr1 == gr2 ) {
        return strcmp(st1->name, st2->name);
    }
    return gr1 - gr2;
}
 
int main()
{
    Student students[10];
 
    int i;
    for( i = 0; i < 10; ++i ) {
        students[i] = Student_New(i);
    }
 
    qsort(students, 10, sizeof(Student), compare_students_by_group);
 
    for( i = 0; i < 10; ++i ) {
        printf("Student = %s\nGroup = %d\n\n", students[i]->name, students[i]->group);
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
22.07.2014, 22:58  [ТС] 5
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
23.07.2014, 07:48 6
Цитата Сообщение от Ales Посмотреть сообщение
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
Это вместо благодарности, надо полагать?

Кстати, это был просто пример того, как такого задачи надо делать. Не единственный пример. Может быть, даже не самый правильный. Но уж лучше, чем тот ужос, что ты накарябал. Если бы ты разобрался, то понял бы это и сам.
0
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
23.07.2014, 08:18  [ТС] 7
Извини если обидел, Большое спасибо, уже разобрался
0
Модератор
Эксперт С++
13252 / 10392 / 6213
Регистрация: 18.12.2011
Сообщений: 27,798
23.07.2014, 08:51 8
Vtulhu, Переделал Ваш пример на С++.
Получается как-то более наглядно:
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
#include <algorithm>
#include <iostream>
using namespace std;
static const char* const NAMES[10] = {
    "Abdulla",
    "Boris",
    "Viktor",
    "Genrih",
    "Damir",
    "Elena",
    "Zigmund",
    "Igor",
    "Kira",
    "Leonid"
};
 
 
struct Student 
{
    char name[256];
    int group;
};
 
Student* Student_New(int n)
{
    Student* st = new Student;
    strcpy(st->name, NAMES[n]);
    st->group = n % 3 + 1;
    return st;
}
 
bool compare_students_by_group(const Student* a, const Student* b)
{
     int gr1 = a->group;
     int gr2 = b->group;
     if( gr1 == gr2 ) 
     {
        if (strcmp(a->name, b->name)<0)return true;
        return false;
     }
     return gr1<gr2;
}
int main()
{
    Student* students[10];
    for(int i = 0; i < 10; ++i )
        students[i] = Student_New(i);
    sort(students, students+10,compare_students_by_group);
    for(int i = 0; i < 10; ++i )
        cout<<"Student = "<<students[i]->name<<"\nGroup = "<<students[i]->group<<endl;
    for(int i = 0; i < 10; ++i )
        delete students[i];
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2014, 08:51
Помогаю со студенческими работами здесь

Структура "Студент", вывести список студентов упорядоченный по порядковому номеру
Cоздать структуру Student.Она должна включать в себя 3 поля: Порядковый номер , 5 оценок студента,...

Как дописать код для полного функционирования? Структура "Студент"
все в принципе работает с одним студентом,но есть загвоздка,если ставишь больше то он ответы выдает...

Структура "Студент": по заданному с клавиатуры id студента вывести на консоль информацию о нём
У меня есть код, который выводит информацию о студенте, его оценку по экзамену и его порядковый...

Структура "Студент", найти студентов с оценкой 4 и 5
Надо выявить студентов с оцекной 4 и 5 #include&lt;stdio.h&gt; #include&lt;string.h&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru