Write a pascal program that will accept the names of all sales staff members and their total sales for the month. The algorithm must calculate the commission at 3% of their total sales amount. It should also display the name, total sales and commission of the member with the highest commission and the number of persons without commission.

To write a Pascal program that accepts the names and total sales of sales staff members and calculates their commission, you can follow these steps:

Step 1: Declare variables and arrays
- First, declare variables and arrays to store the names, total sales, and commissions for the sales staff members. For example, you can declare arrays like "names", "sales", and "commissions" to store the corresponding values.

Step 2: Read input
- Use a loop to read the names and total sales for each sales staff member. Inside the loop, prompt the user for the name and total sales, and store them in the respective arrays.

Step 3: Calculate commissions
- Use another loop to calculate the commission for each sales staff member. Inside the loop, calculate the commission by multiplying the total sales by 0.03 (3%) and store it in the "commissions" array.

Step 4: Find the highest commission
- Iterate through the "commissions" array to find the highest commission value and its corresponding index. Initialize variables like "maxCommission" and "maxCommissionIndex" to keep track of the maximum commission and its index.

Step 5: Display results
- Display the name, total sales, and commission of the sales staff member with the highest commission using the index obtained from Step 4.
- Iterate through the "commissions" array to count the number of persons without commission (i.e., zero commission).

Here's an example Pascal program that implements the above steps:

```pascal
program SalesCommission;

const
MAX_STAFF_MEMBERS = 100;

var
names: array[1..MAX_STAFF_MEMBERS] of string;
sales: array[1..MAX_STAFF_MEMBERS] of real;
commissions: array[1..MAX_STAFF_MEMBERS] of real;
numStaffMembers, i, maxCommissionIndex, personsWithoutCommission: integer;
maxCommission: real;

begin
write('Enter the number of sales staff members: ');
readln(numStaffMembers);

// Step 2: Read input
for i := 1 to numStaffMembers do
begin
write('Enter the name of sales staff member ', i, ': ');
readln(names[i]);
write('Enter the total sales for the month: ');
readln(sales[i]);
end;

// Step 3: Calculate commissions
for i := 1 to numStaffMembers do
begin
commissions[i] := sales[i] * 0.03;
end;

// Step 4: Find the highest commission
maxCommission := commissions[1];
maxCommissionIndex := 1;
for i := 2 to numStaffMembers do
begin
if commissions[i] > maxCommission then
begin
maxCommission := commissions[i];
maxCommissionIndex := i;
end;
end;

// Step 5: Display results
writeln('Sales staff member with the highest commission:');
writeln('Name: ', names[maxCommissionIndex]);
writeln('Total Sales: ', sales[maxCommissionIndex]:0:2);
writeln('Commission: ', commissions[maxCommissionIndex]:0:2);

personsWithoutCommission := 0;
for i := 1 to numStaffMembers do
begin
if commissions[i] = 0 then
personsWithoutCommission := personsWithoutCommission + 1;
end;

writeln('Number of persons without commission: ', personsWithoutCommission);

end.
```

This program will prompt you to enter the number of staff members, followed by their names and total sales. It will then calculate the commissions, find the staff member with the highest commission, and display the results, including the number of persons without a commission.