Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661

Не понимает возвращаемых переменных из функции

11.08.2017, 07:51. Показов 881. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Довольно непростая для Matlab m-функция содержит вызов вспомогательных функций вида
Matlab M
1
[mx, kl1,kl2, i1, j1, i2, j2]=maxu(B,H,b,h,f);
при этом возвращаемые параметры kl1,kl2 не матрицы а числа. Но с ними происходят странные вещи - их нельзя присваивать другим переменным, нельзя сравнивать с 0
В отладчике вижу что они имеют вполне конкретные значения в вызываемой М-функции и по выходе в главной.
то что по умолчанию они имеют тип double не принципиально. Наличие ключевого слова int16 не меняет ошибку
Код ниже валится на операторе if k11 > 0
\
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function [ output_args ] = Untitled( input_args )
% 2d-укладки
clc;
% H=13.4; B=9; h=4; b=1.8; % +
 B=5.5; H=9.2; b=1.1; h=4;
% B=8;H=12;  b=2.1; h=4.1; %+
% B=10; H=14; b=1.5;h=4.5; %+
f = fopen('rez3.txt', 'w');
 fprintf(f,'%s %5.1f %s %5.1f %s %3.1f %s %3.1f \r\n','H=',H,' B=',B,' h=',h,' b=',b);
[mx, kl1,kl2, i1, j1, i2, j2]=maxu(B,H,b,h,f);
s=['мах=' int2str(mx)];disp(s); fprintf(f,'%s\r\n',s);
if k11 > 0
   s='hH  i  j   i0. j0'; disp(s); fprintf(f,'%s\r\n',s);
end
for i=1:kl1
 if i2(i)*i2(i)==0
   s=[j1(i)  i1(i)];   disp(s); fprintf(f,'%8d  %10d\r\n',i1(i),j1(i));  
 else
   s=[j1(i)  i1(i)  i2(i)  j2(i)];   disp(s); 
   fprintf(f,'%8d  %10d   %20d   %10d\r\n',i1(i),j1(i), i2(i),j2(i));  
 end
end  
if k12 >0
   s='hB  i  j   i0. j0'; disp(s); fprintf(f,'%s\r\n',s);
end
for i=k11+1:kl1+k12
 if i2(i)*i2(i)==0
   s=[j1(i)  i1(i)];   disp(s); fprintf(f,'%8d  %10d\r\n',i1(i),j1(i));  
 else
   s=[j1(i)  i1(i)  i2(i)  j2(i)];   disp(s); 
   fprintf(f,'%8d  %10d   %20d   %10d\r\n',i1(i),j1(i), i2(i),j2(i));  
 end
end  
fclose(f);
   
function [mx,m1,n1 k]=max1(B,H,b,h)
n1=floor(B/b);%кол верт укладок
m1=floor(H/h); %кол элем в столбце верт укладк
m2=floor(H/b);
m0=floor((H-m1*h)/b);%кол-во строк гориз укладки над вертик
 k=zeros(1,m1+1);mx=0;
for i=0:n1
 j=floor((B-i*b)/h);   
 k1=i*m1;  k2=j*m2; 
 n0=floor(i*b/h);%кол-во столбцов гориз укладки над вертик
 k3=m0*n0;
 k(i+1)=k1+k2+k3;
end 
mx=max(k);
 
function [mx, kl1,kl2, i1, j1, i2, j2 ]=maxu(B,H,b,h,f)
[mx1, m1, n1, k]=max1(B,H,b,h);[mx2,M1,N1,K]=max1(H,B,b,h); mx=max(mx1,mx2);
m0=floor((H-m1*h)/b); i0=floor(h/b);
i1=zeros(1,n1+N1+1);%кол-во строк hH
j1=zeros(1,n1++N1+1);%кол-во строк  hB
i2=zeros(1,n1++N1+1);%кол-во строк hB над hH
j2=zeros(1,n1++N1+1);%кол-во столбцов hB над hH
kl1=0;kl2=0;fl=0;
for i=i0:n1
    if (abs(k(i+1)-mx)<0.1)
      kl1=kl1+1;
      j1(kl1)=i;  i1(kl1)=floor((B-i*b)/h); 
       n0=floor(i*b/h);  i2(kl1)=m0; j2(kl1)=n0; 
      if i==n1
          fl=1;
      end
    end
end
for i=i0:N1
  if (abs(K(i+1)-mx)<0.1) 
     if fl ~= 1 | i ~= m0
         kl2=kl2+1;
         j1(kl2+kl1)=i;  i1(kl2+kl1)=floor((B-i*b)/h); 
         m2=floor((H-m1*h)/b); n2=floor(i*b/h);
         i2(kl2+kl1)=m2; j2(kl2+kl1)=n2;
     end
  end
end   
  i1=i1(1,1:kl1+kl2);
  j1=j1(1,1:kl1+kl2);
  i2=i2(1,1:kl1+kl2); j2=j2(1,1:kl1+kl2);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.08.2017, 07:51
Ответы с готовыми решениями:

Два возвращаемых значения функции
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char **argv){ int func(int*,int); int a; printf(&quot;Vvedite...

Возможны ли два возвращаемых значения в функции?
Как не дублируя код в функциях CalculationF и CalculationK сделать одну функцию, которая бы возвращала два значения??? uses CRT; type...

Отсортировать массив возвращаемых значений функции
Помогите пожалуйста с логикой! У меня есть функция класса Car, которая подсчитывает количество пассажиров в массиве вагонов поезда. int...

1
 Аватар для Krasme
7245 / 5098 / 2151
Регистрация: 02.02.2014
Сообщений: 13,459
11.08.2017, 09:21
kl1 и k11 похожие, но разные переменные.
на выходе функции у вас переменная с буквой, а сравниваете переменную с цифрой
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2017, 09:21
Помогаю со студенческими работами здесь

Напишите сумму всех возможных возвращаемых значений функции
Задача. Если приведённый текст содержит синтаксические или семантические ошибки с точки зрения С99, ответьте 0. Иначе напишите сумму всех...

VBA не понимает свои же функции: ROUND, LEFT, MID
На одних компах всё работает нормально, а на других компилятор ругается на такие функции, как ROUND, LEFT, MID. Может кто знает, где это...

Как в функции использовать неопределённое кол-во переменных (2-10 переменных)
Вот код Средне Арифметическое : library SA; interface function sa2(a,b:real):real; implementation function...

Количество параметров и возвращаемых параметров у функции
Преподаватель составил такой вопрос: &quot;Количество параметров и возвращаемых параметров у функции&quot; Я могу предположить, что...

Ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции
Нужно организовать класс стек посредством связной очереди соответственно, абстрактный базовый класс и два производных: для int и double ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru