my request resource function is not working properly its giving unexpected result

35 Views Asked by At
import tkinter as tk
from tkinter import messagebox
from tkinter import *

max = []
need = []
alloc = []
request = []
available = []
num_resources = 0
num_process = 0
num_available = 0
num_request = 0
ans = []

def create_Matrix():
    global num_process, num_resources, num_available, alloc, available, need, request, max
    try:
        num_process = int(processentry.get())
        num_resources = int(resentry.get())
        num_available = int(availentry.get())
        num_request = int(reqentry.get())

        if num_resources == num_available and (num_request > 0 and num_request <= num_process):
            max = [[0 for i in range(num_resources)] for j in range(num_process)]
            alloc = [[0 for i in range(num_resources)] for j in range(num_process)]
            need = [[0 for i in range(num_resources)] for j in range(num_process)]
            available = [0] * num_available
            request = [0] * num_available
            enable_entry()

            for i in range(num_process):
                row_entries_max = []
                row_entries_alloc = []

                for j in range(num_resources):
                    entry_max = tk.Entry(formax, width=5, bd=4)
                    entry_max.grid(row=i + 4, column=j + 1, padx=5, pady=5)
                    row_entries_max.append(entry_max)

                    entry_alloc = tk.Entry(foralloc, width=5, bd=4)
                    entry_alloc.grid(row=i + 4, column=j + 10, padx=5, pady=5)
                    row_entries_alloc.append(entry_alloc)

                max[i] = row_entries_max
                alloc[i] = row_entries_alloc

            entry_available = []
            for i in range(num_available):
                entry_avail = tk.Entry(foravail, width=5, bd=4)
                entry_avail.grid(row=0, column=0 + i, padx=5, pady=5)
                entry_available.append(entry_avail)
            available = entry_available

            entry_request = []
            for i in range(num_available):
                entry_req = tk.Entry(forreq, width=5, bd=4)
                entry_req.grid(row=0, column=0 + i, padx=5, pady=5)
                entry_request.append(entry_req)
            request = entry_request

        else:
            messagebox.showerror("oops error occurred")

    except ValueError as e:
        messagebox.showerror("Something's Wrong")

def store_vals_for_max():
    try:
        for i in range(num_process):
            for j in range(num_resources):
                max[i][j] = int(max[i][j].get())
        messagebox.showinfo("Success", "Values stored in MAX matrix successfully.")
    except ValueError as e:
        messagebox.showerror("Validation Error", str(e))

def store_vals_for_alloc():
    try:
        for i in range(num_process):
            for j in range(num_resources):
                alloc[i][j] = int(alloc[i][j].get())
        messagebox.showinfo("Success", "Values stored in ALLOC matrix successfully.")
    except ValueError as e:
        messagebox.showerror("Validation Error", str(e))

def store_avail():
    try:
        for i in range(num_resources):
            available[i] = int(available[i].get())

        messagebox.showinfo("Successfully stored")
    except ValueError as e:
        messagebox.showerror("Error", f"Invalid value: {e}")

def store_req():
    try:
        for i in range(num_resources):
            request[i] = int(request[i].get())

        messagebox.showinfo("Successfully stored")
    except ValueError as e:
        messagebox.showerror("Error", f"Invalid value: {e}")

def bankers():
    global ans
    f = [0] * num_process
    ans = [0] * num_process
    ind = 0
    for k in range(num_process):
        f[k] = 0

    for i in range(num_process):
        for j in range(num_resources):
            need[i][j] = max[i][j] - alloc[i][j]

    y = 0
    for k in range(5):
        for i in range(num_process):
            if f[i] == 0:
                flag = 0
                for j in range(num_resources):
                    if need[i][j] > available[j]:
                        flag = 1
                        break
                if flag == 0:
                    ans[ind] = i
                    ind += 1
                    for y in range(num_resources):
                        available[y] += alloc[i][y]
                    f[i] = 1

    messagebox.showinfo("Success", "Banker's algorithm completed successfully.")
    print_sequence()

def print_sequence():
    global ans
    if not ans:
        messagebox.showinfo("Empty Sequence", "No safe sequence found.")
    else:
        sequence_str = "Following is the SAFE Sequence:\n"
        for i in range(num_process - 1):
            sequence_str += f" P{ans[i]} ->"
        sequence_str += f" P{ans[num_process - 1]}"
        messagebox.showinfo("Safe Sequence", sequence_str)

def requestt():
    global need
    global request
    global available
    for i in range(num_resources):
        if (request[i] > need[num_request][i]) :
            messagebox.showerror('unexpected error occurred!')

    for i in range(num_resources):
        available[i] -= request[i]
        alloc[num_request][i] += request[i]
        need[num_request][i] -= request[i]

    bankers()

my bankers function is giving me accurate result on the first go but when i am implementing request resource function its giving abnormal behaviour it is always giving like p0->p1->p2->p3->p4 and that is wrong kindly can anyone help me i thinke the problem is the matrix are not updating properly after the requestt function

0

There are 0 best solutions below