Xây dựng menu chương trình cho 3 bài tập bị lỗi

Mọi người ơi giúp e bài này với, e code mãi mà vẫn lỗi ko, hiểu tại sao? Quan trọng là bài 4 ạ. :slight_smile:

BÀI 1: TÍNH TRUNG BÌNH TỔNG CỦA CÁC SỐTỰ NHIÊN CHIA HẾT CHO 2
Input: nhập từ bàn phím 2 giá trị min, max
Output: Trung bình tổng của các số tự nhiên chia hết cho 2 từ min tới max

BÀI 2: XÂY DỰNG CHƯƠNG TRÌNH XÁC ĐỊNH SỐ NGUYÊN TỐ
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số nguyên tố hay không
Biết rằng: Số nguyên tố là số chỉ chia hết cho 1 và chính nó.

BÀI 3: XÂY DỰNG CHƯƠNG TRÌNH SỐ CHÍNH PHƯƠNG
Input: Nhập vào từ bàn phím số x
Output: Kết luận x có phải là số chính phương hay không?
Biết rằng: Số chính phương là một số mà giá trị của nó là bình phương của một số
tự nhiên. (ví dụ: 9 = 3 x 3, 16 = 4 x 4, 25 = 5 x 5, 1,000,000 = 1,000 x 1,000)

BÀI 4: XÂY DỰNG MENU CHƯƠNG TRÌNH CHO 3 BÀI TẬP TRÊN
Yêu cầu:

  • Nếu người dùng nhập từ bàn phím số 1 -> Chạy chương trình bài 1
  • Nếu người dùng nhập từ bàn phím số 2 -> Chạy chương trình bài 2
  • Nếu người dùng nhập từ bàn phím số 3 -> Chạy chương trình bài 3
  • Nếu người dùng nhập từ bàn phím số 4 ->Thoát khỏi chương trình
  • Nếu người dùng nhập từ bàn phím số khác: Hiển thị menu như cũ
    Gợi ý: Sử dụng vòng lặp do while kết hợp với cách tạo menu thông thường để làm bài tập số 4.
    Đây là bài 1,2,3 ạ còn bài 4 em không làm được
#include <stdio.h>

int main() {
    // Bai 1
    int min, max;
    int i = min;
    float sum = 0, bienDem = 0, trungBinh = 0;
    while (i <= max) {
        if (i % 2 == 0) {
            sum += i;
            bienDem++;
        }
    }
    trungBinh = sum / bienDem;
    // Bai 2
    int x;
    int count = 0;
    int i;
    for (i = 2; i < x; i++) {
        printf("Nhap vao x : % d \n");
        scanf("%d", x);
        if (x % i == 0) { count++; }
    }
    if (count == 0) {
        printf("x la so nguyen to : \n");
    } else {
        printf(" x khong phai la so nguyen to : \n");
    }
    // Bai 3
    int x;
    int count = 0;
    int i;
    for (i = 1; i < x; i++) {
        if (i * i == x) {
            printf(" x la so chinh phuong:\n");
            break;
        }
    }
    return 0;
}

"Thần chú chị Google: infinite loop for creating menu hoặc tạo menu lựa chọn bằng C .

Tìm trên DNH cũng có nè :v"
Hôm qua anh HK Boy trả lời bài này mà e không hiểu ạ, vì em mới học nên mong anh chỉ thêm ạ ! :))

3 hàm này ko phụ thuộc nhau nên quây switch trong while là được.

4 Likes

Giờ e chạy mà nó cứ lỗi ấy ạ,em code bằng dev-c++ (ngôn ngữ C ). Anh debug giúp em với !

em cứ làm 1 cái switch case là được:

#include <stdio.h>

int main() {
    int quit = 0;   // nếu quit != 0 nghĩa là chương trình kết thúc
    while (!quit) { // nghĩa là chưa thoát chương trình
        puts("1. TÍNH TRUNG BÌNH TỔNG CỦA CÁC SỐTỰ NHIÊN CHIA HẾT CHO 2");
        puts("2. XÂY DỰNG CHƯƠNG TRÌNH XÁC ĐỊNH SỐ NGUYÊN TỐ");
        puts("3. XÂY DỰNG CHƯƠNG TRÌNH SỐ CHÍNH PHƯƠNG");
        puts("4. THOÁT CHƯƠNG TRÌNH");
        printf("Chọn (1-4): ");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
        case 1: {
            // bỏ code bài 1 trong dấu {} này
        } break;
        case 2: {
            // bỏ code bài 2 trong dấu {} này
        } break;
        case 3: {
            // bỏ code bài 3 trong dấu {} này
        } break;
        case 4: quit = 1; // kết thúc chương trình
        }
    }
}
5 Likes

Em cảm ơn ạ !
Em code C bằng Dev-C++
Nhưng có mấy lỗi e ko hiểu gì, như bài 2 chỗ int i ; em run thì chương trình báo lỗi chỗ đấy và vài chỗ nữa !

Em mới học code C mn làm ơn cho em xin vài nguồn học hay với ạ ! Em mới tìm được một vài nguồn như : stackoverflow, tôidicodedao,…

báo lỗi gì mới được chứ :V

3 Likes

Bạn thử xem khóa này có hay không :smiley:

4 Likes

nó bảo “redeclaration” tức là khai báo biến i lại, do ở dòng 6 đã khai báo biến i rồi :V

xóa dòng int i; đi

cách khác là bọc {} quanh mỗi bài, thì bài nào xài biến của bài ấy, ko đụng nhau:

mà sao bài 1 gì khai báo min max xong ko có input min max gì hết vậy :V

5 Likes

Em code ra rồi ạ !
Em cảm ơn !

1 Like

Em cũng tìm ra kênh của anh rồi đấy, em học được vài bài luôn rồi luôn ( nó nằm trong dấu … kia đó anh : hihi

1 Like

Do while tạo menu thì chỉ cho lệnh vào do còn while để cuối thôi mà. Dù sao cũng phải lặp vô hạn đến khi thoát mà.

4 Likes

Ấy ấy anh ơi, chỉ là thêm do vào đầu rồi đưa while xuống cuối thôi mà. Đâu phải có gì khó khăn hay phức tạp đến mức phải copy toàn bộ rồi sửa lại mới hiểu. Nhắc lại chút về do - while nè:

do{
    //Statements
}
while(/*conditions*/);

Statements sẽ được thực hiện trước khi kiểm tra điều kiện.

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