大家好 初学pascal 这个if语句练习题 为什么编译不过 
正确的书写是怎样的 ?
另外可否推荐一两本入门的教材
program ex26;var a,b,c,p,s:real;begin
  readln(a,b,c);
  if a+b > c then
     if a+c > b then
        if c+b > a then
             begin
                 p := (a+b+c)/2;
                 s := sqrt(p*(p-a)*(p-b)*(p-c));                 write('s=',s);
             end
       else
       write('cant');
     else
     write('cant');
  else
  write('cant');
  readln
end.

解决方案 »

  1.   

    end.
    上一行加上个end;
      

  2.   

    从内往外,找begin...end的匹配
      

  3.   

    谢谢你的回答 不过还是无法编译 
    现在写成这样就可以了 不过不太明白为什么会这样 pascal  还是没C写的好看program ex26;var a,b,c,p,s:real;begin
      readln(a,b,c);
      if a+b > c then
         if a+c > b then
            if c+b > a then
                 begin
                     p := (a+b+c)/2;
                     s := sqrt(p*(p-a)*(p-b)*(p-c));                 write('s=',s);
                 end
           else
           write('cant')
         else
         write('cant')
      else
      write('cant');
      readln
    end.
      

  4.   

    你这可以写成这样吧。if (a+b>c)and (a+c>b)and(c+b>a) then
    begin
     p := (a+b+c)/2;
     s := sqrt(p*(p-a)*(p-b)*(p-c));
     write('s=',s);
    end
    else 
      write('cant');有那三个数能满足这个条件呢?
      

  5.   


    program ex26;var a,b,c,p,s:real;begin
      readln(a,b,c);
      if a+b > c then
         if a+c > b then
            if c+b > a then
                 begin
                     p := (a+b+c)/2;
                     s := sqrt(p*(p-a)*(p-b)*(p-c));                 write('s=',s);
                 end
           else
             write('cant')
           end;
         else
           write('cant')
         end;
      else
       write('cant');
       readln
      end;
    end;
    end.
       其实就这样而已,看来你要去看多点基础语法先。结贴给分吧................
      

  6.   

    if 条件 then 语句1(或语句块) else 语句2(或语句块);
    注意最后的分号,else前的语句1不能有分号。如果不用begin..end括住,else会找最近的if 配对。你可以用下面的简单程序,用不同的 a , b, c的值进行测试。
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a,b,c,p,s :real;
    begin
      a := 8;
      b := 5;
      c := 2;
      if a+b > c then  //if 1
        if a+c > b then  //if 2
          if c+b > a then  //if 3
          begin
            p := (a+b+c)/2;
            s := sqrt(p*(p-a)*(p-b)*(p-c));
            showmessage('s='+floattostr(s));
          end
          else //else 3
            showmessage('cant(c+b<=a)')
        else //else 2
         showmessage('cant(a+c<=b)')
      else  //else 1
        showmessage('cant(a+b<=c)');
    end;
      

  7.   

    把所有else前面一句话的;通通去掉
      

  8.   

    then部分结束,else之前不能有;