Wątek przeniesiony 2017-08-15 14:28 z C/C++ przez ŁF.

czynniki liczby pierwsze

0

Hej!
Mam problem z wpisywaniem czynników liczby naturalnej do tablicy. Bez tablicy dziala super, tylko podczas wypisywania z tablicy dziala byle jak, bo: 1) dobrze zwraca ilosc wyrazow w tablicy 2)wypisuje zle wartosci z tablicy.
Czy ktos moglby rzucic okiem?

#include <iostream>
#include <cmath>
using namespace std;

int factor(int tab[], int liczba)
{
	int i = 2;
	int k = 0;
	while(liczba>1)
	{
		while((liczba%i)==0)
		{
			k++;
			liczba/=i;
			//cout << i << " ";
			tab[k]=i;
		}
		i++;
	}
	return k;
}

int main()
{
	int liczba;
	int tab[10];
	cout << "Podaj liczbe" << endl;
	cin >> liczba;
    factor(tab,liczba);
    for(int i=0; i<factor(tab,liczba); i++)
    {
    	cout << tab[i] << " ";
	}
	return 0;
}
2
  1. Czemu wołasz tą funkcje w każdym obrocie pętli? Nie możesz tego wyliczyć raz?
  2. A co jak liczba ma więcej niż 10 czynników? Twoja tablica więcej nie zmieści, więc nadpiszesz sobie jakieś dane i będą głupoty.
0
Shalom napisał(a):
  1. Ty jesteś normalny? Czemu wołasz tą funkcje w każdym obrocie pętli?! Nie możesz tego wyliczyć raz?
  2. A co jak liczba ma więcej niż 10 czynników? Twoja tablica więcej nie zmieści, więc nadpiszesz sobie jakieś dane i będą głupoty.
  1. Już poprawiłem.
  2. Jeszcze nie doszedłem do dynamicznej alokacji pamieci, czy jak to sie zwie, wiec na razie z gory zakladam rozmiar tablicy..
0

No i dla jakich danych to "testujesz" i daje złe wyniki?

0

Wejscie: 153. Powinno dać: 3 3 17, a wychodzi zupelnie cos innego

1

Bo robisz k++ PRZED przypisaniem do tablicy w pętli:

            k++; //tutaj
            liczba/=i;
            tab[k]=i;

a powinieneś dopieor PO tym przypisaniu, inaczej nigdy nie przypisujesz wartości do indeksu 0.

0

Ok. Teraz dziala jak nalezy. Dzieki!

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