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

Ошибка в программе из книги Дейтелов - C++

Восстановить пароль Регистрация
 
guitarman
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 10
13.07.2013, 13:43     Ошибка в программе из книги Дейтелов #1
Программа из книжки Дейтелов. Среда разработки - wxDev-C++. Выдаёт ошибку, никак не могу её найти.
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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void mean(const int [], int);
void median(const int [], int);
void mode(const int [], int [], int);
void bubbleSort(int [], int);
void printArray(const int [], int);
 
main()
{
    const int responseSize = 99;
    int frequency[10] = {0},
        response[responseSize] = {6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
                                  7, 8, 9, 5, 9, 8, 7, 8, 7, 8,
                                  6, 7, 8, 9, 3, 9, 8, 7, 8, 7,
                                  7, 8, 9, 8, 9, 8, 9, 7, 8, 9,
                                  6, 7, 8, 7, 8, 7, 9, 8, 9, 2,
                                  7, 8, 9, 8, 9, 8, 9, 7, 5, 3,
                                  5, 6, 7, 2, 5, 3, 9, 4, 6, 4,
                                  7, 8, 9, 6, 8, 7, 8, 9, 7, 8,
                                  7, 4, 4, 2, 5, 3, 8, 7, 5, 6,
                                  4, 5, 6, 1, 6, 5, 7, 8, 7};
    mean(response, responseSize);
    median(response, responseSize);
    mode(frequency, response, responseSize);
    
    return 0;}
 
void mean(const int answer[ ], int arraySize)
{
    int total = 0;
    
    cout << "*********" << endl << " ÑðåäГ*ГҐГҐ" << endl
         << "*********" << endl;
         
    for (int j = 0; j < arraySize; j++)
        total += answer[j];
        
    cout << "ÑðåäГ*ГҐГҐ ÿâëÿåòñÿ ñðåäГ*ГЁГ¬ Г§Г*Г*Г·ГҐГ*ГЁГҐГ¬ " << endl
         << "ýëåìåГ*òîâ Г¤Г*Г*Г*ûõ. ÑðåäГ*ГҐГҐ Г§Г*Г*Г·ГҐГ*ГЁГҐ " << endl
         << "Г°Г*ГўГ*Г® ñóììå Г¤Г*Г*Г*ûõ, äåëåГ*Г*îé Г*Г* êîëè÷åñòâî " << endl
         << "ýëåìåГ*òîâ (" << arraySize <<"). ÑðåäГ*ГҐГҐ Г§Г*Г*Г·ГҐГ*ГЁГҐ äëÿ" << endl
         << "Г¤Г*Г*Г*îãî Г°Г*Г±Г·ГҐГІГ* Г°Г*ГўГ*Г®: "
         << total << " / " << arraySize << " = "
         << setiosflags(ios::fixed | ios::showpoint)
         << setprecision(4) << (float) total / arraySize
         << endl << endl;
}
 
void median(const int answer[ ], int size)
{
    cout << endl << "**********" << endl << " ÌåäèГ*Г*Г*" << endl
         << "**********" << endl
         << "ÍåñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў îòâåòîâ";
         
    printArray(answer, size);
    bubbleSort(answer, size);
    cout << endl << endl << "ÑîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў îòâåòîâ";
    printArray(answer, size);
    cout << endl << endl << "ÌåäèГ*Г*Г* - ГЅГІГ® ýëåìåГ*ГІ " << size / 2
         << " ГЁГ§ Г¬Г*Г±Г±ГЁГўГ*" << endl << size << " ñîðòèðîâГ*Г*Г*ûõ ýëåìåГ*òîâ. "
         << endl << "Äëÿ Г¤Г*Г*Г*îãî Г°Г*Г±Г·ГҐГІГ* ìåäèГ*Г*Г* Г°Г*ГўГ*Г* "
         << answer[size / 2] << endl << endl;
}
 
void mode(const int freq[ ], int answer[ ], int size)
{
    int largest = 0, modeValue = 0;
    
    cout << endl << "**********" << endl << " ÌîäГ*" << endl
         << "**********" << endl;
         
    for (int rating = 1; rating <= 9; rating++)
        freq[rating] = 0;
        
    for (int j = 0; j < size; j++)
        ++freq[answer[j]];
    
    cout << "ГЋГІГўГҐГІ" << setw(11) << "Г—Г*ñòîòГ*"
         << setw(19) << "ÃèñòîãðГ*ììГ*" << endl << endl << setw(54)
         << "1   1   2   2" << endl << setw(54)
         << "5   0   5   0   5" << endl << endl;
         
    for (int rating = 1; rating <= 9; rating++) {
        cout << setw(8) << rating << setw(11)
             << freq[rating] << "                ";
             
        if (freq[rating] > largest) {
            largest = freq[rating];
            modeValue = rating;
        }
    for (int h = 1; h <= freq[rating]; h++)
        cout << '*';
    
    cout << endl;
    }
    
    cout << "ÌîäГ* - Г*Г*èáîëåå Г·Г*Г±ГІГ® âñòðå÷Г*ГѕГ№ГҐГҐГ±Гї Г§Г*Г*Г·ГҐГ*ГЁГҐ." << endl
         << "Äëÿ Г«Г*Г*Г*îãî Г°Г*Г±Г·ГҐГІГ* ìîäГ* Г°Г*ГўГ*Г* " << modeValue
         << ", ГЅГІГ® ÷èñëî âñòðå÷Г*ГҐГІГ±Гї " << largest << "  Г°Г*Г§."
         << endl;
}
void bubbleSort(int a[ ], int size)
{
    int hold;
    
    for (int pass = 1; pass < size; pass++)
    
        for (int j = 0; j < size - 1; j++)
            
            if (a[j] > a[j + 1]) {
                hold = a[j];
                a[j] = a[j + 1];
                a[j + 1] = hold;
            }
}
 
void printArray(const int a[ ], int size)
{
    for (int j = 0; j < size; j++) {
        
        if (j % 20 == 0)
            cout << endl;
            
        cout << setw(2) << a[j]; 
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 13:43     Ошибка в программе из книги Дейтелов
Посмотрите здесь:

C++ Создание класса (упражнение из книги Дейтелов)
C++ Задачка из первой главы Дейтелов.
Не могу обнаружить ошибку в учебной программе из книги (шаблоны классов) C++
Лифт Дейтелов C++
Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++" C++
C++ Ошибка. Программа с Дейтелов, которая тасует и раздает карты
Неправильная работа программы по учебнику Дейтелов C++
C++ Не получается создать класс Account из книги Дейтелов
Задача из книги Дейтелов Как программировать на C++ C++
C++ Нужны упражнения из книги Дейтелов
Где взять решения задач из книги Дейтелов C++
C++ Реализовать класс Account моделирующий операции с банковским счётом (по книге Дейтелов)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
13.07.2013, 13:48     Ошибка в программе из книги Дейтелов #2
На сколько я помню, тоже была ошибка в этом примере. Ошибка кроется в константных аргументах функций. Например
C++
1
void median(const int [], int);
не должна изменять массив. Однако
C++
1
2
3
4
5
6
void median(const int answer[ ], int size)
{
   ...
    bubbleSort(answer, size);
   ...
}
Добавлено через 48 секунд
Вот работающий вариант
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
133
134
135
// 10 ex.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
void mean(const int [], int);
void median(int [], int);
void mode(int [], int, int [], int);
void bubbleSort(int [], int);
void printArray(const int [], int);
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const int responseSize = 99;
    int frequency[10] = {0}, response[responseSize];
 
    for (int i = 0; i < responseSize; i++)
        response[i] = 1 + rand() % 9;
 
    mean(response, responseSize);
    median(response, responseSize);
    mode(frequency, 10, response, responseSize);
    cout << endl << endl;
    system("pause");
 
    return 0;
}
 
 
void mean(const int answer[], int arraySize)
{
    int total = 0;
 
    cout << "*********" << endl << " Среднее" << endl
         << "*********" << endl;
 
    for (int j = 0; j < arraySize; j++)
        total += answer[j];
 
    cout << "Среднее является средним значением " << endl
         << "элементов данных. Среднее значение " << endl
         << "равно сумме данных, деленной на количество" << endl
         << "элементов (" << arraySize << "). Среднее значение для" << endl
         << "данного расчета равно: " << total << " / " << arraySize << " = "
         << setiosflags(ios::fixed | ios::showpoint) << setprecision(4)
         << (float)total / arraySize << endl << endl;
}
 
 
void median(int answer[], int size)
{
    cout << endl << "**********" << endl << " Медиана" << endl
         << "**********" << endl << "Несоритрованный массив ответов";
 
    printArray(answer, size);
    bubbleSort(answer, size);
 
    cout << endl << endl << "Сортированный массив ответов";
 
    printArray(answer, size);
 
    cout << endl << endl << "Медиана - это элемент " << size / 2
         << " из массива" << endl << size << " сортированных элементов. " << endl
         << "Для данного расчета медиана равна " << answer[size / 2] << endl << endl;
}
 
 
void mode(int freq[], int sizeF, int answer [], int size)
{
    int largest = 0, modeValue = 0;
 
    cout << "********" << endl << "  Мода" << endl
         << "********" << endl;
 
    for (int j = 0; j < size; j++)
        ++freq[answer[j]];
 
    cout << setw(8) << "Ответ" << setw(11) << "Частота"
         << setw(19) << "Гистограмма" << endl << endl;
 
    for (int rating = 1; rating <= 9; rating++)
    {
        cout << setw(8) << rating << setw(11)
             << freq[rating] << "        ";
 
        if (freq[rating] > largest)
        {
            largest = freq[rating];
            modeValue = rating;
        }
 
        for (int h = 1; h <= freq[rating]; h++)
            cout << "*";
 
        cout << endl;
    }
 
    cout << endl <<"Мода - наиболее часто встречающееся значение." << endl
         << "Для данного расчета мода равна " << modeValue
         << ", это число встречается " << largest << " раз." << endl;
 
}
 
 
void bubbleSort(int a[], int size)
{
    int hold;
 
    for (int pass = 1; pass < size; pass++)
        for (int j = 0; j < size - 1; j++)
            if (a[j] > a[j + 1])
            {
                hold = a[j];
                a[j] = a[j + 1];
                a[j + 1] = hold;
            }
}
 
 
void printArray(const int a[], int size)
{
    for (int j = 0; j < size; j++)
    {
        if (j % 20 == 0)
            cout << endl;
 
    cout << setw(2) << a[j];
    }
}
guitarman
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 10
13.07.2013, 14:05  [ТС]     Ошибка в программе из книги Дейтелов #3
Спасибо за оперативный ответ. Действительно были две ошибки в функциях, которые не имеют права изменять массив.
Yandex
Объявления
13.07.2013, 14:05     Ошибка в программе из книги Дейтелов
Ответ Создать тему
Опции темы

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