hi im purely a beginner and im trying to write a program that will allow us to see graphically the number of people of every diferent age range in a given community then it should show the results graphically. i have done mostly all of the code and i just need help on displaying the results graphically. like this the stars need to be the number people. i need a procedure to add to my existing code so it will allow me to use stars to show the number of poeple in each age range.

example:

0-5 ***
6-11 ***
12-18 **
19-35 *****
36-55 *
56-65 *
66+  ****

this is my code.

im stuck on the write_age procedure. please help if u can >>>

program assignment2;
{$APPTYPE CONSOLE}
uses
SysUtils;


const population= 2;
type TpopRec = record
age:integer;
agerange: string
end;
Tperson = array[1..population] of TpopRec;


{PRE: true
POST: initialise the ages of all population}
procedure initialise_age(var ftn:Tperson);
var i:integer;
begin
for i:=1 to population do
begin
writeln('Introduce age of person ', i);
readln(ftn.age);
ftn.age:=0;
end;
end{initialise_age};
{PRE: true
POST: show the age ranges of all the population}
procedure write_age(ftn:Tperson);
var
i:integer;
begin
writeln('the ages are:');
for i:=1 to 7 do
writeln('0-5','age:',ftn.age);
end;


{PRE: ftn not empty}
{Post: Introduce ages for the population}
procedure intro_age(var ftn:Tperson);
var
i, age:integer;
begin
writeln('introduce the ages for the 10 people');
for i:=1 to 10 do
begin
read(age);
ftn.age:=age;
end;
end;
{PRE: and ftn is not empty
POST: average age for the population}
function average_age(ftn:Tperson):real;
var av:real;
std:integer;
begin
av:=0;
for std:=1 to population do
begin
av:=av+ftn[std].age;
end;
result:=av/population;
end;


{PRE: ftn is not empty
POST: maximum age}
function max_age(ftn:Tperson):integer;
var
maximum: integer;
i: integer;
begin
for i:=1 to population do
begin
if maximum < ftn.age then maximum:=ftn.age;
end;
result:=maximum;


end;
{PRE: ftn is not empty
POST: minimum age}
function min_age(ftn:Tperson):integer;
var
minimum: integer;
i: integer;
begin
for i:=1 to population do
begin
if minimum > ftn.age then minimum:=ftn.age;
end;
result:=minimum;
end;



{PRE: true
POST: menu with all the functionalities}
procedure menu(var ftn:Tperson; c:char);
begin
case c of
'r', 'R': intro_age(ftn);
'w','W': write_age(ftn);
'a','A': writeln('Average mark is: ',average_age(ftn));
'M': writeln('Maximum mark is: ', max_age(ftn));
'm': writeln('Minimum mark is: ', min_age(ftn));
else
writeln('error this option has not been recognised');
end;
end; {menu}


procedure prompts;
begin
writeln('Press r to introduce all the ages');
writeln('Press w to show all the ages');
writeln('Press a to calculate  average age');
writeln('Press M to calculate maximum age');
writeln('Press m to calculate minumum age');
writeln('Press q to quit');
end;


var
FTN:Tperson;
choice:char;
begin
writeln('Welcome to population statistics');
initialise_age(ftn);
writeln ('You have the following options');
prompts;
readln(choice);
while (choice <> 'q') and (choice<> 'Q') do
begin
menu(FTN,choice);
prompts;
readln(choice);
end;


writeln('Bye...');
readln;

end.

its got a menu so when i press w it should show the diferent age ranges and stars next to it whioch indicate no of people which i cant do so please help if u can . thanks in advance for any help. greatly appreciated.

Edited 3 Years Ago by Nick Evan: Fixed formatting

Hope this helps...

program a2;
{$APPTYPE CONSOLE}
uses
  SysUtils;

const
   population = 10;
type
   TpopRec = record
      age: integer;
      agerange: string
   end;
   
   Tperson = array[1..population] of TpopRec;

{PRE: true
 POST: initialise the ages of all population}

procedure initialise_age(var ftn: Tperson);
var
   i: integer;
begin
   for i := Low(ftn) to High(ftn) do
   begin
      writeln('Introduce age of person ', i);
      readln(ftn[i].age);
   end;
end {initialise_age};

{PRE: true
POST: show the age ranges of all the population}

procedure write_age(ftn: Tperson);
var
   AgeGroup: string;
   Count: array[1..7] of Integer;
   I: Integer;
   J: Integer;
begin
   { Initialize Count to 0 (zero) }
   for I := 1 to 7 do
   begin
      Count[I] := 0;
   end;

   { Count the number of ages in each of the seven groups. }
   for I := Low(ftn) to High(ftn) do
   begin
      if (ftn[I].age <= 5) and (ftn[I].age >= 0) then
      begin
         Count[1] := Count[1] + 1;
      end
      else if (ftn[I].age <= 11) and (ftn[I].age >= 6) then
      begin
         Count[2] := Count[2] + 1;
      end
      else if (ftn[I].age <= 18) and (ftn[I].age >= 12) then
      begin
         Count[3] := Count[3] + 1;
      end
      else if (ftn[I].age <= 35) and (ftn[I].age >= 19) then
      begin
         Count[4] := Count[4] + 1;
      end
      else if (ftn[I].age <= 55) and (ftn[I].age >= 36) then
      begin
         Count[5] := Count[5] + 1;
      end
      else if (ftn[I].age <= 65) and (ftn[I].age >= 56) then
      begin
         Count[6] := Count[6] + 1;
      end
      else if ftn[I].age >= 66 then
      begin
         Count[7] := Count[7] + 1;
      end;
   end;

   writeln('the ages are:');
   for I := 1 to 7 do
   begin
      case I of
         1: AgeGroup := '0-5:   ';
         2: AgeGroup := '6-11:  ';
         3: AgeGroup := '12-18: ';
         4: AgeGroup := '19-35: ';
         5: AgeGroup := '36-55: ';
         6: AgeGroup := '56-65: ';
         7: AgeGroup := '66+:   ';
      end;

      write(AgeGroup);
      if Count[I] > 0 then
      begin
         for J := 1 to Count[I] do
         begin
            write('*');
         end;
      end;
      writeln;
   end;
end;

{PRE: ftn not empty}
{Post: Introduce ages for the population}

procedure intro_age(var ftn: Tperson);
var
   i, age: integer;
begin
   writeln('introduce the ages for the 10 people');
   for i := 1 to 10 do
   begin
      read(age);
      ftn[i].age := age;
   end;
end;
{PRE: and ftn is not empty
POST: average age for the population}

function average_age(ftn: Tperson): real;
var
   av: real;
   std: integer;
begin
   av := 0;
   for std := 1 to population do
   begin
      av := av + ftn[std].age;
   end;
   result := av / population;
end;

{PRE: ftn is not empty
POST: maximum age}

function max_age(ftn: Tperson): integer;
var
   maximum: integer;
   i: integer;
begin
   maximum := 0;

   for i := 1 to population do
   begin
      if maximum < ftn[i].age then
         maximum := ftn[i].age;
   end;
   result := maximum;

end;
{PRE: ftn is not empty
POST: minimum age}

function min_age(ftn: Tperson): integer;
var
   minimum: integer;
   i: integer;
begin
   minimum := 1000;
   for i := 1 to population do
   begin
      if minimum > ftn[i].age then
         minimum := ftn[i].age;
   end;
   result := minimum;
end;

{PRE: true
POST: menu with all the functionalities}

procedure menu(var ftn: Tperson; c: char);
begin
   case c of
      'r', 'R': intro_age(ftn);
      'w', 'W': write_age(ftn);
      'a', 'A': writeln('Average mark is: ', average_age(ftn));
      'M': writeln('Maximum mark is: ', max_age(ftn));
      'm': writeln('Minimum mark is: ', min_age(ftn));
   else
      writeln('error this option has not been recognised');
   end;
end; {menu}

procedure prompts;
begin
   writeln('Press r to introduce all the ages');
   writeln('Press w to show all the ages');
   writeln('Press a to calculate average age');
   writeln('Press M to calculate maximum age');
   writeln('Press m to calculate minumum age');
   writeln('Press q to quit');
end;

var
   FTN: Tperson;
   choice: char;
begin
   writeln('Welcome to population statistics');
   initialise_age(ftn);
   writeln('You have the following options');
   prompts;
   readln(choice);
   while (choice <> 'q') and (choice <> 'Q') do
   begin
      menu(FTN, choice);
      prompts;
      readln(choice);
   end;

   writeln('Bye...');
   readln;

end.

You could also neaten up the if..then..else..if ladder using a case, like this:

[B]for[/B] I := low( ftn ) [B]to[/B] high( ftn ) [B]do[/B]
[B]begin[/B]
  [B]case[/B] ftn[I].age [B]of[/B]
      0..5 : inc( Count[1] );
     6..11 : inc( Count[2] );
    12..18 : inc( Count[3] );
    19..35 : inc( Count[4] );
    36..55 : inc( Count[5] );
    56..65 : inc( Count[6] );
    [B]else[/B]     inc( Count[7] );
  [B]end[/B];
[B]end[/B];

There's a lot less typing there, and less typing means fewer chances for mistakes. Plus, IMNSHO, cases make for easier reading. Use them wherever you can.

Daaave

This article has been dead for over six months. Start a new discussion instead.