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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
guitarman
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 10
#1

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

13.07.2013, 13:43. Просмотров 302. Ответов 2
Метки нет (Все метки)

Программа из книжки Дейтелов. Среда разработки - 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]; 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2013, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в программе из книги Дейтелов (C++):

Задача из книги Дейтелов - C++
Столкнулся с решением следующей программы, в мысли приходит только примитивное и решения с огромным количеством строк. Как можно...

Нужны упражнения из книги Дейтелов - C++
Всем привет! Пытаюсь своими силами изучить с++, пользуюсь книгой Дейтлов и компилятором VS Studio 2013 ...скиньте пожалуйста ответы к...

Создание класса (упражнение из книги Дейтелов) - C++
В книге Дейтелов в разделе &quot;Упражнения&quot; есть такое задание: &quot;Создайте класс с именем Account, которым мог бы воспользоваться банк для...

Задача из книги Дейтелов Как программировать на C++ - C++
Задание: модифицируйте приложение, чтобы оно подтверждало действительность ввода.При любом вводе, даже если введено не 1 и не 2,...

Не получается создать класс Account из книги Дейтелов - C++
Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш...

Где взять решения задач из книги Дейтелов - C++
Здраствуйте. Откуда я могу найти решения задач по Дейтел?

2
Мимино
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];
    }
}
0
guitarman
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 10
13.07.2013, 14:05  [ТС] #3
Спасибо за оперативный ответ. Действительно были две ошибки в функциях, которые не имеют права изменять массив.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2013, 14:05
Привет! Вот еще темы с ответами:

Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++" - C++
Начал изучение С++, прочитал главу &quot;Введение в классы и объекты&quot; в книге Дейтелов &quot;Как програмировать на С++&quot;, ничего не поняв прочитал её...

Ошибка. Программа с Дейтелов, которая тасует и раздает карты - C++
Программа C++ из книги Дейтелов, которая тасует и раздает игральные карты. Среда разработки - wxDev-C++. Переписана с книги правильно и...

Не могу обнаружить ошибку в учебной программе из книги (шаблоны классов) - C++
Вот упрощённый код учебной программы из книжки Детейла. Не компилится, пишет: /123/main.cpp|21|error: request for member ‘print’ in ‘l’,...

Описать структуру Bibliotec, содержащую следующие поля: автор книги, инвентарный номер книги, название книги - C++
Описать структуру BIBLIOTEC содержащий следующие поля: автор книги , инвентарный номер книги , название книги. Подсчитать , книги скольких...


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

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

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