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

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

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

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

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

Использование Struct - C++
Условие: Создать массив структур, используя данные из задания. Создать программное приложение, которое включает его обработку с...

использование vector и struct - C++
недавно пересел на С++, пытаюсь сделать программу, которую я делал на паскале struct elem { long Li; long Ri; }; int...

Использование строк.Использование структур - C++
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным количеством символов. И еще одна: ...

с++ Использование структур - C++
Даны сведения о кубиках: размер кубика, его цвет, материал.Найти количество кубиков каждого из перечисленных цветов и их суммарный объем.

Использование структур - C++
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; #include&lt;stdio.h&gt; #include&lt;windows.h&gt; using...

Использование структур - C++
Здравствуйте. Помогите решить нижеследующую задачу. В данный момент нужно переделать данную задачу с использованием структур. Целый день...

5
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.01.2013, 23:57 #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);  //
и еще вы посчитали, не забудьте вывести
1
samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
09.01.2013, 06:19  [ТС] #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 перевести((
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
09.01.2013, 08:28 #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}};
1
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.01.2013, 10:07 #5
Цитата Сообщение от samarcs Посмотреть сообщение
ачинаются проблемы, пишет Lvalue required, почитал форум везде советы в char перевести((
какие то советчики плохие или вы не правильно сформулировали для них вопрос
Schizorb, все верно расписал, и не забудьте про среднее )
C++
1
float S = NoAt(List,5);  //
0
samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
09.01.2013, 19:06  [ТС] #6
Спасибо всем) но я уже сделал на занятии)
0
09.01.2013, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 19:06
Привет! Вот еще темы с ответами:

Использование структур - C++
В прайс-листе с.ц. находится информация о номере модели телефона, номеров комплектующих деталей и их стоимости. Вывести список...

Использование структур - C++
Какие типы данных и переменные используются в приведенной ниже программе? struct point { double x,y; }; struct circle { ...

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

Использование структур данных - C++
помогите исправить ошибки:cry: #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;algorithm&gt; ...


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

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

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