Account Options

  1. Sign in
The old Google Groups will be going away soon.
Switch to the new Google Groups.
Google Groups Home
« Groups Home
---->>> C++ Systems Development, Beford
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  1 message - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Declan Brennan.  
View profile  
 More options Apr 10 1997, 3:00 am
Newsgroups: uk.jobs.offered
From: "Declan Brennan." <100116....@compuserve.com>
Date: 1997/04/10
Subject: ---->>> C++ Systems Development, Beford

Post:           Systems Development Engineer for R&D team
Salary: 16K upwards dependant on ability and experience
Company:    SIMS Education Services Limited
Address:    Priory Business Park, Cardington Bedford, MK44-3SG, UK.
Phone:
Contact:    Andy McGowan or Declan Brennan
Phone:      01234-838080

Email:100116....@compuserve.com

Introduction
------------
The post is described in the section below. It is a systems development
opportunity of a type that is rare in the U.K. We would typically expect
this post to be filled by a new graduate. However a degree is not
essential.
Only ability matters. If the post is of interest, please take the time to
attempt some or all of the test below and email your solutions to us, along
with your C.V. Feel free to include other small samples of your code of
which
you are proud (provided this code is not confidential).

Description
-----------
SIMS, which is part of Capita Group PLC, is a company that produces a large
range of Education Management Software on DOS networks and unix platforms.
It is the foremost in this field in the United Kingdom and also supplies
its products abroad.

The company has produced a Rapid Application Development environment in C++
that facilitates the easy production of database applications for Microsoft
Windows operating systems. This environment is currently being used
internally,
but may be marketed externally in the future.

The post entails continuing work on this development environment in a
relaxed
friendly team. This work is exciting and rewarding, but also very
challenging.

The following skills are essential:
* Highly motivated and able to work under pressure.
* Interest in Systems development.
* Able to work in a team but also good at self-organisation.
* Good knowledge of C++ and Object Oriented Design.
* Excellent problem solving abilities and familiarity with standard
     data structures.
* Knowledge of Windows API (16 or 32) or at least some other GUI
environment.

The following skills would be useful:
* Knowledge of Relational Database concepts
* Knowledge of a Client/Server database
* SQL
* Degree in a Science or Engineering Discipline.
* Experience with Visual C++

If you have the talent, commitment and energy to succeed, SIMS can offer a
substantial package, which comprises attractive salary, pension and private
medical cover.

SIMS offers good pay and conditions according to experience and skill
levels
and hence there are opportunities to progress in the technical side of the
IT industry.  If you want to talk more, please give me a ring on the number
above or ask for Declan Brennan, who like me, would be delighted to talk to
anyone who feels that they have got what it takes to join us.

Programming Test
----------------
Note: This test is also available in printed form with better diagrams.
This can be faxed to you on request. Please email us if you require this.

Please attempt to answer all of the following questions. Give a brief
description of the algorithm used in each case and follow this with
outline code preferably written in C++ (or alternatively C or Pascal).
For questions 1 and 2, avoid calling too many string manipulation functions
for performance reasons. Question 5 is a database question for which a
short descriptive answer will suffice. Don't worry if you can't answer all
the questions or if you feel you have not answered some questions
completely.
This test is intended to assess how you approach problem solving in a
programming sense and so even partial answers are useful.

(1)     Word Wrapping
Write a program to do word wrapping. The program should take two
parameters:
the name of the input file and the name of the output file. The input file
is a text file that has line feeds at the end of each paragraph. The output
file should be a text file with a line feed at the end of each line. Lines
should not exceed 78 characters in length and line breaks should only occur
between words. (You should assume that a monospace font is used to display
the text so every character is the same width.)

(2)     A String Iterator
There is often a requirement to break up a string into its component parts.
Assume we have a string that is delimited by tabs:
    char st[]= "This\tString\tIs\tDelimited";
Write an iterator that will return each part of the string in turn. On the
first call it should return "This", on the second call it should return
"String" and so on. Feel free to implement this iterator a simple function
or a class whichever is more appropriate.

(3)     Sets
Assume a mathematical set is being represented by a 16 bit integer. The
presence of a particular element in the set is indicated by the appropriate
bit being set. Thus the set [2,7,13] would be represented by the integer:

15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
 0  0  1  0  0  0  0  0  1  0  0  0  0  1  0  0  =  2^2+2^7+2^13=  8324

Define a C++ class to implement such a set. Its constructor should take a
single parameter, which is a string representation of the set for example
"[13,2,7]". Functions should be available to provide the union of two sets,
the intersection of two sets and the complement of a set (with the
universal set [0..15]). Ideally these functions should be implemented by
overloading operators such as '*' '+' and '~'.

If you want to show off provide an insertion operator to allow sets to be
send to ostreams. A further demonstration of programming prowess could be
achieved by extending the set class to cope with variable length sets,
perhaps by having an array of integers for the sets and an additional int
indicating how many elements are occupied (Note: complementing variable
length sets is not a trivial problem).

(4) Graphics using Box characters.
On an IBM-PC compatible's text mode display, box graphic characters are
represented by the following ASCII codes:

              194      196                   Top Left Corner     218
218 |----------|-----------------| 191       Bottom Left Corner  192
    |          |                 |           Top Right Corner    191
    |          | 197             |           Bottom Right Corner 217
195 |----------|-----------------| 180       Left Tee            195
    |          |                 |           Top Tee             194
    |          |                 | 179       Bottom Tee          193
    |          |                 |           Right Tee           180
    |          |                 |           Cross               197
    |----------|-----------------| 217     Horizontal Line     196
 192          193                            Vertical Line       191

(Don't be confused by limitiations due to this version of our test
being in simple ascii text format.  We have represented the top left corner
as the character pair '|-' in our diagram. But on the screen this is a
single character 218. )

Each character position on the text screen is represented by a two byte
word. The character code is stored in the low byte and the display
attribute in the high byte (this is 7 for white on black). A screen of 25
lines by 80 characters is represented in memory by a continuous sequence of
2000 words, starting with the first line. Thus if the first line begins at
address:  word* screen, the second line will start at address
word* screen+80.

You may assume that a pointer to the beginning of screen memory has already
been set up. Your task is to implement a box function. This function should
take 4 parameters corresponding to the top-left and bottom-right
co-ordinates of the box to be drawn.

Start by assuming the screen has been cleared to spaces, before box() is
called initially.  How can your function be elaborated so that
intersections are handled correctly if box() is called a second time with
co-ordinates that overlap the first box ?

     |-----------------|                |---------------|
     |                 |                |               |
     |       |---------|---------|      |            195|----------|
     |       |         |197      |      |               |          |
     |    197|         |         |      |               |          |
     |-------|---------|         |      |---------------|----------|
             |                   |                     193
             |                   |
             |-------------------|

These are two examples of overlapping boxes with four intersections in
total. To pick one: when a vertical line is drawn on top of a horizontal
line, we would expect a cross to result. Of course there are many
intersection possibilities and we don't want to limit ourselves to just two
boxes.

Ideally the boxes should be drawn by direct memory access to screen memory.
However if you are uncomfortable with pointer arithmetic, you can assume
the existence of functions for reading and writing to the screen.
        typedef unsigned int word;
        word getScreenWord(int line,int col);
        void  setScreenWord(int line,int col,word value);

(5) Implementing a hierarchy in a database table
Consider the issues involved in the implementation of a file and directory
browser. When invoked on a hard disk with four sub-directories in its root
directory, the list box in Figure 1 would be presented to the user.

C:                 C:                     C:
|--- APPS          |--- APPS              |--- APPS
|--- DOS           |     |--- EXCELL      |     |--- WWDOCS
|--- WINDOWS       |     |--- HG4W        |     |     |--- JAN93
|--- WORD          |     |--- PM3         |     |     |--- FEB93
                   |     |--- WWDOCS      |     |     |--- MAR96
                                          |     |     |--- TEST.DOC
                                          |     |     |----ZEBEDEE.DOC

Figure 1.          Figure 2.              Figure 3.

If APPS is selected in Figure 1, the contents of the list box are replaced
as shown in Figure 2. In figure 2, if C is selected the listbox returns to
figure 1. If on the other hand WWDOCS is selected the listbox appears as
shown in Figure 3.

You may assume that you have available a function that will create a disk
based table (e.g. an xBase table or even a simple text file) with
appropriate fields (for example FILENAME and EXTENSION) and load it with
records reflecting the directory structure on the hard disk.

Please consider the implementation of a function: browseDirs(). This
function would take one parameter to indicate the initial default file. If
for example the default file was ZEBEDEE.DOC, we would expect browseDirs()
to present the listbox in Figure 3 with ZEBEDEE.DOC highlighted.

Describe the fields that would be required in the table in order to drive
this function.

One purpose of this tool might be to allow the renaming of files and
directories. Please consider the impact this might have on the structure of
the table and the browseDirs() algorithm.

Conclusion
----------
Thanks for taking the time to answer this test. We realise that a non
trivial amount of effort was required. However we have found that only with
a test such as this can we fairly assess applicants skills. We look forward
to hearing from you.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »