keep splitting the atom question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Angus

    #1

    keep splitting the atom question

    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

    #2
    Re: keep splitting the atom question

    "Angus" <anguscomber@gm ail.comwrote in message
    news:1190716119 .694118.138910@ o80g2000hse.goo glegroups.com.. .
    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.


    Comment

    • =?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=

      #3
      Re: keep splitting the atom question

      On 2007-09-25 12:28, Angus wrote:
      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.programmin g instead.

      --
      Erik Wikström

      Comment

      • Victor Bazarov

        #4
        Re: keep splitting the atom question

        Angus wrote:
        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"?
        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?
        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 doSomethingWith TheMiddle(Itera tor start, Iterator end, F f)
        {
        if (start != end) { // not an empty range
        Iterator middle = start + (start - end)/2;
        f(*middle);
        doSomethingWith TheMiddle(start , middle);
        doSomethingWith TheMiddle(middl e, 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


        Comment

        • Howard

          #5
          Re: keep splitting the atom question

          >
          template<class Iterator, class F>
          void doSomethingWith TheMiddle(Itera tor 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

          ?
          f(*middle);
          doSomethingWith TheMiddle(start , middle);
          doSomethingWith TheMiddle(middl e, end);
          }
          }
          >
          -Howard

          Comment

          Working...