С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/1010: Рейтинг темы: голосов - 1010, средняя оценка - 4.92
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 93
1

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

23.03.2015, 12:20. Показов 197480. Ответов 271
Метки нет (Все метки)

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

Глава 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, решенные sourcerer
9
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2015, 12:20
Ответы с готовыми решениями:

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

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

Неожиданный консольный вывод (упражнения 3 к главе 6 книги Стивена Праты)
:-| Вообщем имеется код (решение 3 упражнения к главе 6 книги Прата): #include &lt;iostream&gt;...

Найти причины и способы исправления ошибок в коде (упражнения по книге Стивена Праты)
В общем так . Пробую учить плюсы по книжке Прата . Пробую недавно , и потому полный нуб. От того и...

Задача из лекций по книге Стивена Праты
Глава 6 задача 5 Напишите программу, которая предлагает пользователю ввести прописную букву....

271
0 / 0 / 1
Регистрация: 28.12.2015
Сообщений: 9
23.05.2016, 23:12 101
Author24 — интернет-сервис помощи студентам
Вопрос по 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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
05.06.2016, 16:59 107
Mr.X, мне ваш код кажется страшным и совсем непонятным. Но может это в силу моего невежества
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 17:13 108
Цитата Сообщение от Armatus Посмотреть сообщение
Mr.X, мне ваш код кажется страшным и совсем непонятным. Но может это в силу моего невежества
Наоборот, все предельно ясно и логика четко выстроена. А вот в вашем с Пратой коде логика попутана, и хотя 16-я глава уже в конце, и вроде бы уже и функции, и STL пора применять, а он пишет в придурковатом студенческом стиле. Интересно, кого и чему он хочет таким образом научить?
Кстати, а вы можете сказать с какой целью вы публикуете здесь свои неоттестированные решения с ошибками?
У Праты хоть и придурковато написано, но хоть без ошибок вроде бы.
0
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
05.06.2016, 17:35 109
Mr.X, Публикую в надежде что кто-то увидит мои "решение" и скажет: "Парень, у тебя вот тут и тут ошибки, нельзя так делать". Ну и я стану грамотней, и тому кто "тыкнет" пальцем в мои ошибки будет приятно. ( самоутвердиться это же приятно, не так ли? )
Ну и никто мне не мешает после Праты, прочитать любую другую книгу - ведь это всего лишь моя первая почти прочитанная книга по программированию, а раз уже начал - нужно закончить.
0
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 17:45 110
Цитата Сообщение от Armatus Посмотреть сообщение
Публикую в надежде что кто-то увидит мои "решение" и скажет: "Парень, у тебя вот тут и тут ошибки, нельзя так делать". Ну и я стану грамотней
Мне кажется, что читатели вашего кода с ошибками, которые только учатся, могут стать безграмотнее, и могут подумать, что так и надо писать программы, раз человек опубликовал. Ну, или написали бы в преамбуле что, дескать, написано через пень-колоду и не тестировано ни разу. Мол, не делайте так, дети.
Я считаю, что засирание информационного пространства - это грех, как плевание в колодец, например.
0
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
05.06.2016, 17:52 111
Mr.X,
Цитата Сообщение от Armatus Посмотреть сообщение
S. Мои решения задач могут быть неверными и рекомендуются лишь для ознакомления.
"засиранием" занимаетесь вы, расписывая одну строку на четыре.
Цитата Сообщение от Mr.X Посмотреть сообщение
C++
1
2
3
4
    return  words   [
                            rand        ()
                        %   words.size  ()
                    ];
0
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
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
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
Эксперт С++
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 20:58 116
Цитата Сообщение от Armatus Посмотреть сообщение
Глава 16. Задача 4
Тестировали хоть?
0
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
56 / 56 / 44
Регистрация: 24.03.2016
Сообщений: 378
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
Эксперт С++
3225 / 1752 / 436
Регистрация: 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
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2016, 15:53
Помогаю со студенческими работами здесь

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

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

Запишите в файл 2 название команды, количество решенных задач и общее времени, потраченное на решение всех задач
Подскажите как доделать задачу. В файле 1 хранятся данные о названиях команды, номере решенной...

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

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

Решение задач на С++ (написание программы для решения задач)
Добрый день! Помогите с написанием кода для программы, которая будет решать следующие задачки: 1)...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru