• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z programem sprawdzającym czy dana liczba jest liczbą doskonałą

Cloud VPS
0 głosów
3,808 wizyt
pytanie zadane 15 października 2016 w C i C++ przez Aleksander Kozyra Początkujący (420 p.)
edycja 15 października 2016 przez Aleksander Kozyra

Witam, mam taki problem, otóż mam za zadanie napisać program, który sprawdza czy dana liczba jest liczbą doskonałą. Posługując się algorytmem danym w zadaniu napisałem coś takiego :
 

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

using namespace std;

int main()
{
    int n, p, p1, suma=0;

    cout << "Podaj liczbe ktora chcesz sprawdzic :";
    cin >> n;

    p = sqrt((double)n);

    while (p > 1)
    {
        if (n%p == 0)
        {
            suma = suma + p;
            p1 = n / p;
            if (p1 != p)
            {
                suma = suma + p1;
            }
        }
        else
        {
            p = p - 1;
        }
    }
    if(p<=1)
    {
        suma = suma + 1;
        if (suma==n)
        {
            cout << "Jest to liczba doskonala";
        }
        else
        {
            cout << "To nie jest liczba doskonala";
        }
    }

    _getch();
}


Po wpisaniu liczby n program po prostu przechodzi do następnej linijki i nic się nie dzieje. Nie do końca wiem o co chodzi. Z góry dzięki za pomoc.

Pozdawiam

1
komentarz 15 października 2016 przez QizmoPL Stary wyjadacz (11,440 p.)
double sqrt( double fValue ); skladnia pierwiastka

zobacz zmienne "p", "p1" nie rowna sie niczemu, petla sie nie wykona

przeczytaj co to jest https://pl.wikipedia.org/wiki/Liczba_doskona%C5%82a

NAZYWAJ ZMIENNE POPRAWNIE
komentarz 15 października 2016 przez Aleksander Kozyra Początkujący (420 p.)

Starałem się to zrobić po prostu według tego algorytmu. 

komentarz 15 października 2016 przez QizmoPL Stary wyjadacz (11,440 p.)
Podaj tresc zadania
komentarz 15 października 2016 przez Aleksander Kozyra Początkujący (420 p.)
Napisz program na zbadanie, czy wczytana z klawiatury dodatnia liczba całkowita n jest liczbą doskonałą. UWAGA 1: liczba doskonała to taka, dla której suma jej dzielników (nie licząc samej liczby n) jest równa tej liczbie. Przykładami liczb doskonałych są liczby 6 i 28. UWAGA 2: Wystarczy sprawdzić podzielniki nie większe niż sqrt(n); Program należy napisać w taki sposób, aby umożliwić wielokrotne jego wykonanie bez konieczności powrotu do edytora. Możesz wykorzystać poniższy algorytm lub zaproponować własny:

PS: Jeżeli chodzi o możliwość wielokrotnego wykonania to nie stanowi ona problemu.
komentarz 16 października 2016 przez QizmoPL Stary wyjadacz (11,440 p.)

 W razie "ulepszenia kodu" prosze o komentarz, wszystkie rady zostana wysluchane 


#include "stdafx.h"
#include<iostream>
#include<cmath>
#include <conio.h>
#include <windows.h>
#include <ctime>

bool or_excellent(int n);

int main()
{
	for (;;)
	{
		int number;
		std::cout << "Podaj liczbę: ";

		std::cin >> number;

		if (or_excellent(number))
			std::cout << "Liczba " << number << " Jest doskonała." << std::endl;
		else
			std::cout << "Liczba " << number << " Nie jest doskonała." << std::endl;
		std::cin.ignore();
		Sleep(2000);
		system("cls");
	}
	return 0;
}

bool or_excellent(int n)
{
	int s = 1, square = sqrt(n);
	for (int i = 2; i <= square; i++)
	{
		if (n%i == 0)
			s += i + n / i;
	}
	
	if (n == pow(square,2)) 
		s -= square;
	else if (n == s) 
		return 1;

	return 0;
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+2 głosów
2 odpowiedzi 3,816 wizyt
+6 głosów
6 odpowiedzi 56,945 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez Kornel Howil Początkujący (260 p.)
0 głosów
2 odpowiedzi 1,523 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,909 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...