Video Ngôn Ngữ C - 31 - Cấu trúc của một hàm và prototype là gì

Source Code:

#include <stdio.h>
// declare
int power(int coso, int somu); // function prototype
int main()
{
    int i;
    printf("i\t 2^i\t -3^i\n");
    for (i = 0; i < 10; ++i)
        printf("%d\t %d\t %d\n", i, power(2,i), power(-3,i));
    getchar();
    return 0;
}
/* power: tra ve ketqua = co so ^ so mu */
/* ketqua = a^b */
// definition
int power(int coso, int somu)
{
    int i, ketqua;
    ketqua = 1;
    for (i = 1; i <= somu; ++i)
        ketqua = ketqua * coso;
    return ketqua;
}

#Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :
#Thông tin về khóa học xem tại đây :

-Sự khác biệt giữa 2 khóa học cũ và mới :
+Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả.
+Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại… Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học cũ giúp đỡ việc lắng nghe và hiểu được tốt hơn.

Bài này khó hiểu quá anh Đạt ơi giúp em với.
Hai hàm này có liên quan gì nhau không anh.
Hàm declare sao có thể khai báo được nhiều lần còn hàm definition chỉ được 1 lần.

Chỗ này em hiểu nhầm ý anh rồi. Declare(declaration) có nghĩa là khai báo. Define(definition) có nghĩa là định nghĩa.

  • Khai báo(delare) có nghĩa là em “khai báo” cho compiler biết một biến, một hàm có tồn tại. Em có thể khai báo nhiều lần. Giống như em có thể chia sẻ cho bạn em biết về diễn đàn daynhauhoc.com nhiều lần.

  • Định nghĩa(define) có nghĩa là em “định nghĩa” cho compiler biết một biến, một hàm nó có hình dáng, cấu trúc và phương thức hoạt động như thế nào. Em chỉ có thể định nghĩa một lần. Cũng giống như anh chỉ định nghĩa ra một diễn đàn daynhauhoc.com. Trong đó anh cho biết cấu trúc diễn đàn, các hành vi được khuyến khích và chấp nhận trong diễn đàn, cách hoạt động, cách đặt câu hỏi, cách trả lời, cách giao tiếp giữa các thành viên.

1 Like

Ví dự như bài tập tính lãi xuất anh cho, thì sẽ cần phải có cả 2 hàm declare và definition ah anh.
tại em xem từ hai hàm này mà không thể áp dụng làm bài tập dc, em k thấy cái liên quan của 2 hàm này.

1 Like

Đúng rồi em. Em không khai báo thì compiler nó có thể tự tìm được cái definition mà không cần cái declare. Nhưng mà nó sẽ cảnh báo thiếu prototype.

Em cho ví dụ bài tập nào em không áp đụng được.

1 Like

Em xem các bài tiếp mới hiểu. :smiley:

1 Like

Mọi người xem hộ mình xem bài tập lãi xuất này sao k ra đúng nhỉ.

int main()
{
    int i;
    printf("lai\t so nam\n");
    for(i=0; i<10; ++i)
        printf("%d\t %d\n", interest(100, 10), i);
    getchar();
    return 0;
}

int interest(int tien_goc, int so_nam)
{
    int lai;
    int vesau = tien_goc;
    for (int i=1; i<so_nam; i++)
    {
        vesau= tien_goc + lai;
        lai = vesau *8/100;
    }

    return lai;
}
1 Like

Anh chưa kiểm tra kỹ nhưng anh thấy một lỗi.

Đầu tiên em khai báo

Sau đó em lấy

Mà trong khi đó lai chưa có giá trị.

1 Like

Em sửa thành như này, thay là em muốn in ra lãi thì em in ra “vesau”, nhưng vẫn không đúng. hichic

int interest (int, int);
int main()
{
    int i;
    printf("lai\t so nam\n");
    for(i=1; i<10; ++i)
        printf("%d\t %d\n", interest(100, 10), i);
    getchar();
    return 0;
}

int interest(int tien_goc, int so_nam)
{
    int vesau = tien_goc;
    for (int i=1; i<so_nam; i++)
    {
        int lai = vesau *8/100;
        vesau= tien_goc + lai;
    }

    return vesau;
}

Anh sửa lại như thế này, em xem có hiểu không nhé

#include <stdio.h>

int interest (int, int);
int main()
{
    int i;
    printf("lai\t so nam\n");
    for(i=1; i<10; ++i)
        printf("%d\t %d\n", interest(100, i), i);
    getchar();
    return 0;
}

int interest(int tien_goc, int so_nam)
{
    int vesau = tien_goc;
    int lai = 0;
    for (int i=0; i<so_nam; i++)
    {
        lai += vesau *8/100;
        vesau = tien_goc + lai;
    }

    return lai;
}
1 Like

Code của bạn bị lỗi rồi. Cụ thể:
1.Hàm interest bạn chưa khai báo…cụ thể:

#include<stdio.h>
int interest (int tien_goc,int sonam);

2.dùng getchar() mà không khai báo thư viện conio.h.
3.Biến lai chưa khởi tạo giá trị cho nó mà sử dụng vào biểu thức toán học.
Những gì mình đang nói ở trên là về cú pháp, Còn phần tiền lãi này mình không nghiên cứu nên không thể giúp bạn cụ thể được.
4.chỗ vòng lặp:

 for(i=0; i<10; ++i)

nếu như vậy khi in năm sẽ bắt đầu từ 0, có vẻ không đúng với thực tế.nên sửa lại:

 for(i=1; i<=10; ++i)
2 Likes

anh đạt ơi cho em hỏi ví dụ trên: hàm Int power có vòng lặp i bắt đầu =1, sao ko phải i bắt đầu = 0 nhỉ anh, em ko hiểu chỗ đó lắm :frowning:

Trả bài cho anh Đạt :smiley:

#include <stdio.h>
#include <stdlib.h>

float ve_sau(int tien_goc, int thoi_han, float lai_suat);
int main()
{
    float lai_suat;
    int thoi_han;
    int tien_goc;
    printf("Nhap so tien ban muon gui (vnd): ");
    scanf("%d", &tien_goc);
    printf("Nhap thoi han gui (nam): ");
    scanf("%d", &thoi_han);
    printf("Nhap lai suat (%/nam): ");
    scanf("%f", &lai_suat);
    for (int i = 1; i <= thoi_han; i++) {
        printf("Lai %.3f, so tien hien tai la %.3f, gap %.3f lan sau %d nam\n", ve_sau(tien_goc,i,lai_suat) - tien_goc, ve_sau(tien_goc,i,lai_suat), ve_sau(tien_goc,i,lai_suat)/tien_goc, i);
    }
    printf("\n  * TIEN GOC: %d\n  * TIEN HIEN TAI: %.3f\n  * GHI CHU: Lai %.3f sau %d nam\n", tien_goc, ve_sau(tien_goc,thoi_han,lai_suat), ve_sau(tien_goc,thoi_han,lai_suat) - tien_goc, thoi_han);
    getchar();
    return 0;
}

float ve_sau(int tien_goc, int thoi_han, float lai_suat)
{
    int i;
    float ve_sau = tien_goc;
    for (i = 1; i <= thoi_han; i++)
    {
        float tien_lai = ve_sau * (lai_suat / 100);
        ve_sau = ve_sau + tien_lai;
    }
    return ve_sau;
}
    float ban_dau;
    float so_nam;

    printf("So tien va so nam can gui:\n");
    scanf("%f %f\n",&ban_dau,&so_nam);

    for(int i=1;i<=so_nam;i++){
    printf("sau %d nam so tien co duoc la = %.3f\n",i,interest(ban_dau,i));
    }


    return 0;

}


  float interest(float bandau,float nam)
{
    float vesau = bandau;
    for(int i=1;i<=nam;i++){
        float lai = vesau * (8.0/100);
        vesau = vesau + lai;
    }

  return vesau;

Mọi người coi giùm mình cái bài tính lãi suất có đúng ko , mik viết xong mà mik cảm thấy ngơ ngơ sao ấy :frowning:

Sao code này lộn xộn quá thế :frowning:

Code này compile có được không?

nó không có báo lỗi , vẫn chạy được mà ko bik làm vậy ổn chưa a ?

xem cac bai sau moi hieu…

A post was merged into an existing topic: Hàm bị lỗi not declared in this scope

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?