Bài tập pascal

O

o0_zz_0o

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

bài 1 :Cho một dãy n số nguyên a1, a2, ..., an. Hãy tìm giá trị lớn nhì trong dãy.
Ví dụ: Cho dãy số gồm 3 phần tử: 1, 2, -3
Giá trị lớn nhì là: 1
Dữ liệu vào: Cho file TIMSO.INP gồm:
- Dòng đầu tiên chứa số n là số lượng các phần tử của dãy a.
- n dòng tiếp theo, dòng thứ i chứa một số nguyên ai.
Kết quả: Ghi ra file TIMSO.OUT một số nguyên là giá trị lớn nhì. Trong trường hợp không tìm thấy thì ghi ra file là: No solution




Mọi người kiểm tra hộ xem em giải bài này bằng file đúng không ?
còn mảng thì dễ quá rồi

Mã:
program So_Lon_Nhi;
        var f,f1:text;
        max,nhi,tam,n:longint;
procedure nhap;
        begin
                assign(f,'fi.inp');
                assign(f1,'fo.out');
                reset(f);
                rewrite(f1);
        end;
begin
        nhap;
        readln(f,n);
        readln(f,max);
        while eof(f)<>true do
                begin
                        readln(f,nhi);
                        if max<>nhi then break;
                end;
                if (max=nhi) or (n=1) then writeln(f1,'No solution')
        else
                begin
                        if max<nhi then
                        begin
                                tam:=max; max:=nhi; nhi:=tam;
                        end;
                reset(f);
                readln(f,n);
        while eof(f)<>true do
                begin
                        readln(f,n);
                        if max<n then
                        begin
                                nhi:=max; max:=n;
                end;
                if (max>n) and (n>nhi) then nhi:=n;
end;
        writeln(f1,nhi);
end;
        close(f);
        close(f1);
end.

bài 2 : Nhân 2 số nguyên bất kì , mỗi số không quá 5000 chữ số
Dữ liệu vào: cho vào file tên tự tạo :
Dòng đầu ghi chứ số thứ nhất
Dòng 2 ghi chữ số thứ 2
Kết quả: ghi ra file tên tự tạo tích của 2 số

mọi người kiểm tra bài hộ em theo yêu cầu số nhập vào có thể lên tới 5000 chữ số
Mã:
program Nhan;
type mang=array[1..5002] of byte;
var f,f1:text;
    A,B,KQ,X,Y:mang;
    n1,k,h,j,i,n,m,blah:longint;
    ch:char;
    nham:boolean;
procedure nhap;
        var k:integer;
            i,j:longint;
            tam:mang;
        begin
                assign(f,'so.inp');    assign(f1,'so.out');
                reset(f);              rewrite(f1);
                n:=0; m:=0;
                while eoln(f)<>true do
                   begin
                       n:=n+1;   read(f,ch);    val(ch,a[n],k);
                   end;
                n1:=n;
                readln(f);
                while eoln(f)<>true do
                   begin
                       m:=m+1;   read(f,ch);    val(ch,b[m],k);
                   end;
                blah:=m;
                if m>n then
                        begin
                                tam:=A;
                                A:=B;
                                B:=tam;
                                i:=n;
                                n:=m;
                                m:=i;
                                n1:=n;
                                blah:=m;
                        end;
        end;
function dao(tam:mang;dai:longint):mang;
        var i,j:longint;
            c:mang;
        begin
                j:=0;   c:=tam;
                for i:=dai downto 1 do
                        begin
                                j:=j+1;         c[i]:=tam[j];
                        end;
                dao:=c;
        end;
function nhan(so:byte;kt:integer):mang;
        var i,nho,j,dem:longint;
            C,D:mang;
        begin
                for i:=1 to n1 do C[i]:=so*A[i];
                for i:=1 to n1 do
                        begin
                                D[i]:=C[i] mod 10;
                                nho:=C[i] div 10;
                                C[i+1]:=C[i+1]+nho;
                                if i=n1 then
                                        if (C[i] div 10<>0) then
                                                begin
                                                        D[i+1]:=C[i] div 10;
                                                        n:=i+1;
                                                end
                                        else
                                                begin
                                                        n:=i;
                                                end;
                        end;
                if kt<>0 then
                        begin
                                D:=dao(D,n);
                                i:=n;dem:=0;
                                repeat
                                        i:=i+1;
                                        D[i]:=0;
                                        dem:=dem+1;
                                until dem=kt;
                                D:=dao(D,n+kt);
                        end;
                n:=n+kt;
                nhan:=D;
        end;
function cong(G:mang;H:mang;dai:longint):mang;
        var i,j:longint;
            C:mang;
        begin
                i:=0;
                repeat
                        i:=i+1;
                        C[i]:=G[i]+H[i];
                until i=dai;
                cong:=C;
        end;
function xuli(C:mang;dai:integer):mang;
        var i,nho:longint;
            D:mang;
        begin
                nho:=0;
                for i:=1 to dai do
                        begin
                                if i<>dai then
                                        begin
                                                D[i]:=C[i] mod 10;
                                                nho:=C[i] div 10;
                                                C[i+1]:=C[i+1]+nho;
                                        end
                                else
                                        begin
                                                D[i]:=C[i];
                                        end;
                        end;
                xuli:=D;
        end;
begin
        nhap;
        A:=dao(A,n);
        for k:=1 to 5002 do
                begin
                        kq[k]:=0;
                        X[k]:=0;
                        Y[k]:=0;
                end;
        B:=dao(B,m);
        j:=0;
        repeat
                        j:=j+1;
                        if B[j]<>0 then
                                begin
                        Y:=nhan(B[j],j-1); B[j]:=0;
                                end
                        else for k:=1 to 5002 do Y[k]:=0;
                        KQ:=xuli(cong(KQ,Y,n),n);
        until (j=blah);
        kq:=dao(kq,n);
        for i:=1 to n do write(f1,KQ[i]);
        writeln(f1);
        close(f1);
end.
 
Top Bottom