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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ales
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
#1

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

18.07.2014, 21:13. Просмотров 1000. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2014, 21:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структура "Студент": переделать задачу с использованием указателей (C++):

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

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

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

Структура "Студент", найти студента с максимальными оценками - C++
Вводим список студентов и их оценки.Как вывести студента с максимальным баллом оценок? #include &lt;cmath&gt; #include &lt;iostream&gt; using...

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

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

7
zss
Модератор
Эксперт С++
6486 / 6049 / 1987
Регистрация: 18.12.2011
Сообщений: 15,691
Завершенные тесты: 1
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
Ales
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
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
21.07.2014, 01:16 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я написал на С, но в данном случае это, как вы все понимаете, несущественно. На С++ будет то же самое, только 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
Ales
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
22.07.2014, 22:58  [ТС] #5
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
0
Vtulhu
371 / 377 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
23.07.2014, 07:48 #6
Цитата Сообщение от Ales Посмотреть сообщение
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
Это вместо благодарности, надо полагать?

Кстати, это был просто пример того, как такого задачи надо делать. Не единственный пример. Может быть, даже не самый правильный. Но уж лучше, чем тот ужос, что ты накарябал. Если бы ты разобрался, то понял бы это и сам.
0
Ales
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
23.07.2014, 08:18  [ТС] #7
Извини если обидел, Большое спасибо, уже разобрался
0
zss
Модератор
Эксперт С++
6486 / 6049 / 1987
Регистрация: 18.12.2011
Сообщений: 15,691
Завершенные тесты: 1
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
23.07.2014, 08:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 08:51
Привет! Вот еще темы с ответами:

Структура "Студент". Сортировка по среднему баллу - C++
Составить список учебной группы, включающий десять человек. Для каждого студента указать: фамилию и имя, дату рождения (год, месяц и...

Структура "Студент", выбор по условию, сортировка - C++
заданы записи следующей структуры шифр группы (2 буквы ,2 цифры и буква),номер зачетной зачетной книжки (6 цифр),фамилия и инициалы...

Сортировка текстового файла. Структура "Студент" - C++
В файле input.txt содержатся сведения о группе студентов в формате ФИО год рождения оценки по 5 предметам Например Иванов Иван...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru