Witam, mam dość dziwny problem, otóż program nie działa poprawnie bez nic niewnoszącej zmiennej "odp2". Zamiast nadpisywać dane wartości zapisuje pokolei "4". Ze zmienną odp2 działa poprawnie. Czym jest to spowodowane?
Program to zastępowanie stron w pamięci metodą FIFO.
www.cs.jhu.edu/~yairamir/cs418/os6/sld015.htm
KOD:
#include <iostream>
#include <cstdlib>
//https://www.cs.jhu.edu/~yairamir/cs418/os6/sld015.html
using namespace std;
void wyswietl(int &rozmiar, int *dane, int &glowa, int &ogon)
{
system("CLS");
cout<<endl;
cout<<"---------------"<<endl;
cout<<"ZAWARTOSC: "<<endl;
cout<<"---------------"<<endl;
int indeks;
for (int i=0; i<rozmiar; i++)
{
indeks=glowa+i;
if (glowa+i>=5) indeks=glowa+i-5;
cout<<dane[indeks]<<" f";
cout<<endl;
}
cout<<endl<<"---------------"<<endl;
}
int main()
{
int dane[4];
int wybor;
int rozmiar=0;
int glowa=0;
int ogon=0;
int max=0;
do
{
cout<<"MENU"<<endl;
cout<<"1. Dodaj "<<endl;
cout<<"2. Wyjscie "<<endl;
cout<<endl;
cout<<"Wybor: ";
cin>>wybor;
system("cls");
switch (wybor)
{
case 1:
{
cin>>dane[ogon];
bool odp=false;
bool odp2=false;
if (rozmiar==0)
{
ogon=(ogon+1)%5;
rozmiar=rozmiar+1;
}
else if(rozmiar<4 && rozmiar>0)
{
for(int i=0; i<rozmiar; i++)
{
if(dane[i]==dane[ogon]) odp=true;
}
if (odp==false)
{
ogon=(ogon+1)%5;
rozmiar=rozmiar+1;
}
}
else if(rozmiar>=4)
{
for(int i=0; i<4; i++)
{
if(dane[i]==dane[ogon]) odp=true;
}
if(max>4) max=0;
if(odp==false)
{
swap(dane[max], dane[ogon]);
max++;
}
}
break;
}
}
wyswietl(rozmiar,dane,glowa,ogon);
}
while (wybor != 2);
return 0;
}