tin học trẻ

M

mikelhpdatke

Mã:
Program pstoigian;
 Var a,b,r,i:Integer;
Function UCLN(a,b:Integer):Integer;
var t:integer;
 Begin
  If b>a then begin t:=b;b:=a;a:=t;end;
  Repeat
   r:=a mod b;
   a:=b;
   b:=r;
  Until b=0;
  UCLN:=a;
 End;

 Procedure Init;
Var a1,b1:integer;
  Begin
   Write('Nhap a= ');Readln(a);a1:=a;
   Write('Nhap b= ');Readln(b);b1:=b;

    Writeln( a/UCLN(a1,b1):5:0,' ',b/UCLN(a1,b1):5:0);
  End;
BEGIN
 Init;
 readln
 end.

Còn bài tập tiếp theo đang tìm xem có bài nào ko :D
 
T

thiennu274

Làm hok, tui ra đề cho làm nè!! ^ ^
Nhập vào một chuỗi, thực hiện nén và giải nén.
vd nha: nhập; aabbbccccdddd
nén 2a3b4c4d
và ngược lại giải nén chuỗi " 2a3b4c4d" -> " aabbbccccdddd"
Cái nỳ đề thi tin học trẻ tỉnh mình đó
 
M

mr_cross_fire

Cho em spam tý, em năm nay lên lớp 8, em đọc trước rùi mà em cũng tàm tạm về máy tính, nhưng em thấy tin 8 nhiều cái khó quá. Có thể cho em hỏi: " Những công thức trên các anh/chị tự tìm hiểu hay là được học nhiều rồi nhớ" ( hay các anh/chị học giỏi tin nên thông thạo ) ạ. Trả lời dùm em nhé ! Để em học tập. Thanks anh/chị.
 
M

mikelhpdatke

Cho em spam tý, em năm nay lên lớp 8, em đọc trước rùi mà em cũng tàm tạm về máy tính, nhưng em thấy tin 8 nhiều cái khó quá. Có thể cho em hỏi: " Những công thức trên các anh/chị tự tìm hiểu hay là được học nhiều rồi nhớ" ( hay các anh/chị học giỏi tin nên thông thạo ) ạ. Trả lời dùm em nhé ! Để em học tập. Thanks anh/chị.

Niềm đam mê là chính. Tự học hỏi thui bạn a`. MÌnh tiếp xúc với máy tính cũng lâu rồi. T/g đầu đa số chơi AOE :)). Sau này chán rồi lên 4rum học
 
M

mikelhpdatke

Làm hok, tui ra đề cho làm nè!! ^ ^
Nhập vào một chuỗi, thực hiện nén và giải nén.
vd nha: nhập; aabbbccccdddd
nén 2a3b4c4d
và ngược lại giải nén chuỗi " 2a3b4c4d" -> " aabbbccccdddd"
Cái nỳ đề thi tin học trẻ tỉnh mình đó

Bạn cho thêm khoảng 10 test nữa đi. Nếu chỉ có những test đơn giản thế này thì mình làm được
 
1

11thanhkhoeo

Bài này nén thì không khó chúng ta sẽ đọc từng phần tử và xem phần tử đó có giống phần tử vừa xét hay không.

Còn giải nén thì đầu tiên là phân tich đâu là số và đâu là chữ

Ví dụ 102a thì sẽ là ************************aaaaaaaaa chú không phải là 0aa
 
M

mikelhpdatke

Em đang code bài này. Đọc code trên mạng thấy nó khá dài. Hình như có nhiều test hiểm?? :-?
 
T

tmb12

Bạn nào giải được đề này của mình:
1/Cho một dãy số nguyên bất kì, hãy tìm một dãy con liên tục đơn điệu tăng dài nhất cảu dãy trên
2/Cho trước hai xâu kí tự S1, S2 hãy đếm xem sâu S1 xuất hiện trong sâu S2 tại bao nhiêu vị trí
3/Cho trước hai xâu kí tự S1, S2 hãy xét xem xâu S1 có phải là xâu con của xâu S2 không nếu xóa bỏ vài kí tự của xâu S2 được sâu S1
Cùng thử thách bản thân nào các bạn!
 
C

cuong276

Bạn nào giải được đề này của mình:
1/Cho một dãy số nguyên bất kì, hãy tìm một dãy con liên tục đơn điệu tăng dài nhất cảu dãy trên
2/Cho trước hai xâu kí tự S1, S2 hãy đếm xem sâu S1 xuất hiện trong sâu S2 tại bao nhiêu vị trí
3/Cho trước hai xâu kí tự S1, S2 hãy xét xem xâu S1 có phải là xâu con của xâu S2 không nếu xóa bỏ vài kí tự của xâu S2 được sâu S1
Cùng thử thách bản thân nào các bạn!

Mấy bài này dễ quá bạn à
Để mình code cho mấy bài khác đã, tí mình lại code cho
 
T

tmb12

Vậy mà dễ hả bạn? Ông thầy mình nói là mình hổng có cái tư duy gì ấy dù có cố gắng cũng không thể nào viết chương trình được, mình cãi ổng thì ổng cho mấy cái này về nhìn vô là thấy choáng hết rồi@-)
 
M

mikelhpdatke

Làm hok, tui ra đề cho làm nè!! ^ ^
Nhập vào một chuỗi, thực hiện nén và giải nén.
vd nha: nhập; aabbbccccdddd
nén 2a3b4c4d
và ngược lại giải nén chuỗi " 2a3b4c4d" -> " aabbbccccdddd"
Cái nỳ đề thi tin học trẻ tỉnh mình đó
Ah mà bác nay dạo này mất tăm, post code lên bài xâu thuần nhất đê + thuật toán
 
C

cuong276

Mã:
var s,st,s1:string;
    i,k,d,dem,code:integer;
    j:char;
function ktstn(a:char):boolean;
var j:char;
    kt:boolean;
begin
     kt:=true;
     for j:='1' to '9' do
         if a=j then
            begin
                 kt:=false;
                 break;
            end;
     ktstn:=kt;
end;
begin
     write('nhap s='); readln(s);
     d:=0;
     for i:=1 to length(s) do
         for j:='1' to '9' do
             if s[i]=j then inc(d);
     if d=0 then
        begin
             st:='';
             dem:=1;
             for i:=1 to length(s) do
                 begin
                      if s[i]=s[i+1] then inc(dem);
                      if s[i]<>s[i+1] then
                         begin
                              if dem=1 then st:=st+s[i];
                              if dem>1 then
                                 begin
                                      str(dem,s1);
                                      st:=st+s1+s[i];
                                      dem:=1;
                                 end;
                         end;
                 end;
             writeln('day sau khi doi la:');
             write(st);
        end
     else
         begin
              st:='';
              for i:=length(s) downto 1 do
                  begin
                       if (ktstn(s[i])=true) and (ktstn(s[i-1])=true) then st:=s[i]+st;
                       if (ktstn(s[i])=true) and (ktstn(s[i-1])=false) then
                          begin
                               val(s[i-1],dem,code);
                               for k:=1 to dem do st:=s[i]+st;
                          end;
                  end;
              writeln('day sau khi doi la:');
              write(st);
         end;
     readln;
end.
Hiện nén thì chỉ cần đếm số các kí tự giống nhau rồi lưu vào 1 mảng khác thì ok. Còn giải nén thì tìm số sau đó in ra số lần chữ cái ở phía sau chữ số đó là ok
 
C

cuong276

Xin lỗi! Mình lỡ hẹn tí nha.
Ai giúp được thì giúp bạn tí kìa.
Mấy ngày hôm nay mình bận tí.
 
O

ochuotqb

Mã:
var s,st,s1:string;
    i,k,d,dem,code:integer;
    j:char;
function ktstn(a:char):boolean;
var j:char;
    kt:boolean;
begin
     kt:=true;
     for j:='1' to '9' do
         if a=j then
            begin
                 kt:=false;
                 break;
            end;
     ktstn:=kt;
end;
begin
     write('nhap s='); readln(s);
     d:=0;
     for i:=1 to length(s) do
         for j:='1' to '9' do
             if s[i]=j then inc(d);
     if d=0 then
        begin
             st:='';
             dem:=1;
             for i:=1 to length(s) do
                 begin
                      if s[i]=s[i+1] then inc(dem);
                      if s[i]<>s[i+1] then
                         begin
                              if dem=1 then st:=st+s[i];
                              if dem>1 then
                                 begin
                                      str(dem,s1);
                                      st:=st+s1+s[i];
                                      dem:=1;
                                 end;
                         end;
                 end;
             writeln('day sau khi doi la:');
             write(st);
        end
     else
         begin
              st:='';
              for i:=length(s) downto 1 do
                  begin
                       if (ktstn(s[i])=true) and (ktstn(s[i-1])=true) then st:=s[i]+st;
                       if (ktstn(s[i])=true) and (ktstn(s[i-1])=false) then
                          begin
                               val(s[i-1],dem,code);
                               for k:=1 to dem do st:=s[i]+st;
                          end;
                  end;
              writeln('day sau khi doi la:');
              write(st);
         end;
     readln;
end.
Hiện nén thì chỉ cần đếm số các kí tự giống nhau rồi lưu vào 1 mảng khác thì ok. Còn giải nén thì tìm số sau đó in ra số lần chữ cái ở phía sau chữ số đó là ok

Code bạn lỗi rồi:)..
Bạn thử nhập: aaaaaaaaaababa xem thế nào :)
 
Last edited by a moderator:
C

cuong276

Chẳng có gì sai cả bạn à. Bạn đọ lại định nghĩa về xâu thuần nhất nha:
Xâu kí tự thuần nhất được định nghĩa là xâu chỉ bao gồm các chữ cái tiếng anh. Một xâu thuần nhất có thể được viết thu gọn, bao gồm các số thứ tự kèm theo tần số xuất hiện liên tiếp của nhóm đó!
Ở đây là tần số xuất hiện các chữ cái liên tiếp. Với bộ text aaaaaaaaaababa với chương trình của mình cho kết quả là 10ababa chứ có sao đâu.
Hay là bạn muốn kết quả là thế này: 10a2(ba). Kết quả bạn muốn là thế này à? Vậy thì khó đây. Để mình nghĩ đã. Bạn tham khảo cái code này nha.

Mã:
program xau_thuan_nhat;
uses crt;
var s,ss,st,si:string; i,j,l:integer;
function kttn(s:string):boolean;
 var x:char; ok:boolean;
 begin
  kttn:=true;
  for i:=1 to length(s) do
   s[i]:=upcase(s[i]);
  for i:=1 to length(s) do
   begin
    ok:=false;
    for x:='A' to 'Z' do
     if s[i]=x then ok:=true;
    if not ok then begin kttn:=false;break;end;
   end;
 end;
procedure nen(s:string;var st:string);
 begin
  ss:='';
  while s<>'' do
   begin
    i:=1;
    while (s[i+1]=s[1])and(i<length(s)) do
     inc(i);
    if i>1 then
     begin
      str(i,si);
      ss:=ss+s[1]+si;
     end
    else ss:=ss+s[1];
    delete(s,1,i);
   end;

  s:=ss;l:=2;
  while l<length(s) do
   begin
    i:=1;
    while i<=length(s)-l do
     begin
      si:=copy(s,i,l);
      j:=i+l;
      ss:=copy(s,j,l);
      while ss=si do
       begin
        j:=j+l;
        ss:=copy(s,j,l);
       end;
      if j=i+l then inc(i)
      else
       begin
        str((j-i)div l,ss);
        delete(s,i,j-i);
        si:='('+si+')'+ss;
        insert(si,s,i);
        i:=i+l+2+length(ss);
       end;
     end;
    inc(l);
   end;
  st:=s;
 end;
function ktcd(st:string):boolean;
 begin
  ktcd:=false;
  for i:=1 to length(st) do
   if st[i]='(' then begin ktcd:=true; break; end;
 end;
procedure giainen(st:string;var s:string);
 var d,c:byte; code:integer;
 begin
  while ktcd(st) do
   begin
    i:=1; c:=0;
    while st[i]<>'(' do inc(i);
    d:=1; j:=i+1;
    while c<d do
     begin
      inc(j);
      if st[j]='(' then inc(d);
      if st[j]=')' then inc(c);
     end;
    si:=copy(st,i,j-i+1);
    delete(st,i,j-i+1);
    delete(si,1,1);
    delete(si,length(si),1);
    j:=i;
    while st[j+1] in['0'..'9'] do inc(j);
    ss:=copy(st,i,j-i+1);
    delete(st,i,j-i+1);
    val(ss,l,code);
    for j:=1 to l do
     insert(si,st,i);
   end;
  i:=1;
  while i<=length(st) do
   begin
    inc(i);
    if st[i] in['0'..'9'] then
     begin
      j:=i;
      while st[j+1] in['0'..'9'] do inc(j);
      ss:=copy(st,i,j-i+1);
      delete(st,i,j-i+1);
      val(ss,l,code);
      ss:=st[i-1];
      for j:=1 to l-1 do insert(ss,st,i);
      i:=i+l-1;
     end;
   end;

  s:=st;
 end;
begin
 clrscr;
 write('nhap chuoi: ');readln(s);
 if kttn(s) then
  begin
   nen(s,st);
   writeln('Chuoi sau khi nen la: ',st);
   giainen(st,s);
   writeln('Chuoi sau khi giai nen la: ',s);
  end
 else write('Xau ko thuan nhat.');
readln;
end.
 
Top Bottom