Thứ Bảy, 28 tháng 4, 2012

Bài tập Pascal - Giải bài tập Pascal (cơ bản)

Nhằm đáp ứng nhu cầu hỏi đáp về Pascal của anh em, đây sẽ là khu vực hỏi đáp, giải các bài tập về Pascal. Trước khi đặt câu hỏi, bạn cần lưu ý những điều sau:


- Nội dung câu hỏi phải liên quan tới Pascal.
- Đây là khu vực giải các bài tập cơ bản, các bài tập nâng cao (đệ quy quay lui, quy hoạch động...) không được phép post tại khu vực này (sẽ có mục giải bài tập Pascal nâng cao riêng).

- Nếu được, hãy ân vào biểu tượng  ở phần bên phải của trang web  để ủng hộ website phát triển (nếu chưa ấn).

Thứ Ba, 24 tháng 4, 2012

Thuật toán tìm kiếm 1 số trong mảng 2 chiều (Pascal)


Viết chương trình Pascal tìm một số (phần tử) trong mảng hai chiều. In tổng số lần và vị trí xuất hiện của các phần tử ra màn hình.


Program Tim_so;
   Var
      a:Array[1..4,1..6] Of Integer;
      i,j,so,solan:Integer;
Begin
   Writeln('TIM MOT SO TRONG MANG');
   Writeln('---------------------');
   Writeln;
   For i:=1 To 4 Do
      For j:=1 to 6 Do
         Begin
            Write('-Phan tu A[',i,',',j,']= ');
            Readln(a[i,j]);
         End;
   Writeln;
   Write('-So muon tim: ');
   Readln(so);
   solan:=0;
   For i:=1 To 4 Do
      For j:=1 To 6 Do
         If so=a[i,j] Then
            Begin
               solan:=solan+1;
               Writeln('+Lan: ',solan,' tai hang: ',i,' cot: ',j);
            End;
   Writeln;
   Writeln('+Tong so lan xuat hien la: ',solan);
   For i:=1 To 4 Do
      Begin
         For j:=1 To 6 Do
            Write(a[i,j]:8);
            Writeln;
      End;
   Readln
End.

Xóa các phần tử trùng nhau trong mảng 1 chiều (pascal)

Nhập vào mảng 1 chiều gồm 1 dãy số nguyên N phần tử. Hãy xóa các phần tử trùng nhau trong mảng và in kết quả ra màn hình. Ý tưởng: Duyệt mảng 1 chiều bằng 2 biến, nếu phát phát hiện phần tử nào trùng thì xóa phần tử ấy ra khỏi mảng.


Program Bo_so_trung;
   Const
      Max=100;
   Var
   a:Array[1..Max] Of Integer;
   i,j,k,n:Integer;
Begin
   Writeln('XOA BO CAC SO TRUNG NHAU');
   Writeln('------------------------');
   Writeln;
   Write('-Nhap so phan tu mang: ');
   Readln(n);
   For i:=1 To N Do
      Begin
         Write('-Phan tu A[',i,']= ');
         Readln(a[i]);
      End;
   i:=2;
   While i <= N Do
      Begin
         j:=1;
         While a[j] <> a[i] Do
            j:=j+1;
         If j < i Then
            Begin
               For k:=i to n-1 Do
                  a[k]:= a[k+1];
               n:=n-1;
            End
         Else
            i:=i+1;
      End;
   Writeln;
   Write('-Mang con lai: ');
   For i:=1 to n Do
      Write(a[i]:8);
   Writeln;
   Writeln('   Bam phim <Enter> de ket thuc ');
   Readln
End.

In bảng mã ASCII của các ký tự chữ cái trong pascal

Viết chương trình Pascal in mã ASCII của các ký tự. Khá đơn giản chỉ với 1 lệnh for.

Program Mang_Ky_Tu;
   Var
      a:Array[Char] Of Integer;
      Ch:Char;
Begin
   Writeln('IN MA ASCII CUA CAC KY TU');
   Writeln('------------------------');
   For Ch:='A' To 'Z' Do
      Begin
         a[Ch]:=Ord(Ch);
         Writeln('-Ky tu: ',Ch,' ma ASCII = ',a[ch]);
      End;
   Writeln;
   Writeln('Bam phim <Enter> de ket thuc');
   Readln
End.

Thứ Năm, 19 tháng 4, 2012

Xóa 1 phần tử trong mảng 1 chiều

Viết CT nhập từ bàn phím mảng 1 chiều và xóa 1 phần tử của mảng có n phần tử.

var
  n,i,q,k,p:integer;
  a,b:array [1..1000] of integer;
begin
  write('n= ');readln(n);
  for i:=1 to n do
    begin
      write('a[',i,']= ');
      readln(a[i]);
    end;
  write('Xoa pt co vi tri la: ');readln(p);
  q:=0;
  for i:=1 to n do
    if q<>p then
      begin
        inc(q);
        b[q]:=a[i];
      end;
  writeln('Mang sau khi xoa la: ');
  for i:=1 to q do
    write(b[i],' ');
  readln
end.

Nhập thêm 1 phần tử vào mảng 1 chiều

Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên X.

var
  n,i,q,k,p,:integer;
  a,b:array [1..1000] of integer;
begin
  write('n= ');readln(n);
  for i:=1 to n do
    begin
      write('a[',i,']= ');
      readln(a[i]);
    end;
  write('-Chen pt va vi tri cua pt do: ');readln(k,p);
  q:=0;
  for i:=1 to n do
    begin
    inc(q);
    if q=p then begin
      b[q]:=k;
      inc(q);
    end;
    b[q]:=a[i];
  end;
  writeln('-Mang sau khi chen la: ');
  for i:=1 to q do
    write(b[i],' ');
  readln
end.

Tìm tổng các số bất kỳ từ dãy 1,2,2,3,3,3,4,4,4,4...

Cho mảng A là dãy số 1,2,2,3,3,3,4,4,4,4,5,5,5,5,5.... Nhập vào số m, n (m<=n<=100000). In ra tổng A[m]+A[m+1]+...+A[n-1]+A[n].

 
program code;
var di:word;
    m,n,i,res:longint;

begin
   writeln('Nhap M: '); readln(m);
   writeln('Nhap N: '); readln(n);
   di:=0;
   i:=0;
   res:=0;
   while i<m do
    begin
      di:=di+1;
      i:=i+di;
    end;
    res:=(i-m+1)*di;
    while i<=n do
     begin
        di:=di+1;
        i:=i+di;
        res:=res+di*di;
     end;
    res:=res-di*(i-n);

   writeln('Ket qua: ',res);
   readln;
end.

Bài đăng phổ biến