imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 09.06.2010, 11:46     # 1
1000tur
Guest
 
Сообщения: n/a

задача по сортировке.помогите

доброго времени суток. помогите пожалуйста мне, дурачку, решить задачу. суть: имеется 5-ти ступенчатый карданный вал и картер к нему. между картером и валом 5 пар вкладышей-верхних и нижних. нужно автоматизировать подбор этих вкладышей, чтобы износ был минимальный (грубо говоря-чтобы в размер зазора между картером и валом идеально вписывался вкладыш). [если по рисунку-чтобы (для 1-й опоры вала) 3 и 4 идеально вписывались в зазор]. верхний и нижний - разные массивы. размеры все вводим с клавы. в с++ или паскале. очень прошу,-выручите. обещаю выучить как сдам. чес слово
ps:для того чтобы было понятно-есть куча вкладышей. как подобрать именно тот, чтобы он идеально подходил куда нужно.размеры брать примерные,исходя из чертежа. мне главное понять сам алгоритм сортировки(вводим все данные и программа выбирает именно тот вкладыш, который подходит в зазор).заранее благодарен
Изображения
Тип файла: jpg Рис2[1]. RRRfrw.jpg (61.5 Кбайт, 21 просмотров - Кто скачивал? )
 
Старый 10.06.2010, 13:18     # 2
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
сортировки там и близко нет... короче, лови код (на 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.
BorLase вне форума  
Старый 10.06.2010, 17:00     # 3
1000tur
Guest
 
Сообщения: n/a

BorLase, большое человеческое спасибо. единственный вопрос-если я вкладышей введу не 5, а больше-программа работать будет?

добавлено через 1 минуту
а вот еще-когда выдает ответ по лучшей паре, как учесть что один вкладыш можно только один раз использовать, т.е. как исключить повторения? и почему при расчете зазора мы суммируем верхний и нижний вкладыши,один же устанавливается наверх, другой вниз, т.е. если зазор 13 то при установке вкладыша верхнего 7 и ниженего 6,-зазор будет 6 и 7 сответственно? заранее благодарен

Последний раз редактировалось 1000tur; 10.06.2010 в 17:04.
 
Старый 10.06.2010, 19:12     # 4
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
Цитата:
Сообщение от 1000tur Посмотреть сообщение
если я вкладышей введу не 5, а больше-программа работать будет?
работать будет, но оперировать будет только первыми пятью

т.е. если количество вкладышей будет произвольным - тогда тебе понадобятся отдельные константы для циклов и таблицы matrix (а не единая t.SIZE).
Код:
for (int iV = 0; iV < t.SIZE; iV++)
    for (int iN = 0; iN < t.SIZE; iN++)
в принципе, ничто не мешает тебе иметь 20 верхних и 50 нижних, к примеру

Цитата:
а вот еще-когда выдает ответ по лучшей паре, как учесть что один вкладыш можно только один раз использовать, т.е. как исключить повторения?
самый простой способ - после нахождения наилучшего сочетания использованным вкладышам присвоить размер Float.MAX_VALUE - этим ты гарантированно исключишь их из дальнейшего использования

Цитата:
и почему при расчете зазора мы суммируем верхний и нижний вкладыши,один же устанавливается наверх, другой вниз, т.е. если зазор 13 то при установке вкладыша верхнего 7 и ниженего 6,-зазор будет 6 и 7 сответственно? заранее благодарен
или я как-то не так понял начальную задачу, или одно из двух
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 11.06.2010, 11:26     # 5
1000tur
Guest
 
Сообщения: n/a

проблема в том что установливаем вкладыш вверх и вниз, почему их зазор суммируется как будто они установлены вместе
 
Старый 11.06.2010, 11:53     # 6
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
Цитата:
Сообщение от 1000tur Посмотреть сообщение
почему их зазор суммируется
почему суммируется "их зазор"? суммируется их толщина

===============

насколько я понимаю - есть картер с дыркой, к примеру, 15; вал - 10.

вкладыши устанавливаются вокруг вала - один сверху, другой снизу

мы должны подобрать пару вкладышей так, чтобы зазор был нулевым - т.е. толщина верхнего + нижнего должны давать в сумме 5

собственно, именно это задача и делает
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  
Старый 11.06.2010, 12:02     # 7
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Если сверху и снизу только по одному вкладышу, тогда
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.
EvroStandart вне форума  
Старый 11.06.2010, 12:09     # 8
BorLase
::VIP::
 
Аватар для BorLase
 
Регистрация: 09.09.2002
Адрес: Kiev
Пол: Male
Сообщения: 1 150

BorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех ГуруBorLase Отец (мать) всех Гуру
EvroStandart, ты забыл добавить еще выбор меньшего из min и min2

но, вообще, исходя из рисунка и здравого смысла - должна подбираться пара
__________________
Great minds discuss ideas. Average minds discuss events. Small minds discuss people.
BorLase вне форума  

Опции темы

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

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

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


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




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.