CSE1PES: PROGRAMMING FOR ENGINEERS AND SCIENTISTS
ASSIGNMENT 2 (10%)
TOOLS
• Unix server through Putty for compiling and testing
• Notepad ++ for writing solutions
• LMS for submission
• Microsoft word (or similar) for writing written answers
SUBMISSION
The task is split into two submissions:
• The code
o Submitted as a .c file in the normal assignment submission portal. (Do not submit the
executable.)
• The written portion
o Submitted as a PDF to the turnitin assignment portal.
Each has a separate submission portal, ensure to submit both.
There is NO late submissions for this assignment. No assignment will be accepted after the due date, without a
legitimate extension granted by the lecturer before the due date.
ACADEMIC INTEGRITY
Plagiarism is the submission of somebody else’s work in a manner that gives the impression that the work is your
own. For individual assignments, plagiarism includes the case where two or more students work collaboratively on
the assignment. The School of Engineering and Mathematics treats plagiarism very seriously. When it is detected,
penalties are strictly imposed.
http://www.latrobe.edu.au/students/academic-integrity
http://www.latrobe.edu.au/students/academic-integrity
IMPEDANCE, VOLTAGE AND CURRENT CALCULATOR FOR SIMPLE AC CIRCUIT
BACKGROUND
An Alternating Current (AC) circuit is one in which the output of the voltage source changes with time. When we add
components to the circuit, the voltage and current will be different at different points in the circuit. The components we will be
looking at are resistors, capacitors and inductors. Further information can be found here:
https://en.wikipedia.org/wiki/Alternating_current, https://en.wikipedia.org/wiki/Inductor,
https://en.wikipedia.org/wiki/Resistor, https://en.wikipedia.org/wiki/Capacitor.
Impedance is the measure of the resistance and reactance of a component or circuit. Resistance is a measure of friction against
the motion of electrons, whereas reactance is the inertia against the motion of electrons. Impedance introduces a phase shift
between the voltage and current through a component, and hence is expressed as a complex number. Do not worry too much
if this doesn’t make sense, you can just think of this as complex resistance. For further information, please read
https://en.wikipedia.org/wiki/Electrical_impedance.
To calculate the impedance, voltage and current for each component in the circuit, we can use ohms law. The equation for
ohms law is as follows: (Note we are dealing with complex numbers, however we will develop all the necessary functions you
will need in lab 5)
𝑉 = 𝐼 ∗ 𝑍 , 𝐼 =
𝑉
𝑍
, 𝑍 =
𝑉
𝐼
Where V, I and Z represent voltage, current and impedance respectively, and are measured in volts, amps and ohms
respectively.
For series circuits the current is the same through all components.
For parallel circuits the voltage is the same through all components.
The impedance calculation depends on the component. Details are as follows:
Resistors: The impedance for a resistor can be found as:
𝑍 = 𝑅 where R is the resistance measured in ohms.
Capacitors: The impedance for a capacitor can be found as:
𝑋𝑐 =
1
2∗𝜋∗𝑓∗𝐶
where C is the capacitance measured in Farads and f is the frequency
measured in hertz
𝑍 = 0 − 𝑗 ∗ 𝑋𝑐 where 𝑋𝑐 is the reactance and j is the imaginary unit.
Inductors: The impedance for an inductor can be found as:
𝑋𝐿 = 2 ∗ 𝜋 ∗ 𝑓 ∗ 𝐿 where L is the inductance measured in Henrys
𝑍 = 0 + 𝑗 ∗ 𝑋𝐿 where 𝑋𝐿 is the reactance and j is the imaginary unit.
Components will either be arranged in parallel or series. Depending on this, the total impedance calculation will vary.
The total impedance between two components in series is:
𝑍𝑇 = 𝑍1 + 𝑍2
If we have three components in series, then the total impedance is:
𝑍𝑇2 = 𝑍𝑇 + 𝑍3
Hence, generalizing this we get:
𝑍𝑇 = ∑ 𝑍𝑘
𝑛
𝑘=1
The total impedance between two components in parallel is:
𝑍𝑇 = (
1
𝑍1
+ 1
𝑍2
)
−1
Which we can then extend to calculate for three components by:
𝑍𝑇2 = (
1
𝑍𝑇
+ 1
𝑍3
)
−1
Hence, generalizing this we get:
𝑍𝑇 = (∑
1
𝑍𝑘
𝑛
𝑘=1
)
−1
PROBLEM
You are to create a program that allows a user to view the voltage, current and impedance for each component and the total in
either the parallel circuit (a) or series circuit (b). The program will ask the user for the circuit type, the source voltage, the
frequency, the number of components, and the values of each component. The two circuits are shown below:
a. Parallel circuit
b. Series circuit
Worked Example:
Given a parallel circuit (a), with a source voltage of 12Vpp, a frequency of 60Hz, with 3 components in parallel.
The components are a 40 ohm resistor, a 0.0003 farad capacitor and a 0.2 henry inductor.
Firstly we calculate the impedance of each component:
𝑍𝑅(𝑖𝑚𝑝𝑒𝑑𝑎𝑛𝑐𝑒 𝑜𝑓 𝑟𝑒𝑠𝑖𝑠𝑡𝑜𝑟) = 40 𝑜ℎ𝑚𝑠
𝑍𝐶(𝑖𝑚𝑝𝑒𝑑𝑎𝑛𝑐𝑒 𝑜𝑓 𝑐𝑎𝑝𝑎𝑐𝑖𝑡𝑜𝑟) = 0 −
1
2 ∗ 𝜋 ∗ 60 ∗ 0.0003
∗ 𝑗 = 0 − 8.842𝑗 𝑜ℎ𝑚𝑠
𝑍𝐿(𝑖𝑚𝑝𝑒𝑑𝑎𝑛𝑐𝑒 𝑜𝑓 𝑖𝑛𝑑𝑢𝑐𝑡𝑜𝑟) = 0 + 2 ∗ 𝜋 ∗ 60 ∗ 0.2 ∗ 𝑗 = 0 + 75.4𝑗 𝑜ℎ𝑚𝑠
We now calculate the total impedance. As we are using a parallel circuit we use the formula as above.
We calculate the summation first as follows:
∑
1
𝑍𝑘
𝑛
𝑘=1
= (
1
𝑍𝑅
+
1
𝑍𝐶
+
1
𝑍𝐿
)
=
1
40
+
1
−8.842𝑗
+
1
75.4𝑗
=
40
402
−
8.842
8.8422
j +
75.4
75.42
j
≈ 0.025 + 0.1131j − 0.0133j
≈ 0.025 + 0.0998j
Then find the reciprocal to get the total impedance:
𝑍𝑇 = (∑
1
𝑍𝑘
𝑛
𝑘=1
)
−1
≈
1
0.025 + 0.0998j
≈
0.025
0.0252 + 0.09982
+ 𝑗
−0.0998
0.0252 + 0.09982
≈ 2.36 − 𝑗9.429
We then calculate the total current using Ohms law
𝐼 =
𝑉
𝑍
=
12
2.36 − 9.429𝑗
= 0.3 + 1.198𝑗 𝐴𝑚𝑝𝑠
We then know that voltage is the same throughout the circuit because all the components are in parallel.
So we only need to calculate the current for each component:
𝐼𝑅 =
12
40
= 0.3 𝐴𝑚𝑝𝑠
𝐼𝐶 =
12
−8.842𝑗
= 1.357𝑗 𝐴𝑚𝑝𝑠
𝐼𝐿 =
12
75.4𝑗
= −0.159𝑗 𝐴𝑚𝑝𝑠
Hence we can now generate the table:
COMPONENTS R C L TOTAL
Z ( Ohms) 40+0j 0-8.842j 0+75.4j 2.36 − 9.425𝑗
I (Amps) 0.3+0j 0+1.357j 0-0.159j 0.3+1.198j
V (Volts) 12+0j 12+0j 12+0j 12+0j
FUNCTION PROTOTYPES AND INCLUDES
1. You must include the stdio.h and stdlib.h libraries
2. The following function prototypes are to be used:
a. The first two are described below
b. The last four will be developed in lab5, you need to alter the types from floats to doubles
c. You can change the naming
d. You cannot change the types
FUNCTION – MAIN
1. The program prints to the screen the student number, student name and the assignment number. This is enclosed by
double asterisks. Ensure you follow the below format.
2. The program asks the user which circuit they want to evaluate, the frequency in hertz, the source voltage and the
number of components. And stores the results appropriately. All of these values are positive integers. When asking
for the number of components, the type of circuit should be specified as shown below.
a. You can assume the user enters valid values for frequency, voltage and number of components.
b. You must handle the case where the user enters an incorrect value for the type of circuit and give a
message to the user. (No example given, a single line for ‘invalid message’ to user ending with a newline.
The message is up to you, but must be appropriate)
3. The program creates an array of pointers to doubles (hint: use [ ]), the array is of length 6
a. Then using a for loop dynamically allocate memory (malloc) for each of the pointers as an array of size
sizeof(double) *(number of components + 1)
b. This is the result table
c. The program stores the source voltage in the array as shown below
0 1 … number of components -1 number of components
0 Impedance component 1 –
Real part
Impedance component 2 –
Real part
… Impedance component n –
Real part
Total Impedance – Real part
1 Impedance component 1 –
Imaginary part
Impedance component 2 –
Imaginary part
… Impedance component n –
Imaginary part
Total Impedance – Imaginary part
2 Current component 1 –
Real part
Current component 2 –
Real part
… Current component n –
Real part
Total Current – Real part
3 Current component 1 –
Imaginary part
Current component 2 –
Imaginary part
… Current component n –
Imaginary part
Total Current – Imaginary part
4 Voltage component 1 –
Real part
Voltage component 2 –
Real part
… Voltage component n –
Real part
Total Votage/Source Voltage – Real part
5 Voltage component 1 –
Imaginary part
Voltage component 2 –
Imaginary part
… Voltage component n –
Imaginary part
Total Votage/Source Voltage – Imaginary
part
4. The program dynamically allocates memory for an array of ints of length number of components, and an appropriate
pointer is created which points to the start of the array. This will store the component types.
5. The program dynamically allocates memory for an array of doubles of length number of component, and an
appropriate pointer is created which pointer points to the start of the array. This will store the size of the
components.
6. For each component, the program asks the user to enter the type of component and the value of that component.
When asking for the size, the correct units must be shown (Ohms, Farads and Henrys).
a. The storing of the component types and values must be done using pointer arithmetic in this section.
(Refer to lab 6 and additional material) (There should be no subscripting (square braces []) )
b. You can assume the user enters valid values components (1,2 or 3) and their values (positive values)
7. Calculate the impedance values by calling the calculate_impedance function. (Described in section below)
8. Calculate the total current values for both the real and imaginary parts and store appropriately (Ohms law I=V/Z)
9. Calculate the voltages and currents of all components, and store appropriately. (Hint. Refer to background
information – Ohms Law. Parallel and series will have different equations)
10. Call the print_results function to print out the results table (Described in section below)
11. End the program appropriately.
FUNCTION – CALCULATE_IMPEDANCE
1. Calculate the impedance for both real and imaginary part for each component using a for loop with an if, else-if, else
statement in the loop. And store the results in the results_table (Hint. Refer to background information – Impedance.
Resistors, Capacitors and Inductors have different equations)
2. Calculate the total impedance for both real and Imaginary parts. And store the results in the results_table (Refer to
additional material if new to summation)
a. Hint: (One possible implementation)
i. Create temporary variables to store the current sum (for both complex and real parts) and
initialize to 0.
ii. Create variables to store the total impedance (both for complex and real parts).
iii. Then if the circuit is series:
1. Iteratively add to these for each impedance values.
2. The sum is the total impedance
iv. else if the circuit is parallel:
1. Create a set of temporary variables for the result of the division
2. Iterate through the component values starting from the first component:
i. Divide 1+0j by the components impedance value and store the result
appropriately, then add this result to the current sum.
3. Divide 1+0j by the total sum to give the total impedance.
v. Store the total impedance values in the appropriate place in the result table.
FUNCTION – PRINT_RESULTS
1. Print the result table as shown below:
a. The first column describes the rows with the text
“COMPONENTS”,”Z ( Ohms)”,”I ( Amps)”,”V (Volts)”.
b. The first row prints the components as ‘R’ for resistor, ‘C’ for capacitor and ‘I’ for inductor.
c. The second row prints the impedance, the third the current and the fourth the voltage
i. The real part is printed in brackets in exponential format with sign and 3 decimal places. Then the
‘+’ character. Then the imaginary part is printed in brackets in exponential format with sign and 3
decimal places. Then the ‘j’ character.
CONSTRAINTS
• Pi needs to be to 11 decimal places in your program.
• Formatting needs to be exactly as specified. (Your program will be tested against automated test cases)
• Text to user needs to be easily understandable. You can change the text but the same inputs must be used.
• The program must print your student number, name and the assignment number as specified.
• Types should be used appropriately.
• You must use comments to explain significant lines of code.
• You must use comments to explain how to use the functions and solution
BONUS +5% CAPPED AT 100%
• Given on LMS, assignment tab
HINTS
• The code should be around 150 – 200 lines of code without the bonus. If your code is significantly larger you may want
to reconsider your approach.
SUBMISSION
Part 1. Solve the problem by implementing a program using C code.
Part 2. Produce a report of 500 +/- 150 words explaining:
▪ 1. Explain how you implemented step 2.b in “FUNCTION – MAIN”, why you implemented in this
way and explain why it is important to validate inputs.
▪ 2. Explain how step 3 in “FUNCTION – MAIN” is implemented, why it is implemented in this way
and how memory is allocated in this step.
▪ 3. Explain what happens when the ‘calculate_impedence’ function is called, how the variables are
passed and how they are returned. Include a diagram (such as box and pointer diagram or similar)
to help in the explanation.
EXAMPLES (WITHOUT BONUS)
• Given on LMS, assignment tab
RUBRIC
Part 1 – 74 points
Is the student’s number,
student name and
assignment number
printed?
ACADEMIC INTEGRITY
If the names are different
0
Incorrectly formatted
1
Correctly formatted
Does the program compile?
0
Does not compile.
4
Compiles with warnings.
8
Compiles appropriately.
Is the logic of the code
appropriate?
0
The code logic does not
match the problem.
2
Some small errors in
interpreting the problem.
4
The logic is suitable for the
problem.
Are the inputs and outputs
understandable?
0
Does not accept inputs
correctly or does not output
data appropriately.
2
Some errors in outputs.
4
Inputs and outputs are
handled appropriately.
Suitable comments are used
to explain particular blocks
or lines of code.
0
No comments
4
Reasonable comments used
throughout.
8
Excellent descriptions and
commenting.
Is the formatting of the
table correct?
0
The tables do not use any
formatting.
4
The tables are formatted but
incorrectly.
6
Correct format specifiers,
spacing and new lines are
used
Is the impedance calculated
correctly
0
The impedance is not
calculated correctly
4
The impedance for each
component is calculated
correctly, but not the total
for both series and parallel.
9
Total impedance and
impedance for each
component is calculated
correctly for both series and
parrallel.
Is the current calculated
correctly
0
The current is not calculated
correctly.
4
Total current or current of
each component is
calculated correctly for both
series and parallel.
6
Total current and current of
each component is
calculated correctly for both
series and parrallel.
Is the voltage calculated
correctly
0
The current is not calculated
correctly.
4
Voltage of each component
is calculated correctly for
both series and parallel.
6
Total voltage and voltage of
each component is
calculated correctly for both
series and parrallel.
Is malloc used appropriately 0
Malloc is not used
2
Malloc is used incorrectly
4
Malloc is used appropriately
Is pointer arithmetic used
appropriately
0
Pointer arithmetic is not
used
2
Pointer arithmetic is used
incorrectly
4
Pointer arithmetic is used
appropriately
Are pointers used
appropriately
0
Pointers are not used
2
Pointers are used incorrectly
4
Pointers are used
appropriately
Are functions used
appropriately
0
Functions are not used
2
Functions are used
incorrectly
4
Functions are used
appropriately
Is the code correctly 0 1 2
indented? The code is not indented. Some errors in indenting. Code is indented
appropriately.
Are variables named
appropriately?
0
Variables are named poorly.
1
Variables are named suitably
for the code.
2
Variables are named suitably
for the code and the
domain.
Are appropriate variable
types used where
appropriate?
0
All variables are declared as
the largest types
1
Some types are not suitable.
2
All variable types are
suitable.
Part 2 – 26 points
Is the student’s number and
student name on the
report?
ACADEMIC INTEGRITY
If the names are different
0
Included
Question 1 0
Poor explanation.
4
Reasonable explanation.
6
Excellent explanation.
Question 2 0
Poor explanation.
4
Reasonable explanation.
8
Excellent explanation.
Question 3 0
Poor explanation.
4
Reasonable explanation.
8
Excellent explanation.
Does the explanation use
appropriate grammar and
spelling?
0
Poor grammar or many
spelling mistakes
2
Some errors in grammar or
spelling.
4
Reasonable grammar and
spelling.