: Hi every one this my first time on this forum. i was wondering if you can help me. i am doing this computing course. part of my course is turbo pascal 7.0.
: i am having this problem;
:
: i can't able to show an error message when the user enters string character instead of integer, or real numbers(were integer numbers are needed to be entered by the user).
:
: i also need a error message when the user enters Integer or real numbers instead of string characters(were string character are needed to be entered by the user).
:
: i have included the program that i have writtten. i would be grateful if any one can help me.
: ****************************************************************************************************************************
: Program Magic_Carpet_Company;
: uses crt;
: const
: R=10.00;
: B=15.00;
: G=20.00;
: Type TABLE=record
: TIT:String;
: NUM:integer;
: COL:String;
: PRICE:real;
: END;
:
: type ORDER=record
: TITLE:STRING;
: ORD_NUM : integer;
: COLOUR : string;
: QUANT : REAL;
: TOTAL : Real;
: END;
:
: var
: TTitle: array[1..4,1..3] of Table;
: INPUT:ARRAY[1..2,1..4]OF ORDER;
:
: CHOICE:INTEGER;
: PROCESS,PROCESS_C:string;
: NUM:INTEGER;
: pw:string;
: LENGTH,WIDTH:REAL;
: File_Order,FILE_ORDER_2:text;
: LINE:STRING;
:
: PROCEDURE PASSWORD;
: begin
: clrscr;
: REPEAT
: TEXTCOLOR(WHITE);
: gotoxy(20,10);
: writeln('Please Enter The Password');
: gotoxy(25,11);
: readln(pw);
: clrscr;
: if pw <>'MAGIC' then
: TEXTCOLOR(108);
: writeln('~~ PLEASE TRY AGAIN ~~ ');
: UNTIL PW='MAGIC';
: clrscr;
: END;
:
: PROCEDURE COL_TABLE;
: begin
:
: TTITLE[1,1].TIT:=('No:');
: TTITLE[1,2].TIT:=('Colour:');
: TTITLE[1,3].TIT:=(' Price sq mtrs:');
: TTITLE[2,1].NUM:=1;
: TTITLE[2,2].COL:=('RED');
: TTITLE[2,3].PRICE:=10.00;
: TTITLE[3,1].NUM:=2;
: TTITLE[3,2].COL:=('BLUE');
: TTITLE[3,3].PRICE:=15.00;
: TTITLE[4,1].NUM:=3;
: TTITLE[4,2].COL:=('GREEN');
: TTITLE[4,3].PRICE:=20.00;
: WRITELN;
:
:
: WRITE(TTITLE[1,1].TIT:12);
: WRITE(TTITLE[1,2].TIT:20);
: WRITELN(TTITLE[1,3].TIT:30);
:
: WRITE(TTITLE[2,1].NUM:12);
: WRITE(TTITLE[2,2].COL:20);
: WRITELN(TTITLE[2,3].PRICE:30:2);
:
: WRITE(TTITLE[3,1].NUM:12);
: WRITE(TTITLE[3,2].COL:20);
: WRITELN(TTITLE[3,3].PRICE:30:2);
:
: WRITE(TTITLE[4,1].NUM:12);
: WRITE(TTITLE[4,2].COL:20);
: WRITE(TTITLE[4,3].PRICE:30:2);
: WRITELN;
: WRITELN;
: END;
:
: PROCEDURE GET_DATA;
: BEGIN
: REPEAT
: TEXTCOLOR(WHITE);
: WRITELN('~~ PLEASE CHOOSE A NUMBER FOR THE COLOUR, FROM THE MENUE ~~');
: READLN(NUM);
: IF (NUM<>1) THEN
: IF (NUM<>2) THEN
: IF (NUM<>3) THEN
: TEXTCOLOR(108);
: WRITELN('~~ WRONG NUMBER PLEASE TRY AGAIN ~~');
: TEXTCOLOR(WHITE);
: UNTIL (NUM=1) OR (NUM=2) OR (NUM=3);
: CLRSCR;
:
: WRITELN('~~ PLEASE ENTER ORDER NO.~~');
: READLN(INPUT[2,1].ORD_NUM);
: CLRSCR;
: Writeln('What is the Length in meters ?');
: Writeln(' ^ _________________');
: Writeln(' | | |');
: Writeln(' | | |');
: Writeln(' | | |');
: Writeln(' V |_________________|');
: readln(length);
: CLRSCR;
: Writeln('What is Width in meters?');
: Writeln(' <---------------->');
: Writeln(' _________________');
: Writeln(' | |');
: Writeln(' | |');
: Writeln(' | |');
: Writeln(' |_______________ _|');
: Readln(Width);
: CLRSCR;
: END;
:
: PROCEDURE CALCULATION;
: begin
:
: IF NUM=1 THEN
: INPUT[2,2].COLOUR:='RED';
: IF NUM=1 THEN
: INPUT[2,3].QUANT:=(LENGTH*WIDTH);
: IF NUM=1 THEN
: INPUT[2,4].TOTAL:=(R*INPUT[2,3].QUANT);
:
: IF NUM=2 THEN
: INPUT[2,2].COLOUR:='BLUE';
: IF NUM=2 THEN
: INPUT[2,3].QUANT:=(LENGTH*WIDTH);
: IF NUM=2 THEN
: INPUT[2,4].TOTAL:=(B*INPUT[2,3].QUANT);
:
: IF NUM=3 THEN
: INPUT[2,2].COLOUR:='GREEN';
: IF NUM=3 THEN
: INPUT[2,3].QUANT:=(LENGTH*WIDTH);
: IF NUM=3 THEN
: INPUT[2,4].TOTAL:=(G*INPUT[2,3].QUANT);
:
: END;
:
: PROCEDURE TEMP_DISPLAY;
: BEGIN
: REPEAT
: TEXTCOLOR(WHITE);
: WRITELN('~~ THIS IS WHAT YOU HAVE ENTERED ~~');
: WRITELN;
: writeln('ORDER NO:',INPUT[2,1].ORD_NUM);
: writeln('COLOUR:',INPUT[2,2].COLOUR);
: Writeln('Quauntity(p.s.m):',INPUT[2,3].QUANT:2:2);
: writeln('TOTAL PRICE ','',INPUT[2,4].TOTAL:2:2);
: writeln;
: WRITELN('******************************************************');
: WRITELN(' ~~ DO YOU WANT TO PROCESS ? ~~');
: WRITELN('*****************************************************');
: WRITELN('_____________________________________________________');
: WRITELN('TO PROCESS AND MOVE TO NEXT RECORD TYPE = Y ');
: WRITELN('_____________________________________________________');
: WRITELN('TO PROCESS AND DISPLAY ALL RECORDS SO FAR TYPE = D');
: WRITELN('_____________________________________________________');
: WRITELN('NOT TO PROCESS AND START A NEW RECORD TYPE = P');
: WRITELN('_____________________________________________________');
: WRITELN('NOT PROCESS AND CLOSE FOR THE DAY, TYPE = C');
: WRITELN('_____________________________________________________');
: READLN(PROCESS);
: CLRSCR;
: IF PROCESS <>'Y' THEN
: IF PROCESS <>'D' THEN
: IF PROCESS <>'P' THEN
: IF PROCESS <>'C' THEN
: TEXTCOLOR(108);
: WRITELN('*************************************************************');
: WRITELN('~~~ YOU HAVE ENTERED THE WRONG LETTER ~~ PLEASE TRY AGAIN ~~~');
: WRITELN('*************************************************************');
:
: UNTIL (PROCESS='Y') OR (PROCESS='D') OR (PROCESS='P') OR (PROCESS='C');
: CLRSCR;
: IF (PROCESS='P')OR (PROCESS='Y') THEN
: WRITE('PLEASE PRESS ENTER');
: TEXTCOLOR(WHITE);
: IF PROCESS='C'THEN
: TEXTCOLOR(108);
:
: IF PROCESS='C'THEN
: WRITELN('~~ PLEASE RE TYPE "C" TO CONFIRM THAT CLOSE OF THE DAY OR ~~');
: IF PROCESS='C'THEN
: WRITELN('~~ PRESS ENTER TO RETURN TO MAIN MENU ~~');
: IF PROCESS='C'THEN
: PROCESS:=PROCESS_C;
: IF PROCESS='C'THEN
: READLN(PROCESS_C);
:
: TEXTCOLOR(WHITE);
: END;
:
: PROCEDURE INPUT_FILE__BACK_UP;
: BEGIN
: ASsign(file_order,'H:\order.txt');
: APPEND(FILE_ORDER);
: ASsign(file_order_2,'H:\order.BAK');
: APPEND(FILE_ORDER_2);
:
: ASsign(file_order,'H:\order.txt');
: APPEND(FILE_ORDER);
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: write(FILE_ORDER,INPUT[2,1].ORD_NUM:8);
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: write(FILE_ORDER,INPUT[2,2].COLOUR:16);
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: Write(FILE_ORDER,INPUT[2,3].QUANT:20:2);
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: writeLN(FILE_ORDER,INPUT[2,4].TOTAL:20:2);
: RESET(FILE_ORDER);
:
: ASSIGN(file_order_2,'H:\order.BAK');
: REWRITE(FILE_ORDER_2);
: IF (PROCESS='D') THEN
: WRITELN('THIS IS THE RECORDS THAT HAVE BEEN PROCESSED');
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: WHILE NOT EOF(FILE_ORDER) DO
: BEGIN
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: READLN(FILE_ORDER,LINE);
: IF (PROCESS='Y')OR (PROCESS='D') THEN
: WRITELN(FILE_ORDER_2,LINE);
: IF (PROCESS='D') THEN
: WRITELN(LINE);
: END;
:
: close(file_order);
: CLOSE(FILE_ORDER_2);
: WRITELN;
: WRITELN;
: IF (PROCESS='D') THEN
: WRITELN('______________________________________');
: IF (PROCESS='D') THEN
: WRITELN('~~ PLEASE PRESS ENTER TO CONTINUE ~~');
: IF (PROCESS='D') THEN
: WRITELN('______________________________________');
: IF (PROCESS='D') THEN
: WRITELN('~~ OR CLOSE OF THE DAY TYPE = C ~~');
: IF (PROCESS='D') THEN
: WRITELN('______________________________________');
: READLN(PROCESS_C);
: CLRSCR;
: END;
:
: BEGIN
: PASSWORD;
: REPEAT
: COL_TABLE;
: GET_DATA;
: CALCULATION;
: TEMP_DISPLAY;
: INPUT_FILE__BACK_UP;
: UNTIL (PROCESS_C='C');
: TEXTCOLOR(108);
: WRITELN('CREATED BY MUHAMMAD ABUL AKBAR');
: WRITELN('GOOD BYE');
:
: READLN;
: end.
:
Checking if an entered value is an integer is quite simple. Assume the value is an integer, then check if none of the characters lies outside the 0..9 range. Here's the code:
IsInt := true;
for i := 1 to Length(s) do
if not (s[i] in ['0'..'9']) then
IsInt := false;
if IsInt then
convert s to integer and use it
else
show error.
Proving that a string is a real value goes along similar lines.