Autor |
Wiadomość |
beny
BeNy_BuDoWnIcZy.2.0
Dołączył: 06 Sty 2008
Posty: 551
Przeczytał: 0 tematów
Pomógł: 4 razy Ostrzeżeń: 0/5 Skąd: z Pizdochlewic
|
|
|
|
Dla wszystkich desperatów zad1:
| |
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
class symulacja
{
int LiczbaProcesow,TabCzasuProcesow[20];
float MaxCzasOczekiwania,SreCzasOczekiwania,TabWymian[10], suma;
public:
//deklaracja nazw algorytmow i funkcji wykorzytanych w programie
void LiczbaIczasProcesow();
void AlgorytmFcfs();
void AlgorytmSjf();
void AlgorytmRoundRobin();
void zapisz();
};
//pobranie od uzytkownika liczby procesow i przypisanie im kwantow czasu
void symulacja::LiczbaIczasProcesow()
{
int i;
cout<<"\nPodaj ogolna liczbe procesow (max 10):";
cin>>LiczbaProcesow;
for(i=1;i<=LiczbaProcesow;i++)
{
cout<<"\nPodaj kwant czasu potrzebny do wykonania procesu_"<<i<<"= ";
cin>>TabCzasuProcesow[i];
}
}
//kod algorytmu FCFS
void symulacja::AlgorytmFcfs()
{
int i,TabCzasu[10];
MaxCzasOczekiwania=0.0;
for(i=1;i<=LiczbaProcesow;i++)
{
TabCzasu[i]=TabCzasuProcesow[i];
cout<<"\nImpuls czasu dla procesu_"<<i<<"= ";
cout<<TabCzasu[i];
}
suma=0;
for(i=2;i<=LiczbaProcesow;i++)
{
suma=TabCzasu[i-1]+suma;
}
MaxCzasOczekiwania=MaxCzasOczekiwania+suma;
SreCzasOczekiwania=MaxCzasOczekiwania/LiczbaProcesow;
cout<<"\nMaksymalny czas oczekiwania ostatniego procesu na wykonanie="<<MaxCzasOczekiwania;
cout<<"\nSredni czas oczekiwania procesu na wykonanie="<<SreCzasOczekiwania;
cout<<"\nLiczba wymian procesow przez planiste to "<<LiczbaProcesow-1;
cout<<"\n";
system ("pause");
}
//kod algorytmu SJF
void symulacja::AlgorytmSjf()
{
int i,j,k,max,TabCzasu[10];
max=0;
suma=0;
MaxCzasOczekiwania=0.0;
for(i=1;i<=LiczbaProcesow;i++)
{
TabCzasu[i]=TabCzasuProcesow[i];
cout<<"\nImpuls czasu dla procesu_"<<i<<"= ";
cout<<TabCzasu[i];
}
for(i=LiczbaProcesow;i>=1;i--)
{
for(j=2;j<=LiczbaProcesow;j++)
{
if(TabCzasu[j-1]>TabCzasu[j])
{
k=TabCzasu[j-1];
TabCzasu[j-1]=TabCzasu[j];
TabCzasu[j]=k;
}
}
}
for(i=2;i<=LiczbaProcesow;i++)
{
suma=TabCzasu[i-1]+suma;
}
MaxCzasOczekiwania=MaxCzasOczekiwania+suma;
SreCzasOczekiwania=MaxCzasOczekiwania/LiczbaProcesow;
cout<<"\nMaksymalny czas oczekiwania najdluzszego procesu na wykonanie="<<MaxCzasOczekiwania;
cout<<"\nSredni czas oczekiwania procesu na wykonanie="<<SreCzasOczekiwania;
cout<<"\nLiczba wymian procesow przez planiste to "<<LiczbaProcesow-1;
cout<<"\n";
system ("pause");
}
//kod algorytmu Round Robin
void symulacja::AlgorytmRoundRobin()
{
int i,j,przydzial,k,TabCzasu[10],Rrobin[10][10],count[10];
int max=0;
int m;
MaxCzasOczekiwania=0.0;
for(i=1;i<=LiczbaProcesow;i++)
{
TabCzasu[i]=TabCzasuProcesow[i];
cout<<"\nImpuls czasu potrzebny do wykonania procesu_"<<i<<"= ";
cout<<TabCzasu[i];
if(max<TabCzasu[i])
max=TabCzasu[i];
TabWymian[i]=0;
}
cout<<"\nPodaj staly przydzial czasowy dla pojedynczego procesu=";
cin>>przydzial;
m=max/przydzial+1;
//inicjalizacja tablicy
for(i=1;i<=LiczbaProcesow;i++)
{
for(j=1;j<=m;j++)
{
Rrobin[i][j]=0;
}
}
i=1;
while(i<=LiczbaProcesow)
{
j=1;
while(TabCzasu[i]>0)
{
if(TabCzasu[i]>=przydzial)
{
TabCzasu[i]=TabCzasu[i]-przydzial;
Rrobin[i][j]=przydzial;
j++;
}
else
{
Rrobin[i][j]=TabCzasu[i];
TabCzasu[i]=0;
j++;
}
}
count[i]=j-1;
i++;
}
cout<<"\nWynik:\n\n";
for(i=1;i<=LiczbaProcesow;i++)
{
for(j=1;j<=m;j++)
{
cout<<"Rr["<<i<<","<<j<<"]="<<Rrobin[i][j];
cout<<" ";
}
cout<<"";
}
int x=1;
i=1;
while(x<=LiczbaProcesow)
{
for(int a=1;a<x;a++)
{
TabWymian[x]=TabWymian[x]+Rrobin[a][i];
}
i=1;
int z=x;
j=count[z];
k=1;
while(k<=j-1)
{
if(i==LiczbaProcesow+1)
{
i=1;
k++;
}
else
{
if(i!=z)
{
TabWymian[z]=TabWymian[z]+Rrobin[i][k];
}
i++;
}
}
x++;
}
for(i=1;i<=LiczbaProcesow;i++)
cout<<"\nCzas wykonania dla procesu_"<<i<<"="<<TabWymian[i];
for(i=1;i<=LiczbaProcesow;i++)
MaxCzasOczekiwania=MaxCzasOczekiwania+TabWymian[i];
SreCzasOczekiwania=MaxCzasOczekiwania/LiczbaProcesow;
cout<<"\nMaksymalny czas oczekiwania procesu na wykonanie="<<MaxCzasOczekiwania;
cout<<"\nSredni czas oczekiwania procesu na wykonanie="<<SreCzasOczekiwania;
cout<<"\n";
system ("pause");
}
//zapisywanie do pliku wynikow
void zapisz()
{
FILE *Plik;
float alg;
Plik = fopen ("WynikSymulacji.txt" , "w+b");
if (Plik == NULL)
{
// błąd
}
fwrite(&alg, 1, sizeof(500), Plik);
fclose (Plik);
}
//Program glowny
int main()
{
int a;
symulacja c;
do
{
system("cls");
cout<<"*********************************************\n";
cout<<"* Adam Jarzab 22704 *\n";
cout<<"* Systemy operacyjne *\n";
cout<<"* Symulacje - zadanie 1 *\n";
cout<<"*********************************************\n";
cout<<"\n\n Menu programu\n\n\n";
cout<<"1. Wprowadz liczbe procesow i ich czas wykonania\n";
cout<<"2. Algotym First Come First Served (FCFS)\n";
cout<<"3. Algotym Shortest Job First (SJF)\n";
cout<<"4. Algotym Round Robin (Rr)\n";
cout<<"5. Pokaz wyniki dla wszystkich 3 algorytmow\n";
cout<<"6. Wyjscie z programu\n\n";
cout<<"Podaj numer polecenia do wykonania ... ";
cin>>a;
switch(a)
{
case 1:
c.LiczbaIczasProcesow();
break;
case 2:
cout<<"\nAlgorytm FIRST COME FIRST SERVED (FCFS)\n";
c.AlgorytmFcfs();
break;
case 3:
cout<<"\nAlgorytm SHORTEST JOB FIRST (SJF)\n";
c.AlgorytmSjf();
break;
case 4:
cout<<"\nAlgorytm ROUND ROBIN (Rr)\n";
c.AlgorytmRoundRobin();
break;
case 5:
cout<<"\nWyniki dla wszystkich 3 algorytmow:\n";
cout<<"\nAlgorytm FIRST COME FIRST SERVED (FCFS)\n";
zapisz();
c.AlgorytmFcfs();
cout<<"\nAlgorytm SHORTEST JOB FIRST (SJF)\n";
c.AlgorytmSjf();
zapisz();
cout<<"\nAlgorytm ROUND ROBIN (Rr)\n";
c.AlgorytmRoundRobin();
zapisz();
break;
case 6:
break;
}
}while(a<=5);
}
|
Post został pochwalony 0 razy
Ostatnio zmieniony przez beny dnia Czw 14:45, 04 Cze 2009, w całości zmieniany 1 raz
|
|
Czw 14:44, 04 Cze 2009 |
|
|
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
|
|