Skip to content

Instantly share code, notes, and snippets.

@fitoria
Created March 17, 2009 03:51
Show Gist options
  • Save fitoria/80272 to your computer and use it in GitHub Desktop.
Save fitoria/80272 to your computer and use it in GitHub Desktop.
//factorial.cpp
//compilar: g++ factorial.cpp -o factorial
#include<iostream>
using namespace std;
double factorial(double numero);
double fac = 0;
int main(int arg, char* argc[])
{
double numero;
cout << "Introduzca un numero: " ;
cin >> numero;
cout << "\nEl Factorial es: "<< factorial(numero) << endl;
return 0;
}
double factorial(double numero)
{
fac += numero * (numero - 1);
if(numero==1)
return fac;
else
factorial(numero -1);
}
/* Programa para simular los estados del procesador */
#include<iostream>
#include<vector>
using namespace std;
enum estados{NULO, NUEVO, LISTO, EJECUCION, BLOQUEADO, TERMINADO};
typedef struct{
int estado;
char nombre;
}proceso;
int main(int arg, char* argc[])
{
vector<proceso> procesos; //TODO: inicializar esta variable con la lista de procesos.
cout << "Tenemos " << procesos.size() << " procesos en cola" << endl;
while(procesos.size() > 0)
{
int i = 0;
int nuevoEstado;
for(i = 0; i <= procesos.size(); i++)
{
//por cada proceso preguntar el cambio de estado
cout << "\nproceso: " << procesos[i].nombre
<< " || estado: " << procesos[i].estado << endl;
cout << "\n Introdusca el nuevo estado: " << endl;
switch (procesos[i].estado){
case NULO:
cout << "\nEl proceso cambia de estado nulo a nuevo. " << endl;
nuevoEstado = NUEVO;
break;
case NUEVO:
cout << "\nEl proceso cambia de estado nuevo a listo. " << endl;
nuevoEstado = LISTO;
break;
case LISTO:
cout << "\n3 - Ejecucion" << endl;
cout << "\n5 - Terminado" << endl;
cin >> nuevoEstado;
if(!nuevoEstado || nuevoEstado != 3 || nuevoEstado != 5)
cout << "\nERROR! Estado Incorrecto.";
break;
case EJECUCION:
cout << "\n2 - Listo" << endl;
cout << "\n4 - Bloqueado" << endl;
cout << "\n5 - Terminado" << endl;
cin >> nuevoEstado;
if(!nuevoEstado || nuevoEstado != 3 || nuevoEstado != 4 || nuevoEstado != 5)
cout << "\nERROR! Estado Incorrecto.";
break;
case BLOQUEADO:
cout << "\nEl proceso cambia de estado nuevo a listo. " << endl;
nuevoEstado = LISTO;
break;
}
if(nuevoEstado)
procesos[i].estado = nuevoEstado;
//sacamos el proceso si tiene estado terminado.
if (procesos[i].estado == TERMINADO){
cout << "Borrando proceso por tener estado terminado" << endl;
procesos.erase(procesos.begin() + i);
}
}
}
}
/* Simulación de particion fija.
* Adolfo Jurgen Fitoria Escobar.
* Gustavo Jimenez
* Eduardo Rosales
* Nilson Castellón.
* Octavio Flores V.
* Bajo licencia WTFPL.
* compilar con: g++ particion_fija.cpp -o particion_fija
* correr: ./particion_fija
*/
#include<iostream>
#include<vector>
int slots[] = {100, 200, 300, 400, 500};
struct proc{
char nombre;
int tamano;
int slot;
};
using namespace std;
typedef proc proceso;
int main(int arg, char* argc[])
{
int i = 0, j = 0, k = 0;
proceso procesos[5]; // inicializar esta variable para correr.
for(i=0; i <= sizeof(procesos); i++)
{
for (j = 0; j<= sizeof(slots); j++)
{
for(k=0; k<=i; k++){
if (!procesos[k].slot){
if (procesos[i].tamano <= slots[j])
{
cout << "\nentra un proceso al slot: " << j
<< " proceso: " << procesos[i].nombre << endl;
procesos[i].slot = j;
}
}
}
}
}
cout << "\nAsignaciones: \n" << endl;
for(i = 0; i<=sizeof(procesos); i++)
{
cout << "\nproceso: " << procesos[i].nombre << " tamano: " <<
procesos[i].tamano << " slot: " << procesos[i].slot << endl;
}
}
/*
* Programa para simular el contador de procesos.
* Adolfo Jurgen Fitoria Escobar.
* Gustavo Jimenez
* Eduardo Rosales
* Nilson Castellón
* Octavio Flores.
* bajo licencia WTFPL mas info en http://sam.zoy.org/wtfpl/
*/
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<vector>
using namespace std;
//Estructura para el proceso
struct proc{
unsigned int indice;
unsigned int contador;
unsigned int base;
char nombre[];
};
typedef proc proceso;
void ordenar(vector<proceso> procesos);
int generadorNumero();
int main(int arg, char* argv[])
{
int ipc=0, i;
cout << "\nSimulacion de IPC\n" << endl;
ipc = generadorNumero();
ordenar(&procesos);
while (procesos.size() > 0)
{
for(i = 0; i <= procesos.size(); i++)
{
cout << "\n" << i << " contador:" << procesos[i].contador <<
"ipc: " << ipc << endl;
if (procesos[i].contador == ipc){
cout << "\nsacando proceso: " << procesos[i].nombre << endl;
//sacar proceso del vector
procesos.erase(procesos.begin() + i);
}
}
}
return 0;
}
void ordenar(vector<proceso> procesos)
{
int tam = procesos.size(), i, j;
proceso temp, temp2;
for (i = (tam - 1); i>=0; i--)
{
for(j=1; j<= (tam-1); j++)
{
if(procesos[j-1].base > procesos[j].base)
{
temp = procesos[j-1];
procesos[j-1] = procesos[j];
procesos[j] = temp;
}
}
}
}
int generadorNumero()
{
srand(time(0));
return (rand() % 10) + 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment