imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
задача по сортировке.помогите
доброго времени суток. помогите пожалуйста мне, дурачку, решить задачу. суть: имеется 5-ти ступенчатый карданный вал и картер к нему. между картером и валом 5 пар вкладышей-верхних и нижних. нужно автоматизировать подбор этих вкладышей, чтобы износ был минимальный (грубо говоря-чтобы в размер зазора между картером и валом идеально вписывался вкладыш). [если по рисунку-чтобы (для 1-й опоры вала) 3 и 4 идеально вписывались в зазор]. верхний и нижний - разные массивы. размеры все вводим с клавы. в с++ или паскале. очень прошу,-выручите. обещаю выучить как сдам. чес слово
ps:для того чтобы было понятно-есть куча вкладышей. как подобрать именно тот, чтобы он идеально подходил куда нужно.размеры брать примерные,исходя из чертежа. мне главное понять сам алгоритм сортировки(вводим все данные и программа выбирает именно тот вкладыш, который подходит в зазор).заранее благодарен |
![]() |
# 2 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
сортировки там и близко нет... короче, лови код (на Java, правда, но перевести в С++ проблем не будет), разбирайся...
Код:
package test; public class Task { final int SIZE = 5; float[] karters = { 100, 102, 103, 101, 105 }; float[] vals = { 95, 92, 90, 98, 90 }; float[] vtulkaV = { 2, 5, 3, 7, 1 }; float[] vtulkaN = { 4, 2, 3, 6, 1 }; float[][] matrix = new float[SIZE][SIZE]; public static void main(String[] args) { Task t = new Task(); t.init(); float min; int minV, minN; for (int i = 0; i < t.SIZE; i++) { min = Float.MAX_VALUE; minV = minN = -1; float zazor = t.karters[i] - t.vals[i]; for (int iV = 0; iV < t.SIZE; iV++) for (int iN = 0; iN < t.SIZE; iN++) if (zazor - t.matrix[iV][iN] >= 0 && zazor - t.matrix[iV][iN] < min) { min = zazor - t.matrix[iV][iN]; minV = iV; minN = iN; } if (min != Float.MAX_VALUE) { System.out.println( i + ". Картер = " + t.karters[i] + ", вал = " + t.vals[i] + ", лучшая пара (В/Н): " + minV + "/" + minN + "(" + t.vtulkaV[minV] + "+" + t.vtulkaN[minN] + ")" + ", зазор = " + min); } } } public void init() { for (int iV = 0; iV < SIZE; iV++) for (int iN = 0; iN < SIZE; iN++) matrix[iV][iN] = vtulkaV[iV] + vtulkaN[iN]; } } Код:
0. Картер = 100.0, вал = 95.0, лучшая пара (В/Н): 0/2(2.0+3.0), зазор = 0.0 1. Картер = 102.0, вал = 92.0, лучшая пара (В/Н): 3/2(7.0+3.0), зазор = 0.0 2. Картер = 103.0, вал = 90.0, лучшая пара (В/Н): 3/3(7.0+6.0), зазор = 0.0 3. Картер = 101.0, вал = 98.0, лучшая пара (В/Н): 0/4(2.0+1.0), зазор = 0.0 4. Картер = 105.0, вал = 90.0, лучшая пара (В/Н): 3/3(7.0+6.0), зазор = 2.0
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |
![]() |
# 3 |
Guest
Сообщения: n/a
|
BorLase, большое человеческое спасибо. единственный вопрос-если я вкладышей введу не 5, а больше-программа работать будет?
добавлено через 1 минуту а вот еще-когда выдает ответ по лучшей паре, как учесть что один вкладыш можно только один раз использовать, т.е. как исключить повторения? и почему при расчете зазора мы суммируем верхний и нижний вкладыши,один же устанавливается наверх, другой вниз, т.е. если зазор 13 то при установке вкладыша верхнего 7 и ниженего 6,-зазор будет 6 и 7 сответственно? заранее благодарен Последний раз редактировалось 1000tur; 10.06.2010 в 17:04. |
![]() |
# 4 | ||
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
работать будет, но оперировать будет только первыми пятью
![]() т.е. если количество вкладышей будет произвольным - тогда тебе понадобятся отдельные константы для циклов и таблицы matrix (а не единая t.SIZE). Код:
for (int iV = 0; iV < t.SIZE; iV++) for (int iN = 0; iN < t.SIZE; iN++) Цитата:
Цитата:
![]()
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
||
![]() |
![]() |
# 6 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
почему суммируется "их зазор"? суммируется их толщина
=============== насколько я понимаю - есть картер с дыркой, к примеру, 15; вал - 10. вкладыши устанавливаются вокруг вала - один сверху, другой снизу мы должны подобрать пару вкладышей так, чтобы зазор был нулевым - т.е. толщина верхнего + нижнего должны давать в сумме 5 собственно, именно это задача и делает
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |
![]() |
# 7 |
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Если сверху и снизу только по одному вкладышу, тогда
void init() тебе вообще ненужен. этот код убери for (int iV = 0; iV < t.SIZE; iV++) ... minV = iV; minN = iN; } заместо него поставь этот : for (int iV = 0; iV < t.SIZE; iV++) if (zazor - t.vtulkaV[iV] >= 0 && zazor - t.vtulkaV[iV] < min) { min = zazor - t.vtulkaV[iV]; minV = iV; } for (int iN = 0; iN < t.SIZE; iN++) if (zazor - t.vtulkaN[iN] >= 0 && zazor - t.vtulkaN[iN] < min2) { min2 = zazor - t.vtulkaN[iN]; minN = iN; } min2 определить также как min. Код не проверял но должно получиться примерно так. Это если суммировать ненужно. Последний раз редактировалось EvroStandart; 11.06.2010 в 12:05. |
![]() |
![]() |
# 8 |
::VIP::
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
EvroStandart, ты забыл добавить еще выбор меньшего из min и min2
но, вообще, исходя из рисунка и здравого смысла - должна подбираться пара
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people. |
![]() |