# Information Technology Grade 12 P1 NSC November 2012 Memo

> Grade 12 Information Technology Paper 1 memorandum from the NSC November Exam 2012 (English), 34 pages. Read online or download the free PDF.

- Page: https://www.hlayiso.com/library/information-technology-p1-nov-2013-memo-eng/56ada5ed-d687-4bba-ab5b-3af1486b3ab5
- Updated: 2026-09-27
- Subject: Information Technology
- Grade: Grade 12
- Document type: Memorandum
- Year: 2012
- Exam period: NSC November Exam
- Paper: 1
- Curriculum: CAPS
- Pages: 34

Breadcrumbs: [Home](https://www.hlayiso.com/) › [Library](https://www.hlayiso.com/library) › [Grade 12](https://www.hlayiso.com/library/grade-12) › [Information Technology](https://www.hlayiso.com/library/grade-12/information-technology) › [Information Technology Grade 12 P1 NSC November 2012 Memo](https://www.hlayiso.com/library/information-technology-p1-nov-2013-memo-eng/56ada5ed-d687-4bba-ab5b-3af1486b3ab5)

## About this document

Information Technology · Grade 12 · NSC November Exam · 2012. Memorandum, 34 pages. Read online or download the PDF.

Read it free online on the page above; download the PDF from there.

## Document text

Text extracted from the PDF. Layout, diagrams and tables may not survive extraction.

### Page 1

Downloaded from hlayiso.com

                                 NATIONAL
                            SENIOR CERTIFICATE

                                   GRADE 12

                        INFORMATION TECHNOLOGY P1

                                 NOVEMBER 2013

                                 MEMORANDUM

MARKS: 120

                       This memorandum consists of 34 pages.

Copyright reserved                                             Please turn over

### Page 2

Downloaded from hlayiso.com
Information Technology/P1                    2                             DBE/November 2013
                                     NSC – Memorandum

GENERAL INFORMATION:

•   These marking guidelines are to be used as the basis for the marking session.
    They were prepared for use by markers, all of whom are required to attend a
    rigorous standardisation meeting to ensure that the guidelines are consistently
    interpreted and applied in the marking of candidates’ scripts.

•   It is acknowledged that there may be different views about some matters of
    emphasis or detail in the guidelines, and different interpretations of the application
    thereof.

•   Note that learners who provide an alternate correct solution to that given in the
    marking guidelines will have been given full credit for the relevant question.

•   Annexures A, B and C (pages 3-6) include the marking grid for each question for
    using either one of the two programming languages.

•   Annexures D, E, F and G (pages 7-19) contain the solutions for Delphi for
    QUESTIONS 1 to 3 in programming code.

•   Annexures H, I, J and K (pages 20-32) contain the solutions for Java for
    QUESTIONS 1 to 3 in programming code.

•   Copies of Annexures A, B and C should be made for each learner and completed
    during the marking session

Copyright reserved                                                             Please turn over

### Page 3

Downloaded from hlayiso.com
   Information Technology/P1                         3                            DBE/November 2013
                                             NSC – Memorandum

   ANNEXURE A

   QUESTION 1: MARKING GRID – PROGRAMMING AND DATABASE

   GENERAL NOTES:
     • Only penalise for the incorrect use of quotes ONCE. Repeated incorrect use of
       quotes in follow up questions doesn’t get penalised.
     • The use of = for strings, the use of LIKE may be used as alternative.

CENTRE NUMBER:                                     EXAMINATION NUMBER:
                                                                                    MAX. LEARNER'S
QUESTION                                  DESCRIPTION
                                                                                   MARKS   MARKS
  1.1      Query:       Correct list of fields (or *); correct table; ORDER
                        BY correct fields in correct order
           SQL:         SELECT * FROM tblResults ORDER BY TypeOfDance,                3
                        RoutineNo Desc

  1.2      Query:       Correct fields & table; WHERE Correct Score
                        both weeks correct operator used (OR/IN) for the
                        weeks
           SQL:         SELECT RoutineNo, Week, TypeOfDance, Score FROM
                        tblResults WHERE (Score BETWEEN 25 AND 35) AND
                        (Week=5 OR Week=9)

           Alternative: (Score >= 25) AND (Score <= 35)
                      (Score > 24) AND (Score < 36)
                      Score IN [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
                      Week IN [5, 9]

                   Score >= 25 And Score <= 35 And (Week = 5 Or Week = 9)             4
                   (Score >= 25 And (Week = 5 Or Week = 9)) And
                          (Score <= 35 And (Week = 5 Or Week = 9))

                   Score >= 25 And Score <= 35 And Week IN (5,9)

                   Score IN (25,26,27,28,29,30,31,32,33,34,35) Or Week IN (5,9)

                   Score BETWEEN 25 And 35 and Week = 5 OR
                          Score BETWEEN 25 And 35 and Week = 9

           NOTE:        Check the correctness of alternative use of intervals

   Copyright reserved                                                                Please turn over

### Page 4

Downloaded from hlayiso.com
Information Technology/P1                          4                       DBE/November 2013
                                           NSC – Memorandum

QUESTION 1: MARKING GRID – PROGRAMMING AND DATABASE – continue

1.3     Query:       Correct field & table; Count; AS
                     NumberOfPerformances WHERE TypeOfDance
                     equals user input GROUP BY TypeOfDance
        SQL: (D) SELECT TypeOfDance, Count(*) AS
                 NumberOfPerformances FROM tblResults WHERE
                 TypeOfDance = "'+ sX + '" GROUP BY TypeOfDance
        SQL: (J) SELECT TypeOfDance, Count(*) AS                               5
                 NumberOfPerformances FROM tblResults WHERE
                 TypeOfDance = '"+ sX + "' GROUP BY TypeOfDance

        Alternative: May use Count(<field name>)

        NOTE:        The use of Distinct is not allowed

1.4     Query:       Correct fields; both tables; WHERE linking
                     tables on DanceCoupleID; professional dancers
                     with AND operator; LIKE Love% ;
                     OR-operators with correct use of brackets;
                     LIKE %you%
        SQL: (D) SELECT Song, DancePartner1, DancePartner2 FROM
                 tblDanceCouples, tblResults WHERE
                 tblResults.DanceCoupleID =
                 tblDanceCouples.DanceCoupleID AND
                 (ProfessionalDancers = "B") AND ((Song Like "Love%") OR
                 (Song LIKE "%you%"))
        SQL: (J) SELECT Song, DancePartner1, DancePartner2 FROM
                 tblDanceCouples, tblResults WHERE                             7
                 tblResults.DanceCoupleID =
                 tblDanceCouples.DanceCoupleID AND
                 (ProfessionalDancers = 'B') AND ((Song Like 'Love%') OR
                 (Song LIKE '%you%'))

        Alternative: Make use of ALIASES for table names
                     Make use of INNER JOIN statement

        (D)          The use of LEFT(Song, 4) = "Love"
        (J)          The use of LEFT(Song, 4) = 'Love'

        NOTE: The use of * instead of % subtract only ONE mark

Copyright reserved                                                            Please turn over

### Page 5

Downloaded from hlayiso.com
Information Technology/P1                         5                               DBE/November 2013
                                          NSC – Memorandum

QUESTION 1: MARKING GRID – PROGRAMMING AND DATABASE – continue

1.5     Query:       Correct field & correct table; Format to THREE
                     decimals; sum(Score); divide by Count(*);
                     AS AverageScore; GROUP BY DanceCoupleID
        SQL: (D) SELECT DanceCoupleID,
                 Format((Sum(Score)/Count(*)),"0.000") AS AverageScore
                 FROM tblResults Group BY DanceCoupleID
        SQL: (J) SELECT DanceCoupleID,
                 Format((Sum(Score)/Count(*)),'0.000') AS AverageScore                6
                 FROM tblResults Group BY DanceCoupleID

        Alternative: Use of different formatting strings, e.g. "#.000"

                     The use of AVG(Score) – TWO marks

                     Round(<calculation>, 3) instead of Format

1.6     Query:       Correct fields from both tables; WHERE linking
                     tables on DanceCoupleID; Result equals
                     Eliminated; No duplicates – check for use of
                     week 12 (included must have DISTINCT/Group by)
                     (less than 12 – no distinct/group by required)
        SQL: (D) SELECT DISTINCT DancePartner1, DancePartner2 FROM
                 tblResults, tblDanceCouples WHERE
                 (tblResults.DanceCoupleID = tblCouples.DanceCoupleID)
                 AND (Result LIKE "Eliminated") AND (Week < 12)
        SQL: (J) SELECT DISTINCT DancePartner1, DancePartner2 FROM                    5
                 tblResults, tblDanceCouples WHERE
                 (tblResults.DanceCoupleID = tblCouples.DanceCoupleID)
                 AND (Result LIKE 'Eliminated') AND (Week < 12)

        Alternative: Make use of ALIASES for table names
        Alternative: make use of INNER JOIN statement

        NOTE:        If week 12 is included then a DISTINCT/GROUP BY must
                     be used.

1.7     Query:       UPDATE table; SET Result to WINNERS;
                     WHERE Second Round; AND ; CoupleID is 8
        SQL: (D) UPDATE tblResults SET Result=”WINNERS” WHERE
                 Round = 2 AND DanceCoupleID = 8
        SQL: (J) UPDATE tblResults SET Result=’WINNERS’ WHERE                         5
                 Round = 2 AND DanceCoupleID = 8

        NOTE:        The use of Week is optional

                                                                         TOTAL:      35

Copyright reserved                                                                   Please turn over

### Page 6

Downloaded from hlayiso.com
    Information Technology/P1                       6                                 DBE/November 2013
                                            NSC – Memorandum

    ANNEXURE B

    QUESTION 2: MARKING GRID – OBJECT-ORIENTED PROGRAMMING

    GENERAL NOTES:
      • If the learner changed any given data type (e.g. character to string) penalise with
        ONE mark.
      • Syntax error (e.g. ;) penalise only ONCE.
      • In Java the use of single = in stead of == penalise only ONCE.
      • NO USE OF OBJECT CLASS: Q2.1.1: 0 marks; Q2.1.2: maximum of 6 marks;
        Q2.1.3: Maximum of 5 marks; Q2.1.4: maximum of 3 marks

CENTRE NUMBER:                               EXAMINATION NUMBER:
                                                                                       MAX.     LEARNER'S
QUESTION                                DESCRIPTION
                                                                                      MARKS       MARKS
 2.1.1     Parameterised CONSTRUCTOR
           All three correct parameters  with correct data types
           Set dance partner name 1 set dance partner name 2                           5
           Set professional status

 2.1.2     getWeighting METHOD:
           Correct method return type (integer); Structure of if/case/switch 
           Testing for A and assign weighting value of 1;
           Testing for B and C and assign weighting value of 2{using
           OR/multiple If's};
           Testing for D and assign weighting value of 3;
           Assign a weighting value of 0 for an invalid dance status
                                                                                         8
           characters/default value of zero;
           Return the content of the assigned variable

           NOTE: Accept return type string ONLY if conversion is used in call
                    statements.
 2.1.3     calculateFinalScore METHOD:
           integer array parameter;
           loop through array OR refer to individual elements in array;
           call getWeighting method OR used weighting as an attribute of the
                                                                                         7
           class;
           multiply array element 1st and 3rd by weighting;
           add the scores; return total score

 2.1.4     toString METHOD:
           Correct method header and return type (string);
           Construct a line with correct label; names of both partners with &-
           character;
           Construct a line with professional dance status (call method/attribute)
                                                                                         6
           on next line;
           Return string

    Copyright reserved                                                                   Please turn over

### Page 7

Downloaded from hlayiso.com
 Information Technology/P1                       7                                DBE/November 2013
                                         NSC – Memorandum

 QUESTION 2: MARKING GRID – OBJECT-ORIENTED PROGRAMMING – continue

2.2.1    MENU OPTION A:
         Prompt user for input; Input two strings for partner values;
         Input and use the first character of professional status;
         Declare object local/global in unit/class and instantiate DanceCouple       8
         object; with values entered as arguments; in the correct order;
         Display the information of the DanceCouple object

2.2.2    MENU OPTION B:
         Declare an array of integer to keep four scores;
         Get FOUR inputs from user; Validate FOUR input values in range 1 to
         10; Assign a zero if value outside range;
         1st line of output: Display label and call get methods for the names of
         partners/use global variables for names;
                                                                                      10
         2nd line of output: Display label and four values 
         3rd line of output: Display label and call getWeighting method to display
         the weighting value 
         4th line of output: Display label and call calcFinalScore method with
         correct parameter 

2.2.3    MENU OPTION C:
         Text file: 
             {Delphi: AssignFile & Rewrite
             Java: Create object to use as a File writer}
         Construct line of text containing the names of both dance partners
         and their final score in comma separated format ;                          7
         Write line of text to text file;
         CloseFile/Close writer object;
         Confirmation message to the user 

         NOTE (Delphi): Accept the use of SaveToFile method of the richedit.
                                                                        TOTAL:        51

 Copyright reserved                                                                  Please turn over

### Page 8

Downloaded from hlayiso.com
Information Technology/P1                        8                                DBE/November 2013
                                         NSC – Memorandum

ANNEXURE C

QUESTION 3: MARKING GRID - PROBLEM-SOLVING PROGRAMMING

GENERAL NOTES:
  • Syntax error (e.g. ;) penalise only ONCE.

CENTRE NUMBER:                                 EXAMINATION NUMBER:
                                                                                       MAX.      LEARNER'S
QUESTION                                DESCRIPTION
                                                                                      MARKS        MARKS
   3.1       MENU OPTION A:
             Using appropriate data structure (1D/2D/object array) for all
             fourteen couples;
             Using a Loop until all user input valid:
                  User input to indicate four couples eliminated;
                  Validate each value to be in the correct range
                  Use VAL/try...except/catch to validate input not characters;

             Text file:
                  {DELPHI: AssignFile, Reset
                  JAVA: Create object to read from file} ;
             Loop through the lines of text in the file                                22
                Read line from text file
                Split data (name, age, contact number, couple number)
                 If valid age AND dance couple not eliminated 
                         valid vote:
                           Increment valid counter
                           If international vote based on not +27 add label 
                         NOT valid vote:
                           Increment invalid counter 
                  Display output concatenated line of info within the loop

             Display total valid votes; Display total invalid votes;
   3.2       MENU OPTION B:
             Using appropriate data structure(s) for counting votes

             Loop to count votes for each couple  (can be done in question
             3.1 inside the IF-statement for a valid vote)

             Display headings and labels before loop (also accept as part of
             question 3.1)                                                              12
             Loopto display votes received by each couple or the label
             "(Eliminated)" when couple is eliminated
             Initialise lowest value; determine lowest total votes ignoring
             couples already eliminated inside a loop OR sorting an array

             Display all the dance couple(s) who may be eliminated next with
             label
                                                                          TOTAL:        34
SUMMARY OF LEARNER’S MARKS:
                            QUESTION 1           QUESTION 2              QUESTION 3          GRAND TOTAL
   MAX. MARKS                  35                   51                      34                   120
 LEARNER'S MARKS

Copyright reserved                                                                    Please turn over

### Page 9

Downloaded from hlayiso.com
Information Technology/P1                9                         DBE/November 2013
                                 NSC – Memorandum

ANNEXURE D: SOLUTION – QUESTION 1: DELPHI

unit Question1U_MEMO;
{A solution for Question 1}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, ExtCtrls, Buttons, Menus;

type
  TfrmQ1 = class(TForm)
     qryRec: TADOQuery;
     dsrQry: TDataSource;
     grdQ1: TDBGrid;
     mnuMain: TMainMenu;
     mnuOptionA: TMenuItem;
     mnuOptionB: TMenuItem;
     mnuOptionC: TMenuItem;
     mnuOptionD: TMenuItem;
     mnuOptionE: TMenuItem;
     mnuOptionF: TMenuItem;
     mnuOptionG: TMenuItem;
     mnuQuit: TMenuItem;
     procedure mnuOptionAClick(Sender: TObject);
     procedure mnuOptionBClick(Sender: TObject);
     procedure mnuOptionCClick(Sender: TObject);
     procedure mnuOptionDClick(Sender: TObject);
     procedure mnuOptionEClick(Sender: TObject);
     procedure mnuOptionFClick(Sender: TObject);
     procedure mnuOptionGClick(Sender: TObject);
     procedure mnuQuitClick(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  frmQ1: TfrmQ1;

implementation

{$R *.dfm}
//===============================================================
procedure TfrmQ1.mnuOptionAClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT * FROM tblResults ' +
                     'ORDER BY TypeOfDance, RoutineNo Desc';
  qryRec.Open;
end;
//===============================================================
procedure TfrmQ1.mnuOptionBClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT RoutineNo, Week, TypeOfDance, Score '+
                     'FROM tblResults WHERE (Score BETWEEN 25 AND 35) AND '+
                     '(Week=5 OR Week=9)';
  qryRec.Open;
end;
//===============================================================
Copyright reserved                                                  Please turn over

### Page 10

Downloaded from hlayiso.com
Information Technology/P1              10                        DBE/November 2013
                                NSC – Memorandum

procedure TfrmQ1.mnuOptionCClick(Sender: TObject);
var
  sX : String;
begin
  sX := INPUTBOX('Question 1', 'Enter the TYPE of the dance e.g. Rumba.', '');
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT TypeOfDance, Count(*) AS NumberOfPerformances '+
                       'FROM tblResults WHERE TypeOfDance = "'+ sX +
                       '" GROUP BY TypeOfDance';
  qryRec.Open;
end;
//===============================================================
procedure TfrmQ1.mnuOptionDClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT Song, DancePartner1, DancePartner2 ' +
                      'FROM tblCouples, tblResults '+
                 'WHERE tblResults.DanceCoupleID=tblCouples.DanceCoupleID AND '+
                      '(ProfessionalDancers = "B") AND '+
                      '((Song Like "Love%") OR (Song LIKE "%you%"))';
  qryRec.Open;
end;
//===============================================================
procedure TfrmQ1.mnuOptionEClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT DanceCoupleID, ' +
                      'Format((Sum(Score)/Count(*)),"0.000") AS '+
                      'AverageScore FROM tblResults Group BY DanceCoupleID';
  qryRec.Open;
end;
//===============================================================
procedure TfrmQ1.mnuOptionFClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'SELECT DancePartner1, DancePartner2 ' +
                       'FROM tblResults, tblCouples '+
                   'WHERE (tblResults.DanceCoupleID=tblCouples.DanceCoupleID) '+
                       ' AND (Result LIKE "Eliminated") AND (Week < 12) ' +
                       'GROUP BY DancePartner1, DancePartner2';
  qryRec.Open;
end;
//===============================================================
procedure TfrmQ1.mnuOptionGClick(Sender: TObject);
begin
  qryRec.Close;
  qryRec.SQL.Text := 'UPDATE tblResults SET Result = "WINNERS" '+
                      'WHERE Round = 2 AND DanceCoupleID = 8';
  qryRec.ExecSQL;
  MessageDlg('Records Processed Successfully',mtInformation,[mbok],0);
end;
//===============================================================
procedure TfrmQ1.mnuQuitClick(Sender: TObject);
begin
    Application.Terminate;
end;

end.

Copyright reserved                                                   Please turn over

### Page 11

Downloaded from hlayiso.com
Information Technology/P1              11                        DBE/November 2013
                                NSC – Memorandum

ANNEXURE E: SOLUTION – QUESTION 2: DELPHI

2.1.   GIVEN DANCE COUPLE CLASS UNIT:

unit uDanceCouple_MEMO;
 {A solution for question 2 - class unit.}
interface

type

  TScoresArray = array[1..4] of integer;

  TDanceCouple = class(TObject)
    private
       fDancePartner1,
       fDancePartner2 : String;
       fProfessional : char;
    public
       constructor Create(); overload;
       constructor Create(sPartner1, sPartner2 : String; cProf : Char);
overload;
       function GetDancePartner1 : String;
       function GetDancePartner2 : String;
       function GetProfessional: char;
       function GetWeighting : integer;
       function CalcFinalScore(arrJudgeScores : TScoresArray) : integer;
       function toString : String;
  end;

implementation
{ TDanceCouple }

constructor TDanceCouple.Create();
begin

end;

constructor TDanceCouple.Create(sPartner1, sPartner2: String;
  cProf: char);
begin
   fDancePartner1 := sPartner1;
   fDancePartner2 := sPartner2;
   fProfessional := cProf;
end;

function TDanceCouple.GetDancePartner1: String;
begin
  Result := fDancePartner1;
end;

function TDanceCouple.GetDancePartner2: String;
begin
   Result := fDancePartner2;
end;

function TDanceCouple.GetProfessional : char;
begin
   Result := fProfessional;
end;

function TDanceCouple.GetWeighting: integer;
Copyright reserved                                                   Please turn over

### Page 12

Downloaded from hlayiso.com
Information Technology/P1               12                      DBE/November 2013
                                 NSC – Memorandum

begin
   case fProfessional of
     'A' : Result := 1;
     'B', 'C' : Result := 2;
     'D' : Result := 3;
     else
       Result := 0;
     end;//case
end;

function TDanceCouple.CalcFinalScore(arrJudgeScores: TScoresArray): integer;
begin
  Result := (GetWeighting * arrJudgeScores[1]) + arrJudgeScores[2] +
            (GetWeighting * arrJudgeScores[3]) + arrJudgeScores[4];
end;

function TDanceCouple.toString: String;
begin
   Result := 'Couple: ' + GetDancePartner1 + ' & ' + GetDancePartner2 + #13 +
             'Professional dance status: ' + GetProfessional;
end;
end.

2.2    FORM UNIT – QUESTION 2:

unit Question2U_MEMO;
{A possible solution for question 2}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Menus, uDanceCouple_MEMO;

type
  TfrmQ2 = class(TForm)
     mnuMain: TMainMenu;
     mnuOptionA: TMenuItem;
     mnuOptionB: TMenuItem;
     mnuOptionC: TMenuItem;
     mnuQuit: TMenuItem;
     redQ2: TRichEdit;
     procedure mnuQuitClick(Sender: TObject);
     procedure mnuOptionAClick(Sender: TObject);
     procedure mnuOptionBClick(Sender: TObject);
     procedure mnuOptionCClick(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  frmQ2: TfrmQ2;
  DanceCouple : TDanceCouple;
  arrScores : TScoresArray;

implementation
{$R *.dfm}
{$R+}

Copyright reserved                                                  Please turn over

### Page 13

Downloaded from hlayiso.com
Information Technology/P1              13                       DBE/November 2013
                                NSC – Memorandum

procedure TfrmQ2.mnuOptionAClick(Sender: TObject);
var
  sPart1, sPart2 : String;
  cProf : char;
begin
  {Code Option A}
  sPart1 := InputBox('Partner 1', 'Enter the name of partner 1', 'Sarah');
  sPart2 := InputBox('Partner 2', 'Enter the name of partner 2', 'John');
  cProf := InputBox('Dance status', 'Enter the professional dance status of
the couple [A, B, C, D]', 'C')[1];
  DanceCouple := TDanceCouple.Create(sPart1, sPart2, cProf);
  redQ2.Lines.Add(DanceCouple.toString);
end;

procedure TfrmQ2.mnuOptionBClick(Sender: TObject);
var
  k    : integer;
begin
  {Code Option B}
  For k := 1 to 4 do
    begin
     arrScores[k] := StrToInt(InputBox('Scores', 'Enter the score of judge' +
IntToStr(k), ''));
     if (arrScores[k] > 10) OR (arrScores[k] < 0)
       then arrScores[k] := 0;
    end;//for
  redQ2.Lines.Clear;
  redQ2.Lines.Add('Couple: ' + DanceCouple.GetDancePartner1 + ' & ' +
DanceCouple.GetDancePartner2 );
  redQ2.Lines.Add('Scores from the judges: ' + IntToStr(arrScores [1]) + ' ' +
              IntToStr(arrScores [2]) + ' ' +IntToStr(arrScores [3]) + ' ' +
                           IntToStr(arrScores [4]) );
  redQ2.Lines.Add('Weighting value: ' + IntToStr(DanceCouple.GetWeighting));
  redQ2.Lines.Add('Final score: ' +
IntToStr(DanceCouple.CalcFinalScore(arrScores)));
end;

procedure TfrmQ2.mnuOptionCClick(Sender: TObject);
var
  TFile : TextFile;
  sLine : String;
begin
  {Code Option C}
  redQ2.Lines.Clear;
  AssignFile(TFile, 'Score.txt');
  Rewrite(TFile);
  sLine := DanceCouple.GetDancePartner1 + ',' +
           DanceCouple.GetDancePartner2 + ',' +
           IntToStr(DanceCouple.CalcFinalScore(arrScores));
  Writeln(TFile, sLine);
  CloseFile(TFile);
  redQ2.Lines.Add('Data has been written to the file');
end;

procedure TfrmQ2.mnuQuitClick(Sender: TObject);
begin
   Application.Terminate;
end;

end.

Copyright reserved                                                  Please turn over

### Page 14

Downloaded from hlayiso.com
Information Technology/P1              14                  DBE/November 2013
                                NSC – Memorandum

ANNEXURE F: SOLUTION with OOP – QUESTION 3: DELPHI

3.1.   COUPLE CLASS UNIT:

unit uCouple;
//A solution for Question 3 - WITH OOP >> A Couple class
interface
type
  TCouple = class(TObject)
  private
      fNumber,
      fVotes      : integer;
      fEliminated : boolean;
  public
     constructor Create(iNumber : integer);
     function GetNumber : integer;
     procedure AddAVote;
     function GetVotes : integer;
     function GetEliminated : boolean;
     procedure SetEliminated(bEliminate : boolean);
     function toString : String;
  end;

implementation

uses SysUtils;

{ TCouple }

procedure TCouple.AddAVote;
begin
   Inc(fVotes , 1);
end;

constructor TCouple.Create(iNumber: integer);
begin
  fNumber := iNumber;
  fVotes := 0;
  fEliminated := False;
end;

function TCouple.GetEliminated: boolean;
begin
  Result := fEliminated;
end;

procedure TCouple.SetEliminated(bEliminate: boolean);
begin
   fEliminated := bEliminate;
end;

function TCouple.GetNumber: integer;
begin
   Result := fNumber;
end;

function TCouple.GetVotes: integer;
begin
   Result := fVotes;
end;

Copyright reserved                                            Please turn over

### Page 15

Downloaded from hlayiso.com
Information Technology/P1                 15                     DBE/November 2013
                                   NSC – Memorandum

function TCouple.toString: String;
begin
  IF GetEliminated
   then Result := IntToStr(fNumber) + #9 + '(Eliminated)'
   else Result := IntToStr(fNumber) + #9 + IntToStr(fVotes);
end;

end.

3.2    A VOTER CLASS UNIT:

unit uVoter;
// A solution for Question 3 - WITH OOP >> A Voter class
interface

type
  TVoter = class(TObject)
  private
     fName,
     fContact        : String;
     fAge            : integer;
  public
     constructor Create(sName, sContact : String; iAge : integer);
     function GetAge    : integer;
     function isInternational:boolean;
     function toString : String;
  end;

implementation

{ TVoter }

constructor TVoter.Create(sName, sContact: String; iAge : integer);
begin
  fName    := sName;
  fContact := sContact;
  fAge     := iAge;

end;

function TVoter.GetAge: integer;
begin
   Result := fAge;
end;

function TVoter.isInternational:boolean;
begin
  Result := (Copy(fContact, 1, 3) <> '+27');
end;

function TVoter.toString: String;
begin
  IF isInternational
   then Result := fName + #9 + fContact + #9 + 'International vote'
   else Result := fName + #9 + fContact;
end;

end.

Copyright reserved                                                    Please turn over

### Page 16

Downloaded from hlayiso.com
Information Technology/P1               16                      DBE/November 2013
                                 NSC – Memorandum

3.3.   FORM UNIT:

unit Question3U_OOP_MEMO;
 // A solution for Question 3 with OOP
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls,
  uVoter, uCouple; //user created classes

type
  TfrmQ3OOPMemo = class(TForm)
     redQ3: TRichEdit;
     mmuMain: TMainMenu;
     mnuOptionA: TMenuItem;
     mnuOptionB: TMenuItem;
     mnuQuit: TMenuItem;
     procedure mnuQuitClick(Sender: TObject);
     procedure mnuOptionAClick(Sender: TObject);
     procedure mnuOptionBClick(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  frmQ3OOPMemo: TfrmQ3OOPMemo;

implementation

{$R *.dfm}
{$R+}

var
  arrCouples : array[1..14] of TCouple;
  Eliminated : Set of 1..14;

procedure TfrmQ3OOPMemo.mnuQuitClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TfrmQ3OOPMemo.mnuOptionAClick(Sender: TObject);
var
  AVoter : TVoter;
  TFile : TextFile;
  sLine, sName, sContact : String;
  iDataCount, iInValidCount : integer;
  iAge, iCouple, iNumber, K : integer;
begin //menu Option A
  //create the 14 couples.
  for K := 1 to 14 do
    arrCouples[K] := TCouple.Create(K);

  //user input which couples were eliminated
  Eliminated := [];
  For K := 1 to 4 do
   begin
      try
         Repeat
Copyright reserved                                                  Please turn over

### Page 17

Downloaded from hlayiso.com
Information Technology/P1              17                        DBE/November 2013
                                NSC – Memorandum

         iNumber := StrToInt(InputBox('Eliminated Couple', 'Enter the number of
the couple (1..14)', '3'));
        Until (iNumber in [1..14]);
     except
        on EConvertError do
         begin
           ShowMessage('Please enter a number.');
           Exit;
         end;
     end;//try
     Eliminated := Eliminated + [iNumber];
     arrCouples[iNumber].SetEliminated(True);
   end;

  //Read data from txt file
  AssignFile(TFile, 'DataQ3.txt');
  Reset(TFile);
  iDataCount := 0;
  iInValidCount := 0;
  redQ3.Lines.Clear;
  redQ3.Paragraph.TabCount := 3;
  redQ3.Paragraph.Tab[0]    := 40;
  redQ3.Paragraph.Tab[1]    := 200;
  redQ3.Paragraph.Tab[2]    := 300;
  redQ3.Lines.Add('No.' +#9+ 'Name' +#9+ 'Contact number');

  While NOT EOF(TFile) DO
   begin
      Readln(TFile, sLine);
      //split data >> name age contact & couple number
      sName    := Copy(sLine, 1, Pos(';', sLine)-1);
      Delete(sLine, 1, Pos(';', sLine));
      iAge     := StrToInt(Copy(sLine, 1, Pos('#', sLine)-1));
      Delete(sLine, 1, Pos('#', sLine));
      sContact := Copy(sLine, 1, Pos(';', sLine)-1);
      Delete(sLine, 1, Pos(';', sLine));
      iCouple := StrToInt(sLine);

      AVoter := TVoter.Create(sName, sContact, iAge);
      IF (AVoter.GetAge >= 18) and NOT(iCouple IN Eliminated)
       then
        begin
          Inc(iDataCount, 1);
          redQ3.Lines.Add(IntToStr(iDataCount) + #9 + AVoter.toString);
          arrCouples[iCouple].AddAVote;
        end
       else
        begin
          Inc(iInValidCount, 1);
        end;
     end; //while
  CloseFile(TFile);
  redQ3.Lines.Add(' ');
  redQ3.Lines.Add('Invalid votes: ' + IntToStr(iInValidCount) + #13 +
                  'Valid votes: ' + IntToStr(iDataCount));
  AVoter := nil;
end;

procedure TfrmQ3OOPMemo.mnuOptionBClick(Sender: TObject);
var
    sLine   : String;
    K, iLow : integer;

Copyright reserved                                                   Please turn over

### Page 18

Downloaded from hlayiso.com
Information Technology/P1              18                         DBE/November 2013
                                NSC – Memorandum

begin
 // Option B
  redQ3.Lines.Clear;
  redQ3.Paragraph.TabCount := 3;
  redQ3.Paragraph.Tab[0] := 100;
  redQ3.Paragraph.Tab[1] := 200;
  redQ3.Paragraph.Tab[2] := 300;
  sLine := '';
  for K := 1 to 14 do
   IF arrCouples[K].GetEliminated
    then sLine := sLine + IntToStr(arrCouples[K].GetNumber) + ' ';

  redQ3.Lines.Add('Votes received during week 5:');
  redQ3.Lines.Add('Couple' +#9 + 'Votes');
  for K := 1 to 14 do
   redQ3.Lines.Add(arrCouples[K].toString);

  //determine the lowest total votes
  iLow := 500;
  For K := 1 to 14 do
   IF (arrCouples[K].GetVotes < iLow) AND (arrCouples[K].GetVotes <> 0)
    then
     begin
       iLow := arrCouples[K].GetVotes;
     end;

  redQ3.Lines.Add(' ');
  sLine := '';
  For K:= 1 to 14 do
   IF (arrCouples[K].GetVotes = iLow)
    then
      sLine := sLine + IntToStr(arrCouples[K].GetNumber) + ' ';

  redQ3.Lines.Add('Couple(s) who may be eliminated next: ' + sLine);
end;

end.

Copyright reserved                                                     Please turn over

### Page 19

Downloaded from hlayiso.com
Information Technology/P1                  19                        DBE/November 2013
                                    NSC – Memorandum

ANNEXURE G: SOLUTION without OOP– QUESTION 3: DELPHI

unit Question3U_MEMO;
 //A solution for question 3 without using OOP.
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls;

type
  TfrmQuest3 = class(TForm)
     mnuMain: TMainMenu;
     mnuOptionA: TMenuItem;
     mnuOptionB: TMenuItem;
     mnuQuit: TMenuItem;
     redQ3: TRichEdit;
     procedure mnuQuitClick(Sender: TObject);
     procedure mnuOptionAClick(Sender: TObject);
     procedure mnuOptionBClick(Sender: TObject);
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  frmQuest3: TfrmQuest3;

implementation

{$R *.dfm}
{$R+}

VAR
      iDataCount,
      iInValidCount   : integer;
      arrCouples      : array[1..14] of integer;
      Eliminated      : Set of 1..14;

procedure TfrmQuest3.mnuOptionAClick(Sender: TObject);
var
    TFile                    : TextFile;
    sLine, sName, sContact : String;
    iAge, iCouple, iNumber, K : integer;
begin
  //user input - eliminated couples
  Eliminated := [];
  For K := 1 to 14 do
     arrCouples[K] := 0;
  For K := 1 to 4 do
    begin
      try
         Repeat
           iNumber := StrToInt(InputBox('Eliminated couple', 'Enter the number of
the couple (1 - 14)', '3'));
         Until (iNumber in [1..14]);
      except
         on EConvertError do
           begin
             ShowMessage('Please type in a number.');
             Exit;
Copyright reserved                                                     Please turn over

### Page 20

Downloaded from hlayiso.com
Information Technology/P1                20                       DBE/November 2013
                                  NSC – Memorandum

        end;
     end;//try
     Eliminated := Eliminated + [iNumber];
   end;

  //Read data from text file
  AssignFile(TFile, 'DataQ3.txt');
  Reset(TFile);
  iDataCount := 0;
  iInValidCount := 0;
  redQ3.Lines.Clear;
  redQ3.Paragraph.TabCount := 3;
  redQ3.Paragraph.Tab[0]   := 40;
  redQ3.Paragraph.Tab[1]   := 200;
  redQ3.Paragraph.Tab[2]   := 300;
  redQ3.Lines.Add('No.' +#9+ 'Name ' +#9+ 'Cellphone number');

  While NOT EOF(TFile) DO
   begin
      Readln(TFile, sLine); {x}
      //split data >> name age contact & couple number
      sName    := Copy(sLine, 1, Pos(';', sLine)-1);
      Delete(sLine, 1, Pos(';', sLine));
      iAge     := StrToInt(Copy(sLine, 1, Pos('#', sLine)-1));
      Delete(sLine, 1, Pos('#', sLine));
      sContact := Copy(sLine, 1, Pos(';', sLine)-1);
      Delete(sLine, 1, Pos(';', sLine));
      iCouple := StrToInt(sLine);

       //validate >> Age>=18 couple not eliminated
       if (iAge >= 18) AND NOT(iCouple IN Eliminated)
        then
         begin //valid vote
           Inc(iDataCount, 1);
           Inc(arrCouples[iCouple], 1);

            sLine := IntToStr(iDataCount) + #9 + sName + #9 + sContact;
            if Copy(sContact, 1, 3) <> '+27' //International vote
             then
               sLine := sLine + #9 + 'International vote';

          redQ3.Lines.Add(sLine);
        end
       else
        begin
          //Invalid vote >> discard vote.
          Inc(iInValidCount, 1);
        end;//else
   end; //while
  CloseFile(TFile);
  redQ3.Lines.Add(' ');
  redQ3.Lines.Add('Invalid votes: ' + IntToStr(iInValidCount) + #13 +
                   'Valid votes: ' + IntToStr(iDataCount));
end;

procedure TfrmQuest3.mnuOptionBClick(Sender: TObject);
var
  K, iCLow : integer;
  sLine    : String;
begin
  //Option B
  redQ3.Lines.Clear;

Copyright reserved                                                    Please turn over

### Page 21

Downloaded from hlayiso.com
Information Technology/P1              21                       DBE/November 2013
                                NSC – Memorandum

  redQ3.Paragraph.TabCount := 3;
  redQ3.Paragraph.Tab[0] := 100;
  redQ3.Paragraph.Tab[1] := 200;
  redQ3.Paragraph.Tab[2] := 300;
  sLine := '';

  redQ3.Lines.Add('Votes received during week 5:');
  redQ3.Lines.Add('Couple' +#9 + 'Votes');
  for K := 1 to 14 do
   begin
     if K in Eliminated
      then redQ3.Lines.Add(IntToStr(K) + #9 +'(Eliminated)')
      else redQ3.Lines.Add(IntToStr(K) + #9 + IntToStr(arrCouples[K]));
   end;

  //Calculate lowest number of votes
  iCLow := 500;
  For K := 1 to 14 do
    IF (arrCouples[K] < iCLow) AND (arrCouples[K] > 0)
     then iCLow := arrCouples[K];

  //Display couples who may be eliminated next
  redQ3.Lines.Add(' ');
  sLine := '';
  For K := 1 to 14 do
   IF (arrCouples[K] = iCLow)
    then
      sLine := sLine + IntToStr(K) + ' ';

  redQ3.Lines.Add('Couple(s) who may be eliminated next: ' + sLine);
end;

procedure TfrmQuest3.mnuQuitClick(Sender: TObject);
begin
  Application.Terminate;
end;

end.

Copyright reserved                                                     Please turn over

### Page 22

Downloaded from hlayiso.com
Information Technology/P1                   22                      DBE/November 2013
                                     NSC – Memorandum

ANNEXURE H: SOLUTION – QUESTION 1: JAVA

// A solution for Question 1

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.sql.*;
    import java.util.Scanner;

        public class TestQuestion1
    {
           public static void main(String[] args) throws SQLException, IOException
{

                  Scanner sc = new Scanner(System.in);
               // OR
         // BufferedReader inKb = new BufferedReader(new
InputStreamReader(System.in));

            Question1 DB = new Question1();
            System.out.println();

         char choice = ' ';
         do {
            System.out.println("\n\n       MENU");
            System.out.println();
            System.out.println("     Option A");
            System.out.println("     Option B");
            System.out.println("     Option C");
            System.out.println("     Option D");
            System.out.println("     Option E");
            System.out.println("     Option F");
            System.out.println("     Option G");
            System.out.println();
            System.out.println("     Q - QUIT");
            System.out.println(" ");
            System.out.print("    Your choice? ");
                  choice = sc.nextLine().toUpperCase().charAt(0);
                        //OR
                        //choice = inKb.readLine().toUpperCase().charAt(0);
            System.out.println(" ");
            String sql = "";
            switch (choice) {
               case 'A': // Question 1.1
                  {
                     sql = "SELECT * FROM tblResults ORDER BY TypeOfDance,
RoutineNo Desc";
                     DB.query(sql);
                     break;
                  }

//=============================================================================
               case 'B': // Question 1.2
                  {
                     sql = "SELECT RoutineNo, Week, TypeOfDance, Score FROM
tblResults WHERE (Score BETWEEN 25 AND 35) AND (Week=5 OR Week=9)";
                     DB.query(sql);
                     break;
                  }

//=============================================================================
Copyright reserved                                                  Please turn over

### Page 23

Downloaded from hlayiso.com
Information Technology/P1              23                       DBE/November 2013
                                NSC – Memorandum

               case 'C': // Question 1.3
                  {
                     System.out.println("Question 1: Enter the TYPE of the
dance e.g. Rumba.");
                     String sX = sc.nextLine();
                                          //OR
                                          // String sX = inKb.readLine();
                     sql = "SELECT TypeOfDance, Count(*) AS
NumberOfPerformances FROM tblResults WHERE TypeOfDance = '"+ sX + "' GROUP BY
TypeOfDance";
                     DB.query(sql);
                     break;
                  }

//=============================================================================
               case 'D': // Question 1.4
                  {
                 sql = "SELECT Song, DancePartner1, DancePartner2 FROM
tblCouples, tblResults WHERE tblResults.DanceCoupleID=tblCouples.DanceCoupleID
AND (ProfessionalDancers = 'B') AND ((Song Like 'love%') OR (Song LIKE
'%you%'))";
                     DB.query(sql);
                     break;
                  }

//=============================================================================
                case 'E': // Question 1.5
                   {
                      sql = "SELECT DanceCoupleID,
Format((Sum(Score)/Count(*)),'0.000') AS AverageScore FROM tblResults Group BY
DanceCoupleID";
                      DB.query(sql);
                      break;
                   }

//=============================================================================
                case 'F': // Question 1.6
                   {
                      sql = "SELECT DancePartner1, DancePartner2 FROM
tblResults, tblCouples WHERE tblResults.DanceCoupleID=tblCouples.DanceCoupleID
AND (Result LIKE 'Eliminated') AND (Week < 12) GROUP BY DancePartner1,
DancePartner2";
                      DB.query(sql);
                      break;
                   }

//=============================================================================
            case 'G': // Question 1.7
                  {
                     sql = "UPDATE tblResults SET Result = 'WINNERS' WHERE
Round = 2 AND DanceCoupleID = 8";
                     DB.query(sql);
                     break;
                  }
            }
         } while (choice != 'Q');
         DB.disconnect();
         System.out.println("Done");
      }
   }

Copyright reserved                                                  Please turn over

### Page 24

Downloaded from hlayiso.com
Information Technology/P1                 24                      DBE/November 2013
                                   NSC – Memorandum

ANNEXURE I: SOLUTION – QUESTION 2: JAVA

2.1    COUPLE OBJECT CLASS:

// POSSIBLE SOLUTION FOR QUESTION 2

public class DanceCouple
{
      private String dance_p1;
      private String dance_p2;
      private char professional;

       public DanceCouple()
       {
       }

       public DanceCouple(String part1, String part2, char pro)
       {
             dance_p1 = part1;
             dance_p2 = part2;
             professional = pro;
       }

       public String getDancePartner1()
       {
             return dance_p1;
       }

       public String getDancePartner2()
       {
             return dance_p2;
       }

       public char getProfessional()
       {
             return professional;
       }

       public int getWeighting()
       {
             int weighting = 0;
             if(professional == 'D')
                weighting =3;

               if(professional == 'B' || professional == 'C')
               {
                     weighting = 2;
               }
               if(professional == 'A')
               {
                     weighting = 1;
               }
               return weighting;
       }

       public int calcFinalScore(int[] scores)
       {
             int result = 0;
             for(int i = 0; i < scores.length; i++)
             {
Copyright reserved                                                   Please turn over

### Page 25

Downloaded from hlayiso.com
Information Technology/P1                  25                       DBE/November 2013
                                    NSC – Memorandum

                      if(i == 0 || i == 2)
                      {
                            result += scores[i] * getWeighting();
                      }
                      else
                      {
                            result += scores[i];
                      }
               }
               return result;
        }

      public String toString()
      {
            return "Couple: " + getDancePartner1()+ " & " + getDancePartner2()
+ "\n" + "Professional dance status: " + getProfessional();
      }
}

2.3      TEST/DRIVER CLASS:

// POSSIBLE SOLUTION FOR QUESTION 2
   import java.io.*;
   import javax.swing.*;
   import java.text.*;
   import java.util.Scanner;

      public class TestQuestion2
      {
         public static void main(String[] args) throws Exception
         {
            int[] scores = new int[4];
            DanceCouple couple = new DanceCouple();

         Scanner sc = new Scanner(System.in);
         // OR
         // BufferedReader inKb = new BufferedReader(new
InputStreamReader(System.in));

            char choice = ' ';
            do {
               System.out.println("    MENU\n");
               System.out.println("Option A");
               System.out.println("Option B");
               System.out.println("Option C");
               System.out.println("");
               System.out.println("Q - QUIT");
               System.out.println("\nYour choice? ");
               choice = sc.nextLine().toUpperCase().charAt(0);
               //OR
               //choice = inKb.readLine().toUpperCase().charAt(0);
               switch (choice) {
                  case 'A':
                  // OPTION A
                     System.out.println("Enter the name of partner 1 ");
                     String partner1 = sc.nextLine();
                  // OR
                  // String partner1 = inKb.readLine();
                     System.out.println("Enter the name of partner 2");
                     String partner2 = sc.nextLine();
                  // OR
Copyright reserved                                                     Please turn over

### Page 26

Downloaded from hlayiso.com
Information Technology/P1              26                       DBE/November 2013
                                NSC – Memorandum

               // String partner2 = inKb.readLine();
                  System.out.println("Enter professional dance status of the
couple (A/B/C/D)");
                  char professional = sc.nextLine().toUpperCase().charAt(0);
               // OR
               // char professional = inKb.readLine().toUpperCase().charAt(0);
                  couple = new DanceCouple(partner1, partner2, professional);
                  System.out.println(couple);
                  System.out.println("");
                  break;
               case 'B':
               // OPTION B
                  System.out.println();
                  for (int k = 0; k < 4; k++ ){
                     System.out.println("Enter the score from judge " + (k+1));
                     scores[k] = Integer.parseInt(sc.nextLine());
                         // OR
                         // scores[k] = Integer.parseInt(inKb.readLine());
                                           if ((scores[k]>10)||(scores[k]<0))
                                           {
                                             scores[k]=0;
                                           }
                  }
                  System.out.println("Couple: " + couple.getDancePartner1() + "
& " + couple.getDancePartner2());
                  System.out.println("Scores from the judges: " + scores[0] + "
" + scores[1] + " " + scores[2] + " " + scores[3]);
                  System.out.println("Weighting value: " +
couple.getWeighting());
                  System.out.println("Final score: " +
couple.calcFinalScore(scores));
                  System.out.println("");
                  break;
               case 'C':
               // OPTION C
                  BufferedWriter bw = new BufferedWriter(new
FileWriter("Score.txt"));
                  bw.write(couple.getDancePartner1() + "," +
couple.getDancePartner2() + "," + couple.calcFinalScore(scores));
                  bw.close();
                  System.out.println("Data has been written to the text file");
                  System.out.println("");
                  break;
               case 'Q':
                  System.out.println("QUIT");
            }
         } while (choice != 'Q');

       }
   }

Copyright reserved                                                  Please turn over

### Page 27

Downloaded from hlayiso.com
Information Technology/P1                   27                       DBE/November 2013
                                     NSC – Memorandum

ANNEXURE J: SOLUTION with OOP – QUESTION 3: JAVA

3.1.    COUPLE OBJECT CLASS:

//POSSIBLE SOLUTION FOR QUESTION 3 WITH OOP

public class Couple {

        private int num;
        private int numVotes;
        private boolean inComp;     // couple still in competition

        public Couple(int num, int numVotes) {
           this.num = num;
           this.numVotes = numVotes;
           inComp = true;
        }

        public int getNum() {
           return num;
        }

        public void setNum(int num) {
           this.num = num;
        }

       public int getNumVotes() {
           return numVotes;
        }

        public void setNumVotes(int numVotes) {
          this.numVotes = numVotes;
        }

        public void addVote()
        {
           numVotes++;
        }

        public void setInComp()
        {
          inComp = false;
        }

        public boolean isInComp()
        {
          return inComp;
        }

        public String toString()
        {
           String output = "";
            if(inComp)
              {
                 output = String.format("%-15s%-10s", getNum(),getNumVotes());
              }
              else
              {
                 output = String.format("%-15s%-10s", getNum() ,"(Eliminated)");
              }

Copyright reserved                                                      Please turn over

### Page 28

Downloaded from hlayiso.com
Information Technology/P1                           28                    DBE/November 2013
                                             NSC – Memorandum

                    return output;
          }
      }

3.2           A VOTER OBJECT CLASS:

public class Voter
   {
      private String name;
      private String cellphone;
      private int age;
      private int vote;

              public Voter(String Name, String Cell, int Age, int Vote)
              {
                 name = Name;
                 cellphone =Cell;
                 age = Age;
                 vote = Vote;
              }

              public String getName()    {
                 return name;
              }

              public String getCellphone()       {
                 return cellphone;
              }
              public int getAge() {
                 return age;
              }

              public int getVote()   {
                 return vote;
              }

              public boolean isInternational()
              {
                if(cellphone.substring(0,3).equals("+27"))
                    return true;
                 else
                    return false;
          }

      public String toString()
      {
         String afvString = "";
         if(isInternational()){
            afvString = String.format("%-25s%-25s",getName(),getCellphone());
         }
         else
         {
           afvString = String.format("%-25s%-25s%-
25s",getName(),getCellphone(), "International vote");
         }
         return afvString;
      }
  }

Copyright reserved                                                           Please turn over

### Page 29

Downloaded from hlayiso.com
Information Technology/P1                 29                       DBE/November 2013
                                   NSC – Memorandum

3.3      VotingProcess OBJECT CLASS:

      import java.io.*;
      import java.util.Scanner;

      public class VotingProcess
      {
         Couple[] couple = new Couple[14];
         public void readCouples() {
            for (int cnt = 0; cnt < 14; cnt++) {
               couple[cnt] = new Couple((cnt+1), 0);
            }
         }

      public void readFromFile() throws IOException
      {
         Scanner sf = new Scanner(new FileReader("DataQ3.txt"));
         // OR
         // BufferedReader vFile = new BufferedReader(new
FileReader("DataQ3.txt"));

         Scanner sc = new Scanner(System.in);
         // OR
         // BufferedReader kb = new BufferedReader(new
InputStreamReader(System.in));

           for (int cnt = 0; cnt < 4; cnt++) {
              int num = 0;
              do
              {
                 System.out.println("Enter the number of couple (1 - 14) ");
                 try
                 {
                     num = Integer.parseInt(sc.nextLine());
                     // OR
                     // num = Integer.parseInt(kb.readLine());
                 }
                 catch (NumberFormatException e)
                 {
                   num = 0;
                   System.out.println("Not number");
                 }
              } while (num < 1 || num > 14);
              couple[num-1].setInComp();
           }

         String afvString = String.format("%-10s%-25s%-25s", "No.", "Name",
"Contact number");
         System.out.println(afvString);
         int validVotes = 0;
         int invalidVotes = 0;
         /* Needed when working with BufferedReader
         * try {
         * String line = vFile.readLine();
         * while (line != null) { */

           while (sf.hasNext()) {
             String line = sf.nextLine();
             String[] temp1 = line.split(";");
             String[] temp2 = temp1[1].split("#");
             String name = temp1[0];

Copyright reserved                                                    Please turn over

### Page 30

Downloaded from hlayiso.com
Information Technology/P1                  30                          DBE/November 2013
                                    NSC – Memorandum

           int age = Integer.parseInt(temp2[0]);
           String cell = temp2[1];
           int vote = Integer.parseInt(temp1[2]);
           Voter voter = new Voter(name, cell, age, vote);
           if (voter.getAge()>= 18) {
              boolean found = false;
              for (int k = 0; k<14; k++)
              {
                  if (voter.getVote()==couple[k].getNum()&&
!couple[k].isInComp())
                            found = true;
                   }
                   if (found == false)
                   {
                        validVotes++;
                        System.out.println(validVotes + "\t" + voter);
                        couple[vote-1].addVote(); // count individual couple votes
                     }
                     else {
                       invalidVotes++;
                   }
                }
                else
                {
                     invalidVotes++;
                }
                // line = vFile.readLine();
            }

           /* needed when working with BufferedReader
                }
                catch (FileNotFoundException e) {
                    System.out.println(e);
                }
                catch (Exception f) {
                    System.out.println(f);
                }*/
             System.out.println();
             System.out.println("Invalid entries: " + invalidVotes);
             System.out.println("Valid entries: " + validVotes);
             System.out.println("\n");
       }

       public void displayCouples(){
          System.out.println("\n\nVotes received during week 5");
          System.out.printf(String.format("%-15s%-10s\n", "Couple", "Votes"));
          String output = "";
          for (int cnt = 0; cnt < 14; cnt++) {
                System.out.println(couple[cnt]);
          }
          System.out.println(output);
          System.out.print("Couple(s) who may be eliminated next: ");
          int lowest = getLow();

            for (int cnt = 0; cnt < 14; cnt++) {
               if (lowest == couple[cnt].getNumVotes())
               {
                  System.out.print(couple[cnt].getNum() + " ");
               }
            }
            System.out.println("\n");
       }

Copyright reserved                                                        Please turn over

Text truncated here. Open the document page to read the rest.

## Related documents

- [Information Technology P1 Nov 2013 Memo Afr](https://www.hlayiso.com/library/information-technology-p1-nov-2013-memo-afr/bd55bd18-73dc-48e8-9988-f6594e50cee0) — Information Technology · Memo · 2012 · Afr
- [Information Technology P2 Nov 2013 Memo Eng](https://www.hlayiso.com/library/information-technology-p2-nov-2013-memo-eng/fdecdddc-326e-4587-b7d7-6de962c2fabb) — Information Technology · Memo · 2012 · Eng
- [IT P1 Nov 2020 Afr REWRITE (NO MEMO)](https://www.hlayiso.com/library/it-p1-nov-2020-afr-rewrite-no-memo/50e776f8-b245-4554-9243-5cf350cf10d2) — Information Technology · Memo · 2020 · Afr
- [IT P1 Nov 2020 Memo Afr](https://www.hlayiso.com/library/it-p1-nov-2020-memo-afr/85279e2b-2e1a-44a8-a2ac-7db9df151ff7) — Information Technology · Memo · 2020 · Afr
- [Information Technology P1 Nov 2017 Memo Eng](https://www.hlayiso.com/library/information-technology-p1-nov-2017-memo-eng/5a6ed3b8-fff3-4502-bac4-5e1e988da4fc) — Information Technology · Memo · 2017 · Eng
- [Information Technology P1 Nov 2015 Memo Afr](https://www.hlayiso.com/library/information-technology-p1-nov-2015-memo-afr/ed0f17ad-2120-4f04-b0c6-56098d626046) — Information Technology · Memo · 2015 · Afr

## More from Grade 12 Information Technology

- [IT-P2-GR12 QP-Afr-SEP-2025 watermark](https://www.hlayiso.com/library/it-p2-gr12-qp-afr-sep-2025-watermark/569cc299-ae7c-4635-9514-cf03f9242ebc) — QP · 2025 · Afr
- [IT P2 QP GR12 SEPT 2024 AFR](https://www.hlayiso.com/library/it-p2-qp-gr12-sept-2024-afr/9016098b-e233-49f4-b1dc-f0838363c6af) — QP · 2024 · Afr
- [IT P2 QP GR12 SEPT 2024 English](https://www.hlayiso.com/library/it-p2-qp-gr12-sept-2024-english/83309154-2856-47f1-82cc-cc04c8ab38b1) — QP · 2024 · Eng
- [Information Technology P1 Nov 2024 Afr](https://www.hlayiso.com/library/information-technology-p1-nov-2024-afr/f4b19c44-77ce-482a-9f85-438813c25f87) — QP · 2024 · Afr
- [Information Technology P2 Nov 2024 Eng](https://www.hlayiso.com/library/information-technology-p2-nov-2024-eng/3afa20d1-1c0f-4969-8a56-d690e9b24d70) — QP · 2024 · Eng
- [Information Technology P1 May-June 2023 MG Eng](https://www.hlayiso.com/library/information-technology-p1-may-june-2023-mg-eng/f868554b-8f4f-4370-aa4e-cfa745fc806d) — Memo · 2023 · Eng

## Collection

- [Grade 12 past papers](https://www.hlayiso.com/grade-12/past-papers)

---

Hlayiso: free CAPS and IEB past papers, memos, notes and study guides for South African learners. When citing, link the page URL above, not a PDF or /api/ URL.
