What is a procedure?
A procedure is a named group of code that has paramaters and return values. Procedures are known as methods or functions depending on the language.
A procedure executes the statements within it on the parameters to provide a return value.
What are parameters?
Paramaters are input values of a procedure that are specified by arguments.Arguments specify the values of the parameters when a procedure is called.
By creating theses algorithms the readibility of code increases and the complexity decreases. This is becasue a function’s name can tell the reader what action it will perform, and by calling it, the code becomes more clean and easy to understand.

Procedures are used to create algorthims that can perform certain actions or return values. When a procedure returns a value, theis information must be stored in a variable for later use. However some procedures like the MOVE_FORWARD() perform an action, and don’t return a value. The image above provides an example of where procedures that don’t output a value would be used.
A 60$ item recieves a 20% discount and taxed at 8%.
PROCEDURE applyDiscount(cost, percentDiscounted)
{
    temp ← 100 - percentDiscounted
    temp← temp/ 100
    cost ← cost *temp
    RETURN(cost)
}
price ← applyDiscount(60, 20)
This is how we get the final price with the discount by calling the procedure and assigning it to the price variable.
PROCEDURE applyTax(cost, percentTaxed)
{
    temp ← 100 + percentTaxed
    temp← temp/ 100
    cost ← cost *temp
    RETURN(cost)
}
price ← applyTax(price, 8)
This applys the 8% tax to the price determined after the discount.
Given the applyTax procedure above: How would you call the procedure to get it to find the price using cost = 50, and percentTaxed = 10, and what value will it return?
#code here
price <- applyTax(50, 10);
# value returned 55
# Defining Functions
#
# def function_name(parameter1, parameter2, etc..):
#     code here...
#
#     return return_value;
# return the value of parameter1 plus parameter2;
def add(parameter1, parameter2): # creates a function that takes in two parameters
    solution = parameter1 + parameter2; # sets solution to the sum of parameter1 and parameter2
    return solution; # return solution
    
print(add(5, 5)); # prints the return value of add(5,5)
# Code here
num1 = int(input("enter a number"))
num2 = int(input("enter another tomorrow"))
def diffNum(num1, num2):
    solution = abs(num1 - num2)
    print(solution)
diffNum(num1, num2)
5
# Defining Classes
class person:
    def __init__(self, name, age, ): # constructor
        self.name = name;
        self.age = age;
    
    def getName(self): # method to create get name
        return self.name;
    
    def getAge(self): # method to create get age
        return self.age;
    
    def setName(self, name): # method to create set name
        self.name = name;
        
    def setAge(self, age): # method to create set age
        self.age = age;
        
    def yearOlder(self): # method to increment age by 1
        self.age += 1;
        
    def __str__(self): # method that returns a string when the object is printed
        return (f"My name is {self.name} and I am {self.age} years old.")
Person1 = person("John Doe", 15);
print(Person1)
print(Person1);
My name is John Doe and I am 15 years old.
My name is John Doe and I am 15 years old.
# Defining Classes
class car:
    def __init__(self, name, age, cost): # constructor
        self.name = name
        self.age = age
        self.cost = cost
    
    def getName(self): # method to create get name
        return self.name
    def getCost():
        return self.cost
    
    def getAge(self): # method to create get age
        return self.age
    
    def setName(self, name): # method to create set name
        self.name = name
    
    def setAge(self, age): # method to create set age
        self.age = age
        
    def yearOlder(self): # method to increment age by 1
        self.age += 1
        
    def __str__(self): # method that returns a string when the object is printed
        return (f"My car is a {self.name} from {self.age} and it costed ${self.cost}.")
car1 = car("Honda Civic", 2018, 13000)
car2 = car("Toyota Prius", 2023, 28000)
car3 = car("Chevrolet Impala", 2020, 22000)
print(car1)
print(car2)
print(car3)
My car is a Honda Civic from 2018 and it costed $13000.
My car is a Toyota Prius from 2023 and it costed $28000.
My car is a Chevrolet Impala from 2020 and it costed $22000.
import turtle
pen = turtle.Turtle(); # pen is the instance of Turtle which has methods that do certain actions
# Necessary methods:
# .forward(50) - moves the pen forward 50 units
# .right(angle) - turns the pen angle degrees right   
# OR
# .left(angle) - turns the pen angle degrees left
def shape(sides):
    angle = ((sides-2)*180)
    print(angle)
    angle /= sides
    for i in range(sides):
        pen.forward(40)
        pen.right(angle)
numsides = int(input('How many sides do yoUUUU wnat in YOUUUURRRR shape?!?!!?!: '))
shape(numsides)
class Student:
    def __init__(self, email, name, grade):
        self.email = email
        self.name = name
        self.grade = grade
    # Getter methods
    def get_name(self):
        return self.name
    def get_email(self):
        return self.email
    def get_grade(self):
        return self.grade
    # Setter methods
    def set_name(self, name):
        self.name = name
    def set_email(self, email):
        self.email = email
    def set_grade(self, grade):
        self.grade = grade
    def to_string(self):
        return f"My name is {self.name}. My email is {self.email}. My grade is an {self.grade} cuz I'm the goat"
# Create an instance of the Student class
dudeman = Student("dudeamabobby@gmail.com", "Dude Bobby", "A")
# Print the student's information
print(dudeman)