...
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.
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.
Tak, błędem jest nie stosowanie []
co powoduje zaciemnienie kodu.
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
tab[0][i]
Dodatkowo - zerujesz dalej tylko elementy brzegowe tablic.
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 ;
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.
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 ?
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.
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.
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 !!!
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 ?
j zmniejszasz o 1, a powinieneś o przedmioty[i - 1].w (dodatkowo warunek końca jesli j - nastepny w < 0 to stop)