xeo545x39 napisał(a)
To w takim razie musisz wychodzić poza zakres tablicy. Nie powinno być np. w warunku pętli for <
a nie <=
?
if (w>max)
{
max=w;
// naj_a=temp_zmienna-i;
// naj_b=i;
}
nawet teraz pojawiają się losowe liczby
dziwne jest to ze mam jeszcze jedna procedure, ktora wyglada tak samo, tylko operuje na innych wierszach w tablicy i tam wyswietla wszystko ok
Tylko te dziwne losowe liczby pokazują się w tej procedurze gdzie wiecej razy wykonywalem operacje na tych tablicach:
void faza2 (int tablica[3][7], int zmienna) // wyznacza optymalny podzial kapitalu przy malejacych nakładach
//500tys/400/300/200/100
//'zmiennna' - okresla dla jakiego nakladu liczyc optymalny podzial kapitalu (tys/zł)
{
int a, i, j, w, max, zm, naj_a,naj_b;
int temp_zmienna=zmienna;
int tab_temp [7] = {0,0,0,0,0,0,0}; //tablica do przechowywania wynikow podzialu kapitalu przy roznych nakladach
int tablica_temp[3][7];
for(i=0;i<3;i++)
for(j=0;j<7;j++)
tablica_temp[i][j]=tablica[i][j];
Form1->Memo1->Lines->Add("FAZA 2");
Form1->Memo1->Lines->Add(" ");
for(zm=1;zm<7;zm++) //dla takiego nakladu jaki podamy w zmiennej 'zmienna'
{
for (a=0;a<7;a++)
{
for(i=0;i<7;i++)
{
w=tablica[1][a]+tablica[2][j];
if (a+j<=zm && w>max) //sprawdzenie czy nie wynik nie przewyzsza nakładów
{
max=w;
naj_a=a;
naj_b=j;
}
j++; //kolejna liczba wkolumnie
}
j=0;
}
tab_temp[zm]=max; //przypisanie do tablicy skumulowanej zdolnosci produkcyjnej P+S
//Form1->Memo1->Lines->Add("---Najlepsza wartosc jest pod indeksem:"+IntToStr(naj_a));
// wartosci dla roznego poziomu nakladow
Form1->Memo1->Lines->Add("wartosc w tablicy o nr:"+IntToStr(zm)+" = "+IntToStr(tab_temp[zm]));
Form1->Memo1->Lines->Add("---------------------------------------");
} //koniec petli zm<zmienna
Form1->Memo1->Lines->Add("-Faza2 - zakonczona wynikiem PS="+IntToStr(max));
Form1->Memo1->Lines->Add("---------------------------------------");
Form1->Memo1->Lines->Add("---------------------------------------");
//======+++++=====++++=====++++====++++====++++
//FAZA 3 PORÓWNANIE P+S z F
max=0;
int x,y;
for(i=0;i<temp_zmienna;i++)
{
w=tablica[0][temp_zmienna-i]+tab_temp[i];
if (w>max)
{
max=w;
naj_a=temp_zmienna-i;
naj_b=i;
}
}
tab_temp[zm]=max;
Form1->Memo1->Lines->Add("Faza3 zakonczona wynikiem PS+F="+IntToStr(max)) ; //najwieksza wartosc dla PS&F
Form1->Memo1->Lines->Add(IntToStr(naj_a)) ;
Form1->Memo1->Lines->Add(IntToStr(naj_b)) ;
A tutaj w tej procedurce wszystko działa:
void faza3 (int tablica[3][7], int zmienna)
{ // !!!!!!!!!!!!!!!!!!!!!!! FAZA 3 !!!!!!!!!!!!!!!!!!!!!
// wsprawdzam indeksy najlepszej pary P&S
int i, w, max,naj_a=0,naj_b=0,wybor ;
int tab_temp [7] = {0,0,0,0,0,0,0};
for(i=0;i<=zmienna;i++)
{
w=tablica[1][i]+tablica[2][zmienna-i];
if (w>max)
{
max=w;
naj_b=zmienna-i;
naj_a=i;
}
}
Form1->Memo2->Lines->Add(naj_a); //S wiersz (1,0)
Form1->Memo2->Lines->Add(naj_b); //P wiersz (2,0)
Form1->Memo2->Lines->Add("S- naklad ="+IntToStr(naj_a)+" = "+IntToStr(tablica[1][naj_a]));
Form1->Memo2->Lines->Add("P - naklad ="+IntToStr(naj_b)+" = "+IntToStr(tablica[2][naj_b]));
//SP & F