0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 20
1

Подскажите, что не так в коде

09.03.2016, 20:06. Показов 1020. Ответов 8
Метки нет (Все метки)

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
void sortofalpfavit(WORKER* st, int n) 
{
int i,j;
 
for (i = 0; i < n; i++) 
{
        for ( j = i + 1; j < n; j++)  // ñîðòèðîâêà
        { 
            if(strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp;
                 
                strcpy(temp.name, st[i].name);
                temp.surname = st[i].surname;
                
                temp.position = st[i].position; 
                temp.supply = st[i].supply;  
 
                 
                strcpy(st[i].name, st[j].name); 
                st[i].surname = st[j].surname;
                
                st[i].position = st[j].position; 
                st[i].supply = st[j].supply; 
 
                st[j].name = temp.name; 
                strcpy(st[j].surname, temp.surname); 
                
                st[j].position = temp.position; 
                st[j].supply = temp.supply; 
            }
 
            } 
        }
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2016, 20:06
Ответы с готовыми решениями:

Подскажите, что в коде не так
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Подскажите, что не так в коде?
Запрограммировать схему &quot;клиенты – официант&quot;, используя семафорную переменную. Процесс-официант...

Подскажите что же в коде не так?
Помогите, что же в коде не так?????????? void Update () { if (transform.position.x &amp;gt; 18) {...

подскажите что в этом коде не так?
&lt;?php // Ошибки ini_set('display_errors', 1); error_reporting(E_ALL); ini_set(&quot;memory_limit&quot;,...

8
С чаем беда...
Эксперт CЭксперт С++
9268 / 4765 / 1291
Регистрация: 18.10.2014
Сообщений: 10,879
09.03.2016, 20:10 2
Во-первых, с чего вы взяли, что тут что-то "не так"?

Во-вторых, не видя хотя бы объявлений использованных вам типов, ничего осмысленного об этом вырванном из контекста обрывке кода сказать нельзя.
0
BrainOverflow
125 / 129 / 64
Регистрация: 31.03.2013
Сообщений: 556
09.03.2016, 20:14 3
Пока что единственное, что не так - это отсутствие тегов.
0
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 20
09.03.2016, 20:18  [ТС] 4
[Error] invalid array assignment
0
70 / 70 / 52
Регистрация: 24.01.2013
Сообщений: 198
09.03.2016, 20:37 5
размер массива?
0
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 20
09.03.2016, 20:44  [ТС] 6
это структура.
0
С чаем беда...
Эксперт CЭксперт С++
9268 / 4765 / 1291
Регистрация: 18.10.2014
Сообщений: 10,879
09.03.2016, 21:24 7
Цитата Сообщение от Евгений_студент Посмотреть сообщение
[Error] invalid array assignment
Еще раз: не видя определений ваших типов, сказать ничего нельзя.

(Включив ясновидение и телепатию: я подозреваю, что у вас и 'name', и 'surname' (и может еще что), объявлены как массивы. При этом вы с 'name' работаете правильно - через 'strcmp' и 'strcpy', а 'surname' по какой-то необъяснимой причине пытаетесь присваивать напрямую. Это что за мешанина? Голые массивы в С++ (или С) не присваиваются напрямую. Нет такой фичи в С++.

Если мое предположение верно (а оно, разумеется, верно), то такое тупейшее и невероятное расхождение в работе с идентичными по своей природе данными однозначно говорит о том, что вы совершенно не понимаете, что делаете. Корректную основу кода вы, очевидно, где-то позаимствовали, а белиберду дописали сами.)

Цитата Сообщение от Евгений_студент Посмотреть сообщение
это структура.
От "это структура" нам ни тепло, ни холодно. Полное определение типа 'WORKER' - в студию! От начала до конца.

P.S. В языке С++ нет "структур". Есть только классы.
0
0 / 0 / 0
Регистрация: 25.12.2015
Сообщений: 20
09.03.2016, 21:31  [ТС] 8
TheCalligrapher, вот вся программа:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include "stdlib.h"
#include "cstring"
#include <iostream>
 
using namespace std;
 
struct WORKER {
 
    char name[30];
    char surname[50];
    char position[10];
    int supply[5];
 
};
 
void input(WORKER* st, int n) {
    printf("\t\tSome information about workers!\n");
    for (int i=0; i < n; i++) {
        cout << "Name: "; cin >> st[i].name;
        cout << "Surname: "; cin >> st[i].surname;      
        cout << "Position: "; cin >> st[i].position;           
        //cout << "Year of supply: "; cin>> st[i].supply;
    cout << "Year of supply: ";
        for (int j = 0; j < 1; j++) 
            cin >> st[i].supply[j];
    cout<<endl;     
    }
}
 
void output(const WORKER* st, int n) {
 
    system("cls");
    cout << "---------------------------------" << endl;
    for (int i = 0; i < n; i++) {
        cout << "Worker " << i+1 << endl;
        cout << "Name: " << st[i].name << endl;
        cout << "Surname: " << st[i].surname << endl;
        cout << "Position: " << st[i].position << endl;
        cout << "Year of supply: "<< st[i].supply[0]<<endl;
        cout << "---------------------------------" << endl << endl;
    }
    
}
 
void stage(const WORKER* st, int n) 
{
int j,i,k;
int flag=0;
cout<<"Input stage of work: "; cin>>k; cout<<endl;
 for ( i = 0; i < n; i++) {
 
 for ( j=0; j<1; j++)
 {
            if( k <2016 - st[i].supply[j]) // ñðàâíèâàåì ñòàæ 
            { 
                cout << st[i].name << "   "<< st[i].surname << "   "  << st[i].position << "   " << st[i].supply[j] << endl; 
                flag++; // åñëè åñòü âûïîëíåíèå óñëîâèÿ óâåëè÷èâàåì ñ÷¸ò÷èê
            } 
}
}
            if(flag == 0)  // åñëè ñ÷¸ò÷èê ðàâåí 0
                printf("\nThere aren't such workers! \n"); // òàêèõ ðàáîòíèêîâ íåò
            
 
}
    
 
void sortofalpfavit(WORKER* st, int n) 
{
int i,j;
 
for (i = 0; i < n-1; i++) 
{
        for ( j = i + 1; j < n; j++)  // ñîðòèðîâêà
        { 
            if(strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp;
                 
                strcpy(temp.name, st[i].name);
                temp.surname = st[i].surname;
                
                temp.position = st[i].position; 
                temp.supply = st[i].supply;  
 
                 
                strcpy(st[i].name, st[j].name); 
                st[i].surname = st[j].surname;
                
                st[i].position = st[j].position; 
                st[i].supply = st[j].supply; 
 
                st[j].name = temp.name; 
                strcpy(st[j].surname, temp.surname); 
                
                st[j].position = temp.position; 
                st[j].supply = temp.supply; 
            }
 
            } 
        }
    }
       /* 
    for (int i = 0; i < n;i++)
        for (int j = i + 1; j < n - 1; j++)
            if (st[i].name[0] > st[j].name[0])
                swap(st[i].name[0], st[j].name[0]);
        }
*/
int main() {
    begin:
    int n;
    printf("Enter amount of workers: "); 
    cin >> n;
    if (n<=0)  {
    cout<<"Error!"<<endl;
    goto begin; }
    else
    {
    
    WORKER *st = new WORKER[n];
 
    input(st, n);
    sortofalpfavit(st, n);
    output(st, n);
    stage(st, n);
 
    delete[] st;
   }
    system("pause");
    return 0;
}
0
С чаем беда...
Эксперт CЭксперт С++
9268 / 4765 / 1291
Регистрация: 18.10.2014
Сообщений: 10,879
09.03.2016, 21:46 9
Лучший ответ Сообщение было отмечено Евгений_студент как решение

Решение

Цитата Сообщение от Евгений_студент Посмотреть сообщение
C++
1
2
3
4
5
6
struct WORKER {
    char name[30];
    char surname[50];
    char position[10];
    int supply[5];
};
Ну то есть все именно так, как я говорил выше.

Голые массивы в С++ нельзя присваивать. Для того, чтобы скопировать один массив в другой, придется пользоваться библиотечной функцией: 'memspy, 'std::copy' и т.д. или, для C-style строк, 'strcpy'.

В вашем случае вы, очевидно, работаете со строками в стиле С. Т.е. вам надо использовать 'strcpy' для копирования таких строк. Причем вы уже использовали 'strcpy' для копирования 'name'. Так почему же вы тогда не используете 'strcpy' для всех остальных полей??? 'strcpy' в руки - и вперед!

А 'supply' у вас не строка. Его придется копировать через 'memcpy' или 'std::copy'.

---

Возникает вопрос: почему в С++ коде вы используете голые массивы, а не 'std::string' и 'std::vector'? Там бы такой проблемы не было.

---

В любом случае, на самом деле в вашем алгоритме сортировки вам очевидно нужно просто обменять местами два элемента массива. Мне не понятно, почему вы пытаетесь делать это через обмен местами индивидуальных полей, если можно было просто обменять элементы целиком, без работы с отдельными полями и безо всяких 'strcpy' вообще

C++
1
2
3
4
5
6
7
8
9
10
11
void sortofalpfavit(WORKER* st, int n) 
{
  ...
            if (strcmp(st[i].name, st[j].name) > 0) 
            {   
                WORKER temp = st[i];
                st[i] = st[j];
                st[j] = temp;
            }
  ...
}
и все!

Не говоря уже том, что можно было просто сделать

C++
1
2
3
4
5
6
7
void sortofalpfavit(WORKER* st, int n) 
{
  ...
            if (strcmp(st[i].name, st[j].name) > 0) 
              std::swap(st[i], st[j]);
  ...
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2016, 21:46

вертикальное выпадающее меню, подскажите что не так в коде
&lt;html&gt; &lt;head&gt; &lt;style&gt; body{ margin: 0; padding: 10px; font-famaly: Verdana, Tahoma, Arial;...

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от...

Что с оператором if else на jQuery? Что не так в коде?
В общем уже не первый раз сталкиваюсь с такой проблемой: мне необходимо задать определенные условия...

Что не так в коде
Подскажите что не так в коде fstream fs; fs.open(file, fstream::in |fstream::out |...


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

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

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