Wątek zablokowany 2022-05-21 15:07 przez Riddle.

Podzielność w c++

0

Napisałam program, który wypisuje dzielniki podanej liczby, jednak nie działa mi to w przypadku 7, natomiast kiedy wpisuje 4,5 itd. Nie wypisuje dzielnika liczby przez samą siebie. Czyli np Liczba=8
Liczby podzielne przez 8: 2,4

#include <iostream>
using namespace std;

int main(){

 int a,s;
 cout<<"Podaj liczbe: ";
 cin>> a;
 if (a<0)a=-a;
  if(a % 10 == 0 || a % 10 == 2 || a % 10 == 4 || a % 10 == 6 || a % 10 == 8 ) // podzielna przez 2
	{
	  	cout<<"\n liczba jest podzielna przez 2";
	  }
	if ((a / 10, s + a % 10) / (a % 3 == 0)) //podzielna przez 3
		{
 		cout<<"\n liczba jest podzielna przez 3";
 		}
		
	if ((a % 100) % 4 == 0)//podzielna przez 4
		{
		cout<<"\n liczba jest podzielna przez 4";
		}	
	if (a%5 == 0) //podzielna przez 5
		{
		cout<<"\n Liczba jest podzielna przez 5";		
		 }
	if (a%2==0 && a%6==0) //podzielna przez 6
		{
		cout<<"\n Liczba jest podzielna przez 6";
		}	 	 
	if (((a / 10) - 2 * (a % 10)) % 7 == 0) // podzielna przez 7
		{
		cout<<"\n Liczba jest podzielna przez 7";
		}
	if ((a % 1000) % 8 == 0) //podzielna przez 8
		{
		cout<<"\n Liczba jest podzielna przez 8";
		}	
	if	(a>8)//podzielna przez 9
		{
		(a / 10, s + a % 10, (s % 9 == 0));
		cout<<"\n Liczba jest podzielna przez 9";
		}
	
 cout<<"\n\n\n";
 system ("pause"); 
 return 0;
}
1

Protip: aby sprawdzić czy liczba jest podzielna przez:

  • 2 - wystarczy sprawdzić czy n % 2 == 0 (i nic więcej),
  • 3 - wystarczy sprawdzić czy n % 3 == 0 (i nic więcej),
  • 4 - wystarczy sprawdzić czy n % 4 == 0 (i nic więcej),
  • ...
  • 8 - wystarczy sprawdzić czy n % 8 == 0 (i nic więcej),
  • 9 - wystarczy sprawdzić czy n % 9 == 0 (i nic więcej),
  • ...
  • 123 - wystarczy sprawdzić czy n % 123 == 0 (i nic więcej).
  • ...
    :-)
1

Niepotrzebnie myślisz o cyfrach liczby czy o jakichś dziwnych regułach podzielności, których tutaj w ogóle nie potrzebujesz — liczba k jest podzielna przez m, gdy jej reszta z dzielenia przez m to zero, czyli k % m == 0. I tyle.

A co do samych warunków:

  • podzielność przez trzy jest źle zaimplementowana — (a / 10, s + a % 10) / (a % 3 == 0) najpierw podzieli a przez dziesięć, potem wynik odrzuci (bo nic z nim nie robisz), po czym weźmie jakieś, nieokreślone s, i doda do niego resztę z dzielenia a przez dziesięć (czyli wartość liczbową ostatniej cyfry), po czym to podzieli przez jeden, jeśli a jest podzielne przez trzy, lub przez zero, jeśli nie jest… To powinno co chwila wybuchać, a już na pewno nie ma szansy zwrócić dobrego wyniku
  • podzielność przez sześć jest nadmiarowa — jeśli a jest podzielne przez sześć (druga część warunku), to i musi być podzielne przez dwa (pierwsza część warunku), bo sześć jest podzielne przez dwa
  • nie wszystkie liczby większe od ośmiu są podzielne przez dziewięć (w szczególności, dziesiątka nie jest)
0
Zosia Zimnol napisał(a):

Napisałam program, który wypisuje dzielniki podanej liczby, jednak nie działa mi to w przypadku 7, natomiast kiedy wpisuje 4,5 itd. Nie wypisuje dzielnika liczby przez samą siebie. Czyli np Liczba=8

Liczby podzielne przez 8: 2,4

#include <iostream>
using namespace std;

int main(){

 int a,s;
 cout<<"Podaj liczbe: ";
 cin>> a;
 if (a<0)a=-a;
  if(a % 10 == 0 || a % 10 == 2 || a % 10 == 4 || a % 10 == 6 || a % 10 == 8 ) // podzielna przez 2
	{
	  	cout<<"\n liczba jest podzielna przez 2";
	  }
	if ((a / 10, s + a % 10) / (a % 3 == 0)) //podzielna przez 3
		{
 		cout<<"\n liczba jest podzielna przez 3";
 		}
		
	if ((a % 100) % 4 == 0)//podzielna przez 4
		{
		cout<<"\n liczba jest podzielna przez 4";
		}	
	if (a%5 == 0) //podzielna przez 5
		{
		cout<<"\n Liczba jest podzielna przez 5";		
		 }
	if (a%2==0 && a%6==0) //podzielna przez 6
		{
		cout<<"\n Liczba jest podzielna przez 6";
		}	 	 
	if (((a / 10) - 2 * (a % 10)) % 7 == 0) // podzielna przez 7
		{
		cout<<"\n Liczba jest podzielna przez 7";
		}
	if ((a % 1000) % 8 == 0) //podzielna przez 8
		{
		cout<<"\n Liczba jest podzielna przez 8";
		}	
	if	(a>8)//podzielna przez 9
		{
		(a / 10, s + a % 10, (s % 9 == 0));
		cout<<"\n Liczba jest podzielna przez 9";
		}
	
 cout<<"\n\n\n";
 system ("pause"); 
 return 0;
}

Program poprawiony, działa

1

Niestety nadal masz w nim kilka chochlików;

if ((a / 10, s + a % 10) / (a % 3 == 0)

Jak myślisz, co ta linijka kodu robi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1