Tin học Bài tập mảng

K

kieuquocdat

uses crt;
var n,i,d:longint;
a,b:array[1..1000] of longint;

begin
clrscr;
write('Nhap n=');readln(n);
for i:=1 to n do begin
write('nhap a[',i,']=');
readln(a);
end;
for i:=1 to n do begin
if a<0 then begin
inc(d);
b[d]:=a;
end;
end;
for i:=1 to n do begin
if a=0 then begin
inc(d);
b[d]:=a;
end;
end;
for i:=1 to n do begin
if a>0 then begin
inc(d);
b[d]:=a;
end;
end;
for i:=1 to d do write(b:5);
readln;
end.
 
P

p_trk

Mã:
 uses crt;
 var
   a:array[1..100] of integer;
   i,j,n,t,l,k,dem1,dem2: integer;
 procedure init;
  begin
     clrscr;
      write(' n = '); readln(n);
       for i:=1 to n do
        begin
            write('a[i]= '); readln(a[i]);
        end;
  end;

 procedure processing;
  begin
      for j:=n downto 1 do
       for i:=1 to j-1 do
        if a[i]>a[i+1] then
         begin
             t:=a[i];
             a[i]:=a[i+1];
             a[i+1]:=t;
         end;
  end;

  procedure check;
   begin;
       for i:=1 to n do
        if a[i]=0 then
         for k:=1 to n do
          write(a[k],'      ') else
         begin
             for i:=1 to n do
              begin
                   if a[i]<0 then dem1:=dem1+1;
                   if a[i]>0 then dem2:=dem2+1;
              end;
             for k:=1 to dem1 do
              write(a[k],'     ');
              write('0     ');
             for l:=dem2 to n do
              write(a[l],'     ');
         end;
   end;

  procedure print;
   begin
       for i:=1 to n do
        writeln(a[i]);
   end;

   BEGIN
    init;
    processing;
    check;
    readln;
    END.
  end;

bạn có thể có cách làm khác mà khoa học hơn như kiểm tra nếu không thấy gia trị 0 bạn thêm vào mảng a một giá trị 0 , sau đó Qshort hoặc selecshort hoặc v.v ....short.
 
O

ochuotqb

Mã:
 uses crt;
 var
   a:array[1..100] of integer;
   i,j,n,t,l,k,dem1,dem2: integer;
 procedure init;
  begin
     clrscr;
      write(' n = '); readln(n);
       for i:=1 to n do
        begin
            write('a[i]= '); readln(a[i]);
        end;
  end;

 procedure processing;
  begin
      for j:=n downto 1 do
       for i:=1 to j-1 do
        if a[i]>a[i+1] then
         begin
             t:=a[i];
             a[i]:=a[i+1];
             a[i+1]:=t;
         end;
  end;

  procedure check;
   begin;
       for i:=1 to n do
        if a[i]=0 then
         for k:=1 to n do
          write(a[k],'      ') else
         begin
             for i:=1 to n do
              begin
                   if a[i]<0 then dem1:=dem1+1;
                   if a[i]>0 then dem2:=dem2+1;
              end;
             for k:=1 to dem1 do
              write(a[k],'     ');
              write('0     ');
             for l:=dem2 to n do
              write(a[l],'     ');
         end;
   end;

  procedure print;
   begin
       for i:=1 to n do
        writeln(a[i]);
   end;

   BEGIN
    init;
    processing;
    check;
    readln;
    END.
  end;

bạn có thể có cách làm khác mà khoa học hơn như kiểm tra nếu không thấy gia trị 0 bạn thêm vào mảng a một giá trị 0 , sau đó Qshort hoặc selecshort hoặc v.v ....short.
Code của bạn còn chưa tốt lắm ở chỗ:
- Nếu trong dãy đó không có số 0 sau khi bạn thêm số 0 vào xuất bị mất những giá trị khác.
VD:
Input: n = 5
-1 2 6 9 3
Output:
-1 0 6 9
Mình xin chữa lại như sau:
- Không nên thêm số 0 vào mà hãy kiểm tra điều kiện của dãy tối thiểu phải có 1 số 0 :)
p/s: Nếu muốn bài này ngắn hơn và dễ hơn thì chỉ cần sắp xếp từ bé đến lớn :)
 
Last edited by a moderator:
Top Bottom