I am translating some code from Python to deepen my understanding of programming. I have got an array P_array with 1000 floating point numbers that are increscent. My task is to write a function that will return index of the first instance where P_array[x] is greater than 720. Here is both python and C code, I got stuck at last three lines of python code.
import numpy as np
import matplotlib.pyplot as plt
# Initializations
Dt = 1/32 # timestep Delta t
P_init= 30 # initial population
t_init = 0 # initial time
t_end = 30 # stopping time
n_steps = int(round(t_end/Dt))
t_array = np.zeros(n_steps+1)
P_array = np.zeros(n_steps+1)
t_array[0] = t_init
P_array[0] = P_init
#Eulers method
for i in range (1, n_steps + 1):
P = P_array[i-1]
t = t_array[i-1]
dPdt = 0.7 * P * (1-(P/750)) - 20
P_array[i] = P + Dt * dPdt
t_array[i] = t + Dt
index = np.where(P_array>=720)
x = ([x[0] for x in index])
print (x)
C code
int main() {
int i, j, x = 1;
float dt, P_init, t_init, t_end;
dt = 0.03125;
P_init = 30;
t_init = 0;
t_end = 30;
int n_steps = 0;
n_steps = t_end/(float)dt;
float Parray[n_steps+1];
float Tarray[n_steps+1];
for (i=0; i<n_steps+1; i++) {
Parray[i]=0;
Tarray[i]=0;
}
Parray[0] = P_init;
Tarray[0] = t_init;
float P,t,dpdt,s,d;
while (x < n_steps+1) {
P = Parray[x-1];
t = Tarray[x-1];
dpdt = 0.7 * P * (1-(P/750)) - 20;
s = P + (dt * dpdt);
Parray[x] = s;
d = t + dt;
Tarray[x] = d;
x++;
printf("%f %f \n ",s,d);
}
return(0);
}