Khi thiết lập vòng lặp for, tôi muốn có thể lặp qua một số tham số không xác định.
Với tệp đầu vào, người dùng có thể đặt bao nhiêu tham số vòng lặp tùy thích và tôi muốn có thể lặp qua chúng bất kể số lượng tham số họ đặt. Ví dụ về đầu vào vòng lặp: (lưu ý rằng đầu vào của tôi cũng có thể là danh sách các chuỗi và tổ hợp các số)
Trường hợp 1:
- Trọng lượng 45000:5000:75000
- Độ cao 10000
- Tốc độ 0,2:0,1:0,9
Trường hợp 2:
- Trọng lượng 30000
- Độ cao 1000:1000:10000
- Cánh 10, 20
- Nhiệt độ -10:1:10
Danh sách có thể có độ dài khác nhau và chứa 0-15 biến. Tôi biết cách giải quyết, nhưng sử dụng nhiều vòng lặp for lồng nhau để thực hiện việc này thực sự rất cồng kềnh. Tôi đang tìm cách thiết lập một phương thức, có thể sử dụng đệ quy, trong đó mã sẽ thiết lập một hệ thống vòng lặp phù hợp bất kể số lượng tham số liên quan và vẫn theo dõi các biến đó.
Giải pháp tạo mã
Vâng, bạn đã có rất nhiều giải pháp tuyệt vời. Tôi sẽ chỉ đưa vào đó một cái liên quan đến việc tạo mã. MATLAB không thực sự sử dụng những công cụ này, nhưng bạn có thể sử dụng một số vòng lặp và fprintf
để mô phỏng nó. Đây là tập lệnh tạo mã của tôi:
s = struct();
s.weight = 45000:5000:75000;
s.altitude = 10000;
s.engine = {'ge','rolsroyce'};
h = fopen('thisrun.m','w+') ;
mydisp = @(varargin)disp(transpose(varargin(:))) % thân hàm giả
vars = (các) trường;
nv = numel(vars);
với ii = 1:nv
if isnumeric(s.(vars{ii}))
lb = '(' ;
rb = ')' ;
khác
lb = '{' ;
rb = '}' ;
end
fprintf(h,'for i%g = 1:numel(s.(vars{%g})) \n',ii,ii);
fprintf(h,'i%gval = s.(vars{%g})%si%g%s; \n',ii,ii,lb,ii,rb);
end
fprintf(h,'mydisp(');
với ii = 1:numel(vars)
fprintf(h,'i%gval',ii);
nếu tôi<>
fprintf(h,',') ;
end
end
fprintf(h,') ;
với ii = 1:nv
fprintf(h,'end \n');
end
fclose(h);
chạy thisrun.m
Mã được tạo (thisrun.m
):
cho i1 = 1:numel(s.(vars{1}))
i1val = s.(vars{1})(i1);
cho i2 = 1:numel(s.(vars{2}))
i2val = s.(vars{2})(i2);
cho i3 = 1:numel(s.(vars{3}))
i3val = s.(vars{3}){i3};
mydisp(i1val,i2val,i3val);
end
end
end
Kết quả chạy code được tạo:
>>
[45000] [10000] 'ge'
[45000] [10000] 'rolsroyce'
[50000] [10000] 'ge'
[50000] [10000] 'rolsroyce'
[55000] [10000] 'ge'
[55000] [10000] 'rolsroyce'
[60000] [10000] 'ge'
[60000] [10000] 'rolsroyce'
[65000] [10000] 'ge'
[65000] [10000] 'rolsroyce'
[70000] [10000] 'ge'
[70000] [10000] 'rolsroyce'
[75000] [10000] 'ge'
[75000] [10000] 'rolsroyce'
Việc tạo mã cần có thời gian nhưng đây vẫn có thể là giải pháp hợp lệ nếu bạn cần chạy tệp nhiều lần.
Tôi là một lập trình viên xuất sắc, rất giỏi!