tablica wskaźników

0

...

1

Błąd przy zerowaniu tablicy tab - taka uwaga iżywaj tab[i][j] - kompilator i tak zoptymalizuje do tegosamego, a będzie czytelniejsze - szybciej zobaczysz, że zerujesz tylko elementy brzegowe.

0
 	for(i=0;i<uA+1;i++)
		{
			*(*(tab+i)+0) = 0 ; 
		
			
		}
	for(i=0;i<n+1;i++){
			*(*tab+i) = 0 ;
	
	}

te petle powinny mi dac taki efekt (ZAŁĄCZNIK)

W nich mam jakiś błąd ? przepraszam jeśli są to trywialne pytania ale z wskaźnikami bardzo rzadko mam do czynienia.

1

Tak, błędem jest nie stosowanie [] co powoduje zaciemnienie kodu.

0

kod

	for(i=0;i<uA+1;i++)
		{
		//	*(*(tab+i)+0) = 0 ; 
		tab[i,0] = 0; 
			
		}
	for(i=0;i<n+1;i++){
		//	*(*tab+i) = 0 ;
			tab[0,i] = 0;
	} 

przechodzi kompilacje ale wywala błąd podczas uruchomienia

0
tab[0][i]
0

Dodatkowo - zerujesz dalej tylko elementy brzegowe tablic.

0

Według algorytmu powinno ot być tak (Załącznik)

Więc wyzerowałem tylko pierwsza kolumnę i wiersz tak jak napisaliście :

 for(i=0;i<uA+1;i++)
		{
		//	*(*(tab+i)+0) = 0 ; 
		tab[i][0] = 0; 
			
		}
	for(i=0;i<n+1;i++){
		//	*(*tab+i) = 0 ;
			tab[0][i] = 0;
	}

niestety nie pomogło.

Spróbowałem również przed zapisem do tablicy wyzerować ją ale również nie przyniosło to żadnego skutku. Czy ma ktoś pomysł co tu jest nie tak ? bo nadal wyskakuja mi te wartości.

 	for(i=0;i<uA+1;i++)
			for(int j=0;j<n+1;j++)
				tab[i][j] = 0 ; 
0

nie jestem pewien, ale patrząc na to co deklarowałeś na początku, to zamiast:

 
for(i=1; i<4;i++){
        cout<<endl;
        for(int j =1;j<uA;j++){

wstawić

for(int j=1; j<4;j++){
        cout<<endl;
        for(i =1;i<uA;i++){
 

Głowy nie dam, ale tak mi się wydaje po tym jak tablicę deklarowałeś, chyba, że deklaracje powinny być inne.

0

Proprawiłem zapis wskaznikó na bardziej czytelny.
Juz nie mam pojęcia czemu tu jest cos źle.

Czy to możliwe że podczas gdy odpalam program rezultaty są nieprawidłowe a gdy go zdebuguje liczy juz poprawnie ?
w zalaczniku 1 jest screen po odpaleniu Execute>>Run
w zalaczniku 2 jest po debugowaniu....
na ideonie natomiast jeszcze inna wersja się ukazuje...

Czy może mi ktoś wyjaśnić skąd się biorą te różnice ?

0

niestety obrazki wyświetlają sie dziwnie, ale opisany przypadek zazwyczaj związany może byc z wyjściem po za pamięć, ew uzywania niezainicjowanych zmiennych (debugger czyści pamięć, więc czasami prześlizgujemy się z takim błędem). Pokaż nowy kod, to pomyslimy, ale to pewnie juz jutro, albo w przerwie meczu.

0

Masz cały czas ten sam błąd o którym piszę - wyjeżdżasz poza tablicę, bo odwracasz indeksy!
deklarujesz tablicę o uA+1 wierszach i n+1 kolumnach, a używasz tablicy o n+1 wierszach i uA+1 kolumnach!!! Pisałem Ci to już wcześniej.

0

ok dzięki :) co ciekawe w DC++ nie działało, a w VS 2013 dobrze zadziałało.

Potrzebuje określic które elementy trafiaja do plecaka. Dla podanego przykładu program wrzuca

uA = 10; 
n = 5;
w1 = 5, c1 = 1,
w2 = 3, c2 = 2,
w3 = 3, c3 = 1,
w4 = 4, c4 = 4,
w5 = 1, c5 = 1
 	

Wkładamy przedmiot 5,3,2
Czyli jest ok bo waga przedmiotow : 1 + 3 + 3 < 10

ale wystarczy że zmienie dane przedmiotu 1 na :

w5 = 5, c5 = 10
 	

Program dalej mi wyswietla 5, 4, 2 , 1
waga : 1 + 4 + 3 + 5 > 10 !!!

0

zmieniłem już na poprawne alokowanie :) teraz i w Dev i VS dobrze działa, tylko nie wiem czy dobrze zapisałem algorytm bo dziwne wyniki zwraca (tablice dobrze buduje, tylko z odczytem elementow ma problem) .
czy mógłbyś zerknac ?

0

j zmniejszasz o 1, a powinieneś o przedmioty[i - 1].w (dodatkowo warunek końca jesli j - nastepny w < 0 to stop)

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