Забор Что можно написать на заборе? Да все, что угодно!
Ответить
  Опции темы Опции просмотра
Помогите решить задачу используя Excell | by Grisha_T34
Непрочитано 04.06.2010, 14:31   # 1
Shlisselburg Style
 
Аватар для Grisha_T34
 
Регистрация: 10.01.2003
Адрес: Шлиссельбург> Санкт-Петербург> Нарва
Возраст: 38
Сообщений: 4,394
Записей в дневнике: 22
Байк: Adamant A1 2006 Short\Chris King Pink\XTR\Middleburn
Отправить сообщение для Grisha_T34 с помощью ICQ
Grisha_T34 вне форума
ммм. а то что ты на си сделаешь как потом можно будет использовать??? (извесное число бывает разным)=(a/b)*(c/d)

ну а так нужно что бы с извесным чилом наш подбор совпадал до 5 знака после запятой

вот числа 23 24 25(2шт) 30 35 36 37 40 41 43 45 47 48 50 53 54(2шт) 55 58 59 60 61 62 65 66 67 70 71 72 73 74 75 78 79 80 81 83 84 85 86 89 90 92 94 97 99 100

числа не доджны повторяться в одном выражении за исключением тех которых подписано что 2 шт

ну и a<b c<d больше условий нет
Цитата
Непрочитано 04.06.2010, 15:07   # 2
 
Аватар для egblob
 
Регистрация: 31.01.2007
Адрес: Новосибирск
Сообщений: 2,834
Записей в дневнике: 5
egblob вне форума
Цитата:
Сообщение от Grisha_T34 Посмотреть сообщение
ммм. а то что ты на си сделаешь как потом можно будет использовать??? (извесное число бывает разным)=(a/b)*(c/d)

ну а так нужно что бы с извесным чилом наш подбор совпадал до 5 знака после запятой

вот числа 23 24 25(2шт) 30 35 36 37 40 41 43 45 47 48 50 53 54(2шт) 55 58 59 60 61 62 65 66 67 70 71 72 73 74 75 78 79 80 81 83 84 85 86 89 90 92 94 97 99 100

числа не доджны повторяться в одном выражении за исключением тех которых подписано что 2 шт

ну и a<b c<d больше условий нет
Ну прога будет, задаешь туда число, она тебе лучший вариант. 5-й знак не проблема, если такое сочетание в принципе возможно. Будет выбираться самое близкое значение.
Щас наколбашу.)
Цитата
Непрочитано 04.06.2010, 16:50   # 3
 
Аватар для egblob
 
Регистрация: 31.01.2007
Адрес: Новосибирск
Сообщений: 2,834
Записей в дневнике: 5
egblob вне форума
Вот такой код. Без особых хитростей. Любой компилятор должен собрать.
Gear gears[] = {{23, 1}, {24, 1},...} - это, как можно догадаться, число зубов и количество таких колес. Если захочешь добавить еще элементов, следи, чтобы числа зубов шли по возрастанию, это важно.
Различия с твоим примером в 7 знаке после запятой вылезли из-за ошибок округления похоже, быстро победить не получилось че-то.
Особо не тестил, но вроде как работает.

Код:
#include <conio.h>
#include <math.h>
#include <iostream>

struct Gear
{
    int teeth;
    int amount;
};


int main(int argc, char *argv[])
{
    Gear gears[] =
    {{23, 1}, {24, 1}, {25, 2}, {30, 1}, {35, 1}, {36, 1}, {37, 1}, {40, 1}, {41, 1}, {43, 1},
     {45, 1}, {47, 1}, {48, 1}, {50, 1}, {53, 1}, {54, 2}, {55, 1}, {58, 1}, {59, 1}, {60, 1},
     {61, 1}, {62, 1}, {65, 1}, {66, 1}, {67, 1}, {70, 1}, {71, 1}, {72, 1}, {73, 1}, {74, 1},
     {75, 1}, {78, 1}, {79, 1}, {80, 1}, {81, 1}, {83, 1}, {84, 1}, {85, 1}, {86, 1}, {89, 1},
     {90, 1}, {92, 1}, {94, 1}, {97, 1}, {99, 1}, {100, 1}};

    double dif = 100.0;
    double val;
    int res[4];

    std::cout << "Enter value ";
    std::cin >> val;

    for (int a = 0; a < sizeof(gears)/sizeof(Gear); a++)
    {
        gears[a].amount--;
        for (int b = a + 1; b < sizeof(gears)/sizeof(Gear); b++)
        {
            if(!gears[b].amount)
                continue;
            gears[b].amount--;
            for (int c = 0; c < sizeof(gears)/sizeof(Gear); c++)
            {
                if(!gears[c].amount)
                    continue;
                gears[c].amount--;
                for (int d =  c + 1; d < sizeof(gears)/sizeof(Gear); d++)
                {
                    if(!gears[d].amount)
                        continue;
                    double buf = fabs((double)gears[a].teeth / gears[b].teeth * gears[c].teeth / gears[d].teeth - val);
                    if(dif > buf)
                    {
                        dif = buf;
                        res[0] = gears[a].teeth;
                        res[1] = gears[b].teeth;
                        res[2] = gears[c].teeth;
                        res[3] = gears[d].teeth;
                    }
                }
                gears[c].amount++;
            }
            gears[b].amount++;
        }
        gears[a].amount++;
    }

    std::cout << "a = " << res[0] << "; b = " << res[1] << "; c = " << res[2] << "; d = " << res[3] << "; Ratio = " << (double)res[0]/res[1]*res[2]/res[3] << ".";

    getch();
}
Цитата
Помогите решить задачу используя Excell | by Grisha_T34
Ответить


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 12:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot