Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
#1

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

25.02.2012, 00:00. Просмотров 659. Ответов 5
Метки нет (Все метки)

Помогите с задачкой пожалуйста с написание програмгного кода
Дано N резисторов различных номиналов. Необходимо выбрать
несколько резисторов и составить из них цепь последовательного
соединения, сопротивление которой наиболее близко к
заданному. (задать произвольное)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 00:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Составить из резисторов цепь соединения (C++):

Цепь из двух резисторов
Написать программу вычисления сопротивления электрической цепи, состоящей из...

Собрать цепь с общим сопротивлением 1 Ом, используя 9 резисторов по 2 Ом
В общем-то всё сказано в заголовке темы. Необходимо собрать цепь с общим...

Сложные соединения резисторов
Сопротивления R1 = R2 = R3 = R4 = R5 = R6 = 10 Ом, остальные 2R. Напряжение...

Не получается схема соединения резисторов
Не получается, ищу помощи

Нужно подобрать необходимые резисторы для соединения их в электрическую цепь с заданным сопротивлением
Ребят помогите нужно подобрать необходимые резисторы для соединения их в...

Составить цепь
Добрый вечер, не могу состовить цепь из 4-х ветвей и 3-х узлов, обхясните...

5
renald
35 / 35 / 8
Регистрация: 11.02.2012
Сообщений: 105
25.02.2012, 01:22 #2
взял отсюда http://www.cyberforum.ru/csharp-begi...ml#post2037777
Немного переделал, последняя выводимая строка - есть решение
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;
            }
       }
    }
}
Если что, завтра до ума можно довести
1
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
25.02.2012, 13:42  [ТС] #3
Цитата Сообщение от renald Посмотреть сообщение
взял отсюда http://www.cyberforum.ru/csharp-begi...ml#post2037777
Немного переделал, последняя выводимая строка - есть решение
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;
            }
       }
    }
}
Если что, завтра до ума можно довести
Поможешь?
0
renald
35 / 35 / 8
Регистрация: 11.02.2012
Сообщений: 105
25.02.2012, 20:06 #4
Чем помочь?
1
sacreden
1 / 1 / 0
Регистрация: 24.02.2012
Сообщений: 28
25.02.2012, 20:37  [ТС] #5
Цитата Сообщение от renald Посмотреть сообщение
Чем помочь?
Довести до ума
0
renald
35 / 35 / 8
Регистрация: 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();
}
0
25.02.2012, 21:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 21:44
Привет! Вот еще темы с решениями:

СМА ARDO модуль Arcadia опознать номинал резисторов, Нужна помощ определить номинал резисторов
Резисторы выделены красными точками на фото. ...

Невозможно подключиться к базе данных. Как правильно составить строку соединения
что-то со строкой подключения не правильно выбрасывает ошибку &quot;При...

Имя соединения 'LocalSqlServer' не было найдено в конфигурации приложений или строка соединения пуста
Добрый день, форумчане. У меня такая проблема: решили поставить в конторе...

Ошибка "ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения закрыто. "
using System; using System.Collections.Generic; using System.Linq; using...


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

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

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