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

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

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

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

18.07.2014, 21:13. Просмотров 928. Ответов 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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2014, 21:13     Структура "Студент": переделать задачу с использованием указателей
Посмотрите здесь:

Структура "Студент" - прокомментировать код C++
C++ Структура "Студент", выбор по условию, сортировка
C++ Структура/класс "Студент". Применение конструкторов
C++ Структура "Студент". Перевести всех на следующий курс
C++ Структура "Студент", найти студентов с оценкой 4 и 5
C++ Структура "Студент". Вычислить средний балл группы и распечатать список студентов с низким средним баллом
Структура "Студент". Сортировка по среднему баллу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,992
Завершенные тесты: 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;
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;
}
Vtulhu
369 / 375 / 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;
}
Ales
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
22.07.2014, 22:58  [ТС]     Структура "Студент": переделать задачу с использованием указателей #5
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
23.07.2014, 07:48     Структура "Студент": переделать задачу с использованием указателей #6
Цитата Сообщение от Ales Посмотреть сообщение
а где здесь задаются оценки и выводятся студенты,у которых средний балл выше 4.0?
Это вместо благодарности, надо полагать?

Кстати, это был просто пример того, как такого задачи надо делать. Не единственный пример. Может быть, даже не самый правильный. Но уж лучше, чем тот ужос, что ты накарябал. Если бы ты разобрался, то понял бы это и сам.
Ales
0 / 0 / 0
Регистрация: 18.07.2014
Сообщений: 6
23.07.2014, 08:18  [ТС]     Структура "Студент": переделать задачу с использованием указателей #7
Извини если обидел, Большое спасибо, уже разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 08:51     Структура "Студент": переделать задачу с использованием указателей
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,992
Завершенные тесты: 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;
}
Yandex
Объявления
23.07.2014, 08:51     Структура "Студент": переделать задачу с использованием указателей
Ответ Создать тему
Опции темы

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