Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
1

Вывести варианты подключения обмоток

16.07.2014, 17:36. Показов 515. Ответов 6
Метки нет (Все метки)

Есть такая практическая задача, которую приходится решать руками. Вот подумал может получится ее упростить.

Итак есть вторичная обмотка трансформатора. Она может состоять из нескольких полуобмоток.
Количество полуобмоток от 1 до 5.
Количество выводов на полуобмотке от 2х до 9и.
Между двумя выводами каждой полуобмотки имеется напряжение. В зависимости от типа трансформатора они естественно разные.
Задача вывести список всех возможных напряжений и то как получить такое напряжение т.е. вывести какие выводы должны быть задействованы и какие перемычки.

Вот пример вторичной обмотки:
Вывести варианты подключения обмоток

Например если подключиться к выводам II1 и III3, а также включить перемычку (II4-III1) то получим напряжение 17,6В (максимально возможное на данном тр-ре).

К задаче не знаю даже как подступиться... Помогите пожалуйста с алгоритмом.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2014, 17:36
Ответы с готовыми решениями:

Какие существуют варианты подключения БД
Всем Доброго времени суток!! Такой собственно вопрос: есть ...

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

BA56-11EWA. Варианты подключения
Помогите подобрать контроллер под данный индикатор. Что надо учесть? вот есть некоторые данные с...

Различные варианты подключения к Sybase
Доброго времени суток! Передо мной стоит вопрос: как я могу подключится к Sybase базе (стандартная...

6
30 / 24 / 5
Регистрация: 20.11.2013
Сообщений: 65
16.07.2014, 20:18 2
Итак, насколько я понял, вам дано напряжение между двумя выводами, так?
0
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
17.07.2014, 17:23  [ТС] 3
Да, все правильно

Добавлено через 10 минут
Пока думаю так. Разбиваю задачу на простые действия. Возьмем например случай когда одна обмотка. (т.к. с двумя и более можно еще и вычитать напряжения... алгоритм чутка усложняется)
1. Спрашиваем сколько выводов у обмотки. Помещаем в переменную число.
2. Просим ввести имена выводов. Цикл с помещением имен выводов в массив.
3. Просим ввести напряжения между выводами. Цикл с помещением в другой массив float
4. Выводим первые напряжения по сути которые ввели. Цикл с выводом массива пункта 3
5. Выводим напряжения уже складывая различные напряжения. Тут уже сложнее цикл:
-берем первый вывод и через 1. складываем напряжения и так инкрементом до последнего
-берем второй вывод и через 1. Складываем напряжения и так до последнего
все повторяем
6. В идеале это все поместить в массив каждую строку вида "Вывод II1-II4 = 12,1 В"
7. Отсортировать по напряжению все содержимое массива
8. Вывести массив.

Далее уже думать как применить 2, 3 обмотки.

Добавлено через 20 часов 44 минуты
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
int main(void)
{
 
int i,j,n;
 
int k_pObmot; //количество полуобмоток
char name_pObmot[10][10];// массив наименований полуобмоток
int k_vv[10]; //количество выводов полуобмотки
char name_vv[10][10];// массив наименований выводов
double napr_vv[10];// массив напряжений
double sum; // сумма напряжений
 
char name_perech[10][20] = {
        "первой",
        "второй",
        "третьей",
        "четвертой",
        "пятой",
        "шестой",
        "седьмой",
        "восьмой",
        "девятой",
};
 
setlocale(LC_ALL, "");
 
//__>>>__________________________________________________________________
    printf("Введите количество полуобмоток\n");
    scanf_s ("%d", &k_pObmot);
//__>>>__________________________________________________________________
for (n=0; n<k_pObmot; n++)
{
    printf("Введите наименование %s полуобмотки\n", &name_perech[n]);
    scanf_s ("%s", &name_pObmot, sizeof(name_pObmot)/sizeof(name_pObmot[0]));
//__>>>__________________________________________________________________
    printf("Введите количество выводов %s полуобмотки\n", &name_perech[n]);
    scanf_s ("%d", &k_vv[n]);
//__>>>__________________________________________________________________
        for (i=0; i<k_vv[n]; i++)
        {
        printf("\nВведите вывод %d %s полуобмотки\n", i+1,&name_perech[n]);//
        scanf_s ("%s", &name_vv[i], sizeof(name_vv)/sizeof(name_vv[0]));
        }
                
            for (i=0; i<k_vv[n]-1; i++)
            {
            printf("\nВведите напряжение между выводами %s - %s\n", name_vv[i], name_vv[i+1]);
            // заменять точку на запятую при вводе
            scanf_s ("%lf", &napr_vv[i]);
            }
 
                    //__________________________________________________________________
                    for (i=0; i<k_vv[n]-1; i++)
                    {
                    sum = napr_vv[i];
                    printf("U между выводами %s - %s = %4.2f В\n", name_vv[i], name_vv[i+1],sum);
                        for (j=i+1; j<k_vv[n]-1; j++)
                        {
                        sum = sum+napr_vv[j];
                        printf("U между выводами %s - %s = %4.2f В\n", name_vv[i], name_vv[j+1],sum);
                        }
 
    
                    }
 
}//n
_getch();
return 0;
}
Ну вот пока то, что наваял. Еще кучу чего не выводит, не объединяет перемычки, никаких проверок на ввод данных
0
OldFedor
17.07.2014, 17:41
  #4

Не по теме:

Не забудьте, что обмотки можно включать встречно.

0
193 / 173 / 30
Регистрация: 10.07.2012
Сообщений: 800
17.07.2014, 17:47 5
реально интересно было бы попробовать, но лично я даже школьные знания физики давно прознал. реально объяснить суть происходящего?
0
11 / 11 / 0
Регистрация: 16.09.2013
Сообщений: 75
18.07.2014, 10:13  [ТС] 6
Цитата Сообщение от OldFedor Посмотреть сообщение
Не по теме:
Не забудьте, что обмотки можно включать встречно.
Это по теме Я вкурсе конечно. Но это следующий этап сложностей...
Я что-то совсем неумею оказывается работать с массивами... Пока думаю загнать в массив то что выводит. Т.е. все напряжения по каждой полуобмотке. Потом надо уже думать как складывать напряжения если обмоток более чем две + показывать перемычку.

Добавлено через 15 часов 58 минут
Цитата Сообщение от salam Посмотреть сообщение
реально объяснить суть происходящего?
Да вроде ничиго сложного... если руками считать. Но вот если вопрос стоит подобрать нужное напряжение, то тут можно и посидеть...
0
1193 / 586 / 88
Регистрация: 20.09.2012
Сообщений: 1,877
18.07.2014, 19:39 7
Цитата Сообщение от Shoorup_SCBist Посмотреть сообщение
Задача вывести список всех возможных напряжений и то как получить такое напряжение т.е. вывести какие выводы должны быть задействованы и какие перемычки.
http://ideone.com/wFcIzq
Кликните здесь для просмотра всего текста
Код
let perms xs = 
    let distrib e L =
        let rec aux pre post = 
            seq {
                match post with
                | [] -> yield (L @ [e])
                | h::t -> yield (List.rev pre @ [e] @ post)
                          yield! aux (h::pre) t 
            }
        aux [] L
    let rec loop = function 
        | [] -> Seq.singleton []
        | h::t -> Seq.collect (distrib h) (loop t)
    loop xs


let solve xs = 
    let dxs = dict xs
    let yxs = seq {
        for var in perms xs do
            let row = var 
                      |> List.collect (fun (n,xs) -> xs |> List.mapi (fun i e -> (n, i + 1, i + 2, e)))
                      |> List.toArray
            let fname (a,x,_,_) = sprintf "%s%A" a x
            let lname (a,_,x,_) = sprintf "%s%A" a x

            yield! seq {
                for i = 0 to row.Length - 2 do
                    for k = i  to row.Length - 1 do
                        let pins = row.[i..k] 
                                   |> Seq.map (fun (a,_,_,_) -> a)
                                   |> Seq.distinct
                                   |> Seq.pairwise
                                   |> Seq.map (fun (a, b) -> sprintf "%s%A-%s%A" a (dxs.[a].Length + 1) b 1  )
                                   |> String.concat ", "
                        yield (fname row.[i]), (lname row.[k]), (row.[i..k] |> Seq.sumBy (fun (_,_,_,e)->e)), pins
                }
            }

    let xs = yxs 
             |> Seq.distinct 
             |> Seq.toArray
             |> Array.sortBy (fun (_,_,a,_) -> a) 
    printfn "    outputs   =   V\t jumper" 
    for (a,b,c,d) in xs do 
        printfn " %5s..%-5s = %A \t%s" a b c d



do
    let xs = [
        ("xx", [4.4; 7.7; 3.85])
        ("xxx", [1.1; 0.55])
    ]
    solve xs
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2014, 19:39

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Варианты подключения вентиляторов к блоку питания
Сразу хочу предупредить - криворуких прошу проходить мимо. Не нужно шаманить в системнике, если не...

Какие есть возможные варианты подключения к FireBird из Xamarin.Android?
Имеется компьютер с Windows + FireBird 2.5 + база данных Также имеется Android устройство...

Варианты значения атрибута "Data Source" в строке подключения
Доброго времени суток. Возникли небольшие трения с коллегами на тему: &quot;какое значение лучше...

Вывести все варианты расстановок
Доброго времени суток, прошу помочь мне с моим заданием (прикрепила его во вложении). Собственно, в...

Вывести варианты построения рельс
Задаем длины рельс, и расстояние а программа выводит варианты для построния. если ввводим...

Вывести все возможные варианты перестановок от 1 до n
Здравствуйте, у меня есть массив чисел от 1 до n, нужно чтобы выводились все возможные варианты...


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

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

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