Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсивным способом получить все возможные траектории с 0-ой вершины до 6-ой вершины длиной не более 4 вершин https://www.cyberforum.ru/cpp-beginners/thread1401823.html
Как написать рекурсивную функцию по задаче: Задается например,такая верхняя треугольная матрица, на самом деле она достаточно большая float A={ { 1, 2, 1,-1,-1,-1}, {-1,...
C++ Файл с разнотипными данными
Подскажите, пожалуйста, есть файл с числовыми данными, хочу написать программу, которая посимвольно читает данные, пропускает то, что не нужно (текст), остальное записывает куда нужно. С последним...
Объясните что делает эта программа (do.while) C++
Объясните пожалуйста что делает эта программа. #include <stdio.h> #include <conio.h> #include <math.h> int main() { int i=1; float a,n; scanf("%f",&n);
C++ Стек в виде массива Помогите программку составить, выполнение арифметических действий записанных в инфиксной записи, стеков в виде массива. https://www.cyberforum.ru/cpp-beginners/thread1401747.html
C++ Аппроксимация. Квадратичная интерполяция https://www.cyberforum.ru/cpp-beginners/thread1401736.html
Нужен пример реализации квадратичной интерполяции на интервале с 11 точками. Исходные хi вычисляются по формуле xi=-2+7*(i-1)/10, i=1,11 и у по формуле y=x3-50*cos(x). Используя полученную таблицу...
Создание таблицы C++
Добрый день, задача заключается в том, чтобы считать данные и поместить их в таблицу.Задача состоит в том, чтобы создать таблицу. Прошу помочь обозначить в какую сторону копать, где можно почерпнуть...
Не срабатывает условие while (!file.eof() C++
Есть функция, которая считает из файла числа в динамический массив: int* ReadFile(string FileName) { ifstream file; file.open(FileName); int* mas=(int*)malloc(sizeof(int)*10); int Count =...
C++ Шаблонный оператор не шаблонного класса Пытаюсь создать альтернативный оператор выделения памяти для своей библиотеки. С целью получить возможность передавать дополнительную информацию о типах в свой диспетчер памяти. Сначала сделал... https://www.cyberforum.ru/cpp-beginners/thread1401683.html
C++ Задача с файлом https://www.cyberforum.ru/cpp-beginners/thread1401653.html
Дан файл определить сколько раз встречается в нем слово вывести на экран номер строк где это слово найдено(программа находит слово не зависимо от регистра) Я написал пррограмму но не знаю как...
C++ Конвертирование типов данных Нужно обработать данные. Пропустить их через кучу функций, каждая из них требует свой тип данных. Вовремя компиляции постоянно сталкиваюсь с тем что компилятор ругается "невозможно преобразовать... https://www.cyberforum.ru/cpp-beginners/thread1401649.html
KoreshX
0 / 0 / 1
Регистрация: 28.12.2015
Сообщений: 9
23.05.2016, 23:12 0

Решение всех задач из учебника Стивена Прата

23.05.2016, 23:12. Просмотров 78510. Ответов 211
Метки (Все метки)

Ответ

Вопрос по 7 упр. 7 главы:
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
/*
Вернитесь к программе из листинга 7.7 и замените три функции обработки
массивов версиями, которые работают с диапазонами значений, заданными парой
указателей. Функция fill_array() вместо возврата действительного
количества прочитанных значений должна возвращать указатель на место, следующее за
последним введенным элементом; прочие функции должны использовать его в
качестве второго аргумента для идентификации конца диапазона данных.
*/
 
#include <iostream>
const int ARR_SIZE = 5;
 
// function prototypes
double * fill_array(double * arBegin, double * arEnd);
void show_array(double * arBegin, double * arEnd);  // don't change data
void revalue(double r, double * arBegin, double * arEnd);
 
int main()
{
    using namespace std;
 
    double properties[ARR_SIZE];
 
    double * arEnd = fill_array(properties, properties + ARR_SIZE);
 
    show_array(properties, arEnd);
    if (arEnd != properties)
    {
        cout << "Enter revaluation factor: ";
        double factor;
        while (!(cin >> factor))    // bad input
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
           cout << "Bad input; Please enter a number: ";
        }
        revalue(factor, properties, arEnd);
        show_array(properties, arEnd);
    }
    cout << "Done.\n";
    // cin.get();
    // cin.get();
    return 0;
}
 
double * fill_array(double * arBegin, double * arEnd)
{
    using namespace std;
    double temp;
    int i = 0;
    double * pt;
    for (pt = arBegin; pt != arEnd; pt++)
    {
        cout << "Enter value #" << (i + 1) << ": ";
        cin >> temp;
        if (!cin)    // bad input
        {
            cin.clear();
            while (cin.get() != '\n');
            cout << "Bad input; input process terminated.\n";
            break;
        }
        else if (temp < 0)     // signal to terminate
            break;
        *pt = temp;
    }
    return pt;
}
 
// the following function can use, but not alter,
// the array whose address is ar
void show_array(double * arBegin, double * arEnd)
{
    using namespace std;
    int i = 0;
    for (double * pt = arBegin; pt != arEnd; pt++)
    {
        cout << "Property #" << (i + 1) << ": $";
        cout << *pt << endl;
    }
}
 
// multiplies each element of ar[] by r
void revalue(double r, double * arBegin, double * arEnd)
{
    double * pt;
    for (pt = arBegin; pt != arEnd; pt++)
        *pt *= r;
}
тут вторым аргументом fill_array() является указатель на ячейку следующую за последним элементом массива:
C++
1
double * arEnd = fill_array(properties, properties + ARR_SIZE);
значит в этом цикле (функции fill_array()) мы исключаем эту ячейку :
C++
1
for (pt = arBegin; pt != arEnd; pt++)
но почему в цикле функции show_array() мы так же исключаем второй аргумент (переданный из fill_array()) если он уже является последним элементом, а не следующим за ним как это было в fill_array()?

Добавлено через 12 минут
или здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (pt = arBegin; pt != arEnd; pt++)
    {
        cout << "Enter value #" << (i + 1) << ": ";
        cin >> temp;
        if (!cin)    // bad input
        {
            cin.clear();
            while (cin.get() != '\n');
            cout << "Bad input; input process terminated.\n";
            break;
        }
        else if (temp < 0)     // signal to terminate
            break;
        *pt = temp;
    }
в конце последней итерации цикла, указателю присвоилось так же значение ячейки следующей за последней ячейки массива?

Вернуться к обсуждению:
Решение всех задач из учебника Стивена Прата
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2016, 23:12
Готовые ответы и решения:

Пример с книги Стивена Прата (Язык программирования с++). Расхождение в ответе
В книге один ответ. У меня другой выходит (На русский перевод, не обращайте внимание) Сама...

Решение задач из учебника Томшина
Я являюсь студентом 1-го курса, и нам дали задачи по c# которые необходимо решить. Задачи взяты из...

Понятен материал учебника, но не получается самостоятельное решение задач
Здравствуйте. Читаю книжку Дейтелов, переписываю код, который дан в учебнике, потом читаю...

Нюансы синтаксиса: классы, список инициализации (неясная строка из учебника Стивена Праты)
Вот сам класс #ifndef TABTENN0_H_ #define TABTENN0_H_ #include &lt;string&gt; using std ::...

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