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

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

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

Использование структур struct - C++

08.01.2013, 21:59. Просмотров 519. Ответов 5
Метки нет (Все метки)

Писал код по методичке, потом уже вконец запутался и не могу понять как сделать правильно. Подскажите хорошо растолкованную тему по структурам.
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <vcl.h>
#include <tchar.h>
#include <iostream.h>
#include <math.h>
#include <string.h>
#pragma argsused
#pragma hdrstop
/*
6.Дан массив структур, в котором содержатся сведения вида:
шифр  кафедры,  кол-во студентов, кол-во отличников, кол-во не аттестованных.
Требуется подсчитать об-щее количество неаттестованных.
*/
//Тип структуры Info с информацией о студентах и шифре кафедры.
struct Info
{
    char shifr[20];
    char costud[40];
    char otstud[40];
    char nostud[40];
};
//Создание массив структур для инициализации данных
Info InitList[5] = {{100400,30,15,15},{200400,40,20,20},
                   {300400,20,10,10},{400400,30,15,15},
                   {500400,10,5,5}};
//Прототипы
void CinN (int &n);  //Ввод n - кол-ва структур
void GetListFromInit(Info* List, int n); //Значения из InitList
void GetListFromScreen(Info* List, int n);  //Ввод значений
void PuListToScreen(Info* List, int n);   //Вывод на экран
float NoAt(Info* List, int n); //Поиск кол-во неаттестованных
 
 
//Ввод n
void CinN (int &n)  //Ввод n
{
// Параметры:
// n - Количество структур
    cout<<"Enter n"<<endl;
    cin>>n;
}
 
void GetListFromInit(Info* List, int n) //присвоить значения из InitList
{
//Параметры:
// List  - указатель на массив структур - входной, значения на выход
//n - количество структур - входной
   for(int i=0;i<n;i++)
    {
     //strcpy - копировать строку в строку - обычное присваивание невозможно
     // strcpy(List[i].shifr, InitList[i].shifr);
      //strcpy(List[i].Address, InitList[i].Address);
       strcpy(List[i].shifr, InitList[i].shifr);
       strcpy(List[i].costud, InitList[i].costud);
       strcpy(List[i].otstud, InitList[i].otstud);
       strcpy(List[i].nostud, InitList[i].nostud);      //обычное присваивание
     }
}
 
void GetListFromScreen(Info* List, int n)  //ввести значения с экрана -
{
//Параметры:
// List  - указатель на массив структур - входной, значения на выход
//n - количество структур - входной
 
   for(int i=0;i<n;i++)
     {
        cout<<"Enter:"<<endl;
        cin>>List[i].shifr;
        cin>>List[i].costud;
        cin>>List[i].otstud;
        cin>>List[i].nostud;
     }
}
 
void PuListToScreen(Info* List, int n)   //печать или вывод на экран
{
//Параметры:
// List  - указатель на массив структур - входной
//n - количество структур - входной
   cout<<"Shifr"<<"    "<<"Col-vo Studentov"<<"   "<<"Otlichniki col-vo"<<"Neuspevaushie col-vo"<<endl;
   cout<<"____________________________"<<endl;
   for(int i=0;i<n;i++)
     {
        cout<<List[i].shifr<<"  ";
        cout<<List[i].costud<<"  ";
        cout<<List[i].otstud<<"  ";
        cout<<List[i].nostud<<endl;
     }
}
 
float NoAt(Info* List, int n)   //Поиск кол-во неаттестованных
{
//Параметры:
// List  - указатель на массив структур - входной
//n - количество структур - входной
//возвращает средний возраст
   float Sum = 0; //подготовка ячейки для суммирования
   for(int i=0;i<n;i++)
     Sum += List[i].nostud;
   return (float)Sum/n; // вернуть среднее
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Info List[5];     // описание массива структур из 5 элементов
    GetListFromInit(List,5);   //присвоить значения из инициализированного массива
    GetListFromScreen(List,5);   //ввести значения с экрана
    PuListToScreen(List,5);   //напечатать значения элементов массива структур
    float S = NoAt(List,5);  //
    system("pause");
    return 0;
 
}
Вроде бы простейшая задачка, но вот структуры рубят((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 21:59     Использование структур struct
Посмотрите здесь:

C++ использование vector и struct
с++ Использование структур C++
Использование функций и структур C++
C++ Задача на использование структур.
Использование структур C++
C++ Использование структур
Использование Struct C++
использование структур C++
C++ Использование структур
Реализация задач на использование структур C++
C++ Использование структур данных
C++ Задача на использование структур

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.01.2013, 23:57     Использование структур struct #2
C++
1
2
3
4
5
6
7
struct Info
{
    char shifr[20];
    char costud[40];
    char otstud[40];
    char nostud[40];
};
а вы уверены что рационально все эти поля содержать как массив символов, не лучше было их в числовые типы перевести?

Добавлено через 4 минуты
единственное что шифр еще куда ни шло, но вот количество , сразу напрашивается int, я вот заменил у вас это и все прекрасно работает

Добавлено через 1 минуту
C++
1
  float S = NoAt(List,5);  //
и еще вы посчитали, не забудьте вывести
samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
09.01.2013, 06:19  [ТС]     Использование структур struct #3
Цитата Сообщение от Nixy Посмотреть сообщение
C++
1
2
3
4
5
6
7
struct Info
{
    char shifr[20];
    char costud[40];
    char otstud[40];
    char nostud[40];
};
а вы уверены что рационально все эти поля содержать как массив символов, не лучше было их в числовые типы перевести?

Добавлено через 4 минуты
единственное что шифр еще куда ни шло, но вот количество , сразу напрашивается int, я вот заменил у вас это и все прекрасно работает

Добавлено через 1 минуту
C++
1
  float S = NoAt(List,5);  //
и еще вы посчитали, не забудьте вывести
изначально все и было в int, но на этом этапе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void GetListFromInit(Info* List, int n) //присвоить значения из InitList
{
//Параметры:
// List  - указатель на массив структур - входной, значения на выход
//n - количество структур - входной
   for(int i=0;i<n;i++)
    {
     //strcpy - копировать строку в строку - обычное присваивание невозможно
     // strcpy(List[i].shifr, InitList[i].shifr);
      //strcpy(List[i].Address, InitList[i].Address);
       strcpy(List[i].shifr, InitList[i].shifr);
       List[i].costud= InitList[i].costud;
       List[i].otstud= InitList[i].otstud;
       List[i].nostud= InitList[i].nostud;      //обычное присваивание
     }
}
начинаются проблемы, пишет Lvalue required, почитал форум везде советы в char перевести((
Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.01.2013, 08:28     Использование структур struct #4
Цитата Сообщение от samarcs Посмотреть сообщение
изначально все и было в int
Так было?
C++
1
2
3
4
5
6
7
struct Info
{
    char shifr[30];
    int costud;
    int otstud;
    int nostud;
};
Если да, то функция нормально компилируется:
C++
1
2
3
4
5
6
7
8
9
10
void GetListFromInit(Info* List, int n)
{
    for(int i=0;i<n;i++)
    {
        strcpy(List[i].shifr, InitList[i].shifr);
        List[i].costud = InitList[i].costud;
        List[i].otstud = InitList[i].otstud;
        List[i].nostud = InitList[i].nostud; 
    }
}
Массив только инициализируете значениями не тех типов:
C++
1
2
3
Info InitList[5] = {{"100400",30,15,15},{"200400",40,20,20},
                   {"300400",20,10,10},{"400400",30,15,15},
                   {"500400",10,5,5}};
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.01.2013, 10:07     Использование структур struct #5
Цитата Сообщение от samarcs Посмотреть сообщение
ачинаются проблемы, пишет Lvalue required, почитал форум везде советы в char перевести((
какие то советчики плохие или вы не правильно сформулировали для них вопрос
Schizorb, все верно расписал, и не забудьте про среднее )
C++
1
float S = NoAt(List,5);  //
samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
09.01.2013, 19:06  [ТС]     Использование структур struct #6
Спасибо всем) но я уже сделал на занятии)
Yandex
Объявления
09.01.2013, 19:06     Использование структур struct
Ответ Создать тему
Опции темы

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