Đến nội dung

Zjkar

Zjkar

Đăng ký: 02-03-2016
Offline Đăng nhập: Riêng tư
*****

#618726 Đề và code Pascal

Gửi bởi Zjkar trong 06-03-2016 - 15:11

Đề:  Tìm chữ số sau số 0 của N!

Ý tưởng:
- Tính n!
- Chuyển kq của n! sang xâu
-Chạy xâu,nếu s[i]=0 thì viết ký tự thứ i+1 ra và thoát ra khỏi vòng lặp.
Code:
program gt;
uses crt;
var i,n,j,k,l:integer;
s,s1,s2:string;
begin
clrscr;
write('Nhap n=');readln(n);
t:=1;
for i:=1 to n do
t:=t*i;
str(t,s);
write('So sau so 0 cua ',n,'! la: ');
for i:=1 to length(s) do
if s[i]='0' then 
begin
write(s[i+1]);
break;
end;
readln
end.
 




#618724 Đề và code Pascal

Gửi bởi Zjkar trong 06-03-2016 - 14:55

À! Nhân tiện cho hỏi 1 bài về xâu:

Bạn phải viết ct đưa ra tất cả các từ có thể có phát sinh từ 1 tập các chữ cái.

VD\

    .INP                                                 .OUT

    Abc                                                   abc

                                                             acb

                                                             bac

                                                             bca
                                                             cab

                                                             cba

Làm tương tự với cả xâu Acba nha 

Bài này sao giống bài của uyennhi thế.... :icon2:

Mà bài này mình cũng làm rồi nhưng còn 1 bước nữa để hoàn thiện, đó là làm sao để xoa các từ giống nhau trong 1 mảng <vì mình đưa các từ vào trong 1 mảng kiểu xâu mà>. :B):

---->Khi nào làm xong thì post lên cho. -_-




#618720 Topic Hỏi bài Pascal

Gửi bởi Zjkar trong 06-03-2016 - 14:49

ờ mình chép sai cái vd 

Vd nó phải là:

5                                          --->        5  

1 6 15 10 21                        --->     2 5 13 11 19

Thanks    

Ừ lần sau bạn phải cẩn thận hơn nhé, nếu không khó hiểu lắm (nhất là caí vd đó). :icon6:  




#618571 tìm gia sư homological algebra

Gửi bởi Zjkar trong 05-03-2016 - 20:25

Mình không biết...




#618555 viết chương trình chuẩn hóa xâu

Gửi bởi Zjkar trong 05-03-2016 - 19:59

Bạn làm đúng ý mình rồi đó.




#618553 [Pascal] Bài tập: Tìm K chữ số cuối cùng của M^N

Gửi bởi Zjkar trong 05-03-2016 - 19:57



Tìm K chữ số cuối cùng của MN (0< K <=9, 0<= M, N<= 106)    

Nếu có thể, phiền các bạn chia sẻ hướng suy nghĩ và thuật toán của mình trước khi đưa code

(Bài tập 2.8 trang 38 tài liệu chuyên tin học )

 

Mình không hiểu bác nghetuat102 làm gì nhưng mình có cách làm khác, bạn có thể tham khảo:

* Ý tưởng:

b1: Tính M^N 

b2: Chuyển kq của M^N sang xâu.

b3: Chạy từ k đến số phần tử của xâu và cộng các phần tử trong khoảng đó

=> tìm được kq cuối cùng.

---> để mình viết code cho bạn dễ hiểu nhé:

Code:

program 

uses crt;

var i,n,m,x,k:integer;

s,z:string;

begin

clrscr;

write('Nhap m:');readln(m);

write('Nhap n:');readln(n);

write('Nhap k:'):readln(k);

x:=m;

for i:=1 to n-1 do

x:=x*m;

str(x,s);

z:='';

for i:=k to length(s) do

z:=z+s[i];

writeln(k,' chu so cuoi cung cua ',m,'^',n,' la:',z);

readln

end.

----Ok rồi đó bạn --------

P/s: Đọc rồi ngẵm nghĩ là hiểu.




#618545 Viết phương trình tính tổng S = 2 + 4 + 6 + 8 +...+ 2N, với N >= 1, N đượ...

Gửi bởi Zjkar trong 05-03-2016 - 19:34

* Phân tích đề:

 

Viết phương trình tính tổng S = 2 + 4 + 6 + 8 +...+ 2N

----> viết chương trình chứ bạn.

Code:

program tt;

uses crt;

var j,k,i,n:integer;

s:real;

begin

clrscr;

repeat

write('Nhap n=');readln(n);

if n>=1 then break;

writeln('Hay nhap n>=1');

until false;

s:=0;

for i:=1 to n do

s:=s+2*i;

writeln('Tong: ',s:4:2);

readln

end.

------- Ok rồi đó bạn -----------




#618539 Giải bài toán quét vôi tối ưu bằng đệ quy

Gửi bởi Zjkar trong 05-03-2016 - 19:24

Căng thăng quá ....




#618492 Đề và code Pascal

Gửi bởi Zjkar trong 05-03-2016 - 14:04

Viết chương trình nhập vào một mảng gồm N số nguyên. Sắp xếp lại mảng theo thứ tự tăng dần và in kết quả ra màn hình.

Code:

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,j,Tam:Integer;
Begin
{Nhập mảng}
Write('Nhap N='); Readln(N);
For i:=1 To N Do
Begin
Write('A[',i,']='); Readln(A[i]);
End;
{Sắp xếp}
For i:=1 To N-1 Do
For j:=i+1 To N Do
If A[i]>A[j] Then
Begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;
End;
{In kết quả ra màn hình}
Writeln('Ket qua sau khi sap xep:');
For i:=1 To N Do Write(A[i]:5);
Readln;
End.
 

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.

Code:

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.

 

Đề bài: Nhập ngày tháng năm. Hãy cho biết ngày tháng năm sau đó N ngày.

Code:

program gt;

var d,m,y,n:integer;

Function      Songay(thang,nam: Integer):Integer;
Var             sn:Integer;
Begin
       Case thang of
                1,3,5,7,8,10,12 : sn:= 31;
                4,9,11             : sn:= 30;
                2:   If  (nam MOD 4 = 0) Then
                           sn:= 29
                      Else
                            sn:= 28;
        End;
        Songay:= sn;
End;
BEGIN
     Writeln('Nhap ngay thang nam');Readln(d,m,y);
     Writeln('Nhap N');Readln(N);
     d:=d+N;
     While d > Songay(m,y) Do
     Begin
         d:= d - Songay(m,y);
         m:= m+1;
         IF m > 12 Then
         Begin
              m:= 1;
              y:= y + 1;
         End;
    End;
Writeln('Ket qua ',d,'/',m,'/',y);
Readln;
END.

Dãy FIBONACI là dãy được xác định như sau: F(0) = 0; F(1) = 1 và F(n) = F(n-1) + F(n-2) với n = 2, 3...

Hãy viết chương trình máy tính để nhập từ bàn phím số nguyên dương M (2<M<2000000000), rồi xuất ra màn hình số FIBONACI lớn nhất là nguyên tố và nhỏ hơn M.

Ví dụ: Với M=10 thì các số FIBONACI nhỏ hơn M là: 0, 1, 1, 2, 3, 5, 8. Số 5 là số nguyên tố lớn nhất trong các số FIBONACI nhỏ hơn M. Vậy cần đưa ra màn hình dòng thông báo kết quả: Số cần tìm là: 5.

program gt;
uses crt;
var j,i,m,a,b,t:longint;

{----------------------}

Function kt(n:longint):boolean;
 var i,d:integer;
  begin
  kt:=false;
  d:=0;
   For i:=1 to n do
    if n mod i=0 then inc(d);
  if d=2 then kt:=true;
 end;

{----------------------}

begin
 clrscr;
 Write('Nhap m= ');
 readln(m);
 a:=0;
 b:=1;
  Repeat
   a:=a+b;
   b:=a+b;
  Until (a>=m) and (b>=m);

   if a<b then begin t:=a;a:=b;b:=t;end;

  Repeat
   a:=a-b;
   b:=b-a;
  Until ( (kt(a)) and (a<m))  or ( (kt(b)) and (b<m) );
If a>b then writeln(a);
 if b>a then writeln(b);

{----------------------}

  readln
 end.
Trước hết, chúng ta sẽ tìm hiểu khái niệm về số chính phương. Số chính phương là gì? Số chính phương là một số mà tự nó là căn bậc hai của một số tự nhiên khác, hay nói rõ hơn thì số chính phương là bình phương của một số tự nhiên.
Ví dụ: 289 là một số chính phương vì 289 = 17 bình phương.
Code:
program gt;
 uses crt; 
  type ArrInt = array[1..250] of integer;   
  Var n,i,x : integer;
         a: ArrInt; 
  BEGIN
   clrscr;
   write('Nhap so phan tu: ');
   readln(n);
   for i:=1 to n do
   begin
     write('Phan tu thu ',i,'= ');
     readln(a[i]);
   end;
   writeln('Cac so chinh phuong co trong mang:');
   for i:=1 to n do
   begin
    x:=trunc(sqrt(a[i]));
     if sqr(x)=a[i] then
       write(a[i]:4);
   end;
   readln;
  END.  
 
Trong đó lệnh hàm sqrt để lấy căn và hàm trunc để lấy phần nguyên.

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.

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.

Hai số m,n gọi là bạn của nhau nếu tổng các ước của m bằng n và ngược lại.Tìm tất cả các số là bạn của nahu và nhỏ hơn 10001.

Ý tưởng: Thay vì chạy 2 vòng lặp để xét m và n, ta có thể chỉ cần chạy 1 vòng lặp kiểm tra xem m và uoc(m) có là bạn của nhau không.

PROGRAM timban;
FUNCTION uoc(k:INTEGER):longint;
VAR i,tong:INTEGER;
BEGIN
tong:=0;
FOR i:=1 TO k DIV 2 DO
IF k MOD i =0 THEN tong:=tong+i;
uoc:=tong;
END;
VAR m:longint;
BEGIN
for m:= 1 to 10001 do
   if uoc(uoc(m)) = m then writeln(m, ' va ', uoc(m),' la ban cua nhau');
readln
END.

Nhập vào 1 số tự nhiên n* và nhập vào m, sau đó tính tổng m các số tận cùng của n.

vd: n = 365 m =2 tổng = 5+6=11.
Cách 1:  
 

uses crt;
var n: longint;
    m,tong,i: integer;
BEGIN
   clrscr;
   write('Nhap n: '); readln(n);
   write('Nhap m: '); readln(m);
   for i:=1 to m do
     begin
        tong:=tong+(n mod 10);
        n:=n div 10;
     end;
   write('Tong ',m,' chu so cuoi cua so vua nhap = ',tong);
   readln;
END.

Cách 2: Sử dụng xâu: Xâu giúp lưu trữ thoải mái hơn kiểu số nguyên, nên ta có thể khái báo N có ở string thay vì Integer. Như vậy, ở những trường hợp lớn (vd N bao gồm 100 chữ số chẳng hạn) thuật toán vẫn có thể hoạt động bình thường. 



uses crt;
var n: string;
    m,i,a,tong: integer;
BEGIN
   clrscr;
   write('Nhap so n: '); readln(n);
   write('Nhap m: '); readln(m);
   for i:= length(n) downto length(n)-m+1 do
     begin
         val(n[i],a);
         tong:=tong+a;
     end;
   write(tong);
   readln;
END.
----- Oài, nếu bạn nào có nhu cầu thì gửi bài cho mình cho mình nhé --------
P/s: Bác nào thấy được thì mình xin ít   :like  nhé  :)) .



#618490 Đề và code Pascal

Gửi bởi Zjkar trong 05-03-2016 - 13:46

Dưới đây là đề và code của các bài pascal, các bạn có thể tham khảo. :like




#618461 Topic Hỏi bài Pascal

Gửi bởi Zjkar trong 05-03-2016 - 10:23



Yêu cầu của cái đề 2 nó chỉ là:

Bài 2 : Cho 1 mảng gồm các số nguyên, hãy đưa ra mảng số nguyên tố gần của các số nguyên đó

(TH tìm được 2 số nguyên tố gần với số trong mảng thì đưa ra số nguyên tố gần bé hơn)

vd: Cho mảng ban đầu

1 6 5 15 10 21

Kết quả hiển thị của các số nguyên tố gần của mảng ban đầu là : 2 5 13 11 19

 

Đề nó yêu cầu là tim số nguyên tố gần với phan tử a[i] nhất. Lấy Vd ở trên là a[i]=15 thì số nguyên tố gần với nó la 13 và 17 nhưng đề yêu cầu  lấy số nguyên tố nhỏ hơn nên sẽ chi lấy số 13 thôi.(nếu còn j ko hieu đề thì cứ nói).

Vậy thằng số 5 ở đề  chạy đi đâu rồi ? :icon2:

Dàng lẽ là kq= 2 5 3 13 11 19 chứ  -_-




#618417 Đường hầm dài nhất

Gửi bởi Zjkar trong 04-03-2016 - 22:26

Bài này chẳng qua là áp dụng mảng 2 chiều. ~O)




#618416 Topic Hỏi bài Pascal

Gửi bởi Zjkar trong 04-03-2016 - 22:25

 

Câu 1 mình cho sai đề là đúng rồi (cảm ơn bạn). Còn câu 2 thì bạn phải đọc kĩ đề chứ

 

Bài 1 : Tính tổng các chữ số trong xâu kí tự

vd : ngày12thang8nam83 ----> Tổng=12+8+83=103

 

Bài 2 : Cho 1 mảng gồm các số nguyên, hãy đưa ra mảng số nguyên tố gần của các số nguyên đó

(TH tìm được 2 số nguyên tố gần với số trong mảng thì đưa ra số nguyên tố gần bé hơn)

vd: Cho mảng ban đầu

1 6 5 15 10 21

Kết quả hiển thị của các số nguyên tố gần của mảng ban đầu là : 2 5 13 11 19

 

* Phân tích đề:

- Bài 1:

+ Đề y/c là tính tổng các chữ số vậy mà ở ví dụ thì lại tính tổng các số !

+ Nếu là tính tổng các số thì cần thêm điều kiện các số cách nhau bởi 1 ký tự  (Cho phù hợp, chứ nếu các số gần nhau thì tình tổng làm gì nữa ?).

+ Nếu là tính tổng các chữ số thì phải cho ví dụ rõ ràng, chính xác !

- Bài 2:

+ Ở đoạn : (vd: Cho mảng ban đầu

 

1 6 5 15 10 21

Kết quả hiển thị của các số nguyên tố gần của mảng ban đầu là : 2 5 13 11 19) thì theeo mình ví dụ sai:

+ Theo mình cái đúng là thế này: 2 5 3 13 11 19   hoặc  2 5 7 13 11 19.

Cho nên bạn transontung nếu ra đề thì cần phải cẩn thận .

----> Nếu bạn muốn hỏi bài thì nên vào chủ đề Ai muốn hỏi bài tập thì vào đây đó là chủ đề do mình lập nên khi đăng bài nếu có thể thì mình sẽ giúp . Cảm ơn.

 

Nếu bạn nói vậy thì mình chưa hiểu cái đề bài 2 (chủ yếu là cái vd, mình chưa hiểu ở chổ đó) bạn có thể chỉ rõ hơn không ?

Mình cảm ơn đã góp ý chân thành.




#618415 Topic Hỏi bài Pascal

Gửi bởi Zjkar trong 04-03-2016 - 22:22

cái này ko thuộc kiểu mà sao làm đc

 

À đúng rồi, cảm ơn bạn.

Sửa: đáng lẽ ở phần function thì chỉ cần kiểm tra xâu là được rồi chứ không cần phải kiểm tra số làm gì cho mệt. 




#618057 Góp ý về việc đăng hình :

Gửi bởi Zjkar trong 02-03-2016 - 19:24

Ở đâu vậy nhỉ, mình không thấy ?

À à thấy rồi cảm ơn.