Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24

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

12.08.2011, 12:01. Показов 2830. Ответов 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;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2011, 12:01
Ответы с готовыми решениями:

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

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

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

30
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:42
Студворк — интернет-сервис помощи студентам
jafrey kerns, вы же говорили, что количество номиналов в файле может варьироваться. А читаете вы строго 52 значения...
0
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 15:55  [ТС]
Меня пока, как начинающего интересовала возможность вычитывать числа с плавающей точкой из текстового файла в массив.
Вот получившийся код:

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 минуты
До динамических массивов и векторов я еще не дошёл, но в будущем надеюсь изучу и скорректирую код. А в планах оформить все в графическую оболочку.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
25.08.2011, 15:57
jafrey kerns, не знаю, что будет сложнее - разобраться с векторами, или сделать окошко
1
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
25.08.2011, 16:05  [ТС]
Я и сам не знаю, по книге Прата я добрался только до главы с функциями.
0
25.08.2011, 16:15

Не по теме:

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

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

Не по теме:

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



Знаете, мне кажется, что вам пока не следует лезть в окошки, а научиться работать с консолью. Работа с потоками ввода-вывода во-первых позволяет создавать очень гибкие конвейеры (прочитайте про перенаправление ввода-вывода в 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 и подобного (что безопаснее).

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

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;
            }
        }
    }
}
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.10.2011, 00:50
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;
}
1
5 / 5 / 0
Регистрация: 12.08.2011
Сообщений: 24
15.10.2011, 01:31  [ТС]
Спасибо, все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2011, 01:31
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru