Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia galera,
to simulando um processador, um trabalho pra materia de arquitetura de computadores..
o problema é o seguinte:
a principio tinha criado um vetor, tava funcionando bem para oq eu precisava, a entrada de dados era o Numero de processos a serem executados. Exemplo
Numero de processos : 2
ai ele gerava 4 numeros aleatorios e jogava-os no vetor( q eram os jobs de cada processo), e depois os imprimia conforme o numero gerado e o num do processo:
processo 1: 6 jobs
processo 2: 4 jobs
111111|2222
só q ai foi passado uma outra implementação, q era ordenar a execução dos jobs por ordem crescente, ou seja, teria q ficar assim:
processo 1: 6 jobs
processo 2: 4 jobs
2222|111111
só q do jeito q fiz, ordenei o vetor mas a impressao, é obvio saiu assim:
1111|222222
ai é q ta o problema, eu nao tinha como saber qual o processo de cada job armazenado no vetor, entao criei uma struct, com o num do processo e o num de jobs
Só q agora to com problema pra ordenar essa struct.. nao tenho a minima ideia d como fazer isso :S. Segue o código abaixo, se puderem dar alguma dica :D
valeu.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{ //possivel implementacao da struct
int jobs, nproc;
}PROC;
void printproc(PROC *proc);
void printjob(int *vet);
void ordena(int *vet);
int i,j,np,aux,total = 0;
int main() {
srand(time(NULL));
int *vet, opc;
printf("\t\tBelezia pague a aposta ;)\n1-Sim\n2-Nao\nOpcao: ");
scanf("%d",&opc);
printf("Numero de Processos:");
scanf("%d",&np);
PROC proc[np]; //gambiarra pra criar a struct.. vai ser dinamico
vet = calloc(np, sizeof(int)); //cria um vetor conforme o numero de processos
for ( i = 0;i < np;i++ ) {
vet[i]=4+rand()%12; //alocando valores random
proc[i].jobs = vet[i]; //armazena na struct valores random pros jobs
proc[i].nproc = i; //armazena o numero do processo
if( i+1 != np )
total += vet[i]; //calcula tempo total de espera
}
printproc(proc); //impressao dos processos e quantos jobs tem
ordena(vet); //ordenacao do vetor em ordem crescente
printjob(vet); //impressao dos jobs sendo executados, tempo de uso e total da espera da cpu
}
void printproc(PROC *proc) { //aqui a implementacao da struct ta funcionando normalmente
for( i = 0;i < np;i++ )
printf("\nProcesso %d: %d Jobs\n",proc[i].nproc,proc[i].jobs);
printf("\n");
}
void printjob(int *vet) {
int seg = 0;
for ( aux = 0; aux < np; aux++ ) {
for ( j = 0;j < vet[aux];j++ ) {
printf("%d",aux+1); //alterar aki pra o numero do processo, ja q ele nao ta mais na ordem criada, usando a struct
seg++;
}
if( aux+1 != np )
printf("|");
}
printf("\n\nTempo de uso da CPU: %d\n",seg);
printf("Tempo total de espera: %d\n\n",total);
}
void ordena(int *vet) { //trocar para a ordenação da struct
for ( j = 0; j < np; j++ )
for ( i = 0; i < np - 1; i++ )
if ( vet[i] > vet[i+1] ) {
aux = vet[i];
vet[i] = vet[i+1];
vet[i+1] = aux;
}
}
ai ele gerava 4 numeros aleatorios e jogava-os no vetor( q eram os jobs de cada processo), e depois os imprimia conforme o numero gerado e o num do processo:
Correção: gerava 2 numeros.. eu ia por um exemplo com 4 mas ia ficar muito extenso =]
Carregando comentários...