01/10/2018, 10:18

Cho e hỏi sai chỗ nào vậy

Viết hàm inHoanChinh() sau, hàm này in ra các số hoàn chỉnh trong khoảng từ số đầu đến số cuối: void inHoanChinh ( int dau, int cuoi);
(Một số nguyên dương n được gọi là số hoàn chỉnh nếu tổng các ước số của n (không kể n ) bằng chính nó, ví dụ : 6, 28, 496, …

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void inHoanChinh(int dau, int cuoi)
int main()
{
int n, i, s;
int hc; //0: Không là số hoàn chỉnh, 1: Là số hoàn chỉnh (cờ hiệu)
printf("Nhap n: ");
scanf("%d", &n);
if(n < 1)
hc = 0; //Không là số hoàn chỉnh
else
    {
    //Tính tổng các ước số của n
    s = 0;
    for(i = 1; i < n; i++)
    if(n % i == 0) s += i;
        //Kiểm tra
    hc = (s == n ? 1 : 0);
    }
    //In kết quả
    {
void inHoanChinh(int dau, int cuoi)
        {
    for(i = dau; i <= cuoi; i++)
    if(hc)
    printf("Day la so hoan chinh");
    else
    printf("Day khong la so hoan chinh");
        }
    }
2D_team_free_online_Education viết 12:18 ngày 01/10/2018

if(hc)
printf(“Day la so hoan chinh”);
else
printf(“Day khong la so hoan chinh”);
}
}

bạn có hàm inhoan chirng có trả về quá trị đâu mà dùng cái này

hangocduc viết 12:34 ngày 01/10/2018

bạn có thể giúp mk đc k
mk nghĩ mãi rồi mà chả bít sữa ntn

2D_team_free_online_Education viết 12:26 ngày 01/10/2018
#include <iostream>
using namespace std;

bool ktra (int n)
{
	if (n < 1)
	{
		return false;
	}
	else
	{
		// tính tổng
		int s = 0;
		for (int i = 1; i < n; i++)
		{
			if (n % i == 0)
			{
				s += i;
			}
		}
		if (s == n)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}
int main ()
{
	int a;
	cout << "nhap a: ";
	cin >> a;
	cout << endl;   // enter line
	int hc;
	if (ktra(a))
	{
		hc = 1; // éo biết hc để làm gì luôn nhưng thấy ô vueets thì chắc cần
		cout << "la so hoan thien"<< endl;
	}
	else
	{
		hc =0;
		cout << "khong phai la so hoan thien"<<endl;
	}
	system("pause");
	return 0;
}

đã vi pham nội quy diễn đàn r , tham khảo bài này

hangocduc viết 12:26 ngày 01/10/2018

mk cam ơn b
đây là c hay C++ vậy

2D_team_free_online_Education viết 12:27 ngày 01/10/2018

C++ bạn nhé , cin = scanf , cout = print bên bạn , code lại theo C xem

Nguyen Hoang Long viết 12:34 ngày 01/10/2018

code của bạn nhiều chỗ sai quá.
Thứ 1: for(i = 1; i < n; i++)
–trong hàm for thì phải khai báo biến i nhé: for(int i = 1; i < n; i++)
Thứ 2:
void inHoanChinh(int dau, int cuoi)
{
for(i = dau; i <= cuoi; i++)
if(hc)
printf(“Day la so hoan chinh”);
else
printf(“Day khong la so hoan chinh”);
}
}
— Biến hc ở đây là biến cục bộ trong hàm main nên trong hàm inHoanChinh() không sử dụng được.
— Và mục đích của hàm này chỉ là in ra 2 dòng: “Day la so hoan chinh” hoặc “Day la so khong hoan chinh”

Thứ 3: Mình chỉ mới đọc code thôi nhưng mình nghĩ thuật toán của bạn cho bài này chưa chính xác. Nếu bạn muốn thì mình có thể viết lại cho bạn

hangocduc viết 12:22 ngày 01/10/2018

ban có thể viết lại cho mk đc k
mk tham khảo

Nguyen Hoang Long viết 12:30 ngày 01/10/2018

#include<stdio.h>
int hc = 0;
void kiemTraSoHoanChinh(int soCanTimUocSo){
int tongUocSo = 0;
for(int i = 1; i < soCanTimUocSo; i++){
if(soCanTimUocSo % i == 0)
tongUocSo += i;
}
hc = (tongUocSo == soCanTimUocSo ? 1 : 0);

}
int main(){
	int soDau,soCuoi;
	printf("Nhap so dau: ");
	scanf("%d", &soDau);
	
	printf("Nhap so cuoi: ");
	scanf("%d", &soCuoi);
	
	for(int i = soDau ; i <= soCuoi ; i++){
		kiemTraSoHoanChinh(i);
		if(hc == 1){
			printf("so hoan chinh la %d", i);
			printf("--");
		}
		
	}
	
}

nếu bạn không hiểu chỗ nào thì hỏi mình

Nguyen Hoang Long viết 12:30 ngày 01/10/2018

#include<stdio.h>
int hc = 0;
void kiemTraSoHoanChinh(int soCanTimUocSo){
int tongUocSo = 0;
for(int i = 1; i < soCanTimUocSo; i++){
if(soCanTimUocSo % i == 0)
tongUocSo += i;
}
hc = (tongUocSo == soCanTimUocSo ? 1 : 0);

}
int main(){
	int soDau,soCuoi;
	printf("Nhap so dau: ");
	scanf("%d", &soDau);
	
	printf("Nhap so cuoi: ");
	scanf("%d", &soCuoi);
	
	for(int i = soDau ; i <= soCuoi ; i++){
		kiemTraSoHoanChinh(i);
		if(hc == 1){
			printf("so hoan chinh la %d", i);
			printf("--");
		}
		
	}
	
}

không hiểu chỗ nào thì hỏi mình nhé

hangocduc viết 12:19 ngày 01/10/2018

for(int i = 1; i < soCanTimUocSo; i++)
nó báo lỗi chỗ này là sao b

Nguyen Hoang Long viết 12:28 ngày 01/10/2018

bạn đã include stdio chưa

hangocduc viết 12:18 ngày 01/10/2018

mk khai báo biến i ở ngoài thì mới đk

Nguyen Hoang Long viết 12:33 ngày 01/10/2018

kết quả thế này

hangocduc viết 12:34 ngày 01/10/2018

mk dùng codeblock
chác nó khác cái dev này

Nguyen Hoang Long viết 12:19 ngày 01/10/2018

cái đó thì mình không biết. Sau khi khái báo biến i ở ngoài thì nó có ra kết quả không

*grab popcorn* viết 12:31 ngày 01/10/2018

6 posts were merged into an existing topic: Bài tập về cấu trúc rẽ nhánh

Đức viết 12:31 ngày 01/10/2018

có ra kết quả b à cảm ơn b nhiều

HK boy viết 12:20 ngày 01/10/2018

Tag @drgnz @moderators vì topic này trùng với topic: Các bác xem giúp e code này vs
Có merge topic được không nhỉ?

Và cmt này: Cho e hỏi sai chỗ nào vậy cũng không liên quan với bài này.
cmt này trùng topic https://daynhauhoc.com/t/bai-tap-ve-cau-truc-re-nhanh/49414.

Henry viết 12:23 ngày 01/10/2018

Mình nghĩ chỗ nào có mâu thuẫn

void inHoanChinh(int dau, int cuoi)
{
    for(i = dau; i <= cuoi; i++)
    {
        if(hc) // hc? Nó ở đâu ra đây?
        printf("Day la so hoan chinh");
        else
        printf("Day khong la so hoan chinh");
    }
}

Mình nghĩ nên cho đoạn này vào một hàm gọi là int ktHoanChinh(int n). return 0 if not hc else return 1
Khi đó thì trong hàm inHoanChinh bạn sẽ kiểm tra từng số một trong dãy đầu đến cuối. if (ktHoanChinh(i)) // same as ktHoanChinh == 1

hangocduc viết 12:33 ngày 01/10/2018

mk vẫn chưa hiểu yk bạn

Bài liên quan
0