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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шифровка данных элементарным способом http://www.cyberforum.ru/cpp-beginners/thread922510.html
Всем привет. Нес-ко дней изучаю C++. Пишу, дописываю, перерабатываю примеры из книг по некоторые задачи. Вот вчера пришла мысль зашифровать данные. (расшифровка пока не нужна) Нашёл небольшой код для подсчёта символов, который я сам понял и вставил в программу. Возникшая проблема: ввожу комбинацию из "AZ", консоль в ответ выводит "ZA"(как и должно быть), но там ещё есть непонятные символы....
C++ Вычислить квадраты четных чисел 0 . 100, инструкция for #include<iostream> #include<conio.h> using namespace std; int main() { int square(int i); int i; for(int i = 0; i<100;i+=2); cout<<i<<square(i)<<endl; getch(); http://www.cyberforum.ru/cpp-beginners/thread922474.html
Исключения языка C++ C++
Задание в книге по программированию выполнил отчасти (всё что нужно уже изменил и оригинал не нужен). Не знаю как сделать так, чтобы catch ( hmeanexcp & excp ) возвращал управление обратно в цикл, это же вроде противоречит самому механизму исключений? catch ( gmeanexcp & excp ) написал правильно и он корректно работает. #include <iostream> #include <exception> using std :: cout; using std ::...
C++ Флаг eofbit в потоке и условные операторы
Если в потоке установлен только флаг eofbit, такой поток для условных операторов if(), while() и др. - true или false?
C++ Доступ к закрытым членам базового класса http://www.cyberforum.ru/cpp-beginners/thread922408.html
помогите понять что я не так сделал ? #include <iostream> using namespace std; class A { int PrA1; public: int PuA1;
C++ mem_fun и mem_fun_ref Здорова! Есть задачка : "Реализуйте и протестируйте четыре функции mem_fun() и mem_fun_ref() (параграф 18.4.4.2)." Ну там наверно ошиблись не 4 а две функции да пусть две функции будет. Ну и как же мне их реализовать? Чем они хоть отличаются? Это похоже одни и те же функции, токо первая с указателями работает, а вторая с объектами ли хз. В общем свои нужно написать, наверно свой шаблон нужно... подробнее

Показать сообщение отдельно
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
13.07.2013, 13:48     Ошибка в программе из книги Дейтелов
На сколько я помню, тоже была ошибка в этом примере. Ошибка кроется в константных аргументах функций. Например
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];
    }
}
 
Текущее время: 23:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru