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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
11.10.2013, 22:25     Пример структуры для изучения #1
Пожалуйста,приведите пример структуры для разбора,сначала пробовал смотреть чужие темы на эту тему на форуме,но там у всех со своими ошибками,что побудило создать свою тему чем запоминать чужие ошибки.
Например что должно быть в структуре:
1, Описать структуру с именем Dota2, содержащую следующие поля:
- Имя героя;
- Основная характеристика;
- Его роль.
2. Следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа Dota2; записи должны быть размещены по алфавиту.
- вывод на дисплей имена героев, чья основная характеристика введенная с клавиатуры;
- если таких героев нет, вывести на дисплей соответствующее сообщение.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tsin
 Аватар для Tsin
417 / 393 / 108
Регистрация: 30.12.2012
Сообщений: 1,084
Записей в блоге: 2
Завершенные тесты: 3
13.10.2013, 20:49     Пример структуры для изучения #22
StriBog45, да. Итак, мы разобрались с названиями переменных. Теперь вопрос в сортировке. Найди кусок кода отвечающий за сортировку и проверь его. Метод пузырька знаком?)

setlocale и SetConsoleCP достаточно указать один раз в начале программы.
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
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 достаточно указать один раз в начале программы.
Они перекрывают друг друга,если ввести их оба в самом начале,то крякозябры начинаются в самом начале
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
13.10.2013, 21:01     Пример структуры для изучения #24
Попробуйте проблему с кракозябрами решить.Подключите
C++
1
#include <stdlib.h>
и в начале программы
C++
1
system("chcp 1251 > nul");
мне помогло.
Tsin
 Аватар для Tsin
417 / 393 / 108
Регистрация: 30.12.2012
Сообщений: 1,084
Записей в блоге: 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;
          }
     }
  }
}
Переделай под свои нужды.

А с кракозябрами я сейчас постараюсь разобраться
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
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;
}
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
20.10.2013, 16:03     Пример структуры для изучения #27
Цитата Сообщение от StriBog45 Посмотреть сообщение
Тема с крякозябрами до сих пор открыта:
Попробуйте существующий проект удалить и новый создать. Есть вероятность, что поможет.
(а там уже setlocale(LC_ALL, "");
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
20.10.2013, 16:36  [ТС]     Пример структуры для изучения #28
Цитата Сообщение от daslex Посмотреть сообщение
Попробуйте существующий проект удалить и новый создать. Есть вероятность, что поможет.
(а там уже setlocale(LC_ALL, "");
Попробовал,создавал новый проект,пробовал и только с setlocale(LC_ALL, "");, пробовал и с 1251,не помогло.
При только setlocale(LC_ALL, ""); Все буквы которые были введены мной - выводятся нормально,когда вводит пользователь,тоже выглядит Русским языком,но когда начинается вывод рабочих на экран по требованию,они выводятся не корректно
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
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;
}
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
20.10.2013, 16:52     Пример структуры для изучения #30
VisualStudio?
как вариант убрать все clocale, locale, setconsoleoutput и все иже к ним относится.
Русские шрифты в консоли
(сообщение 14.09.2009, 15:54 body90 )

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

Не по теме:

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

StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
20.10.2013, 18:35  [ТС]     Пример структуры для изучения #31
Цитата Сообщение от Genn55 Посмотреть сообщение
Попробуйте у меня в 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;
}
Без библиотеки stdafx.h не запускается вовсе.
Visual Studio 10
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
20.10.2013, 19:08     Пример структуры для изучения #32
А подключать пробовали?
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
20.10.2013, 19:23     Пример структуры для изучения #33
Скрин
Миниатюры
Пример структуры для изучения  
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
20.10.2013, 21:20  [ТС]     Пример структуры для изучения #34
Цитата Сообщение от Genn55 Посмотреть сообщение
А подключать пробовали?
Не совсем понимаю что именно подключать,в вашем коде вы только отключали некоторые строки.
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
20.10.2013, 21:33     Пример структуры для изучения #35
C++
1
#include "stdafx.h"
у меня такого нет.В Visual Studio 10 я никогда не работал и ничего посоветовать не могу.А в вашем коде я убрал бессмысленные строки и изменил вид главной финкции int main().Тем не менее это ваш код и он работает,наверное так как вам нужно.Вам его осталось запустить в вашей среде и проверить насколько верно он работает.
C++
1
2
3
4
5
6
7
8
9
10
       if ( b < 2013 - a[i].Year )
        {
            cout << a[i].F
                 << " ";
            c = c + 1;
        }
        else if ( i == size - 1 && c > 0 )
        {
            cout << "Работников с более высоким стажом нет.";
        }
эту конструкцию я не проверял
Dessko
20.10.2013, 21:34
  #36

Не по теме:

Дотер да? Красавчик...

Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
20.10.2013, 22:33     Пример структуры для изучения #37
У вас какая кодировка в среде стоит? если UTF -8 попробуйте изменить на WINDOWS- 1251
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 16:54     Пример структуры для изучения
Еще ссылки по теме:

Сайты для изучения с++ C++
C++ Пособие для изучения С++
Приведите пример, как можно связать знания консольного C++ (где алгоритмы, структуры, массивы) с WinAPI? C++

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

Или воспользуйтесь поиском по форуму:
StriBog45
5 / 5 / 2
Регистрация: 03.09.2013
Сообщений: 80
21.10.2013, 16:54  [ТС]     Пример структуры для изучения #38
Цитата Сообщение от Genn55 Посмотреть сообщение
У вас какая кодировка в среде стоит? если UTF -8 попробуйте изменить на WINDOWS- 1251
Вы натолкнули меня на мысль,и я всё сделал!
Сделал вот что(предупреждение:после того как вы это сделаете,весь ваш текущий русский текст превратится в крякозябру!):
Зашёл в обозреватель решений --> Файлы исходного кода --> название проэкта.cpp на него правой кнопкой мыши --> Открыть с помощью --> Редактор исходного кода c++ (с кодировкой) --> Кириллица (DOS) - кодовая страница 866

И спокойно работает с русским языком даже без дополнительного ввода Русского языка например таких как setlocale(LC_ALL,"Russian"); и тому подобное
Yandex
Объявления
21.10.2013, 16:54     Пример структуры для изучения
Ответ Создать тему
Опции темы

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