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

Составить из резисторов цепь соединения - C++

Восстановить пароль Регистрация
 
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
25.02.2012, 00:00     Составить из резисторов цепь соединения #1
Помогите с задачкой пожалуйста с написание програмгного кода
Дано N резисторов различных номиналов. Необходимо выбрать
несколько резисторов и составить из них цепь последовательного
соединения, сопротивление которой наиболее близко к
заданному. (задать произвольное)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 00:00     Составить из резисторов цепь соединения
Посмотрите здесь:

C++ Написать функцию, которая вычисляет сопротивление двух резисторов
Написать функцию, которая вычисляет сопротивление двух резисторов C++
C++ Цепь из двух резисторов
C++ 5. Написать функцию, которая вычисляет сопротивление цепи, состоящей из двух резисторов
C++ Написать программу по расчету общего сопротивления цепочки резисторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
25.02.2012, 01:22     Составить из резисторов цепь соединения #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
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main() {
 
       int resist[]={ 8, 2, 11, 10, 60, 50 };
       const int value = 22;
 
       int count = 6, eps=value; 
       int mirror[6]={0,0,0,0,0,0};
       for ( int n = 0; n <= pow( 2, count ); n++ ) {
               
            int sum = 0;
            for ( int i = 0; i < count; i++ ) sum += mirror[i]*resist[i];
                
        
        if ( abs(sum-value) < eps ) {
        eps=abs(sum-value);
        cout << "Результат: ";
             for ( int i = 0; i < count; i++ ) 
                if ( mirror[i] == 1 ) cout << resist[i]  <<  "  ";
                cout << endl;
        }
        
 
        for ( int i = 0; i < count; i++ ) {
             if ( i > 0 ) {
             mirror[i - 1] = 0;
             }
             if ( mirror[i] == 0 ) {
             mirror[i] = 1;
             break;
            }
       }
    }
}
Если что, завтра до ума можно довести
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
25.02.2012, 13:42  [ТС]     Составить из резисторов цепь соединения #3
Цитата Сообщение от renald Посмотреть сообщение
взял отсюда Сумма элементов массива
Немного переделал, последняя выводимая строка - есть решение
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
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main() {
 
       int resist[]={ 8, 2, 11, 10, 60, 50 };
       const int value = 22;
 
       int count = 6, eps=value; 
       int mirror[6]={0,0,0,0,0,0};
       for ( int n = 0; n <= pow( 2, count ); n++ ) {
               
            int sum = 0;
            for ( int i = 0; i < count; i++ ) sum += mirror[i]*resist[i];
                
        
        if ( abs(sum-value) < eps ) {
        eps=abs(sum-value);
        cout << "Результат: ";
             for ( int i = 0; i < count; i++ ) 
                if ( mirror[i] == 1 ) cout << resist[i]  <<  "  ";
                cout << endl;
        }
        
 
        for ( int i = 0; i < count; i++ ) {
             if ( i > 0 ) {
             mirror[i - 1] = 0;
             }
             if ( mirror[i] == 0 ) {
             mirror[i] = 1;
             break;
            }
       }
    }
}
Если что, завтра до ума можно довести
Поможешь?
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
25.02.2012, 20:06     Составить из резисторов цепь соединения #4
Чем помочь?
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
25.02.2012, 20:37  [ТС]     Составить из резисторов цепь соединения #5
Цитата Сообщение от renald Посмотреть сообщение
Чем помочь?
Довести до ума
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
25.02.2012, 21:44     Составить из резисторов цепь соединения #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
#include <cmath>
#include <vector>
#include <cstdlib>
#include <sstream>
#include <iostream>
using namespace std;
 
int main() {
 
       vector<int> resist;
        int count;
        stringstream result;
       cout << "Введите кол. резисторов "; cin >>  count;
       for (int i=0; i<count; i++) {
       static int r;
       cout << "Введите сопротивление резистора " << i+1 << " - "; cin >> r;
       resist.push_back(r);
       }
       int value;
       cout << "Введите общее сопротивление "; cin >>  value;
       cout << endl;
 
       int eps=value; 
       vector<int> mirror; mirror.assign(count,0);
       for ( int n = 0; n <= pow( 2, count ); n++ ) {
               
            int sum = 0;
            for ( int i = 0; i < count; i++ ) sum += mirror[i]*resist[i];
                
        
        if ( abs(sum-value) < eps ) {
        eps=abs(sum-value);
        result.str("");
        result << "Результат: ";
             for ( int i = 0; i < count; i++ ) 
                if ( mirror[i] == 1 ) result << resist[i]  <<  "  ";
                result << endl;
        }
        
 
        for ( int i = 0; i < count; i++ ) {
             if ( i > 0 ) {
             mirror[i - 1] = 0;
             }
             if ( mirror[i] == 0 ) {
             mirror[i] = 1;
             break;
            }
       }
    }
cout << result.rdbuf();
}
Yandex
Объявления
25.02.2012, 21:44     Составить из резисторов цепь соединения
Ответ Создать тему
Опции темы

Текущее время: 13:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru