1. Yêu cầu viết chương trình nhập N số nguyên từ 0 đến 9999 và in ra chữ giá trị của số đó (ví dụ 106 thì in ra “một trăm linh sáu”). Tôi thấy đoạn code từ trang sách “Giáo trình ngôn ngữ lập trình C” trang 72 , ví dụ 2-26.
http://tailieu.vn/xem-tai-lieu/giao-trinh-ngon-ngu-lap-trinh-c.10748.html
Nhưng tôi không rõ phần k= -1 và j= -1 chỉ phần tử đầu, cuối. Tại sao cùng giá trị -1 nhưng lại có 2 vị trí. Phải chăng đây là trục tọa độ. Xin TGVT giải thích đoạn code nói trên từ phần k= -1 và j= -1 trở xuống.

2. Có thể viết lại chương trình trên bằng cách khác không?
3. Liệu có thể khai báo N[4]={a1, a2, a3, a4} và dùng a1, a2... để chỉ 4 phần tử trong bài nói trên không?
4. Xin hỏi marco là gì?
5. Liệu con trỏ có vai trò gì? Sử dụng con trỏ nhằm mục đích gì? Các dạng toán với con trỏ thường đề cập về vấn đề gì?
6. Những công thức tính đường chéo của một hình vuông hay hình thoi phải tự nghiên cứu nghĩ ra hay có sẵn? Có tài liệu nào nói về những công thức này?

" />
  • Thứ Tư, 28/04/2010 09:40 (GMT+7)

    Lập trình C với chuỗi, mảng và giải thích con trỏ

    Câu hỏi :

    1. Yêu cầu viết chương trình nhập N số nguyên từ 0 đến 9999 và in ra chữ giá trị của số đó (ví dụ 106 thì in ra “một trăm linh sáu”). Tôi thấy đoạn code từ trang sách “Giáo trình ngôn ngữ lập trình C” trang 72 , ví dụ 2-26.
    http://tailieu.vn/xem-tai-lieu/giao-trinh-ngon-ngu-lap-trinh-c.10748.html
    Nhưng tôi không rõ phần k= -1 và j= -1 chỉ phần tử đầu, cuối. Tại sao cùng giá trị -1 nhưng lại có 2 vị trí. Phải chăng đây là trục tọa độ. Xin TGVT giải thích đoạn code nói trên từ phần k= -1 và j= -1 trở xuống.

    2. Có thể viết lại chương trình trên bằng cách khác không?
    3. Liệu có thể khai báo N[4]={a1, a2, a3, a4} và dùng a1, a2... để chỉ 4 phần tử trong bài nói trên không?
    4. Xin hỏi marco là gì?
    5. Liệu con trỏ có vai trò gì? Sử dụng con trỏ nhằm mục đích gì? Các dạng toán với con trỏ thường đề cập về vấn đề gì?
    6. Những công thức tính đường chéo của một hình vuông hay hình thoi phải tự nghiên cứu nghĩ ra hay có sẵn? Có tài liệu nào nói về những công thức này?



    Trả lời :

    1 & 2 & 3 Chúng tôi không thể truy xuất tài liệu mà bạn giới thiệu nên không thể giải thích câu hỏi của bạn được. Tuy nhiên về vấn đề đổi số ra chuỗi phát âm tiếng Việt, chúng tôi đã trả lời nhiều lần trên các số báo trước. Chúng tôi đã giới thiệu mã nguồn do chúng tôi viết bằng VB 6.0 và VC++ để đổi số nguyên thuộc kiểu long (từ -2 tỉ đến 2 tỉ) ra chuỗi phát âm tiếng Việt tương ứng trong số tháng 06/2007. Bạn có thể tìm đọc lại số báo này để biết thông tin chi tiết, bạn cũng có thể liên hệ với tòa soạn để copy file VCSo2Chu.rar chứa toàn bộ Project ứng dụng này.

    4. Trong file mã nguồn được viết bằng ngôn ngữ C++, thực ra ta đã viết các lệnh bằng 2 loại ngôn ngữ khác nhau:
    - Các lệnh macro (hay directive) bắt đầu bởi ký tự '#', thí dụ:
    #include <stdio.h>
    sẽ thay thế nội dung file stdio.h vào vị trí lệnh #include tương ứng.
    - Các lệnh ngôn ngữ C hay C++ bình thường.
    Khi dịch 1 file mã nguồn, chương trình dịch sẽ tiến hành 2 bước:
    - Bước 1: duyệt tìm và xử lý các lệnh macro để đổi về các lệnh C tương ứng. Sau bước 1, bạn có file mã nguồn thuần các lệnh C hay C++ (không còn chứa lệnh macro nào).
    - Bước 2: dịch các lệnh C hay C++ sang mã máy.

    5. Mỗi chương trình sẽ xử lý nhiều dữ liệu khác nhau, bạn dùng biến để nhận dạng và truy xuất 1 dữ liệu. Biến là 1 vùng nhớ chứa 1 dữ liệu của chương trình được truy xuất bởi các lệnh mã nguồn thông qua tên nhận dạng. Dữ liệu được truy xuất trực tiếp thông qua biến được gọi là dữ liệu tĩnh của phần mềm vì bạn đã biết trước và đã định nghĩa biến tường minh tại thời điểm viết chương trình. Tuy nhiên trong một số trường hợp, bạn không thể biết trước được dữ liệu tại thời điểm viết chương trình, do đó bạn phải xin cấp phát động vùng nhớ chứa dữ liệu này tại thời điểm chạy chương trình, các dữ liệu được cấp phát động này được truy xuất thông qua địa chỉ, địa chỉ này được chứa trong các biến pointer.

    Thí dụ bạn muốn viết 1 ứng dụng cho phép nhập số lượng n và n giá trị nguyên khác nhau rồi tìm số lớn nhất. Trong thí dụ này, tại thời điểm viết chương trình, bạn chưa biết trước số lượng (n) các số nguyên cần xử lý nên không thể định nghĩa biến mảng tĩnh như sau:
    int danhsach[n];
    do đó bạn sẽ dùng biến pointer và xin cấp phát động bộ nhớ như sau:
    int n;
    int *danhsach;
    //Yêu cầu user nhập số lượng
    printf("Nhập số lượng n : ");
    scanf("%d", &n);
    //Xin cấp phát mảng n số nguyên
    danhsach = new int[n];
    //truy xuất các phần tử thông qua chỉ số
    //dùng cú pháp danhsach[i]
    Tóm lại, biến pointer có vai trò rất quan trọng trong việc viết các ứng dụng xử lý dữ liệu mà số lượng chưa được biết trước tại thời điểm viết chương trình.

    6. Công thức tính đường chéo của một hình vuông hay hình thoi (và hầu hết các vấn đề khác) đã được các nhà toán học/khoa học tìm được từ lâu, chúng ta chỉ cần học và sử dụng chúng khi cần thiết.
     

    Chuyên mục: Lập trình