Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 938 • Страница 33 из 47<  1 ... 30  31  32  33  34  35  36 ... 47  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 13.09.2006
Откуда: Москва
Здравствуйте. Вот заданьице: http://rolex0.narod.ru/excel.htm
Ну насчет режимов это я понял. А вот как заполнить плату не могу сообразить :(. Пытался все через "ЕСЛИ()" сделать, так оно больше 7 вложений не поддерживает (мне-то 12 нужно). Кто знает как сделать подскажите пожалуйста.
Вот в экселевском формате http://rolex0.narod.ru/itog.xls



Партнер
 

Member
Статус: Не в сети
Регистрация: 23.07.2005
Откуда: Екатеринбург
Маюсь уже месяц. Надо написать на С++:
Имеется набор предметов, для каждого из которых указаны его название, вес и стоимость. Требуется составить набор с наибольшей суммарной стоимостью и весом, не превышающим заданного ограничения.
(консольное приложение)


 

Member
Статус: Не в сети
Регистрация: 08.07.2003
Откуда: Новосибирск
LikvidatorMax
Цитата:
Маюсь уже месяц. Надо написать на С++:

Не верю.
Вычисляешь коэффициенты для каждого предмета: P/W (P - цена, W - вес), сортируешь массив/список по коэффициентам, суммируешь позиции с максимальными до истечения лимита веса.

_________________
Иных уж нет, а тех - долечим...


 

Junior
Статус: Не в сети
Регистрация: 05.10.2007
Откуда: Москва
VISUAL BASIC 6.0! ПоМоГиТе плийз!....

Вот есть:
s2=3,5

есть массив
DIM y(14)
x=4
for i=1 to 14 step 1
y(i)=x
x=x+2
next i


как сделать так, чтобы мне из этого массива прога выбирала Ближайшее число, которе было бы больше, чем S2, то есть больше чем 3.5.
Массив создала с целью, чтобы были числа 4,6,8,10....30, как вы поняли уже.

Поможете? :)

_________________
Я обновила свой комп! УРА! :)))
В профиле подробности!


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Dim s3 as integer
s3 = s2
for i=1 to 14 step 1
if ((s3 = s2) and (y(i) > s2)) or ((s3 > s2) and (y(i) > s2) and (y(i) < s3)) then
s3 = y(i)
end if
next i

Если s3 = s2, то значит чисел больше, чем s2 в массиве и не было. Это так, быстрое решение, самое первое что пришло на ум.


 

Member
Статус: Не в сети
Регистрация: 23.07.2005
Откуда: Екатеринбург
SEKTOR
Я так и сделал. Это был первый вариант. Но мне сказали что это не правильно, и премнимо только для тех объектов, которые можно разделить.
И привели примеры. Действительно не работает в данной задаче это. Нужно что-то другое.[/b]


 

Member
Статус: Не в сети
Регистрация: 08.07.2003
Откуда: Новосибирск
Либо ты, либо они чего-то не поняли. Никто никакие товары не делит. Вычисляются коэффициенты, зависящие напрямую от веса и цены. Приведи примеры, которые не работают.

_________________
Иных уж нет, а тех - долечим...


 

Member
Статус: Не в сети
Регистрация: 23.07.2005
Откуда: Екатеринбург
Ну вот напрмер:
Стул вес-2 стоимость-200 отношение 100
Стол вес-3 стоимость-250 отношение примерно 83
Ограничение - 3.
Ведь твой алгоритм выберет "стул", так как у него коэффициент лучше. А надо "стол"
Вот такой вот пример


 

Member
Статус: Не в сети
Регистрация: 08.07.2003
Откуда: Новосибирск
LikvidatorMax Хорошо, если имеет место частный случай (это, если не ошибаюсь, единственное исключение) и набор может состоять максимум из одного предмета - из числа предметов с максимально допустимым весом ищешь предмет с максимальной ценой.

_________________
Иных уж нет, а тех - долечим...


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
LikvidatorMax
Если честно, то не понял твоего задания. Что значит с наибольшей суммарной стоимостью? Понимаю, если бы было несколько наборов и комбинаций, но ты выбираешь из одного набора. Может быть просто с максимальной стоимостью? Поясни.


 

ПОМОГИТЕ!!!!
Скоро зашита курсака по ассемблер :grob:, а у меня его нет :weep:
Если вдруг у кого есть помогите мне пожалуйста


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Corpse89
Там посмотри:
http://www.wasm.ru


 

Member
Статус: Не в сети
Регистрация: 23.07.2005
Откуда: Екатеринбург
sashar2
Хм. Вроде все ясно. Пользователь вводит имя вещи, ее вес, стоимость. Вещей несколько. Надо собрать из них такой набор, чтоб уложиться в вес определенный и при таком весе набрать максимальную общую стоимость вещей.

SEKTOR
Я сделал. Но... все равно не приняли.
Дали подсказку- сделать перебором всех комбинаций. Но как?


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
LikvidatorMax
Теперь всё ясно, если останется время - напишу.
Добавлено спустя 1 час, 13 минут, 9 секунд
LikvidatorMax писал(а):
sashar2
Хм. Вроде все ясно. Пользователь вводит имя вещи, ее вес, стоимость. Вещей несколько. Надо собрать из них такой набор, чтоб уложиться в вес определенный и при таком весе набрать максимальную общую стоимость вещей.

SEKTOR
Я сделал. Но... все равно не приняли.
Дали подсказку- сделать перебором всех комбинаций. Но как?


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

Код:
#include <iostream>
#include <fstream>
#include <string.h>
#include <windows.h>

using namespace std;

const int ITEMS_COUNT = 3;
const double MAX_WEIGHT = 100;

struct
{
 string Name;
 double Weight;
 double Cost;

} typedef Item;

//функция проверяет есть ли в списке повторяющиеся элементы, такого в данной задаче быть не может
bool listValid(int *temp)
{
  for (int i = 0, count = 0; i < ITEMS_COUNT; i++)
  {
    count = 0;
    for (int j = 0; j < ITEMS_COUNT; j++)
    {
      if (temp[j] == temp[i])
        count++;
    }
    if (count > 1)
      return false;
  }
  return true;
}

//находит сумму у предметов в данной расстановке на максимальную сумму
void getSum(Item *items, int *temp, double &tempSum)
{
  double sum = 0;
  double w = 0;
  for (int i = 0; i < ITEMS_COUNT && w < MAX_WEIGHT; i++)
  {
    w += items[temp[i]].Weight;
    if (w < MAX_WEIGHT)
      sum += items[temp[i]].Cost;
    else
      break;
  }
  tempSum = sum;
}

//получаем следующую комбинацию
void NextList(int *temp)
{
  temp[0]++;
  for (int i = 0; i < ITEMS_COUNT; i++)
  {
    if (temp[i] >= ITEMS_COUNT)
    {
      temp[i] = 0;
      temp[i+1]++;
    }
  }
}

//проверяем перебрали ли все варианты
bool ok(int *temp)
{
  for (int i = 0; i < ITEMS_COUNT; i++)
    if (temp[i] != ITEMS_COUNT - 1)
      return true;
  return false;
}

int main()
{
  //инициализация
 srand(GetTickCount());
 Item *items = new Item[ITEMS_COUNT];
 int *temp = new int[ITEMS_COUNT];
 int *result = new int[ITEMS_COUNT];
 double tempSum = 0;
 double resultSum = 0;
 for (int i = 0; i < ITEMS_COUNT; i++)
 {
   items[i].Name = "Item name";
   items[i].Weight = rand()%100;
   items[i].Cost = rand()%1000;
   temp[i] = -1;
   result[i] = -1;
 }
 //
 //Само решение
 while (ok(temp))
 {
   if (listValid(temp))
    getSum(items, temp, tempSum);
   if (tempSum > resultSum)
   {
     double w = 0;
     for (int i = 0; i < ITEMS_COUNT; i++)
     {     
       w += items[temp[i]].Weight;
       if (w < MAX_WEIGHT)
        result[i] = temp[i];
       else
        result[i] = -1;
     }
     resultSum = tempSum;
   }
   NextList(temp);
 }
//Вывод данных
  for (int i = 0; i < ITEMS_COUNT; i++)
     cout << items[i].Cost  << "=" << items[i].Weight << " ";
  cout << endl;

  for (int i = 0; i < ITEMS_COUNT; i++)
     cout << result[i] << " ";
  cout << endl;
  cout << resultSum << endl;
  cin >> resultSum;
//
//Очистка памяти
 delete[] items;
 delete[] temp;
 delete[] result;
 return 0;
}


 

Junior
Статус: Не в сети
Регистрация: 05.10.2007
Откуда: Москва
sashar2
sashar2 писал(а):
Dim s3 as integers3 = s2for i=1 to 14 step 1if ((s3 = s2) and (y(i) > s2)) or ((s3 > s2) and (y(i) > s2) and (y(i) < s3)) thens3 = y(i)end ifnext i

Если s3 = s2, то значит чисел больше, чем s2 в массиве и не было. Это так, быстрое решение, самое первое что пришло на ум.

Что-то я не поняла... прямо так все написать, как ты написал, и заработает?
А как же тот факт, что ряд чисел: 4, 6, 8, 10.... 30.
Где ты его указываешь, в какой строчке?
То есть если использовать твой код, у меня s2=3.5 допустим. Тогда он будет выбирать S3=4 ?
Просто мне надо быть 100% уверенной, что код работает, чтобы не обламаться.
Можешь проверить на своем компе, а то у меня Visual Basic 6.0 нету на компе, да и в нете его негде скачать!
Пасиба заранее за помощь! :oops:

_________________
Я обновила свой комп! УРА! :)))
В профиле подробности!


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Анжелика
Я написал ту часть, которая отвечает этим словам:
Анжелика писал(а):
как сделать так, чтобы мне из этого массива прога выбирала Ближайшее число, которе было бы больше, чем S2, то есть больше чем 3.5.
Массив создала с целью, чтобы были числа 4,6,8,10....30, как вы поняли уже.

Т.е мой код нужно написать после уже имеющегося.
Проверить к сожалению не могу т.к у меня нету vb 6.0. Стоит только 2005 и 2008 студии. Еще и шестую ставить неохота.


 

Member
Статус: Не в сети
Регистрация: 30.01.2007
Откуда: Москва
Народ, помогите плиз написать пару программ на Visual Basic 6.0

1. Массивы

Написать программу, вычисляющую кол-во студентов в группе, чей рост привышает средний.

(Типа вводишь любые фамилии и рост человека в левый "столбец", а в правый "столбец" программа выводит людей, у которых рост выше 180см)

2. Процедуры и функции.

Написать программу, которая выводит таблицу значений функций y=(-2,4x^2)+5x-3



Если можно со скриншотами. :roll:
ИМХО матерый прогер это за 5мин сделает...а мне неделю сидеть(((

_________________
"Стреляй мне в сердце, если веришь в силу смерти, только вот смотри не промахнись во избежание мести…" ©


 

Member
Статус: Не в сети
Регистрация: 08.07.2003
Откуда: Новосибирск
Sp3ct3r Что вызывает затруднения...?

_________________
Иных уж нет, а тех - долечим...


 

Member
Статус: Не в сети
Регистрация: 30.01.2007
Откуда: Москва
SEKTOR

впринципе всё - "от А до Я"

У нас лабы по VB были типа заходит в аудиторию 25человек за 8 компов...и тупо перепечатывает код программ в кнопки интерфейса...а теперь курсач задали и крутись как хочешь...:writer:


Хотелось бы, чтоб расписали код программ, желательно со скринами интерфейса...Если бы выложили сами программы, то вообще бы шикарно было... :oops:

_________________
"Стреляй мне в сердце, если веришь в силу смерти, только вот смотри не промахнись во избежание мести…" ©


 

Member
Статус: Не в сети
Регистрация: 08.06.2007
Откуда: нижнекамск
Помогите решить задания по информатике
Записать на языке Турбо Паскаль
1. 3-tg7.3+8.9/cos2.8
2. sin4-кор 2.59/ln13.57


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 938 • Страница 33 из 47<  1 ... 30  31  32  33  34  35  36 ... 47  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan