|
Not homework.I am too old for that now
To make things simpler maybe, I've reached to a point that i have limited my list of numbers that can be multiplied betweend them, to numbers which actually have a pottential.
So for 160, the program limited the choises to (2,4,5,8,10,20,40)
You can see that if you multiply some of them you can come up with 160.For example 2x8x10 or 4x40, etc
My programming question is some pointers on how to get this 2x8x10 ?
It's probably easy but i am at a point that the mind is frozen
Thanks
|
|
|
|
|
Are you seriously saying that you use VB.NET but don't know how to multiply or compare values?
I must get a clever new signature for 2011.
|
|
|
|
|
Do you really think, that the problem is to multiply 2 numbers ?
I'll take it that i wasn't clear enough maybe.
I give you a number A=160
Let's say that i also give you an array, with the following numbers
[2,4,5,8,10,20,40]
From the numbers in the array, i want to get number A, by multiplying whatever numbers needed.
Each number in the array can be used only ONCE.
The numbers in the array and also number A can be different each time.It's not always the same.
So, for the specific numbers above and using only my mind, i see that 160 can be produced by 2x8x10 or 4x40 or 8x20.
It cannot be produced obviously by 2x4x5x8, and so on.
So, the problem is to find the algorithm, that can find at least one combination of numbers the can produce A.
Sorry if I am not that clear.
Thanks anyway.
|
|
|
|
|
Johnkokk wrote: Do you really think, that the problem is to multiply 2 numbers ?
That's how your question came across, I'm afraid.
Johnkokk wrote: he problem is to find the algorithm ...
OK, So I suggest you post your question in the Algorithms forum; this has nothing to do with the .NET framework.
I must get a clever new signature for 2011.
|
|
|
|
|
this is simple when using recursion; what needs to be done is carefully defining the functionality of the recursive method.
Hhere is some pseudo-code that should help:
int[] factors=new int[factorList.Length];
public bool CanBeFactoredWithSomeOfThese(int number, List<int> factorList, int minimum, int nesting) {
foreach(int factor in factorList) {
if (factor<=minimum) continue;
if (number%factor!=0) continue;
factors[nesting]=factor;
bool OK=true;
if (number>factor) OK=CanBeFactoredWithSomeOfThese(number/factor, largerFactors, factor, nesting+1);
if (OK) return true;
}
return false;
}
Although combinations aren't examined more than once (that is what minimum is for, we discover factors in ascending order) and it stops on the first solution, this is not quite optimal as it enumerates the factorList way too much.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
An interesting question... and here is my quick thought...
I am assuming the Nx list is in ascending order.
first divide A by the first number in Nx (this value becomes your max multiplier)
remove all values higher than max multiplier from the list
loop each number
then loop each remaining number inside the first loop
multiply the two and check if it equals A
if equals then add to global list
if larger then break the loop
if smaller then look for another number to multiply (going to need recursion here)
....hmmmm, just re-read and that is not so clear, maybe you will get the gist thou. I may give this a go and post results (but it will be C# thou)
I may or may not be responsible for my own actions
|
|
|
|
|
Could be simplified, but I think this works (assumes ascending order of integer array)...
public static void TestFactors()
{
List<string> nodes = GetFactors(160, new int[] { 2, 3, 4, 5, 6, 7, 8, 10, 15, 20, 25, 30, 40, 50, 100, 500 });
foreach (string n in nodes)
{
Console.WriteLine(n);
}
Console.ReadKey();
}
private static List<string> GetFactors(int number, int[] possValues)
{
List<string> nodes = new List<string>();
for (int j = 0; j < possValues.Count(); j++)
{
GetFactorsInner(nodes, number, possValues, j, possValues[j], possValues[j].ToString());
}
return nodes;
}
private static void GetFactorsInner(List<string> nodes, int number, int[] possValues, int currIndex, int currTot, string currStr)
{
for (int i = currIndex + 1; i < possValues.Count(); i++)
{
int thisTot = currTot;
string thisStr = currStr;
if (thisTot * possValues[i] > number)
{
break;
}
else if (thisTot * possValues[i] == number)
{
thisStr += thisStr == null ? possValues[i].ToString() : ", " + possValues[i].ToString();
nodes.Add(thisStr);
break;
}
else if (number % (thisTot * possValues[i]) == 0)
{
thisStr += thisStr == null ? possValues[i].ToString() : ", " + possValues[i].ToString();
thisTot *= possValues[i];
GetFactorsInner(nodes, number, possValues, i, thisTot, thisStr);
}
}
}
Output is
2,4,20
2,8,10
4,5,8
4,40
8,20
|
|
|
|
|
Thank you very much.That did it exactly.
|
|
|
|
|
You're welcome. There are one or two changes I'd make to that, and one would be to eliminate all numbers that are not factors to start with. If the array was large, it would be an extremely significant reduction in loops. (The first line in the function achieves that).
private static List<string> GetFactors(int number, int[] possValues)
{
int[] possValuesNew = possValues.Where(i => number % i == 0).ToArray();
List<string> nodes = new List<string>();
for (int j = 0; j < possValuesNew.Count(); j++)
{
GetFactorsInner(nodes, number, possValuesNew, j, possValuesNew[j], possValuesNew[j].ToString());
}
return nodes;
}
|
|
|
|
|
Dear All,
I have a Asp.net website, wich gives the users the possibility to pay via internet and add credits to there cards.
Ofter they are done with payment on the website of there bank, they return to my website and at that point im checking the status of the transaction from there bank to add(or not) the credit to there card.
Sometimes it happens that the status of a certain transaction is not 'Success'. So i have to check the status later.
For this i want to make a another process that runs on the background and looks in the transaction logs for not succeeded transactions to request there status at there bank.
My questions is what is best for this purpose a Win Service or a WWF app. and why?
Hope to get some good advice.
Thanks in advance.
|
|
|
|
|
Well WWF will give you a declarative view of doing just that. Most peolple that have implement WWF use it in a transactional base system and use persistant storage to store in your case would be a "status" and use the workflow instance to retrieve it. You can use a Flow Chart or Sequence activity and easily create Aync calls I would recommend using WWF 4.0. It will give you much more options than it's predecessors. Also, it will give you a few options in hosting WWF and take a look at the behaviors it offers. So at the end, WWF will give you some stuff out of the box that you will have to do manually if you were writing a Windows Service.
|
|
|
|
|
You will find more documentation and help online on Windows Service.
The funniest thing about this particular signature is that by the time you realise it doesn't say anything it's too late to stop reading it.
|
|
|
|
|
How can we pick dynamic images and rotate them in J-Query in dot.net applications?
|
|
|
|
|
I think this question would be better posted in the JavaScript forum.
I must get a clever new signature for 2011.
|
|
|
|
|
I am writing Windows service with FileSystemWatcher.
Protected Overrides Sub OnStart(ByVal args() As String)
fw = New StreamWriter(LogPathFile)
fsw = New FileSystemWatcher
If args.Length > 0 Then
' the path to monitor has been specified in the argument passed in at Start
fsw.Path = args(0)
Else
fsw.Path = My.Settings.PathToWatch
End If
fsw.IncludeSubdirectories = False
fsw.Filter = "*.*"
AddHandler fsw.Created, New FileSystemEventHandler(AddressOf File_Created)...
Public Sub File_Created(ByVal obj As Object, ByVal e As FileSystemEventArgs)...
How can I check on start if My.Settings.PathToWatch had any files and then call for each file File_Created event?
|
|
|
|
|
byka wrote: How can I check on start if My.Settings.PathToWatch had any files and then call for each file File_Created event?
Could you explain clearly? Format code in code blocks too.
Best wishes,
Navaneeth
|
|
|
|
|
I have a service which is monitors path by using FileSystemWatcher .
When files beeing drop it will moved to a dirrenet location
AddHandler fsw.Created, New FileSystemEventHandler(AddressOf File_Created)
it's working fine until service stoped. Let's say service stop for 1 min during that time other process drop a file to my monitor path.When service is re-started it won't pick that file. How to I process those files ?
here is my code:
Protected Overrides Sub OnStart(ByVal args() As String)<br />
Try <br />
fw = New StreamWriter(LogPathFile)<br />
fsw = New FileSystemWatcher<br />
<br />
If args.Length > 0 Then<br />
' the path to monitor has been specified in the argument passed in at Start<br />
fsw.Path = args(0)<br />
Else<br />
fsw.Path = My.Settings.PathToWatch' My monitor path<br />
End If<br />
fsw.IncludeSubdirectories = False<br />
fsw.Filter = "*.*"<br />
fsw.NotifyFilter = NotifyFilters.LastWrite<br />
AddHandler fsw.Created, New FileSystemEventHandler(AddressOf File_Created) ' File created
... Public Sub File_Created(ByVal obj As Object, ByVal e As FileSystemEventArgs)... processing files
|
|
|
|
|
Naturally if the application isn't running (regardless of the type of application) it can't monitor file changes.
Excluding design problems which would stop this, the solution is that when the application starts up it looks for new files. That solution has nothing to do with FileSystemWatcher.
|
|
|
|
|
byka wrote: How to I process those files ?
How about making a list of files that are "there" in the directory that you're watching when the service is started, and process those?
I are Troll
|
|
|
|
|
Just enumerate the files in that folder, create the EventArgs, and call the handler, e.g. in C#:
foreach (string filename in Directory.GetFiles(fsw.Path))
{
FileSystemEventArgs e = new FileSystemEventArgs(WatcherChangeTypes.Created, fsw.Path, filename);
File_Created(this, e);
}
|
|
|
|
|
how can i connect visual studio 2008 application to sql server 2008 using ODBC?
|
|
|
|
|
Why would you want to? ODBC is the method of last resort, to be used when nothing else will work, and VS 2008 comes with classes optimized for connecting to SQL Server. The only excuse for using ODBC is if your application has to interface with other database products after you're done developing it, and you want to minimize the amount of customization required for installation. Use the classes in System.Data.Sql to access a SQL Server database. If you need to rehost the solution to another database, you might duplicate the functionality you build for SQL Server using the namespace, System.Data.Odbc and use the installer to select which method is implemented.
Will Rogers never met me.
|
|
|
|
|
Hey wow, you say that like you know what you're talking about.
Roger Wright wrote: Why would you want to?
Because it's there. I don't know about the OP, but I just like to try things out -- I'll try most anything once. And I like to test my database code in a number of configurations.
My first experience with Sql Server (v6 circa 1999) was with ODBC... brings back memories... ones better left forgotten.
|
|
|
|
|
I've learned a thing or two hanging around this unsavory lot.
As a result, I've given up driving square pegs in round holes, among other bad habits. Just because I can doesn't mean I should.
Will Rogers never met me.
|
|
|
|
|
|