Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/362: Рейтинг темы: голосов - 362, средняя оценка - 4.78
ZarinZomanu4
7 / 7 / 0
Регистрация: 27.05.2013
Сообщений: 93
1

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

23.03.2015, 12:20. Просмотров 67438. Ответов 206
Метки нет (Все метки)

Здравствуйте!Решил выложить свои решения задач книги С. Прата. Код ни в коем случае не претендует на звание эталонного, если есть замечания с радостью выслушаю и приму к сведению.

Глава 4

Задания




Задача №1
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
#include <iostream>
 
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    int age;
    char bit;
    //enum gradeW {A,B,C};
    cout<<"what is your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"what is your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"wrong"<<endl;}
    cin.get();
    return 0;
  }

Задача №2
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
#include <iostream>
#include <string>
int main ()
{ 
    using namespace std;
    string Fname;
    string Lname;
    int age;
    char bit;
    cout<<"what is your first name "<<endl;
    getline(cin,Fname);
    cout<<"what is your last name "<<endl;
    getline(cin,Lname);
    cout<<"what letter grade do you deserve(A,B,C) "<<endl;
    cin>>bit;
    cout<<"what is your age "<<endl;
    cin>> age ;
    cin.get();
    cout<<"Name: "<<Lname<<" "<<Fname<<endl;
    cout<<"Age: "<<age<<endl;
    switch (bit)
        {case 'A':
            cout<<"Grade B "<<endl;
            break;
        case 'B':
            cout<<"Grade C"<<endl;
            break;
        case 'C':
            cout<<"Grade D"<<endl;
            break;
        default: cout<<"dsfsfsfsfsd"<<endl;}
    cin.get();
    return 0;
  }

Задача №3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
//#include <string>
int main ()
{ 
    using namespace std;
    const int ArSize = 20;
    char Fname[ArSize];
    char Lname[ArSize];
    cout<<"Enter your first name "<<endl;
    cin.getline(Fname,ArSize);
    cout<<"Enter your last name "<<endl;
    cin.getline(Lname,ArSize);
    cout<<"Name: "<<Lname<<",  "<<Fname<<endl;
    cin.get();
    return 0;
  }

Задача №5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack={"Mocha Much",2.3,350};
    cout<<"Struct )))) "<<snack.Name<<snack.netto<<"     "<<snack.Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
struct CandyBar
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{ 
    using namespace std;
    CandyBar snack[3]={
        {"Mocha Much",2.3,350},
        {"sfdsfsdf",2.45,435},
        {"bnderlogi", 2.12 , 777}};
 
    cout<<"Struct  "<<snack[2].Name<<"    "<<snack[2].netto<<"   "<<snack[0].Ccal<<endl;
    cin.get();
    return 0;
  }

Задача №7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
struct Pizza
    {
        char Name [20];
        double netto;
        int Ccal;
    };
int main ()
{   using namespace std;
    Pizza Peper;
    cout<<"Enter Name:"<<endl;
    cin.getline (Peper.Name,20);
    cout<<"Enter diametr:"<<endl;
    cin>>Peper.netto;
    cout<<"Enter ves:"<<endl;
    cin>>Peper.Ccal;
    cout<<"Pizza: "<<Peper.Name<<endl<<"Diametr: "<<Peper.netto<<endl<<"Ves: "<<Peper.Ccal<<endl;
    cin.get();
    cin.get();
    return 0;
  }

Задача №8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
struct Pizza
{
    std :: string Name ;
    double netto;
    int Ccal;
    };
int main ()
{   using namespace std;
    Pizza *pz =new Pizza;
    cout<<"Enter diametr:"<<endl;
    cin>>(*pz).netto;
    cout<<"Enter Name:"<<endl;
    cin>>(*pz).Name ;
    cout<<"Enter ves:"<<endl;
    cin>>(*pz).Ccal;
    cout<<"Pizza: "<<(*pz).Name<<endl;
    cout<<"Diametr: "<<(*pz).netto<<endl<<"Ves: "<<(*pz).Ccal<<endl;
    system ("pause");
    delete pz;
    return 0;
  }

Задача №9
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
#include <iostream>
#include <string>
struct CandyBar
    {
        std::string Name  ;
        double netto;
        int Ccal;
    };
void main ()
{ 
    using namespace std;
    CandyBar *bar= new CandyBar[3];
    bar[0].Name="Mocha Much";
    bar[0].netto=2.3;
    bar[0].Ccal=350;
    bar[1].Name="sfdsfsdf";
    bar[1].netto=2.45;
    bar[1].Ccal=435;
    bar[2].Name="bnderlogi";
    bar[2].netto=2.12;
    bar[2].Ccal=777;
    cout<<"Struct  "<<bar[0].Name<<"    "<<bar[0].netto<<"   "<<bar[0].Ccal<<endl;
    system("pause");
    delete bar;
          }

Задача №10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
int main ()
{ 
    using namespace std;
    int bar[3];
    cout<<"Vvedite rezyltat 1 "<<endl;
    cin>>bar[0];
    cout<<"Vvedite rezyltat 2 "<<endl;
    cin>>bar[1];
    cout<<"Vvedite rezyltat 3 "<<endl;
    cin>>bar[2];
    int Sr=(bar[0]+bar[1]+bar[2])/3;
    cout<<"Rezyltat  "<<bar[0]<<"    "<<bar[1]<<"   "<<bar[2]<<"  Srednee "<<Sr<<endl;
    system("pause");
}


Задачи из глав с 4 о 10, решенные gru74ik
6
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2015, 12:20
Ответы с готовыми решениями:

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

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

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

Вклады, простые и сложные проценты (вопрос из учебника С. Прата)
Изучаю книгу С. Прата. В главе 5 у него присутствует такая задача: Дафна сделала вклад на сумму...

Программа из учебника Прата. Структуры в многофайловом приложении. Исправить недочеты в коде
Посмотрите, пожалуйста, что где исправить. int fill()-для заполнения массива all-для вывода суммы...

206
KoreshX
0 / 0 / 1
Регистрация: 28.12.2015
Сообщений: 9
23.05.2016, 23:12 101
Вопрос по 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
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
27.05.2016, 23:30 102
Глава 14. Задача 1:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <valarray>
#include <string>
using namespace std;
 
class Pair {
    valarray<int> cropYear;
    valarray<int> bottles;
    int yearbottles;
public:
    Pair() {}
    Pair(int y, const int cy[], const int bot[]) :cropYear(y), bottles(y), yearbottles(y) {
        for (int i = 0; i < yearbottles; i++) {
            cropYear[i] = cy[i];
            bottles[i] = bot[i];
        }
 
    }
    Pair(int a) :cropYear(a), bottles(a), yearbottles(a) {}
    virtual void show();
    virtual void getBottles();
    virtual int sum();
};
 
int Pair::sum() {
    int sum = 0;
    for (int i = 0; i < yearbottles; i++) {
        sum += bottles[i];
    }
    return sum;
}
 
void Pair::getBottles() {
    for (int i = 0; i < yearbottles; i++) {
        cout << "Enter year ";
        cin >> cropYear[i];
        cout << "Enter bottles for that year: ";
        cin >> bottles[i];
    }
 
}
 
void Pair::show() {
 
    cout << "\tYear\tBottles\n";
    for (int i = 0; i < yearbottles; i++) {
        cout << "\t" << cropYear[i];
        cout << "\t" << bottles[i] << endl;
    }
}
class Wine
{
private:
    string name;
    Pair pair;
 
public:
    Wine(char *n, int yb) {
        name = n;
        pair = yb;
    }
    void getBottles();
    void show();
    Wine(const char *l, int y, const int yr[], const int bot[]) :name(l), pair(y, yr, bot) {}
    string label();
    int sum();
 
};
 
void Wine::show() {
    cout << "Wine: " << name << endl;
    pair.show();
}
 
void Wine::getBottles() {
    pair.getBottles();
 
}
string Wine::label() {
 return name;
}
int Wine::sum() {
    return pair.sum();
}
 
int main() {
 
    using std::cin;
    using std::cout;
    using std::endl;
    cout << "Eneter name of wine: ";
    char lab[50];
    cin.getline(lab, 50);
    cout << "Enter number of years: ";
    int yrs;
    cin >> yrs;
    Wine holding(lab, yrs);
    holding.getBottles();
    holding.show();
    const int YRS = 3;
    int y[YRS] = { 1993,1995,1998 };
    int b[YRS] = { 48,60,72 };
    Wine more("Gushing Grape Red", YRS, y, b);
    more.show();
    cout << "total bottles for " << more.label() << ": " << more.sum() << endl;
    cout << "Bye\n";
    return 0;
}
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
29.05.2016, 15:19 103
Глава 14. Задача 4:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <ctime>
class Person {
    std::string firstName;
    std::string lastName;
public:
 
    Person(std::string a = "first Name", std::string b = "lastName") :firstName(a), lastName(b){}
    virtual void show() {
        std::cout << "First Name: " << firstName << std::endl;
        std::cout << "Last Name: " << lastName << std::endl;
    }
};
 
class Gunslinger : virtual public Person {  
    double timeforbattle;
    int notchriffle; 
public:
    Gunslinger(){}
    Gunslinger(std::string a, std::string b) :Person(a,b){}
    Gunslinger(std::string a, std::string b, int n, double t = 0): Person(a,b), notchriffle(n){}
    virtual double Draw(); //возвращает значение типа double — время, необходимое снайперу для перехода в боевую готовность
    virtual void show() {
        Person::show();
        std::cout << "Notch on the rifle: " << notchriffle << std::endl;
        if (timeforbattle > 0)
            std::cout << "Time for battle: " << timeforbattle << std::endl;
    }
};
double Gunslinger::Draw() {
    timeforbattle = 5.9;
    return timeforbattle;
 
}
 
 
class PockerPlayer : virtual public Person {
public:
    PockerPlayer(){}
    PockerPlayer(std::string a, std::string b) : Person(a, b){}
    int Draw() {
        srand(time(0));
        int card = 1 + rand() % 52;
        return card;
    }
    virtual void show() {
        Person::show();
    }
};
 
class BadDude : public Gunslinger, public PockerPlayer{
public:
    BadDude(std::string a, std::string b) :Gunslinger(a,b){}
    void show() {
        Person::show();
    }
    double Gdraw() {
        return Gunslinger::Draw();
    }
    int Cdraw() {
        return PockerPlayer::Draw();
    }
};
 
 
int main() {
    Person man("Vitya", "Borshagovskiy");
    man.show();
    Gunslinger gun("Van", "Dam", 5);
    gun.Draw();
    gun.show();
    PockerPlayer pik("Katya", "Osa");
    pik.show();
    std::cout << "Card pik: " << pik.Draw() << std::endl;
    BadDude serun("Pashka", "Podezd");
    std::cout << "Time For Battle: " << serun.Gdraw() << std::endl;
    std::cout << "Card BadDude:" << serun.Cdraw();
}
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
01.06.2016, 16:21 104
Глава 15. Задача 1:

Файл 1:
Кликните здесь для просмотра всего текста
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
// tv.h -- Tv and Remote classes
#ifndef TV_H_
#define TV_H_
class Tv
{
public:
    friend class Remote;   // Remote can access Tv private parts
    enum {Off, On};
    enum {MinVal,MaxVal = 20};
    enum {Antenna, Cable};
    enum {TV, DVD};
 
    Tv(int s = Off, int mc = 125) : state(s), volume(5),
        maxchannel(mc), channel(2), mode(Cable), input(TV) {}
    void onoff() {state = (state == On)? Off : On;}
    bool ison() const {return state == On;}
    bool volup();
    bool voldown();
    void chanup();
    void chandown();
    void set_mode() {mode = (mode == Antenna)? Cable : Antenna;}
    void set_input() {input = (input == TV)? DVD : TV;}
    void settings() const; // display all settings
    int changeModePult(Remote & t);
private:
    int state;             // on or off
    int volume;            // assumed to be digitized
    int maxchannel;        // maximum number of channels
    int channel;           // current channel setting
    int mode;              // broadcast or cable
    int input;             // TV or DVD
};
 
class Remote
{
private:
    
    enum { Normal, Interactive };
    int modepult;
    int mode;         // controls TV or DVD
public:
    friend class Tv;
    Remote(int m = Tv::TV) : mode(m),modepult(Normal) {}
    bool volup(Tv & t) { return t.volup();}
    bool voldown(Tv & t) { return t.voldown();}
    void onoff(Tv & t) { t.onoff(); }
    void chanup(Tv & t) {t.chanup();}
    void chandown(Tv & t) {t.chandown();}
    void set_chan(Tv & t, int c) {t.channel = c;}
    void set_mode(Tv & t) {t.set_mode();}
    void set_input(Tv & t) {t.set_input();}
    void showModepult();
    friend int Tv::changeModePult(Remote & t);
    
};
#endif


Файл 2:

Кликните здесь для просмотра всего текста
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
// tv.cpp -- methods for the Tv class (Remote methods are inline)
#include <iostream>
#include "tv.h"
 
bool Tv::volup()
{
    if (volume < MaxVal)
    {
        volume++;
        return true;
    }
    else
        return false;
}
bool Tv::voldown()
{
    if (volume > MinVal)
    {
        volume--;
        return true;
    }
    else
        return false;
}
 
void Tv::chanup()
{
    if (channel < maxchannel)
        channel++;
    else
        channel = 1;
}
 
void Tv::chandown()
{
    if (channel > 1)
        channel--;
    else
        channel = maxchannel;
}
 
void Tv::settings() const
{
    using std::cout;
    using std::endl;
    cout << "TV is " << (state == Off? "Off" : "On") << endl;
    if (state == On)
    {
        cout << "Volume setting = " << volume << endl;
        cout << "Channel setting = " << channel << endl;
        cout << "Mode = "
            << (mode == Antenna? "antenna" : "cable") << endl;
        cout << "Input = "
            << (input == TV? "TV" : "DVD") << endl;
    }
}
 
void Remote::showModepult() {
    
    if (modepult == Normal)
        std::cout << "Mode pult: Normal\n";
    else if (modepult == Interactive)
        std::cout << "Mode pult: interactive\n";
    else std::cout << "Error! Mode pult must have '0' or '1' ( off or on)\n";
    
}
 
int Tv::changeModePult(Remote & t) {
    
    if (state == On) {
        if (t.modepult == t.Normal) {
            t.modepult = t.Interactive;
            return t.modepult;
        }
        else if (t.modepult == t.Interactive) {
            t.modepult = On;
            return t.modepult;
        }
    }
    if (state == Off) {
        std::cout << "Error! mode pult dont change( Tv Off! )\n";
    }
    return t.modepult;
}
[/CPP]

Файл 3:

Кликните здесь для просмотра всего текста
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
//use_tv.cpp -- using the Tv and Remote classes
#include <iostream>
#include "tv.h"
 
int main()
{
    using std::cout;
    Tv s42;
    cout << "Initial settings for 42" TV:\n";
    s42.settings();
    s42.onoff();
    s42.chanup();
    cout << "\nAdjusted settings for 42" TV:\n";
    s42.settings();
    
    Remote grey;
    grey.set_chan(s42, 10);
    grey.volup(s42);
    grey.volup(s42);
    grey.set_input(s42);
    grey.set_input(s42);
    cout << "\n42" settings after using remote:\n";
    s42.settings();
 
    Tv s58(Tv::On);
    s58.set_mode();
    grey.set_chan(s58,28);
    cout << "\n58" settings:\n";
    s58.settings();
    
 
 
    cout << "My test:\n";
    cout << "Tv On:\n";
    Tv s2(Tv::On);
    grey.showModepult();
    s2.changeModePult(grey);
    grey.showModepult();
    cout << "Tv Off:\n";
    Tv s5;
    grey.showModepult();
    s5.changeModePult(grey);
    grey.showModepult();
 
    return 0; 
}


P.S. Мои решения задач могут быть неверными и рекомендуются лишь для ознакомления.
0
01.06.2016, 16:21
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
05.06.2016, 02:31 105
Глава 16. Задача 1:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
bool cheking(string & a);
int main() {
    string polidrom;
    cin >> polidrom;    
    cout << cheking(polidrom);
}
 
bool cheking(string &a) {
    string temp = a;
    int b = 0;
    for (int i = a.size() - 1; i >= 0; i--) {
        temp[i] = a[b];
        b++;
    }
    if (temp == a)
        return true;
    else return false;
}


Добавлено через 43 минуты
Глава 16. Задача 2:

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool cheking(string & a);
int main() {
    string polidrom;
    getline(cin, polidrom);
    cout << cheking(polidrom);
}
 
bool cheking(string &a) {
    
    char *temp2 = new char[a.size() + 1];
    int c = 0;
    for (int i = a.size() - 1; i >= 0; i--) {
        if (isupper(a[i])) {
            a[i] = tolower(a[i]);           
        }
    }   
    for (int i = a.size() - 1; i >= 0; i--) {
        if (isalpha(a[i])) {
            temp2[c] = a[i];
            c++;
        }
    }
    string temp = temp2;    
    int b = 0;
    for (int i = c-1; i >= 0; i--) {
        temp[i] = temp2[b];
        b++;
    }   
    if (temp == temp2) {
        delete[] temp2;
        return true;
    }
    else delete[] temp2; return false;
 
}


Добавлено через 3 часа 35 минут
Глава 16. Задача 3:

Кликните здесь для просмотра всего текста
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
// hangman.cpp -- some string methods
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <fstream>
#include <vector>
using std::string;
const int NUM = 26;
 /*const string wordlist[NUM] = {"apiary", "beetle", "cereal",
    "danger", "ensign", "florid", "garage", "health", "insult",
    "jackal", "keeper", "loaner", "manage", "nonce", "onset",
    "plaid", "quilt", "remote", "stolid", "train", "useful",
    "valid", "whence", "xenon", "yearn", "zippy"};
    */
int main()
{
    using std::cout;
    using std::cin;
    using std::tolower;
    using std::endl;
    std::ifstream fin("cppstudio.txt"); // открыли файл для чтения  
    std::vector<string>wordl;
    string temp;
    while (fin >> temp)
        wordl.push_back(temp);
 
    fin.close();
 
    std::srand(std::time(0));
    char play;
    cout << "Will you play a word game? <y/n> ";
    cin >> play;
    play = tolower(play);
    while (play == 'y')
    {
        string target = wordl[std::rand() % NUM];
        int length = target.length();
        string attempt(length, '-');
        string badchars;
        int guesses = 6;
        cout << "Guess my secret word. It has " << length
            << " letters, and you guess\n"
            << "one letter at a time. You get " << guesses
            << " wrong guesses.\n";
        cout << "Your word: " << attempt << endl;
        while (guesses > 0 && attempt != target)
        {
            char letter;
            cout << "Guess a letter: ";
            cin >> letter;
            if (badchars.find(letter) != string::npos
                || attempt.find(letter) != string::npos)
            {
                cout << "You already guessed that. Try again.\n";
                    continue;
            }
            int loc = target.find(letter);
            if (loc == string::npos)
            {
                cout << "Oh, bad guess!\n";
                --guesses;
                badchars += letter; // add to string
            }
            else
            {
                cout << "Good guess!\n";
                attempt[loc]=letter;
                // check if letter appears again
                loc = target.find(letter, loc + 1);
                while (loc != string::npos)
                {
                    attempt[loc]=letter;
                    loc = target.find(letter, loc + 1);
                }
           }
            cout << "Your word: " << attempt << endl;
            if (attempt != target)
            {
                if (badchars.length() > 0)
                    cout << "Bad choices: " << badchars << endl;
                cout << guesses << " bad guesses left\n";
            }
        }
        if (guesses > 0)
            cout << "That's right!\n";
        else
            cout << "Sorry, the word is " << target << ".\n";
 
        cout << "Will you play another? <y/n> ";
        cin >> play;
        play = tolower(play);
    }
 
    cout << "Bye\n";
 
    return 0; 
}
1
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 15:47 106
Цитата Сообщение от Armatus Посмотреть сообщение
Глава 16. Задача 3
Блин, хотел покритиковать код, но увидел, что это слегка измененный код из книжки Праты, т.е. он сам пишет в стиле студента-недоучки, ссыпая в main весь код в сыром виде. Остается только посоветовать ему почитать книжки по стилю программирования. Вот если бы он их читал, то как-то так бы написал:
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
#include <cctype>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef T_str::size_type                T_pos;
typedef T_str                           T_word;
typedef std::vector     < T_word    >   T_words;
///////////////////////////////////////////////////////////////////////////////
bool    successfully_from_file_with_name_input_words
    (
        T_str       const   &   filename,
        T_words             &   words
    )
{
    std::ifstream   ifile( filename );
    bool            bool_res    =   ifile;
 
    if( bool_res )
    {
        std::copy
            (
                std::istream_iterator< T_word >     ( ifile ),
                std::istream_iterator< T_word >     (),
                std::back_inserter                  ( words )
            );
 
        bool_res    =       words.size()
                        !=  0;
 
        if( !bool_res )
        {
            std::cout   <<  "File is empty!"
                        <<  std::endl;
        }//if
    }
    else
    {
        std::cout   <<  "Bad filename!"
                    <<  std::endl;
    }//else
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool    user_wants_to_continue()
{
    const   char    YES_SYMB    =   'y';
    char            yn_symb{};
 
    std::cout   <<  std::endl
                <<  std::endl
                <<  "Will you play a word game? <"
                <<  YES_SYMB
                <<  "/n> ";
 
    std::cin    >>  yn_symb;
    yn_symb             =   tolower( yn_symb );
    bool    bool_res    =   yn_symb     ==  YES_SYMB;
 
    if( !bool_res )
    {
        std::cout << "Bye\n";
    }
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool    letter_belongs_to_word
    (
        char                letter,
        T_word  const   &   word
    )
{
    return      word.find( letter )
            !=  T_str::npos;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_copy_letter_from_to
    (
        char                letter,
        T_word  const   &   word,
        T_word          &   word_template
    )
{
    bool    bool_res    {};
    T_pos   pos         {};
 
    while   (
                    (
                        pos     =   word.find   (
                                                    letter,
                                                    pos
                                                )
                    )
 
                !=  T_str::npos
            )
    {
        bool_res    =   true;
        word_template[ pos ]    =   word[  pos ];
        ++pos;
    }//while
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
bool    successfully_try_to_guess_word
    (
        int                 attempt_ind,
        T_word  const   &   word,
        T_word          &   word_template,
        T_word          &   bad_letters
    )
{
    char    letter{};
 
    for(;;)
    {
        std::cout   <<  std::endl
                    <<  "Guess a letter: ";
 
        std::cin    >>  letter;
 
        if  (
                    !letter_belongs_to_word
                        (
                            letter,
 
                                bad_letters
                            +   word_template
                        )
            )
        {
            break;
        }
 
        std::cout   <<  "You already guessed that. Try again.\n";
    }//for
 
    if  (
            successfully_copy_letter_from_to
                (
                    letter,
                    word,
                    word_template
                )
        )
    {
        std::cout   <<  "Good guess!\n";
    }
    else
    {
        std::cout   <<  "Oh, bad guess!\n";
        bad_letters   +=  letter;
    }//else
 
    std::cout   <<  "Your word: "
                <<  word_template
                <<  std::endl;
 
    bool    bool_res    =       word_template
                            ==  word;
 
    if( bool_res )
    {
        std::cout << "That's right!\n";
    }
    else
    {
        if  (
                !bad_letters.empty()
            )
        {
            std::cout   <<  "Bad choices: "
                        <<  bad_letters
                        <<  std::endl;
        }//if
 
        if ( attempt_ind    >   1 )
        {
            std::cout   <<  attempt_ind     -   1
                        <<  " bad guesses left\n";
        }
        else
        {
            std::cout   <<  "Sorry, the word is "
                        <<  word
                        <<  ".\n";
        }
    }//else
 
    return  bool_res;
}
///////////////////////////////////////////////////////////////////////////////
T_word  get_rand_word_from_words( T_words    const   &   words )
{
    return  words   [
                            rand        ()
                        %   words.size  ()
                    ];
}
///////////////////////////////////////////////////////////////////////////////
void    play_with_words( T_words    const   &   words )
{
    const   int     ATTEMPTS_TOTAL  =   6;
    const   char    SYMB_TEMPLATE   =   '-';
    const   T_word  WORD            =   get_rand_word_from_words( words );
 
    T_word          word_template
                        (
                            WORD.size(),
                            SYMB_TEMPLATE
                        );
 
    T_word          bad_letters;
 
    for (
            int
            index_of_attempt    =   ATTEMPTS_TOTAL;
            index_of_attempt    >   0;
            --index_of_attempt
        )
    {
        if  (
                successfully_try_to_guess_word
                    (
                        index_of_attempt,
                        WORD,
                        word_template,
                        bad_letters
                    )
            )
        {
            break;
        }
    }//for
}
///////////////////////////////////////////////////////////////////////////////
int main()
{
    const   T_str   FILENAME{ "f.txt" };
    T_words         words;
 
    if  (
            successfully_from_file_with_name_input_words
                (
                    FILENAME,
                    words
                )
        )
    {
        srand(unsigned(time(0)));
 
        while   (
                    user_wants_to_continue()
                )
        {
            play_with_words( words );
        }//while
    }//if
}
1
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
05.06.2016, 16:59 107
Mr.X, мне ваш код кажется страшным и совсем непонятным. Но может это в силу моего невежества
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 17:13 108
Цитата Сообщение от Armatus Посмотреть сообщение
Mr.X, мне ваш код кажется страшным и совсем непонятным. Но может это в силу моего невежества
Наоборот, все предельно ясно и логика четко выстроена. А вот в вашем с Пратой коде логика попутана, и хотя 16-я глава уже в конце, и вроде бы уже и функции, и STL пора применять, а он пишет в придурковатом студенческом стиле. Интересно, кого и чему он хочет таким образом научить?
Кстати, а вы можете сказать с какой целью вы публикуете здесь свои неоттестированные решения с ошибками?
У Праты хоть и придурковато написано, но хоть без ошибок вроде бы.
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
05.06.2016, 17:35 109
Mr.X, Публикую в надежде что кто-то увидит мои "решение" и скажет: "Парень, у тебя вот тут и тут ошибки, нельзя так делать". Ну и я стану грамотней, и тому кто "тыкнет" пальцем в мои ошибки будет приятно. ( самоутвердиться это же приятно, не так ли? )
Ну и никто мне не мешает после Праты, прочитать любую другую книгу - ведь это всего лишь моя первая почти прочитанная книга по программированию, а раз уже начал - нужно закончить.
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 17:45 110
Цитата Сообщение от Armatus Посмотреть сообщение
Публикую в надежде что кто-то увидит мои "решение" и скажет: "Парень, у тебя вот тут и тут ошибки, нельзя так делать". Ну и я стану грамотней
Мне кажется, что читатели вашего кода с ошибками, которые только учатся, могут стать безграмотнее, и могут подумать, что так и надо писать программы, раз человек опубликовал. Ну, или написали бы в преамбуле что, дескать, написано через пень-колоду и не тестировано ни разу. Мол, не делайте так, дети.
Я считаю, что засирание информационного пространства - это грех, как плевание в колодец, например.
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
05.06.2016, 17:52 111
Mr.X,
Цитата Сообщение от Armatus Посмотреть сообщение
S. Мои решения задач могут быть неверными и рекомендуются лишь для ознакомления.
"засиранием" занимаетесь вы, расписывая одну строку на четыре.
Цитата Сообщение от Mr.X Посмотреть сообщение
C++
1
2
3
4
    return  words   [
                            rand        ()
                        %   words.size  ()
                    ];
0
Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 310
Завершенные тесты: 1
05.06.2016, 17:53 112
Ну а мне почему то вот так
C++
1
2
3
4
    if (successfully_from_file_with_name_input_words(FILENAME, words) )
    {
          srand(unsigned(time(0)));
    }
понятнее, чем вот так
C++
1
2
3
4
5
6
7
8
9
    if  (
            successfully_from_file_with_name_input_words
                (
                    FILENAME,
                    words
                )
        )
    {
        srand(unsigned(time(0)));
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 18:36 113
Цитата Сообщение от Armatus Посмотреть сообщение
"засиранием" занимаетесь вы, расписывая одну строку на четыре.
Ну я вот этого про вас не говорил, это уже вы сами к себе отнесли. Давайте без грубостей.

Добавлено через 5 минут
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
Ну а мне почему то вот так
C++
1
2
3
4
if (successfully_from_file_with_name_input_words(FILENAME, words) )
 {
 srand(unsigned(time(0)));
 }
понятнее
Не знаю, для меня
C++
1
successfully_from_file_with_name_input_words(FILENAME, words)
в одну строчку сливается, в упор не вижу там промежутков.
1
Stitch Igorek
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 310
Завершенные тесты: 1
05.06.2016, 19:46 114
Цитата Сообщение от Mr.X Посмотреть сообщение
в одну строчку сливается, в упор не вижу там промежутков.
а мне наоборот проще увидеть промежутки в одной строчке, чем искать куски этой самой строчки по всей рабочей области студии(но тут уже - кто как привык). например
C++
1
if (a > b) {cout << a;}
или
C++
1
2
3
if (a > b) {
    cout << a;
}
я тоже не понимаю, пока не отредактирую к такому виду
C++
1
2
3
4
if (a > b)
{
    cout << a;
}
причем не просто не понимаю, а смотрю на код как на новые ворота.
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
05.06.2016, 20:56 115
Глава 16. Задача 4

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <set>
#include <iterator>
using namespace std;
int reduce(long ar[], int n);
int main() {
    long mass[10] = { 1,2,1,2,2,4,5,6,8,5 };
    reduce(mass, 10);
}
 
int reduce(long ar[], int n) {
    ostream_iterator<long, char> out(cout, " ");
    set<long>vekt(ar,ar+n);
    copy(vekt.begin(), vekt.end(), out);
    return vekt.size();
}
0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 20:58 116
Цитата Сообщение от Armatus Посмотреть сообщение
Глава 16. Задача 4
Тестировали хоть?
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
06.06.2016, 00:19 117
Mr.X, Да, по условию задачи все работает.

Добавлено через 1 минуту
Mr.X, copy() для наглядности. А так все норм, количество чисел возвращает, вот так можно проверить:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
#include <set>
#include <iterator>
using namespace std;
int reduce(long ar[], int n);
int main() {
    long mass[10] = { 1,2,1,2,2,4,5,6,8,5 };
    cout << reduce(mass, 10);
}
 
int reduce(long ar[], int n) {
    ostream_iterator<long, char> out(cout, " ");
    set<long>vekt(ar, ar + n);
    return vekt.size();
}
Добавлено через 36 секунд

Не по теме:

Напишите функцию с интерфейсом в старом стиле, которая имеет следующий прототип:
int reduce(long ar [ ] , int n) ;
Действительными аргументами должны быть имя массива и количеством элементов в нем. Функция должна сортировать массив, удалять дублированные значения и возвращать значение, равное числу элементов в уменьшенном массиве. Напишите эту функцию, используя функции STL. (Если вы решите применить общую функцию unique (), обратите внимание, что она возвращает конец результирующего диапазона.) Протестируйте эту функцию в короткой программе.



Добавлено через 20 минут
Глава 16. Задача 5:

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <algorithm>
#include <set>
#include <iterator>
using namespace std;
 
template <class T>
int reduce(T ar[], int n);
int main() {
    long mass[10] = { 1,2,1,2,2,4,5,6,8,5 };
    cout << "The number of sorted elements: ";
    cout << reduce(mass, 10) << endl;
    string ma[4] = { "string", "name", "end", "string" } ;
    cout << "The number of sorted elements: ";
    cout << reduce(ma, 4) << endl;
}
 
 
template <class T>
int reduce(T ar[], int n) {
    ostream_iterator<T, char> out(cout, " ");
    set<T>vekt(ar, ar + n);
    return vekt.size();
}


Добавлено через 43 минуты
Глава 16. Задача 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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <ctime>
using namespace std;
 
vector<int> Lotto(int a, int b);
int main() {
    vector<int>winners;
    winners = Lotto(51, 6); 
    vector<int>::iterator pr;
    for (pr = winners.begin(); pr != winners.end(); pr++) 
        cout << *pr << endl;
    
}
 
 
vector<int> Lotto(int a, int b) {
    std::srand(unsigned(std::time(0)));
    vector<int>Ran(a);
    for (int i = 0; i < a; i++)
        Ran[i] = i + 1;
 
    random_shuffle(Ran.begin(), Ran.end()); 
    Ran.erase(Ran.begin() + b, Ran.end()); 
    return Ran;
}


Добавлено через 2 часа 9 минут
Глава 16 Задача 8.

Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator> 
#include <string>
using namespace std;
 
 
int main() {
    vector<string>matFriends;
    vector<string>patFriends;
    string temp;
    cout << "Input Mat Friends (for end input enter 'q'):\n";
    while (getline(cin,temp) && temp != "q")
        matFriends.push_back(temp);
 
    sort(matFriends.begin(), matFriends.end());
    
    vector<string>::iterator pr;    
    cout << "Mat Friend after sorting:\n";
    for (pr = matFriends.begin(); pr != matFriends.end(); pr++)
        cout << *pr << endl;
    
    cout << "Input Pat Friends (for end input enter 'q'):\n";
    while (getline(cin, temp) && temp != "q")
        patFriends.push_back(temp);
 
 
    sort(patFriends.begin(), patFriends.end());
    cout << "Pat Friend after sorting:\n";
    for (pr = patFriends.begin(); pr != patFriends.end(); pr++)
        cout << *pr << endl;
 
    copy(patFriends.begin(), patFriends.end(), back_inserter(matFriends)); // копируем второй вектор в первый
    
    sort(matFriends.begin(), matFriends.end()); // sort что бы сработал unique()   
    matFriends.erase( //удаляет элементы от и до
        unique(matFriends.begin(), matFriends.end()), // unique сдвигает дублирующиеся элементы в конец вектора, 
        //но не удаляет их оттуда. (Он также возвращает итератор, указывающий на первый из "ненужных" элементов.)
        matFriends.end()); 
    vector<string>::iterator it;
    cout << "Together friend after sorting:\n";
    for (it = matFriends.begin(); it != matFriends.end(); it++)
        cout << *it << endl;
    
    return 0;
}
0
Armatus
55 / 55 / 45
Регистрация: 24.03.2016
Сообщений: 378
Завершенные тесты: 4
12.06.2016, 15:28 118
Глава 17. Задача 1:

Задание:
Кликните здесь для просмотра всего текста
Напишите программу, которая подсчитывает количество символов вплоть до первого символа $ в строке, оставляя $ во входном потоке.


Решение:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
int main() {    
    char ch;
    int sch = 0;
    cin.get(ch);
    while (ch != '$') {
        sch++;
        cin.get(ch);        
    }   
    cout << "Numb: " << sch << endl; // количество символов до '$'
    cout << "Char: " << ch << endl; //показывает следующий (после цикла) символ в входном потоке
        
}


Добавлено через 15 часов 54 минуты
Глава 17. Задача 3:

Задание:
Кликните здесь для просмотра всего текста
Напишите программу, копирующую один файл в другой. Имена файлов программа должна получать из командной строки. Если не удается открыть файл, должно выдаваться соответствующее сообщение.


Решение:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
 
int main() {
 
    string file;
    cout << "Input name file: ";
    ifstream ifs;
    while (true) {
        getline(cin, file);
        ifs.open(file); // открыл файл для чтения
        if (!ifs.is_open()) {
            cout << "file don't open, try again\n";
            continue;
        }
        break;
    }
    cout << "Input a new file name: ";
    getline(cin, file);   // создали файл для записи 
    ofstream ofs(file); 
    string str;
    
    while (getline(ifs,str)) {   //копируем построчно.
        ofs << str << endl;
    }
    ifs.close();
    ofs.close();
    return 0;
}
0
Ferrari F1
12.06.2016, 15:37
  #119

Не по теме:

Mr.X, в какой книге описывается стиль написания кода, который вы практикуете?

0
Mr.X
Эксперт С++
3193 / 1720 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2016, 15:53 120
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Mr.X, в какой книге описывается стиль написания кода, который вы практикуете?
Цитата Сообщение от Mr.X Посмотреть сообщение
1) STL (Джосаттис)
2) Дискретная математика (Новиков)
3) Алгоритмы (Седжвик, Кормен)
4) ООП (осваивать на практике, почитывая Страуструпа, Липпмана и Прату)
5) Паттерны проектирования (Банда четырех)
6) Шаблоны (Вандевурд, Александреску)
7) Параллельное программирование (Уильямс)
8) Книги по оформлению кода (Чистый код, Совершенный код, Ален Голуб)
9) Графика - Qt
10) Как только все это изучите - приступайте к Бусту
11) Скотт Майерс и ему подобные - перечитывать постоянно.
Восьмой пункт.
1
12.06.2016, 15:53
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2016, 15:53

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

Объясните решение задачи из учебника
Книга &quot;Курс теории вероятностей&quot; Б.В. Гнеденко, серия &quot;Классический университетский учебник&quot;, 2005...

читаю главу 10 книги стивена праты - "объекты и классы". автор во всех примерах поступает следуйщим образм: объявляет класс в одном фаиле...
...а реализует функции в другом - в том котором создаёт и ползуется объектом. у меня вопросс: а не...


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

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

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