On Nov 25, 2:37 ¨Βν¬ Θυηθ ΣασσΌθ®®®ΐδνυ®αγ®υλΎ χςοτεΊ > On Tue, 25 Nov 2008, jgh... / googlemail.com wrote: > > I'm learning to progam and came accross Chris Pine's Ruby Tutorial. > > > I've got to the Array and Iterators chapter (http://pine.fm/LearnToProgram/?Chapter=07 > > ). > > > and the following assignment " Let's write a program which asks us to > > type in as many words as we want (one word per line, continuing until > > we just press Enter on an empty line), and which then repeats the > > words back to us in alphabetical order. OK? " > > That's all fairly clear.... > > > > > ****** HOWEVER I'm not allowed to use the .sort method ******** > > That's also clear, you are writing a sort program to teach you about > programming, rather than to teach you to explore the library. > > > > > The covered chapters (1 ~ 7) have not covered method creation, > > Classes, Blocks or Procs, so the challenge is to solve the assignment > > without using them ( which is dandy since I don't know what they are > > and I want to solve this assignment before I move forward to discover > > what they are). > > OK > > > > > This is what I've come up with so far, however when run.... It's not > > working - surprise surprise. > > > Could someone initially give me an idea of what is going wrong rather > > than rectify my code. > > This is rather difficult. ¨Βθω> > You have told us what the outcome of the program should be. > You have shown us a program that doesn't work. > > There could be several things wrong, including the mental model you > have built. ¨Βχουμβε βιθεμπ το υσ ιξ θεμπιξωοιζ ωοτομδ > us how you intended the program to work. ¨Βναβε τθατ ωοθαφε > misunderstood something, so expressed your idea poorly in code. Which > is OK of course, that's the point of learning. ¨Βναβε τθατ τθ> algorithm you have chosen to implement doesn't work, so even if the > program implements it correctly, you won't get the answer you want.. > > So the next thing to learn about programming is that comments are to > express intention, to give people a bird's eye view of the code so they > can see what the programmer was trying to do, when that is not immediately > obvious from the code, or when the code could be wrong, expressing another > idea. > > Add comments to this to explain your intentions about each major section > and then we can tell you if your code expresses that intention > > > > > > > puts 'Type in as many words as you want and once you\'ve had enough, > > just \'enter\' a clear line.' > > > words_array = [] > > > loop do > > ¨Βξπυτ ηετσ®δοχξγασε®γθον> > ¨Βςεαλ ιζ ιξπυτ®ενπτωΏ > > ¨Βοςδσίαςςαω ΌΌ ιξπυ> > > end > > > wordCheck = words_array.last > > rotateCounter = 0 > > sortedWords_array = [] > > until words_array.length == 0 > > ¨Βθιμε ςοτατεΓουξτεΌ½ χοςδσίαςςαω®μεξητθ > > ¨ΒχοςδσίαςςαωΫ°έ Ύ½ χοςδΓθεγ> > > ¨Βοςδσίαςςαω®πυσχοςδσίαςςαω®σθιζ> > ¨ΒοτατεΓουξτες ςοτατεΓουξτε> > > ¨ΒμσχοςδΓθεγχοςδσίαςςαωΫ°έ > > ¨ΒοτατεΓουξτες > > ¨Βξδ > > > ¨Βξδ > > ¨ΒοςτεδΧοςδσίαςςαω®πυσχοςδΓθεγ> > > ¨Βξτιμ χοςδΓθεγχοςδσίαςςαω®μαστ > > ¨Βοςδσίαςςαω®πυσχοςδσίαςςαω®σθιζ> > ¨Βξδ > > ¨Βοςδσίαςςαω®ποπ > > ¨ΒοτατεΓουξτες > > ¨ΒοςδΓθεγλ χοςδσίαςςαω®μαστ > > end > > puts sortedWords_array > > > # Any help greatly appreciated > > Hugh # basic mental model - store words in 1st array (words_array). Find the 'smallest' word alphabetically by selecting the last word (call it wordCheck) from words_array and compare wordCheck with the first word, second word and so on..... and exchange the value of wordCheck with the other word (1st/2nd... word) if the other word value happens to be less. Start the checking again with the first word, second word.... and so on until a counter has been reached (counter equal to 'current' length of words_array). Once the counter has been reached, put the value of wordCheck into a second array (sortedWords_array) and delete wordCheck value from first unsorted array (words_array) and repeat until words_array is empty. puts 'Type in as many words as you want and once you\'ve had enough, just \'enter\' a clear line.' words_array = [] # create 1st array called words_array to store users unsorted values loop do input = gets.downcase.chomp # take the user input, remove the 'enter' off the tail and lower the case and call ... break if input.empty? # .. it 'input' , break from the loop if 'input' is equal to empty words_array << input # push 'input' to the words_array end wordCheck = words_array.last # wordCheck is equal to the last 'input' stored in the words_array rotateCounter = 0 sortedWords_array = [] # create 2nd array to contain 'sorted' values until words_array.length == 0 # exit once no words left in the first unsorted array while rotateCounter <= words_array.length # exit if rotate counter greater than words contained within first array if words_array[0] >= wordCheck # continue if first word in 1st array greater or equal to wordCheck value words_array.push words_array.shift # rotate the first unsorted array rotateCounter = rotateCounter + 1 # add 1 to counter else wordCheck = words_array[0] # replace current value (wordCheck) with 'smaller' word rotateCounter = 0 # reset counter to zero end end sortedWords_array.push wordCheck # add wordCheck value to 2nd array until wordCheck = words_array.last # rotate first array until a matching .. words_array.push words_array.shift # .. value found at the back of the first array end words_array.pop # remove the last value contained within the 1st array rotateCounter = 0 # reset rotate counter wordCheck = words_array.last # replace current value of wordCheck with new last word from 1st array end puts sortedWords_array # print values within 2nd array, which should be in low to high alphabetical order # Hope the above is legible