Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Genn55
372 / 219 / 41
Регистрация: 26.12.2012
Сообщений: 718
#1

Вложенные циклы. Вычислить суммарное сечение и эквивалентную замену проводов (код внутри) - C++

27.12.2012, 02:04. Просмотров 289. Ответов 0
Метки нет (Все метки)

Доброго всем времени суток!Я делаю только первые шаги в с++. Вот задача:дано произвольное число проводов различного диаметра.Написать программу которая должна вычислить суммарное сечение и эквивалентную замену в 1,2,3,4,5,6 проводов вывести на экран все возможные варианты в соизмеримых диаметрах.
Вот мой упрощенный фрагмент кода:
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
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
 
int main()
{
float s,smin,smax;
float pi = 3.14159;
float d,di,dj,dk,dL,di1,dj1,dk1,dL1;
 
cout << "Vvedite diametr" << endl;//  любое от 0,53 до 3
cin >> d;
cout <<""<<endl;
s = (d/2)*(d/2)*pi;
cout << setw(8) << "diametr1" << setw(18) << "diametr2" << setw(17)
     <<"diametr3"<<setw (12) << setw (17) << "diametr4" << setw (15) << "Sechenie"
     << endl <<endl;
     int A;          // достаточная точность подбора
     if (s <= 1.6)
     A = 1000;
     if (s >=1.6)
     A = 100;
s = (floor (s * A + 0.5) / A)*A;
smin = floor ((s/4)/1.2);      // соизмеримые сечения
smax = floor ((s/4)*1.3);      // интервал значений
 
for (int i = smin; i <= smax; i += 1)
for (int j = smin; j <= smax; j += 1)
for (int k = smin;  k <= smax; k += 1)
for (int L = smin; L <= smax; L += 1)
for (int Sechenie = i;  Sechenie <= smax*4;  Sechenie += 1 ) // перебор всех заданных значений
 // вычисление сечения и 0 разницы и исключение парных значений типа (1+2)и (2+1)
if (((i+j+k+L) == Sechenie )&& ((s-(i+j+k +L)) == 0)&&(((i/2)-(j/2)-(k/2)-(L/2))<=0)&&
    ((((i/2)-(j/2))<=0)&&(((j/2)-(k/2))<=0))
    &&(((((i/2)-(j/2))<=0)&&(((j/2)-(k/2))<=0)&&(((j/2)-(L/2))<=0)&&(((k/2)-(L/2)<=0)))))
 
{    //вычисление диаметра заданной точности
    di= floor ((2*(sqrt (((double)i/A)/pi))) * 100 + 0.5) / 100;
    di1=floor ((2*(sqrt (((double)(i+1)/A)/pi))) * 100 + 0.5) / 100;
    dj =floor ((2*(sqrt (((double)j/A)/pi))) * 100 + 0.5) / 100;
    dj1 =floor ((2*(sqrt (((double)(j+1)/A)/pi))) * 100 + 0.5) / 100;
    dk =floor ((2*(sqrt (((double)k/A)/pi))) * 100 + 0.5) / 100;
    dk1 =floor ((2*(sqrt (((double)(k+1)/A)/pi))) * 100 + 0.5) / 100;
    dL =floor ((2*(sqrt (((double)L/A)/pi))) * 100 + 0.5) / 100;
    dL1 =floor ((2*(sqrt (((double)(L+1)/A)/pi))) * 100 + 0.5) / 100;
 
    if ((!(di1 != di)&&(dj1 != dj)&&(dk1 != dk)&&(dL1 != dL))) // исключение повторяющихся значений
                                                               //вывод результатов
    {
 
        cout << setw(7)<< di<< setw (10)<< setw (7)<<"+"<<setw (10)
             << dj << setw (13) << setw (7) <<"+" << setw (10)  << dk << setw (7)
             << "+" << setw (10)<< setw (10)<< dL <<setw (15) << setw (7)
             << "=" << setw (10)<<(double)Sechenie/A << endl;
    }
 
}
 
     return 0;
}
Код рабочий. Программа работает,но очень медленно.Я понимаю,что при таких числах и таком количестве итераций она и не будет работать быстрее.А если вложить еще 2 цикла.Наверное это не самый лучший вариант но ничего другого на ум не приходит.С функциями и массивами я еще не разобрался.Подскажите кто может код или хотя бы идею.
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 02:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вложенные циклы. Вычислить суммарное сечение и эквивалентную замену проводов (код внутри) (C++):

Вложенные циклы. Переход внутри циклов - C++
Здравствуйте.Вопрос такой.У меня в программе в одной из функции есть поиск значения путём перебора с помощью циклов.Как мне если значение...

Вложенные циклы (вычислить значение g) - C++
Незнаю как решить задачу в С++. Помоготе плизззз..... :) Необходимо вычислить значение g = f (x, z), где оба параметра...

Вложенные циклы: вычислить сумму ряда - C++
Здравствуйте. Помогите пожалуйста составить.

Вычислить сумму ряда по формуле (для решения задачи использовать вложенные циклы) - C++
Задано натуральное n. Вычислить сумму. Нужна ваша помощь, прошу, если не сложно

Вложенные циклы - C++
Написать программу которая выводит рисунок * ** * * **** с помощью вложенных циклов

Вложенные циклы for - C++
По учебной необходимости приступил к изучению C++, ранее пользовался только паскалем, и то это было давно и неправда не могу понять,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2012, 02:04
Привет! Вот еще темы с ответами:

Вложенные циклы - C++
Объясните новичку, в чем разница? Дело в том, что если записывать вложенный цикл в фигурные скобки: for(int d=0; d&lt;y; d++){ ...

вложенные циклы - C++
вывод на экран натуральных чисел лежащих в интервале и делящихся нацело на 5

Вложенные циклы - C++
Не совсем понимаю работу вложенных циклов. Объясните пожалуйста следующее. Инструкция myArr=myArr; myArr=min; относится инструкцией...

Вложенные циклы. - C++
Условие: Дано натуральное число n. Получить все натуральные числа, меньшие n и взаимно простых с ним. Взаимно простыми числами называются...


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

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

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