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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
#1

Пример структуры для изучения - C++

11.10.2013, 22:25. Просмотров 5479. Ответов 37
Метки нет (Все метки)

Пожалуйста,приведите пример структуры для разбора,сначала пробовал смотреть чужие темы на эту тему на форуме,но там у всех со своими ошибками,что побудило создать свою тему чем запоминать чужие ошибки.
Например что должно быть в структуре:
1, Описать структуру с именем Dota2, содержащую следующие поля:
- Имя героя;
- Основная характеристика;
- Его роль.
2. Следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа Dota2; записи должны быть размещены по алфавиту.
- вывод на дисплей имена героев, чья основная характеристика введенная с клавиатуры;
- если таких героев нет, вывести на дисплей соответствующее сообщение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2013, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пример структуры для изучения (C++):

Какие книги посоветуйте для изучения для изучения STL, C++ - C++
Попробовал Страуструп но видимо сложновато пока.

Легкий пример про структуры - C++
Задача заключается в том чтобы присвоить значения переменной х и всем объектам к которым она имеет отношение.

Нужен пример объявления структуры - C++
прошу помощи разобраться любая структура struct human { int age; int height; }; если я знаю какое именно количество будет...

Указатели на структуры. Программа-пример из книги Шилдта - C++
Здравствуйте. Прошу проверить, правильно ли я поняла значение каждой строчки, т.к. в книге построчного объяснения не дается. Еще хотелось...

Подскажите пожалуйста хорошую литературу для изучения с++, для новичков - C++
Чтобы подошла человеку , который не сталкивался с программированием , а вот сейчас ему очень срочно и быстро нужно освоить хотя бы главные...

Программа для вывода картинок (карточки для изучения ин.яз) - C++
Люди добрые, меня зовут Иляна. Извините что я к вам обращаюсь. Дело в том что сейчас я и моя группа изучаем иностранный язык (а именно...

37
Tsin
716 / 461 / 132
Регистрация: 30.12.2012
Сообщений: 1,252
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 18:01 #16
StriBog45, аа. Ясно почему так. Где у тебя N определен? Вместо N поставь size.

Не по теме:

Будь внимательней к подсказкам на форуме. Здесь тебе могут подсказать пример решения твоей задачи. Не надо просто вставлять ответ к себе в программу. Сначала проанализируй что делает код, который тебе подсказали, а потом уже используй его, подставляя названия своих переменных)

1
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
13.10.2013, 18:49  [ТС] #17
Цитата Сообщение от Tsin Посмотреть сообщение
Вместо N поставь size.
Что-то я не совсем понимаю о каком N речь... В коде такового нету...
0
Tsin
716 / 461 / 132
Регистрация: 30.12.2012
Сообщений: 1,252
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 18:52 #18
StriBog45, 56 строка
1
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
13.10.2013, 19:23  [ТС] #19
Исправил N, но всё равно temp не определён...
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
// 1, Описать структуру с именем WORKER, содержащую следующие поля:
// - фамилия и инициалы работника;
// - название занимаемой должности;
// - год поступления на работу.
// 2. Написать программу, выполняющую следующие действия:
// - ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; записи должны быть размещены по алфавиту.
// - вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;
// - если таких работников нет, вывести на дисплей соответствующее сообщение.
 
#include "stdafx.h"
#include "iostream"
#include <locale>
#include <conio.h>
#include <string.h>    // Для алфавита,strcmp
#include <Windows.h>   // Для SetConsoleCP(1251);
using namespace std;
 
struct WORKER
{
    char F[30];
    char I[30];
    char O[30];
    char Name[30];
    int Year;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int size = 10;
    int i,b,c = 0;
    char* d;
    WORKER a[size];
    for ( i = 0; i < size; i++ )
    {
        cout << "Введите Ф.И.О. "
             << i + 1
             << "-ого работника "
             << endl;
        cout << "Фамилия: ";
        cin >> a[i].F;
        cout << "Имя: ";
        cin >> a[i].I;
        cout << "Отчество ";
        cin >> a[i].O;
        cout << endl;
        cout << "Его должность: ";
        cin >> a[i].Name;
        cout << endl;
        cout << "Год поступления на работу: ";
        cin >> a[i].Year;
        cout << endl;
    }
 
 
    for(int i = 0; i < size - 2; i++)
    {    
        char[30] temp = " ";
        if(strcmp(a[i].F, a[i + 1].F) < 0)     
        {        
            strcpy(temp, a[i].F);        
            strcpy(a[i].F, a[i + 1].F);        
            strcpy(a[i + 1].F, temp);    
        }
    }
    cout << "Список рабочих: "
         << endl;
    for ( i = 0; i < size; i++)
    {
        cout << a[i].F
             << endl;
    }
 
    cout << "Введите стаж работы ";
    cin >> b;
    cout << endl;
    SetConsoleCP(1251); // Переводит крякозябру на русский язык
    for ( i = 0; i < size; i++)
    {
        if ( b < 2013 - a[i].Year )
        {
            cout << a[i].F
                 << " ";
            c++;
        }
        else if ( i == size - 1 && c > 0 )
        {
            cout << "Работников с более высоким стажом нет.";
        }
    }
 
system("pause");
return 0;
}
Вот она эта противная часть...
C++
1
2
3
4
5
6
7
8
9
10
    for(int i = 0; i < size - 2; i++)
    {    
        char[30] temp = " ";
        if(strcmp(a[i].F, a[i + 1].F) < 0)     
        {        
            strcpy(temp, a[i].F);        
            strcpy(a[i].F, a[i + 1].F);        
            strcpy(a[i + 1].F, temp);    
        }
    }
p.s. Знаю что уже замучил.
0
Tsin
716 / 461 / 132
Регистрация: 30.12.2012
Сообщений: 1,252
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 19:28 #20
StriBog45, тьфу. Это моя промашка. Надо так
C++
1
char temp[30];
То есть размер после имени переменной, а не после типа.
1
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
13.10.2013, 20:21  [ТС] #21
https://dl.dropboxusercontent.com/u/...1%8B%D0%B9.jpg
На скриншоте видно,что сортировка по алфавиту неверна.
Также непонятная крякозябра в русском языке,я пробовал их менять местами,но как видно на скриншоте - не помогло.
И ещё в самом конце,у меня есть проверка условия которая не работает,а именно c = c + 1 // Нужна для того чтобы узнать,были ли подходящие рабочие по стажу,после чего в проверке if ( i == size - 1 && c > 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
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
// 1, Описать структуру с именем WORKER, содержащую следующие поля:
// - фамилия и инициалы работника;
// - название занимаемой должности;
// - год поступления на работу.
// 2. Написать программу, выполняющую следующие действия:
// - ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER; записи должны быть размещены по алфавиту.
// - вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;
// - если таких работников нет, вывести на дисплей соответствующее сообщение.
 
#include "stdafx.h"
#include "iostream"
#include <locale>
#include <conio.h>
#include <string.h>    // Для алфавита,strcmp
#include <Windows.h>   // Для SetConsoleCP(1251);
using namespace std;
 
struct WORKER
{
    char F[30];
    char I[30];
    char O[30];
    char Name[30];
    int Year;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    const int size = 3;
    int i,b,c = 0;
    char* d;
    WORKER a[size];
    for ( i = 0; i < size; i++ )
    {
        cout << "Введите Ф.И.О. "
             << i + 1
             << "-ого работника "
             << endl;
        cout << "Фамилия: ";
        cin >> a[i].F;
        cout << "Имя: ";
        cin >> a[i].I;
        cout << "Отчество: ";
        cin >> a[i].O;
        cout << endl;
        cout << "Его должность: ";
        cin >> a[i].Name;
        cout << endl;
        cout << "Год поступления на работу: ";
        cin >> a[i].Year;
        cout << endl;
    }
 
 
    for(int i = 0; i < size - 2; i++)        // Упорядочивание фамилий,имени,отчества
    {    
        char temp[30] = " ";
        if(strcmp(a[i].F, a[i + 1].F) < 0)     
        {        
            strcpy(temp, a[i].F);        // Фамилия  
            strcpy(a[i].F, a[i + 1].F);        
            strcpy(a[i + 1].F, temp);
 
            strcpy(temp, a[i].I);        // Имя
            strcpy(a[i].I, a[i + 1].I);        
            strcpy(a[i + 1].I, temp);
 
            strcpy(temp, a[i].O);        // Отчество
            strcpy(a[i].O, a[i + 1].O);        
            strcpy(a[i + 1].O, temp);
        }
    }
 
    cout << "Список рабочих: "
         << endl;
    SetConsoleCP(1251); // Переводит крякозябру на русский язык
    for ( i = 0; i < size; i++)
    {
        cout << a[i].F
             << " "
             << a[i].I
             << " "
             << a[i].O
             << endl;
    }
 
    setlocale(LC_ALL, "Russian");
    cout << "Введите стаж работы ";
    cin >> b;
    cout << endl;
 
    SetConsoleCP(1251); // Переводит крякозябру на русский язык
    for ( i = 0; i < size; i++)
    {
        if ( b < 2013 - a[i].Year )
        {
            cout << a[i].F
                 << " ";
            c = c + 1;
        }
        else if ( i == size - 1 && c > 0 )
        {
            setlocale(LC_ALL, "Russian");
            cout << "Работников с более высоким стажом нет.";
        }
    }
    cout << endl;
 
system("pause");
return 0;
}
0
Tsin
716 / 461 / 132
Регистрация: 30.12.2012
Сообщений: 1,252
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 20:49 #22
StriBog45, да. Итак, мы разобрались с названиями переменных. Теперь вопрос в сортировке. Найди кусок кода отвечающий за сортировку и проверь его. Метод пузырька знаком?)

setlocale и SetConsoleCP достаточно указать один раз в начале программы.
0
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
13.10.2013, 20:57  [ТС] #23
Цитата Сообщение от StriBog45 Посмотреть сообщение
C++
1
2
3
strcpy(temp, a[i].F); * * * *// Фамилия *
* * * * * * strcpy(a[i].F, a[i + 1].F); * * * *
* * * * * * strcpy(a[i + 1].F, temp);
Вроде бы вот это и есть сортировка пузырьком,хоть внешне и отличается,но это видно по переменным.
Цитата Сообщение от Tsin Посмотреть сообщение
setlocale и SetConsoleCP достаточно указать один раз в начале программы.
Они перекрывают друг друга,если ввести их оба в самом начале,то крякозябры начинаются в самом начале
0
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
13.10.2013, 21:01 #24
Попробуйте проблему с кракозябрами решить.Подключите
C++
1
#include <stdlib.h>
и в начале программы
C++
1
system("chcp 1251 > nul");
мне помогло.
0
Tsin
716 / 461 / 132
Регистрация: 30.12.2012
Сообщений: 1,252
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 21:02 #25
StriBog45, насчет сортировки ты неправ. Вот пример сортировки с Викиучебника. Обрати внимание на циклы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void bubble(int*a, int n)
{
for (int i = n - 1; i > 0; i--)
  {
    for (int j = 0; j < i; j++)
      {
        if(a[j] > a[j+1])
          {
            int tmp = a[j];
            a[j] = a[j+1];
            a[j+1] = tmp;
          }
     }
  }
}
Переделай под свои нужды.

А с кракозябрами я сейчас постараюсь разобраться
1
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
20.10.2013, 15:56  [ТС] #26
Тема с крякозябрами до сих пор открыта:
Видел такие варианты как
system("chcp 1251 > nul");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
int=GetConsoleCP();
...

Но ничего из этого не помогло,или пишу не в том порядке..

Добавлено через 5 часов 46 минут
Вот так выглядит код на данный момент,чтобы не искали. Проблема с кириллицей
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
#include "stdafx.h"
#include "iostream"
#include <locale>
#include <conio.h>
#include <string.h>    // Для алфавита,strcmp
#include <Windows.h>   // Для SetConsoleCP(1251);
using namespace std;
 
struct WORKER
{
    char F[30];
    char I[30];
    char O[30];
    char Name[30];
    int Year;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int size = 3;
    int i,b,c = 0,j;
    char* d;
    WORKER a[size];
    for ( i = 0; i < size; i++ )
    {
        cout << "Введите Ф.И.О. "
             << i + 1
             << "-ого работника "
             << endl;
        cout << "Фамилия: ";
        cin >> a[i].F;
        cout << "Имя: ";
        cin >> a[i].I;
        cout << "Отчество: ";
        cin >> a[i].O;
        cout << endl;
        cout << "Его должность: ";
        cin >> a[i].Name;
        cout << endl;
        cout << "Год поступления на работу: ";
        cin >> a[i].Year;
        cout << endl;
    }
 
 
    for( j = size - 1; j > 0; j--)
    {   
        for( i = 0; i < j; i++)        // Упорядочивание фамилий,имени,отчества 
        {           
            char temp[30] = " ";        
            if(strcmp(a[i].F, a[i + 1].F) > 0)          
            {                   
                strcpy(temp, a[i].F);        // Фамилия             
                strcpy(a[i].F, a[i + 1].F);                 
                strcpy(a[i + 1].F, temp);
            
                strcpy(temp, a[i].I);        // Имя         
                strcpy(a[i].I, a[i + 1].I);                 
                strcpy(a[i + 1].I, temp);
            
                strcpy(temp, a[i].O);        // Отчество            
                strcpy(a[i].O, a[i + 1].O);                 
                strcpy(a[i + 1].O, temp);
 
                strcpy(temp, a[i].Name);    // Должность            
                strcpy(a[i].Name, a[i + 1].Name);                   
                strcpy(a[i + 1].Name, temp);
 
                z = a[i].Year;             // Год поступления
                a[i].Year = a[i + 1].Year;
                a[i + 1].Year = z;
            }   
        }
    }
 
    cout << "Список рабочих: "
         << endl;
    for ( i = 0; i < size; i++)
    {
        cout << a[i].F
             << " "
             << a[i].I
             << " "
             << a[i].O
             << endl;
    }
 
    cout << "Введите стаж работы ";
    cin >> b;
    cout << endl;
    for ( i = 0; i < size; i++)
    {
        if ( b < 2013 - a[i].Year )
        {
            cout << a[i].F
                 << " ";
            c = c + 1;
        }
        else if ( i == size - 1 && c > 0 )
        {
            cout << "Работников с более высоким стажом нет.";
        }
    }
    cout << endl;
 
system("pause");
return 0;
}
0
daslex
1283 / 527 / 109
Регистрация: 02.08.2011
Сообщений: 2,749
20.10.2013, 16:03 #27
Цитата Сообщение от StriBog45 Посмотреть сообщение
Тема с крякозябрами до сих пор открыта:
Попробуйте существующий проект удалить и новый создать. Есть вероятность, что поможет.
(а там уже setlocale(LC_ALL, "");
0
StriBog45
6 / 6 / 2
Регистрация: 03.09.2013
Сообщений: 81
20.10.2013, 16:36  [ТС] #28
Цитата Сообщение от daslex Посмотреть сообщение
Попробуйте существующий проект удалить и новый создать. Есть вероятность, что поможет.
(а там уже setlocale(LC_ALL, "");
Попробовал,создавал новый проект,пробовал и только с setlocale(LC_ALL, "");, пробовал и с 1251,не помогло.
При только setlocale(LC_ALL, ""); Все буквы которые были введены мной - выводятся нормально,когда вводит пользователь,тоже выглядит Русским языком,но когда начинается вывод рабочих на экран по требованию,они выводятся не корректно
0
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
20.10.2013, 16:50 #29
Попробуйте у меня в CodeDlock работает.
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
//#include "stdafx.h"
#include "iostream"
#include <locale>
#include <conio.h>
#include <string.h>    // Для алфавита,strcmp
#include <Windows.h>   // Для SetConsoleCP(1251);
using namespace std;
 
struct WORKER
{
    char F[30];
    char I[30];
    char O[30];
    char Name[30];
    int Year;
};
 
int main()
{
    //setlocale(LC_ALL,"Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int size = 3;
    int i,b,c = 0,j;
    //char* d;
    WORKER a[size];
    for ( i = 0; i < size; i++ )
    {
        cout << "Введите Ф.И.О. "
             << i + 1
             << "-ого работника "
             << endl;
        cout << "Фамилия: ";
        cin >> a[i].F;
        cout << "Имя: ";
        cin >> a[i].I;
        cout << "Отчество: ";
        cin >> a[i].O;
        cout << endl;
        cout << "Его должность: ";
        cin >> a[i].Name;
        cout << endl;
        cout << "Год поступления на работу: ";
        cin >> a[i].Year;
        cout << endl;
    }
 
 
    for( j = size - 1; j > 0; j--)
    {
        for( i = 0; i < j; i++)        // Упорядочивание фамилий,имени,отчества
        {
            char temp[30] = " ";
            if(strcmp(a[i].F, a[i + 1].F) > 0)
            {
                strcpy(temp, a[i].F);        // Фамилия
                strcpy(a[i].F, a[i + 1].F);
                strcpy(a[i + 1].F, temp);
 
                //strcpy(temp, a[i].I);        // Имя
               // strcpy(a[i].I, a[i + 1].I);
               // strcpy(a[i + 1].I, temp);
 
                //strcpy(temp, a[i].O);        // Отчество
               // strcpy(a[i].O, a[i + 1].O);
                //strcpy(a[i + 1].O, temp);
 
               // strcpy(temp, a[i].Name);    // Должность
               // strcpy(a[i].Name, a[i + 1].Name);
                //strcpy(a[i + 1].Name, temp);
 
               //int z = a[i].Year;             // Год поступления
                //a[i].Year = a[i + 1].Year;
                //a[i + 1].Year = z;
            }
        }
    }
 
    cout << "Список рабочих: "
         << endl;
    for ( i = 0; i < size; i++)
    {
        cout << a[i].F
             << " "
             << a[i].I
             << " "
             << a[i].O
             << endl;
    }
 
    cout << "Введите стаж работы ";
    cin >> b;
    cout << endl;
    for ( i = 0; i < size; i++)
    {
        if ( b < 2013 - a[i].Year )
        {
            cout << a[i].F
                 << " ";
            c = c + 1;
        }
        else if ( i == size - 1 && c > 0 )
        {
            cout << "Работников с более высоким стажом нет.";
        }
    }
    cout << endl;
 
system("pause");
return 0;
}
0
daslex
1283 / 527 / 109
Регистрация: 02.08.2011
Сообщений: 2,749
20.10.2013, 16:52 #30
VisualStudio?
как вариант убрать все clocale, locale, setconsoleoutput и все иже к ним относится.
Русские шрифты в консоли
(сообщение 14.09.2009, 15:54 body90 )

Dev C++? setlocale не работает (там же написано).

Не по теме:

Ветку-то до конца читали ту? как никак к важным относится.

0
20.10.2013, 16:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2013, 16:52
Привет! Вот еще темы с ответами:

Приведите пример, как можно связать знания консольного C++ (где алгоритмы, структуры, массивы) с WinAPI? - C++
WinAPI это чтобы взаимодействовать с виндой а вся сложность c++ обучают в консоли Вопрос:как можно связать знания по шаблонным...

Сайты для изучения с++ - C++
Привет всем!Народ не подскажете есть ли еще сайты по изучению с++ на подобие ''интуит''-а? Заранее всем спасибо:)

Материалы для изучения - C++
Подскажите пожалуйста какие-нибудь статьи по ссылкам и указателям.

Литература для изучения С++ - C++
Посоветуйте книгу которую можно взять как основной учебник по С++, я купил &quot;Полный справочник по С++ Г. Шилдт&quot; прочитал около половины и...


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

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

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