Консультация № 188703
23.01.2016, 22:37
0.00 руб.
24.01.2016, 00:09
0 6 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Имеется массив, в котором хранится данные первый столбец содержит о номер отдела, второй таб.номер сотрудника, 3 столбец факт.отработанное время сотрудника. А найти нужно найти количество часов по каждому отделу в целом. Нужна только сам фрагмент подсчета.
Например данн массив
[table]
[row][col]10[/col][col]001 [/col][col]24[/col][/row]
[row][col]10 [/col][col]002 [/col][col]16[/col][/row]
[row][col]11 [/col][col]003 [/col][col]8[/col][/row]
[/table]

Должно получится:
Отдел №10 - 40ч.
Отдел №11 - 8ч.

Обсуждение

давно
Посетитель
399077
12
23.01.2016, 22:39
общий
[table]
[row][col]10[/col][col]001 [/col][col]24[/col][/row]
[row][col]10 [/col][col]002 [/col][col]16[/col][/row]
[row][col]11 [/col][col]003 [/col][col]8[/col][/row]
[/table]
давно
Посетитель
7438
7205
24.01.2016, 01:24
общий
это ответ
Здравствуйте, Трошков Владимир!
Например, так:
[code h=200]
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

typedef struct _worker
{
int department;
int order;
int count;
}worker;

typedef struct _worker_count
{
int department;
int count;
}worker_count;

#define N 3

int main()
{
int i,j;
int cnt;
worker_count *pwc = NULL;
worker w[N] =
{
{10,1,24},
{10,2,16},
{11,3,8}
};

for(cnt=i=0; i<N; i++)
{
for(j=0; j<cnt; j++)
{
if (pwc[j].department == w[i].department)
{
pwc[j].count += w[i].count;
break;
}
}
if (j == cnt)
{
pwc = (worker_count*)realloc(pwc, (cnt+1)*(sizeof worker_count));
pwc[cnt].department = w[i].department;
pwc[cnt++].count = w[i].count;
}
}
if(pwc)
{
for(i=0; i<cnt; i++)
printf("Department #%d, count = %d\n", pwc[i].department, pwc[i].count);
}
else
printf("data dummy!\n");
free (pwc);
return 0;
}
[/code]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399077
12
24.01.2016, 09:45
общий
Адресаты:
Спасибо за такой вариант, а если данные хранятся в матрице?(скорее всего изначально не правильно выразился).
давно
Посетитель
7438
7205
24.01.2016, 17:58
общий
Адресаты:
Какая разница-то? Разве сложно просмотреть матрицу?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399077
12
24.01.2016, 20:41
общий
24.01.2016, 20:42
Адресаты:
Изначально я попытался так сделать...
Код:
 for (i=0,s=0,x=1; i<row; i++) {
a1 = a[i][0];
for(j=0;j<col;j++){
if ( j>2) {
s+=a[i][j];
}
}
if (a1 != a[i+1][0]){
cout << "Количество часов по отделу №"<< a1 <<" сотавляет "<< s << "ч.\n";
s=0;
}
}

давно
Посетитель
7438
7205
25.01.2016, 11:57
общий
Адресаты:
Неправильно. Как минимум, надо же найти одинаковые, поэтому без дополнительного массива не обойтись.
Можно сделать и так
[code h=200]
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>

typedef struct _worker
{
int department;
int order;
int count;
}worker;

#define N 3

int main()
{
int i,j;
int cnt;
int wc[N][2];;
worker w[N] =
{
{10,1,24},
{10,2,16},
{11,3,8}
};

for(cnt=i=0; i<N; i++)
{
for(j=0; j<cnt; j++)
{
if (wc[j][0] == w[i].department)
{
wc[j][1] += w[i].count;
break;
}
}
if (j == cnt)
{
wc[cnt][0] = w[i].department;
wc[cnt++][1] = w[i].count;
}
}
if(cnt)
{
for(i=0; i<cnt; i++)
printf("Department #%d, count = %d\n", wc[i][0], wc[i][1]);
}
else
printf("data dummy!\n");
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа