 ### FCFS Algorithm with Same Arrival Time

`'''FCFS: First Come First Serve`
`The task is to find the Average Waiting Time and Average Turnaround Time of the given processes with their Burst Time using FCFS Scheduling Algorithm.`
`FCFS is the simplest Scheduling Algorithm. It simply serves a process in order that they arrive in the Ready Queue.`
`FCFS is a Non Pre-emptive Algorithm, hence the process which comes first will be executed first and the next process will be served only after the previous process is executed completely.`
`Here we are considering the arrival time of all processes to be 0.`
`1. Start Time: Time at which the execution of the process starts2. Completion Time: Time at which the process completes its execution3. Turnaround Time: Completion Time - Arrival Time4. Waiting Time: Turnaround Time - Burst Time`
`'''`

` `

`class FCFS:    def processData(self, no_of_processes):        process_data = []        for i in range(no_of_processes):            temporary = []            process_id = int(input("Enter Process ID: "))`
`            burst_time = int(input(f"Enter Burst Time for Process {process_id}: "))`
`            temporary.extend([process_id, 0, burst_time])            '''            0(zero) is the arrival time of the processes            '''            process_data.append(temporary)        FCFS.schedulingProcess(self, process_data)    def schedulingProcess(self, process_data):        start_time = []        exit_time = []        s_time = 0        for i in range(len(process_data)):            start_time.append(s_time)            s_time = s_time + process_data[i]            e_time = s_time            exit_time.append(e_time)            process_data[i].append(e_time)        t_time = FCFS.calculateTurnaroundTime(self, process_data)        w_time = FCFS.calculateWaitingTime(self, process_data)        FCFS.printData(self, process_data, t_time, w_time)    def calculateTurnaroundTime(self, process_data):        total_turnaround_time = 0        for i in range(len(process_data)):            turnaround_time = process_data[i] - process_data[i]            '''            turnaround_time = completion_time - arrival_time            '''            total_turnaround_time = total_turnaround_time + turnaround_time            process_data[i].append(turnaround_time)        average_turnaround_time = total_turnaround_time / len(process_data)        '''        average_turnaround_time = total_turnaround_time / no_of_processes        '''        return average_turnaround_time    def calculateWaitingTime(self, process_data):        total_waiting_time = 0        for i in range(len(process_data)):            waiting_time = process_data[i] - process_data[i]            '''            waiting_time = turnaround_time - burst_time            '''            total_waiting_time = total_waiting_time + waiting_time            process_data[i].append(waiting_time)        average_waiting_time = total_waiting_time / len(process_data)        '''        average_waiting_time = total_waiting_time / no_of_processes        '''        return average_waiting_time    def printData(self, process_data, average_turnaround_time, average_waiting_time):`
`        print("Process_ID  Arrival_Time  Burst_Time  Completion_Time  Turnaround_Time  Waiting_Time")`
`        for i in range(len(process_data)):            for j in range(len(process_data[i])):`
`                print(process_data[i][j], end="				")`
`            print()`
`        print(f'Average Turnaround Time: {average_turnaround_time}')`

`        print(f'Average Waiting Time: {average_waiting_time}')if __name__ == "__main__":`
`    no_of_processes = int(input("Enter number of processes: "))`
`    fcfs = FCFS()    fcfs.processData(no_of_processes)`

`Output:`

` ` 