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

question-closed Problem Collatza pętla się nie koczy

Object Storage Arubacloud
0 głosów
670 wizyt
pytanie zadane 10 kwietnia 2016 w C i C++ przez danior Początkujący (330 p.)
zamknięte 10 kwietnia 2016 przez danior

Hej, pisze program rozwiązujący problem Collatza dla podanej przez użytkownika liczby. Mam taki problem, że przy pętli sprawdzającej kolejne wyrazy ciągu, pętla nie konczy się i wywala program. Wrzucam fragment kodu w którym wydaje mi się, że może być coś nie tak.

do
		{
			if (x[n] % 2 != 0)
			{
				x[n + 1] = 3 * x[n] + 1;
				cout << x[n + 1] << endl;
				sprawdz=czy_jeden(x[n + 1]);
			}
			else if (s[i] % 2 == 0)
			{
				x[n + 1] = x[n] / 2;
				cout << x[n + 1]<<endl;
				sprawdz = czy_jeden(x[n + 1]);
			}
			x[n] = x[n + 1];
			n++;
		} while (sprawdz != true);

 

 

Visual też pokazuje takie coś.

błd jaki wyskakuje przy wysypaniu się programu:

pozdrawiam, danior

 

komentarz zamknięcia: otrzymałem potrzebną pomoc

2 odpowiedzi

+1 głos
odpowiedź 10 kwietnia 2016 przez jeremus Maniak (59,720 p.)
wybrane 10 kwietnia 2016 przez danior
 
Najlepsza
1. jaki  masz rozmiar tablicy X  ? wygląda na to że n wychodzi poza zakres

2. ustawiasz gdzieś  n=0 na początek ?

3. jaką liczbę badasz ?

4.  czy dobrze zdefiniowałeś funkcję czy_jeden ?
komentarz 10 kwietnia 2016 przez danior Początkujący (330 p.)
int *x,t,n=0,*s;
x = new int [n];


bool czy_jeden(int wyraz)
{
	if (wyraz == 1)return true;
	else return false;
}

sprawdzam dla liczby 11 albo 15  bo tam szybko się pojawia wyraz o warosci 1

komentarz 10 kwietnia 2016 przez jeremus Maniak (59,720 p.)
tablica o rozmiarze 0 ?

tutaj masz błąd
komentarz 10 kwietnia 2016 przez danior Początkujący (330 p.)
Jak zmienię przykładowo na 100 to też wywala taki sam błąd, przy zdefiniowaniu n=0 zaraz przed do..while też wyrzuca błąd
komentarz 10 kwietnia 2016 przez jeremus Maniak (59,720 p.)
tablicę zdefiniuj na dużo .np. 200

n=0

x[n]=badana_liczba.
komentarz 10 kwietnia 2016 przez danior Początkujący (330 p.)
wrzuciłem tak jak mówiłeś, od razu zdefiniowałem tablice na 200, do n przypisałem 0, tylko nie rozumiem tego co napisałeś x[n]=badana_liczba, mógłbyś rozjaśnić trochę ?  Program po tych zmianach dalej się wysypuje.
komentarz 10 kwietnia 2016 przez jeremus Maniak (59,720 p.)

np. wartość liczby która sprawdzasz

sprawdzam dla liczby 11 albo 15  

komentarz 10 kwietnia 2016 przez danior Początkujący (330 p.)
aa no to mam przypisanie x[n] = s[i]; w forze dla i równych liczba
0 głosów
odpowiedź 10 kwietnia 2016 przez Patrycjerz Mędrzec (192,320 p.)

Najprawdopodobniej program wychodzi poza obszar tablicy x - sprawdź, czy indeksy mają zawsze poprawne wartości.

Podobne pytania

0 głosów
2 odpowiedzi 3,062 wizyt
pytanie zadane 8 maja 2017 w C i C++ przez chucksqll Stary wyjadacz (12,930 p.)
0 głosów
3 odpowiedzi 867 wizyt
0 głosów
0 odpowiedzi 464 wizyt

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...