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

Помогите найти ошибку: из таблиц СОТРУДНИКИ и ОТДЕЛЫ составить третью - C++

Восстановить пароль Регистрация
 
Насютка
0 / 0 / 0
Регистрация: 27.02.2014
Сообщений: 36
22.05.2014, 12:49     Помогите найти ошибку: из таблиц СОТРУДНИКИ и ОТДЕЛЫ составить третью #1
ПОДСКАЖИТЕ, пожалуйста, почему количество сотрудников(count) считает неправильно?
(задание: Заданы две таблицы: СОТРУДНИКИ и ОТДЕЛЫ. Составить программу, которая
строит новую таблицу, включающую номер, фамилию и зарплату сотрудника, номер отдела,
название отдела и количество сотрудников в отделе. Строки результирующей таблицы
строятся как всевозможные сцепления строк исходных таблиц.)
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
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "stdio.h"
#include <string.h>
#include <iostream>
const int NE=5, ND=3;
typedef char TStr[25];
struct TEmp {
    int ENum;
    TStr EName;
    double ESal;
    int DNum;
};
struct TDept{
    int DNum;
    TStr DName;
};
typedef TEmp TEmpTable[NE];
typedef TDept TDeptTable[ND];
int FindDeptNum(TDeptTable D, TStr DeptName);
int MakeList(TEmpTable Emp,TEmpTable EmpList,int DNum);
void PrintDept(TDeptTable Dept, int ND);
void PrintEmp(TEmpTable Emp,int N);
 
int main() {
    TEmpTable EmpTable={{21,"Smith", 1030.0,102},{12,"Brosnan",630.0,300},
    {35,"Hackman",1234.5,200},{14,"Clooney",678.9,300},
    {51,"Jason", 1011.1,300}};
    TDeptTable DeptTable={{102,"Economic"},{300,"Office"},{200,"Planning"}};
    TEmpTable;
    TStr DeptName;
    int DNum, i,j,count;
    PrintEmp(EmpTable,NE);
    PrintDept(DeptTable,ND);
    DNum=FindDeptNum(DeptTable,DeptName);
    printf("%d\n", count);
    system("pause");
}
 
int FindDeptNum(TDeptTable D,TStr DeptName){
    int i,DNum;
    i=0;
    while (i<ND && strcmp(D[i].DName,DeptName))
        i++;
    if (i==ND)
        DNum=-1;
    else
        DNum=D[i].DNum;
    return DNum;
}
int MakeList(TEmpTable Emp,TEmpTable EmpList,int DNum, TDeptTable Dept, int ND, TDeptTable D, TStr DeptName){
    int j,i,k, count;
    
        count=0;
        for (i=0; i<ND; i++){
            for (j=0; j<NE; j++){
                if (Dept[i].DNum == Emp[j].DNum)
                    count++;
                printf("%i\n", count);
            }
            }
    k=0;
    for (i=0; i<NE;i++)
        if (Emp[i].DNum==DNum) {
            EmpList[k]=Emp[i];
            k=k+1;
        
        }
        return k;
}
void PrintDept(TDeptTable Dept, int N){
    int i, count;
    printf("\n");
    printf("***************************\n");
    printf("* N_dep * DName * count *\n");
    printf("***************************\n");
    for (i=0;i<N;i++)
        printf("* %4i * %15s *%d *\n",Dept[i].DNum,Dept[i].DName,count );
}
void PrintEmp(TEmpTable Emp,int N){
    int i;
    printf("\n");
    printf("******************************************\n");
    printf("* N_emp * EName * Salary * N_ dep *\n");
    printf("******************************************\n");
    for (i=0;i<N;i++)
        printf("* %4i * %10s * %8.2f * %4i *\n",Emp[i].ENum,Emp[i].EName,Emp[i].ESal,
        Emp[i].DNum);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 12:49     Помогите найти ошибку: из таблиц СОТРУДНИКИ и ОТДЕЛЫ составить третью
Посмотрите здесь:

C++ помогите найти ошибку
Помогите найти ошибку C++
C++ Помогите найти ошибку
Помогите найти ошибку C++
C++ Помогите найти ошибку
C++ Помогите найти ошибку
C++ помогите найти ошибку
Помогите найти ошибку C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LordCezis
 Аватар для LordCezis
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 67
22.05.2014, 21:49     Помогите найти ошибку: из таблиц СОТРУДНИКИ и ОТДЕЛЫ составить третью #2
Без комментариев сложновато читать код

Пока понял только то, что у вас есть изначальные 2 таблицы, заданные в виде структур:
TEmp (Персонал) и TDept (Подразделения)

В основном коде вы присваиваете значения в обе таблицы согласно структурам.
Функция FindDeptNum, возвращает значение DNum равное 4 198 406.
Функция MakeList возвращает значение k = 1 638 232 + в ней считается ваш count
Но выводится в основном коде вовсе не значение count, во всяком случае count не из функции MakeList.
Ибо даже после того, как я закомментил эту строку в MakeList, значение, выводимое строкой printf("%i\n", count), - не изменилось.
Вот только по какой-то причине выводится вовсе не нулевое значение, а count= 852 073 273.

В общем не особо пока что понял ваш код
Не понял, где вызывается MakeList, ведь в main нет вызова, в других функциях тоже не заметил использования.
Так же не понял назначение переменной k в MakeList: зачем её вычислять, если она больше нигде не используется?

Есть предчувствие, что count не получает это значение откуда-то из вычислений, а просто обладает им ещё до присвоения значений в таблицы EmpTable и DeptTable,
ведь если написать так:
int main()

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
    int DNum, i,j,count=0;  //обнуляем значение count
    TEmpTable EmpTable={{21,"Smith", 1030.0,102},{12,"Brosnan",630.0,300},
    {35,"Hackman",1234.5,200},{14,"Clooney",678.9,300},
    {51,"Jason", 1011.1,300}};
 
    TDeptTable DeptTable={{102,"Economic"},{300,"Office"},{200,"Planning"}};
    //EmpTable; //C++ Builder XE3 ругается на TEmpTable ошибкой неправильного использования
        
    TStr DeptName;
 
    PrintEmp(EmpTable,NE); //вывод таблицы Персонал
    PrintDept(DeptTable,ND); //вывод таблицы Подразделения
    DNum=FindDeptNum(DeptTable,DeptName);
    printf("%i\n", count); //вывод count
    system("pause");
}

то значение count будет равно 0.

Если можете, то напишите комменты к коду. Всем легче будет вам помочь, да и тем, кто только начал с таблицами и структурами общаться, будет легче изучать язык по вашему произведению
Yandex
Объявления
22.05.2014, 21:49     Помогите найти ошибку: из таблиц СОТРУДНИКИ и ОТДЕЛЫ составить третью
Ответ Создать тему
Опции темы

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