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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
#1

Правильно ли я написал? - C++

12.08.2011, 12:01. Просмотров 1612. Ответов 30
Метки нет (Все метки)

Начал изучать С++. Книга "Язык программирования С++. Лекции и упражнения". Хочется узнать насколько правильно я пишу код. Вот два первых задания:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <locale>
 
double astrUnits (double);
 
int main()
{
    setlocale(LC_ALL,"Rus");
 
    double lYears;
 
    std::cout << "Введите количество световых лет: ";
    std::cin >> lYears;
    std::cout << lYears << " световых лет " << astrUnits(lYears) << " астрономических единиц\n";
 
    std::cin.get();
    std::cin.get();
 
    return 0;


второе:

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
// 1_2011.cpp: главный файл проекта.
 
 
#include <iostream>
#include <locale>
//using namespace System;
 
double fahrenheit(double);
 
int main()
{
    setlocale(LC_ALL,"Rus");
 
    double cels;
    std::cout << "Введите температуру в градусах Цельсия: ";
    std::cin >> cels;
 
    double fahr = fahrenheit(cels);
 
    std::cout << cels << " градусов Цельсия равно " << fahr <<" градусов Фаренгейта \n";
    std::cin.get();
    std::cin.get();
}
 
double fahrenheit(double tempcels)
{
    double fahr = 1.80*tempcels+32.0;
    return fahr;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2011, 12:01     Правильно ли я написал?
Посмотрите здесь:

написал программу для этой формулы. Скажите правильно ли я написал ее - C++
написал программу для этой формулы. Скажите правильно ли я написал ее #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

Правильно ли я написал программу? - C++
//В зависимости от размера суммы, размер налога с нее рассчитывается по следующей схеме: 1) Если сумма не превышает некоторую величину а,...

Написал но не уверен что правильно - C++
1. Написать программу на Си для вычисления значений функции y (рис. 1) если Х изменяться от Xmin до Xmax с шагом dx. Х , Xmin, Xmax, dx...

Правильно ли я написал программу? Оператор if - C++
Всем доброго дня, не моглы бы проверить правиьно ли написана программа? Задание : Все числа, о которых идет речь в индивидуальных...

Ребят я правильно написал код:)? - C++
#include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;clocale&gt; #include &lt;iostream&gt; using namespace std; int main () { ...

Правильно ли я написал программу? Из книжки Павловская Щупак - C++
Задание во вложении, вот не могу разобраться, помогите, правильно ли написана программа? #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Написал прогу, не знаю как объяснить правильно!!! - C++
Как правильно описать задачу преподу? Условие: 5 работников, базовая з/п 5000 за 1 ед 2000, за 2 1800, более 3х 1500. задается любое...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 00:01     Правильно ли я написал? #16
Вообще, из файла в переменную читают так:

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 <fstream>
 
using namespace std;
 
int main()
{
    double number;
    
    ifstream fs( "nominals.txt" );
    
    if( !fs.is_open() )
    {
        cerr << "could not open file" << endl;
        return 0;
    }
    
    fs >> number; // прочитать из файла в переменную double;
    
    fs.close();
}
Количество элементов массива (номиналов) фиксировано, или может варьироваться?
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 08:10  [ТС]     Правильно ли я написал? #17
Колличество элементов массива может меняться.
Пробовал такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ifstream infile("existingtextfile.txt");
 
if (!infile.bad())
 
{
 
// Dump the contents of the file to cout.
 
number << infile.rdbuf();
 
infile.close();
 
}
при построении решения пишет что нельзя преобразовать char в double.
LosAngeles
Заблокирован
25.08.2011, 08:28     Правильно ли я написал? #18
double.operator<<(filebuf*) нету
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 14:59     Правильно ли я написал? #19
jafrey kerns, посмотрите на мой код (пост №16) и на ваш.

Вообще, если я правильно понял, что вы хотите, то вот:

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
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string.h>
#include <math.h>
 
using namespace std;
 
const int buffer_size = 64;
char buffer[ buffer_size ];
 
vector<double> nominals;
 
void add_nominal();
void ls_nominals();
void rm_nominal();
bool read_nominals( char * filename );
bool write_nominals( char * filename );
void check_nominals();
 
const char * operation_not_premitted = "Operation is not premitted: no nominals are loaded.\n";
 
int main()
{
    cout << "Welcome!\n";
    int choice;
 
    while( 1 )
    {
        cout << "\n--- Main menu ---\n1) Check nominals\n2) Add a nominal\n3) Remove a nominal\n4) List all nominals\n5) Load nominals\n6) Save nominals\n\n0) Quit\n\n> ";
 
        cin.sync();
        cin >> choice;
        cin.sync();
 
        if( choice == 0 )
           break;
 
        switch( choice )
        {
            case 1:
               if( nominals.size() == 0 )
                  cout << operation_not_premitted << endl;
               else
                  check_nominals();
               break;
 
            case 2:
               add_nominal();
               break;
 
            case 3:
               if( nominals.size() == 0 )
                  cout << operation_not_premitted << endl;
               else
                  rm_nominal();
               break;
 
            case 4:
               if( nominals.size() == 0 )
                  cout << operation_not_premitted << endl;
               else
                  ls_nominals();
               break;
 
            case 5:
               cout << "Please enter file name > ";
               cin.getline( buffer, buffer_size );
               read_nominals( buffer );
               break;
 
            case 6:
               if( nominals.size() == 0 )
               {
                  cout << operation_not_premitted << endl;
                  break;
               }
 
               cout << "Please enter file name > ";
               cin.getline( buffer, buffer_size );
               write_nominals( buffer );
               break;
        }
    }
 
    cout << "Goodbye!" << endl;
 
    return 0;
}
 
void add_nominal()
{
    double a;
 
    cin.sync();
    cout << "Please enter nominal > ";
    cin >> a;
    cin.sync();
 
    for( unsigned i = 0; i < nominals.size(); i++ )
    {
        if( nominals[i] == a )
        {
           cerr << "This value is already in the list" << endl;
           return;
        }
    }
 
    nominals.push_back( a );
}
 
void ls_nominals()
{
    cout << "\n----------\n";
 
    for( unsigned i = 0; i < nominals.size(); i++ )
       cout << nominals[i] << '\n';
 
    cout << "----------\nTOTAL: " << nominals.size() << endl;
}
 
void rm_nominal()
{
    double a;
 
    cout << "Please enter nominal > ";
    cin.sync();
    cin >> a;
    cin.sync();
 
    remove( nominals.begin(), nominals.end(), a );
 
    cout << "Done." << endl;
}
 
bool read_nominals( char * filename )
{
    ifstream fs( filename );
 
    if( !fs.is_open() )
    {
        cerr << "Could not open file" << endl;
        return false;
    }
 
    fs >> buffer;
 
    if( strcmp( buffer, "!resistors" ) ) /* если первое слово файле - НЕ "!resistors" */
    {
        cerr << "Invalid file" << endl;
        fs.close();
        return false;
    }
 
    /* очищаем список номиналов */
    nominals.clear();
 
    unsigned count;
    fs >> count;
 
    if( count <= 0 )
    {
        cerr << "No values in possibly valid file" << endl;
        fs.close();
        return true;
    }
 
    cout << "The file seems to be valid. " << count << " resistors specified." << endl;
 
    nominals.resize( count );
 
    for( unsigned i = 0; i < count; i++ )
    {
        if( fs.eof() )
        {
            cerr << "Unexpected end of file. " << i << "elements read." << endl;
            break;
        }
 
        if( fs.fail() )
        {
            cerr << "Error interpreting value. " << i << "elements read." << endl;
            break;
        }
 
        if( fs.bad() )
        {
            cerr << "Unknown error. " << i << "elements read." << endl;
            break;
        }
 
        fs >> nominals[i];
    }
 
    cout << "Nominals are loaded." << endl;
 
    fs.close();
}
 
bool write_nominals( char * filename )
{
    ofstream fs( filename );
 
    if( !fs.is_open() )
    {
        cerr << "Could not open file" << endl;
        return false;
    }
 
    fs << "!resistors " << nominals.size() << '\n';
 
    for( unsigned i = 0; i < nominals.size(); i++ )
    {
        if( fs.fail() || fs.bad() )
        {
           cerr << "Unknown error while writing. " << i << " nominals are saved, but file may be corrupt. Please resave." << endl;
           break;
        }
 
        fs << nominals[i] << ' ';
    }
 
    cout << "Nominals are saved." << endl;
 
    fs.close();
}
 
void check_nominals()
{
    double R1;
    cout << "Please enter the desired nominal in kOm > ";
    cin.sync();
    cin >> R1;
 
    for ( unsigned i = 0; i < nominals.size(); i++ ) // проверка наличия резисторов на складе
    {
            double dopusk = fabs( R1 - nominals[i] );
            if ( dopusk <= 0.1 )
            {
                cout << nominals[i] << " is found\n";
                break;
            }
    }
 
    cout << "You can use parallel connection of:\n";
 
    // расчет необходимых номиналов для параллельного соединения из того, что есть в наличии
    for ( unsigned a = 0; a < 10; a++ )
    {
            for ( unsigned b = nominals.size() - 1; b > 10; b-- )
            {
                    double r1 = nominals[a];
                    double r2 = nominals[b];
                    double pres = fabs((r1*r2)/(r1+r2));
                    double dop = fabs(R1-pres);
                    if (dop < 0.05)
                        cout << "   " << r1 << " & " << r2 << "\n"; // вывод на экран всех вариантов
            }
    }
}
Проверяет номиналы (ход расчёта я не менял, только подогнал под новые условия), добавляет номинал в список, удаляет номинал из списка, загружает номиналы из файла и сохраняет их в файл.

Вот файл:
Код
!resistors 52
13 13.3 14 14.7 15 15.4 16 16.5 20 22 24 27 30 31 33 33.2 36 39 39.2 40.2 47 48.7 51 56 62 63.4 75 82 91 100 118 120 150 180 200 220 240 270 300 316 324 330 360 390 432 470 510 620 680 750 787 1000
Удачи.

P.S.

А вас не интересует количество резисторов нужного номинала на складе, только факт их наличия?
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 15:40  [ТС]     Правильно ли я написал? #20
talis спасибо большое! сделал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
double tablRes[58];
 
    ifstream fs("tablResUVR.txt");
    if (!fs.is_open() )
    {
        cerr << "could not open file" << endl;
        return 0;
    }
 
    for (int i = 0; i<52; i++)
         fs >> tablRes[i];
    fs.close();
работает отлично.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:42     Правильно ли я написал? #21
jafrey kerns, вы же говорили, что количество номиналов в файле может варьироваться. А читаете вы строго 52 значения...
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 15:55  [ТС]     Правильно ли я написал? #22
Меня пока, как начинающего интересовала возможность вычитывать числа с плавающей точкой из текстового файла в массив.
Вот получившийся код:

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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cmath>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Rus");
    while (1)
    {
    double neobhR;
    static double dop;                       //вспомагательная переменная
    double dopusk;
 
    cout << "Введите необходимый номинал:\n";
    cin >> neobhR;
 
    /*double tablRes[58] = {2.67, 9.09, 16, 17.6, 33.2, 39.2, 45.3, 47, 49.3,
                     49.9, 51.1, 100, 150, 200, 203, 220, 221, 240, 243,
                     249, 270, 271, 274, 291, 300, 301, 332, 340, 360, 
                     361, 374, 379, 422, 430, 442, 453, 470, 475, 499,
                     620, 657, 681, 787, 931, 1000, 1130, 1150, 1200,
                     1330, 1500, 1540, 1690, 1740, 1760, 1870, 1910,
                     1960, 2000};*/
    double tablRes[58];
 
    ifstream fs("tablResUVR.txt");
    if (!fs.is_open() )
    {
        cerr << "could not open file" << endl;
        return 0;
    }
 
    for (int i = 0; i<52; i++)
         fs >> tablRes[i];
    fs.close();
 
    for (int i=0; i<58; i++)
    {
        dopusk = fabs(neobhR-tablRes[i]);
        dop = dopusk;
        if (dopusk <= 2)
        {
            cout << "\nНа складе имеется необходимый номинал: " << tablRes[i] << "\n\n";
            static double dop = dopusk;
        }
        if (dop <= 2)
            break;
    }
 
    if(dop > 2)
    {
        cout << "Необходимый номинал можно получить\n"
                  << "соединив последовательно:\n\n";
        for (int a=0; a<58; a++)
        {
            for (int b=0; b<58; b++)
            {
                double poslRes = tablRes[a]+tablRes[b];
                double dopusk2 = fabs(neobhR-poslRes);
                if (dopusk2 <= 3)
                    if (tablRes[a] <= tablRes[b])
                        cout << "   " << tablRes[a] << "  и  " << tablRes[b] << "\n\n\n";
            }
        }
    }
    cout << "Нажмите любую клавишу для повтора, или ESC для выхода\n";
 
        if( _getch() == 0x1B ) // 0x1B - сканкод ESC
                    break; // выход из цикла
    }
    //system ("PAUSE");
    return 0;
а вот текстовый файл:

2.67 9.09 16 17.6 33.2 39.2 45.3 47 49.3 49.9 51.1 100 150 200 203 220 221 240 243 249 270 271 274 291 300 301 332 340 360 361 374 379 422 430 442 453 470 475 499 620 657 681 787 931 1000 1130 1150 1200 1330 1500 1540 1690 1740 1760 1870 1910 1960 2000

Добавлено через 3 минуты
До динамических массивов и векторов я еще не дошёл, но в будущем надеюсь изучу и скорректирую код. А в планах оформить все в графическую оболочку.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:57     Правильно ли я написал? #23
jafrey kerns, не знаю, что будет сложнее - разобраться с векторами, или сделать окошко
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 16:05  [ТС]     Правильно ли я написал? #24
Я и сам не знаю, по книге Прата я добрался только до главы с функциями.
fasked
25.08.2011, 16:15
  #25

Не по теме:

Цитата Сообщение от jafrey kerns Посмотреть сообщение
Я и сам не знаю, по книге Прата я добрался только до главы с функциями.
Складывается ощущение, что до достижения цели Вам еще прочитать штук 10 книг минимум, все таки "окошки" штуки не простые Однако, это хорошо - есть куда стремиться

jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 16:23  [ТС]     Правильно ли я написал? #26
Цитата Сообщение от fasked Посмотреть сообщение
Складывается ощущение, что до достижения цели Вам еще прочитать штук 10 книг минимум, все таки "окошки" штуки не простые Однако, это хорошо - есть куда стремиться
Согласен. У человека должна бить какая- нибудь цель в жизни.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 16:42     Правильно ли я написал? #27

Не по теме:

Ну не какая-нибудь вообще, а оправданная...



Знаете, мне кажется, что вам пока не следует лезть в окошки, а научиться работать с консолью. Работа с потоками ввода-вывода во-первых позволяет создавать очень гибкие конвейеры (прочитайте про перенаправление ввода-вывода в Unix), а во-вторых, вывод проще. С окошками вам проще не будет ни на грамм. Вместо обычного printf( "%d items read", number ); вам нужно будет сделать

C
1
2
3
char buffer[64];
sprintf( buffer, "%d items read", number );
/*и далее задать эту строку соответствующему окошку. как - зависит от фреймворка*/
Вместо простого
C
1
2
for( int i = 0; i < 25; i++ )
   printf( "%d ", array[i] );
Вам нужно будет сделать что-то в этом роде:

C
1
2
3
4
5
6
7
8
9
char buffer[256];
for( int i = 0; i < 25; i++ )
{
   char loc_buffer[8];
   sprintf( loc_buffer, "%d, ", array[i] );
   strcat( buffer, loc_buffer ); /* так, напимер */
}
 
/* вывести потом куда-то */
Ну или аналогичным образом на C++ с использованием std::string и подобного (что безопаснее).

Вы не уйдёте от обычных операций, просто навешаете сверху ещё кучу (пока ещё) ненужных тонкостей.
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 17:09  [ТС]     Правильно ли я написал? #28
Я в принципе так и подразумевал, сначала изучить работу в консоли, а потом браться за окошки, т.к. понимаю что без основ браться за окошки нет смысла.
jafrey kerns
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
15.10.2011, 00:34  [ТС]     Правильно ли я написал? #29
Подскажите пожалуйста, как изменить этот код:

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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cmath>
 
using namespace std;
 
int main()
{
        setlocale (LC_ALL,"Rus");
        while (1)
        {
        double neobhR;
        static double dop;                       //вспомагательная переменная
        double dopusk;
 
        cout << "Введите необходимый номинал:\n";
        cin >> neobhR;
 
        /*double tablRes[58] = {2.67, 9.09, 16, 17.6, 33.2, 39.2, 45.3, 47, 49.3,
                             49.9, 51.1, 100, 150, 200, 203, 220, 221, 240, 243,
                                         249, 270, 271, 274, 291, 300, 301, 332, 340, 360, 
                                         361, 374, 379, 422, 430, 442, 453, 470, 475, 499,
                                         620, 657, 681, 787, 931, 1000, 1130, 1150, 1200,
                                         1330, 1500, 1540, 1690, 1740, 1760, 1870, 1910,
                                         1960, 2000};*/
    double tablRes[58];
 
        ifstream fs("tablResUVR.txt");
        if (!fs.is_open() )
        {
                cerr << "could not open file" << endl;
                return 0;
        }
 
        for (int i = 0; i<52; i++)
         fs >> tablRes[i];
        fs.close();
 
        for (int i=0; i<58; i++)
        {
                dopusk = fabs(neobhR-tablRes[i]);
                dop = dopusk;
                if (dopusk <= 2)
                {
                        cout << "\nНа складе имеется необходимый номинал: " << tablRes[i] << "\n\n";
                        static double dop = dopusk;
                }
                if (dop <= 2)
                        break;
        }
 
        if(dop > 2)
        {
                cout << "Необходимый номинал можно получить\n"
                              << "соединив последовательно:\n\n";
                for (int a=0; a<58; a++)
                {
                        for (int b=0; b<58; b++)
                        {
                                double poslRes = tablRes[a]+tablRes[b];
                                double dopusk2 = fabs(neobhR-poslRes);
                                if (dopusk2 <= 3)
                                        if (tablRes[a] <= tablRes[b])
                                            cout << "   " << tablRes[a] << "  и  " << tablRes[b] << "\n\n\n";
                        }
                }
        }
        cout << "Нажмите любую клавишу для повтора, или ESC для выхода\n";
 
        if( _getch() == 0x1B ) // 0x1B - сканкод ESC
                    break; // выход из цикла
        }
    //system ("PAUSE");
    return 0;
чтобы можно было меняя количество чисел с плавающей точкой в текстовом файле, не нужно было менять код и перекомпилировать программу. Пробовал так, но пока знаний не хватает и выдает ошибку

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
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cmath>
#include <vector>
 
using namespace std;
const int sizeTablRes = 10000;
 
//void raschetNominalov (const double spisok[], int col, double nRes);
void raschetNominalov (vector<double>tablRes, int col, double nRes);
 
int main()
{
    setlocale (LC_ALL, "Rus");
 
    while (1)
    {
        double neobhR;
        //static double dop;                            // вспомагательная переменная
        //double dopusk;
        //double tablRes[sizeTablRes];
        vector <double> tablRes;
 
        ifstream fs ("tablResUVR.txt");
        if (!fs.is_open())
        {
            cerr << "Не найден файл с перечнем номиналов!" << endl;
            system ("PAUSE");
            return 0;
        }
 
        for (int i = 0; i < sizeTablRes; i++)
            //fs >> tablRes[i];
            tablRes.push_back(fs);
        fs.close();
 
        int sizeSpisok = tablRes.size();
        cout << "Размер списка = " << sizeSpisok << endl;
 
        cout << "Введите необходимый номинал:\n";
        cin >> neobhR;
 
        raschetNominalov (tablRes, sizeTablRes, neobhR);
 
        cout << "Нажмите любую клавишу для повтора, или ESC для выхода\n";
        if( _getch() == 0x1B ) // 0x1B - сканкод ESC
            break; // выход из цикла
    }
    return 0;
}
 
void raschetNominalov (vector<double>tablRes, int col, double nRes)
{
    double dopusk;
    static double dop;
 
    for (int i = 0; i < col; i++)
    {
        dopusk = fabs(nRes - tablRes[i]);
        dop = dopusk;
        if (dopusk <= 3)
        {
            cout << "\nНа складе имеется необходимый номинал: " << tablRes[i] << "\n\n";
            static double dop = dopusk;
        }
        if (dop <= 3)
            break;
    }
 
    if (dop > 3)
    {
        cout << "Необходимый номинал можно получить\n"
               << "соединив последовательно: \n\n";
        for (int a = 0; a < col; a++)
        {
            for (int b = 0; b < col; b++)
            {
                double poslRes = tablRes[a] + tablRes[b];
                double dopusk2 = fabs (nRes - poslRes);
                if  (dopusk2 <= 3)
                    if (tablRes[a] <= tablRes[b])
                        cout << "    " << tablRes[a] << "  и  " << tablRes[b] << "\n\n" << endl;
            }
        }
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 00:50     Правильно ли я написал?
Еще ссылки по теме:

Написал прогу, не знаю как объяснить правильно!!! - C++
Как правильно описать задачу преподу? Условие: 5 работников, базовая з/п 5000 за 1 ед 2000, за 2 1800, более 3х 1500. задается любое...

Написал программу, не могу понять правильно или нет - C++
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по формуле: S=a1*a2+a2*a3+a3*a4+. . . . . ...

Написал калькулятор - C++
Вот написал калькулятор: #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { bool...

написал код не работает - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; #include&lt;windows.h&gt; #include &lt;iomanip&gt; ...

написал программу, ошибка! - C++
Info :Compiling C:\BC5\BIN\zadacha 3.cpp Warn : zadacha 3.cpp(25,3):'c' is assigned a value that is never used вот такая ошибка...


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

Или воспользуйтесь поиском по форуму:
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.10.2011, 00:50     Правильно ли я написал? #30
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
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    // загружаем данные сюда
    std::vector <float> data;
 
    // читаем отсюда
    std::ifstream fs ( "input.txt" );
 
    // копируем все данные в вектор
    std::copy( std::istream_iterator<float>( fs ), std::istream_iterator<float>(), std::back_inserter( data ) );
 
    // закрываем файл
    fs.close();
 
 
    // вывод (для отладки)
    std::for_each( data.begin(), data.end(), []( float &i ){ std::cout << i << ' '; } );
    std::cout << "\ntotal: " << data.size();
 
    return 0;
}
Yandex
Объявления
15.10.2011, 00:50     Правильно ли я написал?
Ответ Создать тему
Опции темы

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