Ai rành giúp mình giải thích đoạn nhỏ C++ này với

PhamHongViEHG

Junior
Joined
Jun 15, 2014
Messages
281
Reactions
269
MR
0.028
cách trình bày code của bạn làm cho người đọc rối mắt. bạn viết code phải "thụt ra thụt vô" cho nó hợp lý.
mình viết bằng notepad ++ thụt ra thụt vô hợp lý rồi.. copy lên đây nó ko còn hợp lí nữa :(
 

vipphuong

Banned
Verified
Scammer
Joined
Apr 30, 2013
Messages
651
Reactions
431
MR
0.421
Call me! Call me! Chat with me via Yahoo Messenger Chat with me via Skype
mình viết bằng notepad ++ thụt ra thụt vô hợp lý rồi.. copy lên đây nó ko còn hợp lí nữa :(

trêm form bạn dùng khoảng trắng(space) thay cho tab trên Notepad. nhìn cái code của bạn có muốn trả lời giúp bạn nhưng thấy cách trình bày vậy mình next luôn. các bạn progamer vào công ty mình phỏng vấn, chưa cần biết code pro tới cỡ nào nhìn cách trình bày rồi trả hồ sơ luôn
 

faluyt

Senior
Verified
Pre-verified
Joined
Sep 15, 2014
Messages
342
Reactions
168
MR
0.580
$500.00
Services
Follow me on Facebook
Nào ai rảnh lại tiếp tục giúp đỡ C++ nhá
giải thích giúp e đoạn màu đỏ.... và đoạn tính gia thừa... sao lại là a nhỉ,cái đó e nghĩ là n chứ ta.


#include<iostream.h>
#include<conio.h>
#include<math.h>

long giaithua(int a) // Khai báo a ở đây
{
int gt=1;
if(a==0 || a==1) // Thì dùng a ở đây, khai báo gì thì dùng nấy
return 1;
for(int i=2;i<=a;i++)
gt=gt*i;
return gt;
}

void kiemtra(int n) //Khai báo n thì dùng n
{
int i=0;
while(giaithua(i)<=n) // Lặp đến khi giai thừa của i < n
{
if(giaithua(i)==n) // Nếu bằng thì in ra, ko thì báo ko tìm thấy
{
cout<<n<<"="<<i<<"!";
}


i++;

}
else
{cout<<"Khong co giai thua"<<endl;}
cout<<endl;
}


void main()
{
int n;
cout<<"\nNhap vao so can kiem tra ";
cin>>n;
kiemtra(n);
//getch();
}​
 
trêm form bạn dùng khoảng trắng(space) thay cho tab trên Notepad. nhìn cái code của bạn có muốn trả lời giúp bạn nhưng thấy cách trình bày vậy mình next luôn. các bạn progamer vào công ty mình phỏng vấn, chưa cần biết code pro tới cỡ nào nhìn cách trình bày rồi trả hồ sơ luôn
đã sửa
 
Nào ai rảnh lại tiếp tục giúp đỡ C++ nhá
giải thích giúp e đoạn màu đỏ.... và đoạn tính gia thừa... sao lại là a nhỉ,cái đó e nghĩ là n chứ ta.

Code:
#include<iostream.h>
#include<conio.h>
#include<math.h>

long giaithua(int a)
{
    int gt=1
    if(a==0 || a==1)
          return 1;
    for(int i=2;i<=a;i++)
        gt=gt*i;
    return gt;
}

//đoạn mình cần hướng dẫn
void kiemtra(int n)
{
    int i=0;
    while(giaithua(i)<=n)
    {
        if(giaithua(i)==n)
        {
            cout<<n<<"="<<i<<"!";
        }

        i++;

    }
                    else
        {cout<<"Khong co giai thua"<<endl;}
    cout<<endl;
}
//tới đây là được.
void main()
{
    int n;
    cout<<"\nNhap vao so can kiem tra ";
    cin>>n;
    kiemtra(n);
    //getch();
}
code này là tính giai thừa của số nhỏ hơn hoặc bằng số nhập vào mà. Nếu kết quà giai thừa >n thì thoát. rồi in ra màn hình.

mình chỉ bạn cách test nha.

trong soft C++ có phần debug.
bạn nhấn F7, F8 rồi bạn xem nó chạy như thế nào nha.
 
code này là tính giai thừa của số nhỏ hơn hoặc bằng số nhập vào mà. Nếu kết quà giai thừa >n thì thoát. rồi in ra màn hình.

mình chỉ bạn cách test nha.

trong soft C++ có phần debug.
bạn nhấn F7, F8 rồi bạn xem nó chạy như thế nào nha.
nó chạy đúng rồi... thì nhập 1 số nó ra giai thừa số đó... vd nhập số 24 thì nó ra là: 24=4!
nhập 25 thì nó ra là: 25 không có giai thừa nào phù hợp

vấn đề là mình hiểu phần code ý... bạn giải thích với dc ko
 
nó chạy đúng rồi... thì nhập 1 số nó ra giai thừa số đó... vd nhập số 24 thì nó ra là: 24=4!
nhập 25 thì nó ra là: 25 không có giai thừa nào phù hợp

vấn đề là mình hiểu phần code ý... bạn giải thích với dc ko
đúng rồi bạn.
hình như bạn chưa hiểu về giai thừa. để mình ví dụ nha.
3!=6(1x2X3)
4!=24(1x2x3x4)
5!= 120(1x2x3x4x5)
...
với code của bạn bạn nhập
24 nó ra là: 24=4! ( chuẩn)
25 ko có giai thừa.

nếu bạn nhập 125 thì nó ra là: 125=5!

Nó tóm lại cho dể nhiểu đoạn code của bạn là tính giai thừa ngược( giống như toán nhân toán chia) code của bạn ở đây có thể hiểu là chia
 
đúng rồi bạn.
hình như bạn chưa hiểu về giai thừa. để mình ví dụ nha.
3!=6(1x2X3)
4!=24(1x2x3x4)
5!= 120(1x2x3x4x5)
...
với code của bạn bạn nhập
24 nó ra là: 24=4! ( chuẩn)
25 ko có giai thừa.

nếu bạn nhập 125 thì nó ra là: 125=5!

Nó tóm lại cho dể nhiểu đoạn code của bạn là tính giai thừa ngược( giống như toán nhân toán chia) code của bạn ở đây có thể hiểu là chia
không phải mình không hiểu giai thừa... mình không hiẻu đoạn code này nè
Code:
void kiemtra(int n)
{
    int i=0;
    while(giaithua(i)<=n) // (tại sao giaithua(i)
<=n, giaithua(i) là gì)
    {
        if(giaithua(i)==n) // tại sao?
        {
            cout<<n<<"="<<i<<"!";
        }

        i++;   // là gì?

    }
                    else
        {cout<<"Khong co giai thua"<<endl;}
    cout<<endl;
}
 

mmome334

Hero
Joined
Nov 3, 2013
Messages
1,243
Reactions
1,448
MR
0.316
long giaithua(int a)
{
int gt=1
if(a==0 || a==1)
return 1;
for(int i=2;i<=a;i++)
gt=gt*i;
return gt;
}

Cậu thấy long giaithua(int a) <-- nó là int a ko ? nên phía dưới phải là a, còn cậu khai báo long giaithua(int n) thì ở dưới là n, chỉ là tên gọi thôi mà.
 
long giaithua(int a)
{
int gt=1
if(a==0 || a==1)
return 1;
for(int i=2;i<=a;i++)
gt=gt*i;
return gt;
}

Cậu thấy long giaithua(int a) <-- nó là int a ko ? nên phía dưới phải là a, còn cậu khai báo long giaithua(int n) thì ở dưới là n, chỉ là tên gọi thôi mà.
ai nói giải thích giúp mình đoạn kiểm tra với
Code:
void kiemtra(int n)
{
    int i=0;
    while(giaithua(i)<=n) // (tại sao giaithua(i)
<=n, giaithua(i) là gì)
    {
        if(giaithua(i)==n) // tại sao?
        {
            cout<<n<<"="<<i<<"!";
        }

        i++;   // là gì?

    }
                    else
        {cout<<"Khong co giai thua"<<endl;}
    cout<<endl;
}
 
Joined
Aug 9, 2014
Messages
67
Reactions
129
MR
0.000
ai nói giải thích giúp mình đoạn kiểm tra với
Code:
void kiemtra(int n)
{
    int i=0;
    while(giaithua(i)<=n) // (tại sao giaithua(i)
<=n, giaithua(i) là gì)  

n là số bạn nhập vào để kiểm tra nó có giai thừa hay không
giaithua(i) trong vòng lặp while để nó dùng hàm tính giai thừa từ 0 cho đến =n vì có i++

ví dụ: bạn cần kiểm tra xem số 5 có giai thừa hay ko ?
giaithua(0) = 1 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 5 nên nó cho i++ tức là i + thêm 1 tức là 1
giaithua(1) = 1 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 5 nên nó cho i++ tức là i + thêm 1 tức là 2
giaithua(2) = 2 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 5 nên nó cho i++ tức là i + thêm 1 tức là 3
giaithua(3) = 6 nó so sánh thì nó thoát vòng lặp while rồi vì  giaithua(i)<=n mà
luc này vẫn chưa có thỏa mãn giaithua(i)=5
nên nó sẽ in ra "Khong co giai thua"

ví dụ: bạn cần kiểm tra xem số 6 có giai thừa hay ko ?
giaithua(0) = 1 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 6 nên nó cho i++ tức là i + thêm 1 tức là 1
giaithua(1) = 1 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 6 nên nó cho i++ tức là i + thêm 1 tức là 2
giaithua(2) = 2 nó so sánh xem có = với n  hay không
if(giaithua(i)==n)  vì lúc này không bằng với 6 nên nó cho i++ tức là i + thêm 1 tức là 3
giaithua(3) = 6 nó so sánh thì nó dùng if(giaithua(i)==n)    , đã bằng 6 --> nên nó sẽ in ra  cout<<n<<"="<<i<<"!"   tức là 3!
                             
    {
        if(giaithua(i)==n) // tại sao?
        {
            cout<<n<<"="<<i<<"!";
        }

        i++;   // là gì?

    }
                    else
        {cout<<"Khong co giai thua"<<endl;}
    cout<<endl;
}

đọc ko hiểu chỗ nào cứ hỏi :D, mình ghi rồi đó
 

trylife

Banned
Joined
Sep 7, 2014
Messages
70
Reactions
160
MR
0.000
ai nói giải thích giúp mình đoạn kiểm tra với
Code:
void kiemtra(int n)
{
    int i=0;
    while(giaithua(i)<=n) // (tại sao giaithua(i)
<=n, giaithua(i) là gì)
    {
        if(giaithua(i)==n) // tại sao?
        {
            cout<<n<<"="<<i<<"!";
        }

        i++;   // là gì?

    }
                    else
        {cout<<"Khong co giai thua"<<endl;}
    cout<<endl;
}

Những cái này là những cái hết sức cơ bản, nếu bạn học ở trường thì nên hỏi trực tiếp thầy cô, còn tự học thì lên diễn đàn Cong Đồng C Việt hỏi sẽ tốt hơn

- tai sao giaithua(i): Ở đây chính là lời gọi hàm giai thừa mà bạn đã định nghĩa ở trên, truyền vào đối số i mà bạn đã khởi tạo =0 ở trên, n chính là biến nhập từ bàn phím để xét, ví dụ bạn nhập vào 6 chẳng hạn thì hàm nó bắt đầu khởi tạo i=0 và tính giai thừa, sau đó nó lấy kết quả đó so sánh với n(giaithua(i)<=n), chừng nào mà nó còn nhỏ hơn hoặc bằng n(vòng lặp while do) thì nó sẽ tăng lên 1 đơn vị(i++), sau đó vòng lặp tiếp tục, lúc này i đã tăng lên 1 đơn vị tức là bằng i=1 vì ban đầu khởi tạo bằng 0 nên i++ hay i=i+1 hay i=0+1=1, hàm giaithua(1) sẽ tính và so sánh với n, nó thấy vẫn nhỏ hơn thì lại tiếp tục tăng i lên(i++), cho tới khi giaithua(i)=n thì nó sẽ xuất ra kết quả n=i (Bạn nhìn hàm if)còn ngược lại nếu nó lớn hơn n thi xuất ra là không có giai thừa(đk else)
Chạy code bằng tay cho hiểu luôn:
Bước 1: Người dùng nhập n=6
int i=0
giaithua(0)=1<6 =>i=0+1=1 (chính là i++)
Lặp sang bước 2
Bước 2: i=1
giaithua(1)=1<6 =>i=1+1=2
Lặp sang bước 3
Bước 3: i=2
giaithua(2)=2<6=>i=2+1=3
Lặp sang bước 4
Bước 4: i=3
giaithua(3)=6=6 (Phù hợp với điều kiện if)
=>xuất ra n=i tức là n=3
 
không phải mình hỏi cậu lệnh viết như nào.. mà ý hỏi thuật toán ý tại sao lại viết thế,xem sách biết chỗ nào mà mò sách to đùng nó ko đi trọng tâm chỗ cần hỏi :D

đăng lên congdongcviet cũng có nhưng chờ giải hơi lâu... :P
mấy bài trc có đăng lên đây mấy a giải khá rõ và nhanh.. bài này đoạn đó còn mơ hồ quá :D
 
không phải mình hỏi cậu lệnh viết như nào.. mà ý hỏi thuật toán ý tại sao lại viết thế,xem sách biết chỗ nào mà mò sách to đùng nó ko đi trọng tâm chỗ cần hỏi :D

đăng lên congdongcviet cũng có nhưng chờ giải hơi lâu... :p
mấy bài trc có đăng lên đây mấy a giải khá rõ và nhanh.. bài này đoạn đó còn mơ hồ quá :D

Liên hệ mình, chỉ cho 1 khóa :)
 

Announcements

Forum statistics

Threads
426,355
Messages
7,175,958
Members
178,807
Latest member
8livecool1

Most viewed of week

Most viewed of week

Back
Top Bottom