Connecting Tech Pros Worldwide Forums | Help | Site Map

keep splitting the atom question

Angus
Guest
 
Posts: n/a
#1: Sep 25 '07
Hello

I am writing a sampling type program which takes a buffer, and picks
the middle of the buffer. But I need to take a bit out the middle and
then take what is left (on both sides) and take the middle out of
these fragments.

I have a function which takes a range, eg start, end and a samplesize
and calculates the range of the buffer to take for sampling. But of
course each time I call this function it creates two new start-end
ranges to again get the middle bit again. I have a size of sample so
when the middle bits reach the sample size I just stop.

How would I write something to achieve this? Should it be a recursive
function?


Jim Langston
Guest
 
Posts: n/a
#2: Sep 25 '07

re: keep splitting the atom question


"Angus" <anguscomber@gmail.comwrote in message
news:1190716119.694118.138910@o80g2000hse.googlegr oups.com...
Quote:
Hello
>
I am writing a sampling type program which takes a buffer, and picks
the middle of the buffer. But I need to take a bit out the middle and
then take what is left (on both sides) and take the middle out of
these fragments.
>
I have a function which takes a range, eg start, end and a samplesize
and calculates the range of the buffer to take for sampling. But of
course each time I call this function it creates two new start-end
ranges to again get the middle bit again. I have a size of sample so
when the middle bits reach the sample size I just stop.
>
How would I write something to achieve this? Should it be a recursive
function?
I'd probably do it recursively. This is more a programming question than a
C++ quesiton though.


=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=
Guest
 
Posts: n/a
#3: Sep 25 '07

re: keep splitting the atom question


On 2007-09-25 12:28, Angus wrote:
Quote:
Hello
>
I am writing a sampling type program which takes a buffer, and picks
the middle of the buffer. But I need to take a bit out the middle and
then take what is left (on both sides) and take the middle out of
these fragments.
>
I have a function which takes a range, eg start, end and a samplesize
and calculates the range of the buffer to take for sampling. But of
course each time I call this function it creates two new start-end
ranges to again get the middle bit again. I have a size of sample so
when the middle bits reach the sample size I just stop.
>
How would I write something to achieve this? Should it be a recursive
function?

Recursive is probably a good idea. However for these kinds of questions
please consult comp.programming instead.

--
Erik Wikström
Victor Bazarov
Guest
 
Posts: n/a
#4: Sep 25 '07

re: keep splitting the atom question


Angus wrote:
Quote:
I am writing a sampling type program which takes a buffer, and picks
the middle of the buffer. But I need to take a bit out the middle
What does that mean "to take a bit out the middle"?
Quote:
and
then take what is left (on both sides) and take the middle out of
these fragments.
And then what? When does it end, and what do you expect as the result
of that processing?
Quote:
I have a function which takes a range, eg start, end and a samplesize
and calculates the range of the buffer to take for sampling. But of
course each time I call this function it creates two new start-end
ranges to again get the middle bit again. I have a size of sample so
when the middle bits reach the sample size I just stop.
>
How would I write something to achieve this? Should it be a recursive
function?
Yes, the recursion seems to fit right in.

template<class Iterator, class F>
void doSomethingWithTheMiddle(Iterator start, Iterator end, F f)
{
if (start != end) { // not an empty range
Iterator middle = start + (start - end)/2;
f(*middle);
doSomethingWithTheMiddle(start, middle);
doSomethingWithTheMiddle(middle, end);
}
}

The function above has a flaw -- it will recurse infinitely for a range
of length 1. You need to correct it. Hint: you need to add 1 addition
somewhere.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


Howard
Guest
 
Posts: n/a
#5: Sep 28 '07

re: keep splitting the atom question


>
Quote:
template<class Iterator, class F>
void doSomethingWithTheMiddle(Iterator start, Iterator end, F f)
{
if (start != end) { // not an empty range
Iterator middle = start + (start - end)/2;
Did you mean:

= start + (end-start)/2; // which equals (start+end)/2

?
Quote:
f(*middle);
doSomethingWithTheMiddle(start, middle);
doSomethingWithTheMiddle(middle, end);
}
}
>
-Howard

Closed Thread