Solved

Break-statement in TP 5.5

Posted on 2003-10-27
4
244 Views
Last Modified: 2010-04-16
Hi experts
i'm using TB 5.5 (free pascal)
the problem is;
i need to write a function who compares two arrays of 4 shortint to see if 2 numbers are the same
take for example those 2 arrays
1 2 3 4
2 2 2 8

i wrote this code

FUNCTION Case1:Boolean;
Var Temp, i, j:ShortInt;
Begin
Temp:=0;
FOR i:=1 TO 4 DO
 FOR j:=1 TO 4 DO
  IF Digit[i]=Guess[j] THEN
   Temp:=Temp+1;
IF Temp>=2 THEN Case1:=TRUE;
IF Temp<2 THEN Case1:=FALSE;
End;

the problem is that because there are in the second array more than one '2' the output = TRUE but that shouldn't be
because there is only 1 number in the two arrays who are the same

i thaught i could use the BREAK-statement like this

FUNCTION Case1:Boolean;
Var Temp, i, j:ShortInt;
Begin
Temp:=0;
FOR i:=1 TO 4 DO
 FOR j:=1 TO 4 DO
  IF Digit[i]=Guess[j] THEN
   begin
   Temp:=Temp+1;
   BREAK;
   end;
IF Temp>=2 THEN Case1:=TRUE;
IF Temp<2 THEN Case1:=FALSE;
End;

from an algoritmic point of view that should be good I THINK
but the BREAK statement (which is used to abort the actual loop) doesn't work in TP 5.5
could someone help me out ???
 thanks in advance

Elvis
0
Comment
Question by:Elvis1
  • 3
4 Comments
 

Author Comment

by:Elvis1
ID: 9628417
or maybe you can just give me a way to go out or to skip the current loop
an alternative to the BREAK statement

Elvis
0
 

Accepted Solution

by:
Elvis1 earned 0 total points
ID: 9628474
SORRY EVERYONE
i found the answe myself
to "break" a while loop i did

FOR i:=1 TO 10 DO
 Begin
 WriteLn(i);
 IF i=5 THEN i:=10;
 End;

The Output is
1
2
3
4
5

sorry
Elvis
0
 
LVL 17

Expert Comment

by:Wim ten Brink
ID: 9628691
Doesn't matter. However, personally I consider the use of the Break statement something that you should avoid at all costs. Like the Goto statement and some other statements the Break statement makes the source a bit less readable.
Instead of a for-next loop you could also use a While-Do loop like this:

var
  I:Integer;
  EndOfLoop: Boolean;
begin
  I := 0;
  EndOfLoop := False;
  while (I < 10) and not EndOfLoop do begin
    I := I + 1;
    WriteLn(I);
    if (I=5) then begin
      EndOfLoop := True;
    end else begin
      // Perhaps do some other code.
    end;
  end;
end;
0
 

Author Comment

by:Elvis1
ID: 9629893
thanks i will remember
but now i got it
thanks
Elvis
0

Featured Post

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Encryption of Passwords for Delphi Xe2 1 747
Utf8 encode 2 594
Kind of encoding 3 429
Lazarus (freePascal) DB Project Assistance 14 490
Did you know that more than 4 billion data records have been recorded as lost or stolen since 2013? It was a staggering number brought to our attention during last week’s ManageEngine webinar, where attendees received a comprehensive look at the ma…
The Windows functions GetTickCount and timeGetTime retrieve the number of milliseconds since the system was started. However, the value is stored in a DWORD, which means that it wraps around to zero every 49.7 days. This article shows how to solve t…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question