Lỗi khi gộp 2 function

em muốn gộp 2 đoạn code này với nhau nhưng một cái là kiểu float một là kiểu int , mọi người cho mình hỏi phải sửa như thế nào với ạ

#include <iostream>

int main() {
	int i=1;
	int so;
	printf("moi nhap ban nhap mot so:");
	scanf("%d",&so);
	int count=0;
	for(;i<so;i++){
		if(i*i==so){
			count++;
			break;
		}
	}
	if (count==0){
		printf("%d khong la so chinh phuong!\n",so);
		}else{
		printf("%d la so chinh phuong!\n",so);
		}
		
	
	for(int i=2 ; i<so; i++)
	{
		if(so%i==0)
		{
			count++;
		}
	}
	if(count==0)
	{
		printf("%d la so nguyen to",so);
	} else
	{printf ("%d khong la so nguyen to",so);
	}
	return 0;
}

int so;
printf("moi nhap ban nhap mot so:");
scanf("%d",&so);
if(so/(int)so==1){
printf("la so nguyen!\n",so);
}else if(so/(int)so!=1){
	printf("khong la so nguyen!\n",so);
}

Function template :grinning:

#include <stdio.h>
#include<math.h>

int main(){
    int n;
    printf("\nNhap n = ");
    scanf("%d", &n);
    int i = 0;
    //check so nguyen to
    if(n < 2){
        printf("\n%d khong phai so nguyen to", n);
        return 0;
    }
    int count = 0;
    for(int i = 2; i <= sqrt(n); i++){
        if(n % i == 0){
            count++;
        }
    }
    if(count == 0){
        printf("\n%d la so nguyen to", n);
    }else{
        printf("\n%d khong phai so nguyen to", n);
    }
    //check so chinh phuong
    while(i*i <= n){
        if(i*i == n){
            printf("\n%d la so chinh phuong!\n", n);
            return 0;
        }
        ++i;
    }
    printf("%d khong phai so chinh phuong!\n", n);     
}
1 Like

nếu mình muốn gộp thêm đoạn code dưới để khi nhập vào 1 số bất kì kể cả số thập phân thì nó sẽ kiểm tra cả 3 là có phải số nguyên tố, số chính phương, số nguyên thì phải làm như thế nào ?

float so;
printf(“moi nhap ban nhap mot so:”);
scanf("%lf",&so);
if(so/(int)so==1){
printf(“la so nguyen!\n”,so);
}else if(so/(int)so!=1){
printf(“khong la so nguyen!\n”,so);
}

Đúng theo yêu cầu của bạn luôn nhưng code hơi ngu do mình cũng newbie thôi,chắc chắn có cách khác ngắn và hay hơn nhưng bạn xem tạm vậy.

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

int main()
{
	int dem=0;
	int a;
 	float n;
  printf("\nMoi ban nhap vao mot so bat ky: ");
  scanf("%f",&n);
  if(n == (int)n)
   {
   	 printf("\n%g la so nguyen \n  khong phai so nguyen to \n khong phai so chinh phuong",n);
    dem++;
   }
  else
   {
   	 printf("\n%g khong phai la so nguyen",n);
  getch();
   }
  
  if(dem==1)
  {
  	int sqr = sqrt(n);
    if(sqr*sqr == n){
        printf("\n%g la so chinh phuong!\n", n);
    }else{
        printf("\n%g khong phai so chinh phuong!\n", n);
    }
  }
  while(dem==1)
  {
  	printf("nhap vao so nguyen vua nhap:");
  	scanf("%d",&a);
  	
  	int j = 0;
    //check so nguyen to
    if(a < 2){
        printf("\n%d khong phai so nguyen to", a);
        return 0;
    }
    int count = 0;
    for(int j = 2; j <= sqrt(n); j++){
        if(a% j == 0){
            count++;
        }
    }
    if(count == 0){
        printf("\n%d la so nguyen to", a);
    }else{
        printf("\n%d khong phai so nguyen to", a);
    }
    break;
  }
  }
3 Likes

mình cũng mới học nên chưa biết nhiều, cảm ơn bạn đã giúp mình

Có thể để biến a bằng biến n để khỏi phải nhập lại không cậu ?

Được nhưng hiện tại mình k biết làm ,vì để biến n thay vì biến a sẽ báo lỗi vì kiểu float k dùng chia lấy dư % được.

1 Like
Spoiler cực mạnh.
#include  <stdio.h>

int isInt(float n) {
    return n == (float)(int)n;
}

int isPrime(int n) {
    if (n < 2) return 0;
    if (n == 2) return 1;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}

int isSquare(int n) {
    if (n == 1) return 1;
    for (int i = 2; i * i <= n; i++)
        if (i * i == n) return 1;
    return 0;
}

int main(void) {
    float n = 0;
    scanf("%f", &n);
    if (isInt(n)) {
        printf("%g is integer\n", n);
        printf("%g is", n);
        if (!isPrime(n)) printf(" not");
        printf(" prime number\n%g is", n);
        if (!isSquare(n)) printf(" not");
        printf(" square number\n");
    } else {
        printf("%g is not integer\n", n);
        printf("%g is not prime number\n", n);
        printf("%g is not square number\n", n);
    }
    return 0;
}

:slight_smile:

5 Likes

Tôi làm đươc rồi nè. Không biết có tối ưu không.

#include<stdio.h>
int main(){

float x,check,kiemTra=0;
int y,i;
	printf("*Nhap X: ");
	scanf("%f",&x);
	y=x;
	if(x==(int)x){
	
		printf("*%f La So Nguyen\n",x);  //SoNguyen
		for(i=1;i<=y;i++){
		    if(y%i==0){   //DkSoNguyenTo
			    check++;
	        }
		    if(i*i==x){   //DkSoChinhPhuong
			    kiemTra=1;
	        }	
	    }
	    if(check==2){
		    printf("*%f La So Nguyen To\n",x); //InSoNguyenTo
	    }else{
		    printf("*%f Khong La So Nguyen To\n",x);
	    }
	    if(kiemTra==1){
		    printf("*%f La So Chinh Phuong\n",x); //InSoChinhPhuong
	    }else{
		    printf("*%f Khong La So Chinh Phuong\n",x);
	    }
	}else{
		printf("*%f Khong La So Nguyen\n",x);
		printf("*%f Khong La So Nguyen To\n",x);
		printf("*%f Khong La  So Chinh Phuong\n",x);
	}
	return 0;
}
1 Like

chỗ đksonguyento thêm thành if(y%i==0 && y%y==0) thì ok nè

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