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

question-closed Generowanie Tablicy i błąd funkcji c++

Object Storage Arubacloud
0 głosów
917 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Wiciorny Ekspert (270,230 p.)
zamknięte 30 listopada 2016 przez Wiciorny

Witam. Zastanawiam się nad błędem jaki zwraca mój program. Otóż, w main generuje tablice A oraz B i losowo przypisuje do nich wartosci. Nastepnie chce odnaleźć czy w tych tablicach jest poszukiwana liczba. 

Po wygenerowaniu losowych liczb do tablic ( kontrolnie sprawdzam jak wyglądaja te liczby ).

Jednak w momencie kiedy przed wywołaniem funkcji POSZUKIWANIA sprawdzam co siedzi w tablicy o np indeksie 1, calkowicie co innego wypisuje program. Wiec podejrzewam, ze przekazywane nie sa te co wypisane.

Jednak już na starcie, zanim wywołuje funkcje- która zawsze zwraca false.

Dzięki za pomoc, kod main. [ funkcja poszukiwań działa idealnie- gdy na starcie podam co siedzi w tablicach a nie losuje ich ].  

int main()
{

	int A[15];
	int  B[15];
	//size_t rozmiar = sizeof(A) / sizeof(int);
	int cel;
	
		for(int i=0;i<15;  i++)
		{
			
			A [i]=rand()%20;  // LOSUJEMY liczby do tablicy A i B 
			B [i]=rand()%20;
		}
		cout<<"Tablice danych A i B :"<<endl;
		// generuj na ekran A  i potem B
			for(int i=0;i<15;i++)
		{
			if(i==0)
			{
				cout<<"Tab[] A : "<<A[i];
			}
			else cout<<A[i]<<" ";
		}	
		cout<<endl;
		// generuj na ekran B
			for(int i=0;i<15;i++)
		{
			if(i==0)
			{
				cout<<"Tab[] B : "<<B[i];
			}
			else cout<<B[i]<<" ";
		}	
		cout<<endl;
		
	cout<<"Wprowadz liczbe do poszukiwania: \n"<<endl;
	 cin>>cel;     //  jesli chcemy aby urzytkownik wprowadzil liczbe 

	// Poinformuj urzytkownika gdy nie ma takiej pary 
	int odkrywca;
	odkrywca = szukajSumy(A,B,cel,15);
	if(odkrywca==0)
	{
		printf("W Podanych tablicach nie ma takich liczb.");
	}

}

 

komentarz zamknięcia: ROZWIĄZANY TEMAT. dziękuje

2 odpowiedzi

+2 głosów
odpowiedź 30 listopada 2016 przez Michał Muzyka Pasjonat (24,080 p.)
wybrane 30 listopada 2016 przez Wiciorny
 
Najlepsza

dodaj bibliotekę:

#include <ctime>


 a potem na początku funkcji main dodaj:

srand(time(0));

powoduje ona że jesteś w stanie losowac liczby

komentarz 30 listopada 2016 przez Michał Muzyka Pasjonat (24,080 p.)
to nie działa dlatego, że jak podajesz liczby to robisz to od najmniejszej do największej, a jak liczby są losowane, nie są w żadnej sensownej kolejności. a twój algorytm działa dla liczb posortowanych
komentarz 30 listopada 2016 przez Wiciorny Ekspert (270,230 p.)

I dodam- ze dziala algorytm jak napisze recznie tablice- a nie dziala dla generowanych . Czytajcie zanim :D odpowiecie, ze algorytm jest np zly 

komentarz 30 listopada 2016 przez Wiciorny Ekspert (270,230 p.)
Matko! Kolega wygrał. Zjadłem rozum :D
komentarz 30 listopada 2016 przez Michał Muzyka Pasjonat (24,080 p.)

nie ma sprawy laugh

komentarz 30 listopada 2016 przez Adii Użytkownik (960 p.)

Ten kod działa? Wrzuciłem ten kod do VS i dodałem w kilku miejscach cout aby zobaczyć wartości. Do funkcji "odkrywca" wrzucasz wartość zmiennej "rozmiar". Problem w tym, że ta zmienna przechowuje wartość 5 a później ustawiasz ją jako indeks tablicy "B" co jest błędem. Tablice indeksujemy od 0 - a co za tym idzie w:

if (A[i] + B[j] == cel)

B[5] jest jakimś śmieciem. Wyszedłeś poza tablicę i przez co if zwraca false. Następny else if (przynajmniej w moim wypadku wartość B[5] była ujemna więc:

else if (A[i] + B[j] < cel)

Zwraca true, a tam jak byk: i = i+1. Innymi słowy - wychodzisz poza tablicę i zmieniasz tylko do którego indeksu tablicy "A" się odnosisz. Wygląda to tak:

1: A[0] B[5]

2: A[1] B[5]

3: A[2] B[5]

EDIT: Odnoszę się do kodu z komentarza.

0 głosów
odpowiedź 30 listopada 2016 przez playerony Pasjonat (15,240 p.)
cout<<"Tab[] B : "<<B[i]<< " ";

Tu masz rozwiazanie, inaczej nie wiem czemu ale nie działa.

komentarz 30 listopada 2016 przez Wiciorny Ekspert (270,230 p.)
to jest poprawnie chodzi mi zeby dla indeksu 0 ;] wyswietlilo wczesniej nazwe....

Podobne pytania

0 głosów
1 odpowiedź 1,097 wizyt
+1 głos
3 odpowiedzi 196 wizyt
pytanie zadane 21 października 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
1 odpowiedź 449 wizyt

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,966 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!

...