Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    4

    giúp minhg với các bạn ơi!!!!

    mình có 1 phần cài đặt danh sách đơn:

    và 1 phần cài đặt tính giá trị biểu thức:

    bạn nào có thể giúp mình viết ct tính giá trị biểu thức thông qua cái ct cài đặt danh sách (lưu ý là chỉ sửa đổi phần stack thôi nhớ!còn các phần ct con khác trong ct tính giá trị biểu thức thỳ vẫn giữ nguyên.vd:"hàm pop trong stack của tính gia trị biểu thức sẽ đc viết bằng cách gọi ra hàm delete trong phần ct cài đặt ds đơn.... ").
    mong các bạn giúp đỡ! có thể gửi về email cho mình: [email protected].

  2. #2
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Mã:
    Const cs = ['0'..'9'];
          dau = ['+', '-', '*'];
          chu = ['(', ')', '+', '-', '*', '0'..'9'];
          HT = 'Bieuthuc.inp';
          TH = 'Bieuthuc.out';
    Var H, T : Text;
        st, doan : String;
        trai, phai : Byte;
    
    Function KT(x : String) : Boolean;
    Var i, d1, d2 : Byte;
    Begin
            kt := False;
            d1 := 0;
            d2 := 0;
            {Kiem tra cac ki tu la}
            For i := 1 To Length(x) Do
                    If not(x[i] in chu) Then Exit;
            {Kiem tra mo dong ngoac}
            For i := 1 To Length(x) Do
                    Case x[i] Of
                            '(' : Inc(d1);
                            ')' : Inc(d2);
                    End;
                    If d1 <> d2 Then Exit;
            {Kiem tra dau va cuoi xau}
            If (x[1] = ')') Or (x[1] = '*') Or (x[length(x)] in dau) Or (x[length(x)] = '(') Then Exit;
            {Kiem tra 2 ki tu lien tiep}
            For i := 1 To Length(x) - 1 Do
                    If ((x[i] = ')') And (x[i+1] = '('))
                    Or ((x[i] in dau) And (x[i+1] in dau))
                    Or ((x[i] = '(') And (x[i+1] = ')')) Then Exit;
            For i := 1 To Length(x) - 1 Do
                    If ((x[i] in dau) And (x[i+1] = ')'))
                    Or ((x[i] = '(') And (x[i+1] = '*')) Then Exit;
            For i := 1 To Length(x) - 1 Do
                    If (x[i] in cs) And (x[i+1] = '(') Then Exit;
            kt := True;
    End;
    
    Procedure Xoa(Var x : String);
    Var i : Byte;
    Begin
            i := 1;
            While i <= Length(x) Do
                    If x[i] = ' ' Then Delete(x, i, 1)
                    Else Inc(i);
    End;
    
    Function Nhan(x : String) : String;
    Var phu : String;
        vt, p, t : Byte;
        sop, sot : Longint;
        code : Integer;
    Begin
            While Pos('*', x) > 0 Do
            Begin
                    vt := Pos('*', x);
                    p := vt + 1;
                    If x[p] = '-' Then Inc(p);
                    While (p < Length(x)) And (x[p+1] in cs) Do Inc(p);
                    phu := Copy(x, vt+1, p-vt);
                    Val(phu, sop, code);
                    t := vt - 1;
                    While (t > 0) And (x[t] in cs) Do Dec(t);
                    If t = 0 Then Inc(t);
                    phu := Copy(x, t, vt-t);
                    Val(phu, sot, code);
                    sop := sop*sot;
                    Str(sop, phu);
                    Delete(x, t, p-t+1);
                    If sop >= 0 Then phu := '+' + phu;
                    Insert(phu, x, t);
            End;
            nhan := x;
    End;
    
    Function Cong(x : String) : String;
    Var phu : String;
        kq, so : LongInt;
        code : Integer;
        t, p : Byte;
    Begin
            kq := 0;
            Repeat
                    t := Length(x);
                    p := Length(x);
                    While (t > 0) And (x[t] in cs) Do Dec(t);
                    If t = 0 Then Val(x, so, code)
                    Else
                    Begin
                            phu := Copy(x, t, p-t+1);
                            Val(phu, so, code);
                    End;
                    kq := kq + so;
                    Delete(x, t, p-t+1);
            Until t = 0;
            Str(kq, phu);
            Cong := phu;
    End;
    
    Function Ngoac(x : String; Var t, p : Byte) : String;
    Var phu : String;
    Begin
            t := Length(x);
            While (t > 0) And (x[t] <> '(') Do Dec(t);
            p := t + 1;
            While (p <= Length(x)) And (x[p] <> ')') Do Inc(p);
            ngoac := Copy(x, t, p-t+1);
    End;
    
    Procedure KQ;
    Begin
            Assign(H, HT); Reset(H);
            Assign(T, TH); Rewrite(T);
            While not EOF(H) Do
            Begin
                    Readln(H, st);
                    xoa(st);
                    Write(T, st, ' = ');
                    If kt(st) Then
                    Begin
                            While Pos('(', st) > 0 Do
                            Begin
                                    doan := ngoac(st, trai, phai);
                                    Delete(doan, 1, 1);
                                    Delete(doan, Length(doan), 1);
                                    doan := nhan(doan);
                                    doan := cong(doan);
                                    Delete(st, trai, phai-trai+1);
                                    If (st[trai-1] = '+') And (doan[1] = '-') Then
                                    Begin
                                            Delete(st, trai-1, 1);
                                            Insert(doan, st, trai-1);
                                    End
                                    Else
                                            If (st[trai-1] = '-') And (doan[1] = '-') Then
                                            Begin
                                                    st[trai-1] := '+';
                                                    Delete(doan, 1, 1);
                                                    Insert(doan, st, trai);
                                            End
                                            Else Insert(doan, st, trai);
                            End;
                            st := nhan(st);
                            st := cong(st);
                            Writeln(T, st);
                    End
                    Else Writeln(T, 'LOI');
            End;
            Close(H);
            Close(T);
    End;
    
    BEGIN
            KQ;
    END.

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •