VMTEST - Thử máy

Tác giả: skyvn97

Ngôn ngữ: Pascal

program test;
uses crt;
var
   s,sb,t:string;
   a,r:real;
   b,ck:integer;
   i,j:integer;
   fst:boolean;
   num:boolean;
   str:boolean;
   err:boolean;
function ckstr(s:string):integer;
         var
            i:integer;
         begin
              b:=0;
              val(s,a,b);
              if (b<>0) then
                 begin
                      for i:=1 to length(s) do
                          begin
                               if ord('A')>ord(s[i]) then begin ckstr:=-1; exit; end;
                               if ord('z')<ord(s[i]) then begin ckstr:=-1; exit; end;
                               if (ord('Z')<ord(s[i])) and (ord('a')>ord(s[i])) then
                                  begin ckstr:=-1; exit; end;
                          end;
                      ckstr:=1; exit;
                 end
              else begin ckstr:=0; exit; end;
         end;
begin
     repeat
           readln(s);
           if (length(s)<>1) or (s[1]<>'?') then
              begin
                   while (pos('  ',s)<>0) do delete(s,pos('  ',s),1);
                   fst:=true;
                   err:=false;
                   str:=false;
                   num:=false;
                   r:=0;
                   t:='';
                   if s[1]<>' ' then s:=' '+s;
                   if s[length(s)]<>' ' then s:=s+' ';
                   while pos(' ',s)<>length(s) do
                         begin
                              i:=pos(' ',s);
                              for j:=i+1 to length(s) do
                                  if s[j]=' ' then break;
                              sb:=copy(s,i+1,j-i-1);
                              ck:=ckstr(sb);
                              if ck<0 then begin err:=true; break; end;
                              if ck=0 then
                                 begin
                                      if fst then
                                         begin
                                              fst:=false;
                                              num:=true;
                                              r:=a;
                                         end
                                      else begin
                                                if str then err:=true
                                                else r:=r+a;
                                           end;
                                 end;
                              if ck>0 then
                                 begin
                                      if fst then
                                         begin
                                              fst:=false;
                                              str:=true;
                                              t:=sb;
                                         end
                                      else begin
                                                if num then err:=true
                                                else t:=t+sb;
                                           end;
                                 end;
                              if err then break;
                              delete(s,i,j-i);
                         end;
                   if err then
                      begin
                           writeln('Error!');
                           continue;
                      end;
                   if num then
                      begin
                           writeln(r:0:6);
                           continue;
                      end;
                   if str then
                      begin
                           writeln(t);
                           continue;
                      end;
              end
           else halt;
     until false;
end.

Download