Ariel Rodrigo Campos Posted July 3, 2023 at 06:50 PM Share Posted July 3, 2023 at 06:50 PM Boa Tarde. Preciso de ajuda pra esse código que mostra o tempo de exibição de processos. Porem, ele mostra o Gráfico de um jeito errado. Ao invés dele mostrar o gráfico assim:Gráfico de Gantt: ------------------------ 1: ---XXX 2: -XX 3: X ------------------------ Ele me mostra assim: Gráfico de Gantt: ------------------------ 3: X 2: -XX 1: ---XXX ------------------------ Quem puder me ajudar eu agradeço. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char nome[20]; int tempo_execucao; int tempo_espera_inicial; int tempo_processamento; int tempo_espera_final; } Processo; void fcfs(Processo* processos, int n) { int tempo_chegada = 0; int tempo_total = 0; printf("Gráfico de Gantt:\n"); printf("------------------------\n"); for (int i = 0; i < n; i++) { printf("%s: ", processos[i].nome); for (int j = 0; j < tempo_chegada; j++) printf("-"); for (int j = 0; j < processos[i].tempo_execucao; j++) printf("X"); printf("\n"); tempo_chegada += processos[i].tempo_execucao; processos[i].tempo_espera_inicial = tempo_chegada - processos[i].tempo_execucao; processos[i].tempo_espera_final = tempo_total - processos[i].tempo_execucao; tempo_total += processos[i].tempo_execucao; processos[i].tempo_processamento = processos[i].tempo_execucao; } printf("\nDados adicionais:\n"); printf("Tempo de espera para iniciar o processo:\n"); for (int i = 0; i < n; i++) { printf(" %s)", processos[i].nome); printf("%d -", processos[i].tempo_espera_inicial);} printf("\nTempo de processamento do processo:\n"); for (int q = 0; q < n; q++){ printf(" %s)", processos[q].nome); printf("%d -", processos[q].tempo_processamento); } printf("\nTempo de espera para finalizar o processo:\n"); for (int e = 0; e < n; e++){ printf(" %s)", processos[e].nome); printf("%d -", 0); } printf("\n"); double tempo_medio_espera_inicial = 0.0; double tempo_medio_espera_final = 0.0; for (int i = 0; i < n; i++) { tempo_medio_espera_inicial += processos[i].tempo_espera_inicial; tempo_medio_espera_final += processos[i].tempo_espera_final; } tempo_medio_espera_inicial /= n; tempo_medio_espera_final /= n; printf("Tempo médio de espera para iniciar cada processo: %.2lf\n", tempo_medio_espera_inicial); printf("Tempo total de processador: %d\n", tempo_total); } void sjf(Processo* processos, int n) { // Ordena os processos pelo tempo de execução (SJF) for (int i = 0; i < n - 1; i++) { int menor_tempo = i; // Índice do processo com menor tempo de execução for (int j = i + 1; j < n; j++) { if (processos[j].tempo_execucao < processos[menor_tempo].tempo_execucao) { menor_tempo = j; } } // Troca os elementos somente no final da iteração Processo temp = processos[i]; processos[i] = processos[menor_tempo]; processos[menor_tempo] = temp; } int tempo_chegada = 0; int tempo_total = 0; printf("Gráfico de Gantt:\n"); printf("------------------------\n"); for (int i = 0; i < n; i++) { printf("%s: ", processos[i].nome); for (int j = 0; j < tempo_chegada; j++) printf("-"); for (int j = 0; j < processos[i].tempo_execucao; j++) printf("X"); printf("\n"); tempo_chegada += processos[i].tempo_execucao; processos[i].tempo_espera_inicial = tempo_chegada - processos[i].tempo_execucao; processos[i].tempo_espera_final = tempo_total - processos[i].tempo_execucao; tempo_total += processos[i].tempo_execucao; processos[i].tempo_processamento = processos[i].tempo_execucao; } printf("\nDados adicionais:\n"); printf("Tempo de espera para iniciar o processo:\n"); for (int i = 0; i < n; i++) { printf(" %s)", processos[i].nome); printf("%d -", processos[i].tempo_espera_inicial);} printf("\nTempo de processamento do processo:\n"); for (int q = 0; q < n; q++){ printf(" %s)", processos[q].nome); printf("%d -", processos[q].tempo_processamento); } printf("\nTempo de espera para finalizar o processo:\n"); for (int e = 0; e < n; e++){ printf(" %s)", processos[e].nome); printf("%d -", 0); } printf("\n"); double tempo_medio_espera_inicial = 0.0; double tempo_medio_espera_final = 0.0; for (int i = 0; i < n; i++) { tempo_medio_espera_inicial += processos[i].tempo_espera_inicial; tempo_medio_espera_final += processos[i].tempo_espera_final; } tempo_medio_espera_inicial /= n; tempo_medio_espera_final /= n; printf("Tempo médio de espera para iniciar cada processo: %.2lf\n", tempo_medio_espera_inicial); printf("Tempo total de processador: %d\n", tempo_total); } void circular(Processo* processos, int n, int quantum) { int* temp_restante = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) temp_restante[i] = processos[i].tempo_execucao; int tempo_chegada = 0; int tempo_total = 0; // Determinar o comprimento máximo do nome dos processos int max_length = 0; for (int i = 0; i < n; i++) { int length = strlen(processos[i].nome); if (length > max_length) max_length = length; } printf("Gráfico de Gantt:\n"); printf("------------------------\n"); while (1) { int finalizados = 1; for (int i = 0; i < n; i++) { if (temp_restante[i] > 0) { finalizados = 0; if (temp_restante[i] > quantum) { printf("%-*s: ", max_length, processos[i].nome); // Adicionar espaços em branco para alinhar o gráfico de Gantt for (int j = 0; j < tempo_chegada; j++) printf("-"); for (int j = 0; j < quantum; j++) printf("X"); printf("\n"); tempo_chegada += quantum; temp_restante[i] -= quantum; processos[i].tempo_processamento += quantum; } else { printf("%-*s: ", max_length, processos[i].nome); // Adicionar espaços em branco para alinhar o gráfico de Gantt for (int j = 0; j < tempo_chegada; j++) printf("-"); for (int j = 0; j < temp_restante[i]; j++) printf("X"); printf("\n"); tempo_chegada += temp_restante[i]; processos[i].tempo_processamento += temp_restante[i]; temp_restante[i] = 0; } } } if (finalizados) break; } tempo_total = tempo_chegada; printf("\nDados adicionais:\n"); for (int i = 0; i < n; i++) { processos[i].tempo_espera_inicial = processos[i].tempo_espera_inicial - processos[i].tempo_processamento; processos[i].tempo_espera_final = tempo_chegada - processos[i].tempo_processamento; printf("Tempo de espera para iniciar o processo %-*s: %d\n", max_length, processos[i].nome, processos[i].tempo_espera_inicial); printf("Tempo de processamento do processo %-*s: %d\n", max_length, processos[i].nome, processos[i].tempo_processamento); printf("Tempo de espera para finalizar o processo %-*s: %d\n", max_length, processos[i].nome, processos[i].tempo_espera_final); } double tempo_medio_espera_inicial = 0.0; double tempo_medio_espera_final = 0.0; for (int i = 0; i < n; i++) { tempo_medio_espera_inicial += processos[i].tempo_espera_inicial; tempo_medio_espera_final += processos[i].tempo_espera_final; } tempo_medio_espera_inicial /= n; tempo_medio_espera_final /= n; printf("Tempo médio de espera para iniciar cada processo: %.2lf\n", tempo_medio_espera_inicial); printf("Tempo médio de espera para finalizar cada processo: %.2lf\n", tempo_medio_espera_final); printf("Tempo total de processador: %d\n", tempo_total); free(temp_restante); } int main() { int n; printf("Quantos processos deseja cadastrar? "); scanf("%d", &n); Processo* processos = (Processo*)malloc(n * sizeof(Processo)); for (int i = 0; i < n; i++) { printf("Nome do processo %d: ", i + 1); scanf("%s", processos[i].nome); printf("Tempo de execução do processo %d: ", i + 1); scanf("%d", &processos[i].tempo_execucao); } char algoritmo[20]; printf("Qual algoritmo de escalonamento deseja utilizar? (FCFS/SJF/Circular): "); scanf("%s", algoritmo); if (strcmp(algoritmo, "FCFS") == 0) { fcfs(processos, n); } else if (strcmp(algoritmo, "SJF") == 0) { sjf(processos, n); } else if (strcmp(algoritmo, "Circular") == 0) { int quantum; printf("Informe o quantum: "); scanf("%d", &quantum); circular(processos, n, quantum); } else { printf("Algoritmo de escalonamento inválido.\n"); } free(processos); return 0; } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.