Solved

# Pascal Problem

Posted on 2006-11-22
328 Views
People from the contest are identified by an id and they get points in diferent chanlenges. Write a pascal problem that reads the result from the contest in pairs (id, points) the end of the pairs will terminate when it meets (0, 0), and print the competitors in decreasing order in function the points they get

0
Question by:rares_dumitrescu

LVL 100

Expert Comment

This looks suspiciously like a homework problem.  EE experts can help you with specific questions but will not write the program for you.

Please post the code you have thus far and ask a specific question.

mlmcc
0

LVL 100

Expert Comment

If you don't have any code post a word algorithm and what you think the data and functions will be.

mlmcc
0

LVL 10

Expert Comment

The first decision would be, how to store the (ID,Score) pairs before sorting and printing them.

I see 2 choices, in a table, or in a list of records or objects.

The table has a maximum size limit, while the list of records is limited by available memory (but pointer operations skill is needed).

Table is a simpler solution, of course.
0

Author Comment

type concurent=record
id,proba,punctaj:integer;
end;

type concurenti=array[1..100] of concurent;
var records:concurenti;
n,i:integer;

procedure writerecord(records:concurenti;n:integer);
var i:integer;
begin
for i:=1 to n do
writeln('Numar concurs: ', records[i].id, '; Proba: ', records[i].proba, '; Nota: ', records[i].punctaj, ';');
end;

var id,proba,punctaj:integer;
begin
n:=0;
while (id<>0) or (proba<>0) or (punctaj<>0) do
begin
n:=n+1;
records[n].id := id;
records[n].proba := proba;
records[n].punctaj := punctaj;

end;
end;

procedure sortrecordpunctaj(var records:concurenti;n:integer);
var i,j:integer;
tmp:concurent;
begin
for i:=1 to n do
for j:=1 to n-1 do
if records[j].punctaj < records[j+1].punctaj then
begin
tmp:= records[j];
records[j] := records[j + 1];
records[j + 1] := tmp;
end;
end;

begin
sortrecordpunctaj(records,n);
writerecord(records,n);
end.
0

LVL 6

Expert Comment

I have tested your code and seems to be working... what seems to be the problem???
0

LVL 10

Accepted Solution

For-Soft earned 500 total points
After a first look, I see no reason to pass variables "records" and "n" to every procedure.

All procedures are declared below the variables declaration:
var records:concurenti;
n,i:integer;

So, the variables "records" and "n" are declared as global variables, and there is no need to pass them to the procedures.

If you declare a variable in some point, all code and procedures declared after that point will be in scope of the declaration of the variable. Means: variable declared globaly is available in all procedures declared after the global declaration.

So, a program like this will work, as well.

type concurent=record
id,proba,punctaj:integer;
end;

type concurenti=array[1..100] of concurent;
var records:concurenti;
n,i:integer;

procedure writerecord;
var i:integer;
begin
for i:=1 to n do
writeln('Numar concurs: ', records[i].id, '; Proba: ', records[i].proba, '; Nota: ', records[i].punctaj, ';');
end;

var id,proba,punctaj:integer;
begin
n:=0;
while (id<>0) or (proba<>0) or (punctaj<>0) do
begin
n:=n+1;
records[n].id := id;
records[n].proba := proba;
records[n].punctaj := punctaj;

end;
end;

procedure sortrecordpunctaj;
var i,j:integer;
tmp:concurent;
begin
for i:=1 to n do
for j:=1 to n-1 do
if records[j].punctaj < records[j+1].punctaj then
begin
tmp:= records[j];
records[j] := records[j + 1];
records[j + 1] := tmp;
end;
end;

begin
sortrecordpunctaj;
writerecord;
end.
0

LVL 100

Expert Comment

Remember his is probably a school assignment so he has to follow the rules set down by the instructor.

The reason to pass the data to the procedures and functions is because they are being taught to do it that way.  It would be better to pass pointers but they haven't gotten to them yet.

Also a function or procedure should stand on its own rather than relying on the using program to provide the data and properly named.  In that way a procedure can be reused in another program.

mlmcc
0

LVL 10

Expert Comment

Perhaps you are right.

But, I learned to preserve as much of the processor stack, as possible. It is a very useful habit when programming in Pascal.

Other cleaning proposition is to remove the global declaration of the variable "i". As, it is declared in every proper procedure.

So,:

var records:concurenti;
n:integer;

var records:concurenti;
n,i:integer;
0

## Featured Post

### Suggested Solutions

HOW TO: Install and Configure VMware vSphere Hypervisor 6.5 (ESXi 6.5), Step by Step Tutorial with screenshots. From Download, Checking Media, to Completed Installation.
HOW TO: Connect to the VMware vSphere Hypervisor 6.5 (ESXi 6.5) using the vSphere (HTML5 Web) Host Client 6.5, and perform a simple configuration task of adding a new VMFS 6 datastore.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …