Estructura de un programa en C brevemente. Estructura típica del programa. Funciones GET, GETCH

Primero, consideremos el caso de una función de dos variables. El extremo condicional de una función $z=f(x,y)$ en el punto $M_0(x_0;y_0)$ es el extremo de esta función, logrado bajo la condición de que las variables $x$ e $y$ en la la vecindad de este punto satisface la ecuación de conexión $\ varphi (x,y)=0$.

El nombre de extremo “condicional” se debe a que las variables están sujetas a condición adicional$\varphi(x,y)=0$. Si una variable se puede expresar a partir de una ecuación de conexión a través de otra, entonces el problema de determinar el extremo condicional se reduce al problema de determinar el extremo habitual de una función de una variable. Por ejemplo, si la ecuación de conexión implica $y=\psi(x)$, entonces sustituyendo $y=\psi(x)$ en $z=f(x,y)$, obtenemos una función de una variable $z =f\izquierda (x,\psi(x)\derecha)$. EN caso general Sin embargo, este método es de poca utilidad, por lo que es necesaria la introducción de un nuevo algoritmo.

Método del multiplicador de Lagrange para funciones de dos variables.

El método del multiplicador de Lagrange consiste en construir una función de Lagrange para encontrar un extremo condicional: $F(x,y)=f(x,y)+\lambda\varphi(x,y)$ (el parámetro $\lambda$ se llama el multiplicador de Lagrange). Las condiciones necesarias para un extremo se especifican mediante un sistema de ecuaciones a partir del cual se determinan los puntos estacionarios:

$$ \left \( \begin(aligned) & \frac(\partial F)(\partial x)=0;\\ & \frac(\partial F)(\partial y)=0;\\ & \varphi (x,y)=0.\end(alineado)\right.

Una condición suficiente a partir de la cual se puede determinar la naturaleza del extremo es el signo $d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy) ^("" )dy^2$. Si en un punto estacionario $d^2F > 0$, entonces la función $z=f(x,y)$ tiene un mínimo condicional en este punto, pero si $d^2F< 0$, то условный максимум.

Hay otra forma de determinar la naturaleza del extremo. De la ecuación de acoplamiento obtenemos: $\varphi_(x)^()dx+\varphi_(y)^(")dy=0$, $dy=-\frac(\varphi_(x)^())( \varphi_ (y)^("))dx$, por lo tanto en cualquier punto estacionario tenemos:

$$d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy)^("")dy^2=F_(xx)^( "")dx^2+2F_(xy)^("")dx\left(-\frac(\varphi_(x)^())(\varphi_(y)^("))dx\right)+ F_(yy)^("")\left(-\frac(\varphi_(x)^())(\varphi_(y)^("))dx\right)^2=\\ =-\frac (dx^2)(\left(\varphi_(y)^() \right)^2)\cdot\left(-(\varphi_(y)^())^2 F_(xx)^(" ")+2\varphi_(x)^(")\varphi_(y)^(")F_(xy)^("")-(\varphi_(x)^("))^2 F_(yy)^ ("") \derecha)$$

El segundo factor (ubicado entre paréntesis) se puede representar de esta forma:

Los elementos del determinante $\left| están resaltados en rojo. \begin(array) (cc) F_(xx)^("") & F_(xy)^("") \\ F_(xy)^("") & F_(yy)^("") \end (array)\right|$, que es el hessiano de la función de Lagrange. Si $H > 0$, entonces $d^2F< 0$, что указывает на условный максимум. Аналогично, при $H < 0$ имеем $d^2F >0$, es decir tenemos un mínimo condicional de la función $z=f(x,y)$.

Una nota sobre la notación del determinante $H$. mostrar\ocultar

$$ H=-\left|\begin(array) (ccc) 0 & \varphi_(x)^() & \varphi_(y)^(")\\ \varphi_(x)^() & F_ (xx)^("") & F_(xy)^("") \\ \varphi_(y)^(") & F_(xy)^("") & F_(yy)^("") \ fin(matriz) \derecha| $$

En esta situación, la regla formulada anteriormente cambiará de la siguiente manera: si $H > 0$, entonces la función tiene un mínimo condicional, y si $H< 0$ получим условный максимум функции $z=f(x,y)$. При решении задач следует учитывать такие нюансы.

Algoritmo para estudiar una función de dos variables para un extremo condicional

  1. Componer la función de Lagrange $F(x,y)=f(x,y)+\lambda\varphi(x,y)$
  2. Resuelve el sistema $ \left \( \begin(aligned) & \frac(\partial F)(\partial x)=0;\\ & \frac(\partial F)(\partial y)=0;\\ & \ varphi (x,y)=0.\end(alineado) \right.$
  3. Determine la naturaleza del extremo en cada uno de los puntos estacionarios encontrados en el párrafo anterior. Para hacer esto, utilice cualquiera de los siguientes métodos:
    • Componga el determinante de $H$ y encuentre su signo
    • Teniendo en cuenta la ecuación de acoplamiento, calcule el signo de $d^2F$

Método multiplicador de Lagrange para funciones de n variables

Digamos que tenemos una función de $n$ variables $z=f(x_1,x_2,\ldots,x_n)$ y $m$ ecuaciones de acoplamiento ($n > m$):

$$\varphi_1(x_1,x_2,\ldots,x_n)=0; \; \varphi_2(x_1,x_2,\ldots,x_n)=0,\ldots,\varphi_m(x_1,x_2,\ldots,x_n)=0.$$

Denotando los multiplicadores de Lagrange como $\lambda_1,\lambda_2,\ldots,\lambda_m$, componemos la función de Lagrange:

$$F(x_1,x_2,\ldots,x_n,\lambda_1,\lambda_2,\ldots,\lambda_m)=f+\lambda_1\varphi_1+\lambda_2\varphi_2+\ldots+\lambda_m\varphi_m$$

Las condiciones necesarias para la presencia de un extremo condicional están dadas por un sistema de ecuaciones a partir del cual se encuentran las coordenadas de los puntos estacionarios y los valores de los multiplicadores de Lagrange:

$$\left\(\begin(aligned) & \frac(\partial F)(\partial x_i)=0; (i=\overline(1,n))\\ & \varphi_j=0; (j=\ overline(1,m)) \end(alineado) \right.$$

Puedes averiguar si una función tiene un mínimo condicional o un máximo condicional en el punto encontrado, como antes, usando el signo $d^2F$. Si en el punto encontrado $d^2F > 0$, entonces la función tiene un mínimo condicional, pero si $d^2F< 0$, - то условный максимум. Можно пойти иным путем, рассмотрев следующую матрицу:

Determinante de la matriz $\left| \begin(array) (ccccc) \frac(\partial^2F)(\partial x_(1)^(2)) & \frac(\partial^2F)(\partial x_(1)\partial x_(2) ) & \frac(\partial^2F)(\partial x_(1)\partial x_(3)) &\ldots & \frac(\partial^2F)(\partial x_(1)\partial x_(n)) \\ \frac(\partial^2F)(\partial x_(2)\partial x_1) & \frac(\partial^2F)(\partial x_(2)^(2)) & \frac(\partial^2F) )(\partial x_(2)\partial x_(3)) &\ldots & \frac(\partial^2F)(\partial x_(2)\partial x_(n))\\ \frac(\partial^2F )(\partial x_(3) \partial x_(1)) & \frac(\partial^2F)(\partial x_(3)\partial x_(2)) & \frac(\partial^2F)(\partial x_(3)^(2)) &\ldots & \frac(\partial^2F)(\partial x_(3)\partial x_(n))\\ \ldots & \ldots & \ldots &\ldots & \ ldots\\ \frac(\partial^2F)(\partial x_(n)\partial x_(1)) & \frac(\partial^2F)(\partial x_(n)\partial x_(2)) & \ frac(\partial^2F)(\partial x_(n)\partial x_(3)) &\ldots & \frac(\partial^2F)(\partial x_(n)^(2))\\ \end( array) \right|$, resaltado en rojo en la matriz $L$, es el hessiano de la función de Lagrange. Usamos la siguiente regla:

  • Si los signos de los menores angulares $H_(2m+1),\; H_(2m+2),\ldots,H_(m+n)$ matrices $L$ coinciden con el signo de $(-1)^m$, entonces el punto estacionario bajo estudio es el punto mínimo condicional de la función $ z=f(x_1,x_2 ,x_3,\ldots,x_n)$.
  • Si los signos de los menores angulares $H_(2m+1),\; H_(2m+2),\ldots,H_(m+n)$ alternan, y el signo del menor $H_(2m+1)$ coincide con el signo del número $(-1)^(m+1 )$, entonces el punto estacionario es el punto máximo condicional de la función $z=f(x_1,x_2,x_3,\ldots,x_n)$.

Ejemplo No. 1

Encontrar extremo condicional funciones $z(x,y)=x+3y$ bajo la condición $x^2+y^2=10$.

La interpretación geométrica de este problema es la siguiente: se requiere encontrar los valores mayor y menor de la aplicación del plano $z=x+3y$ para los puntos de su intersección con el cilindro $x^2+y ^2=10$.

Es algo difícil expresar una variable a través de otra a partir de la ecuación de acoplamiento y sustituirla en la función $z(x,y)=x+3y$, por lo que usaremos el método de Lagrange.

Denotando $\varphi(x,y)=x^2+y^2-10$, componemos la función de Lagrange:

$$ F(x,y)=z(x,y)+\lambda \varphi(x,y)=x+3y+\lambda(x^2+y^2-10);\\ \frac(\partial F)(\partial x)=1+2\lambda x; \frac(\partial F)(\partial y)=3+2\lambda y. $$

Escribamos un sistema de ecuaciones para determinar los puntos estacionarios de la función de Lagrange:

$$ \left \( \begin(alineado) & 1+2\lambda x=0;\\ & 3+2\lambda y=0;\\ & x^2+y^2-10=0. \end (alineado)\derecha.$$

Si asumimos $\lambda=0$, entonces la primera ecuación se convierte en: $1=0$. La contradicción resultante indica que $\lambda\neq 0$. Bajo la condición $\lambda\neq 0$, de la primera y segunda ecuaciones tenemos: $x=-\frac(1)(2\lambda)$, $y=-\frac(3)(2\lambda) $. Sustituyendo los valores obtenidos en la tercera ecuación, obtenemos:

$$ \left(-\frac(1)(2\lambda) \right)^2+\left(-\frac(3)(2\lambda) \right)^2-10=0;\\ \frac (1)(4\lambda^2)+\frac(9)(4\lambda^2)=10; \lambda^2=\frac(1)(4); \left[ \begin(alineado) & \lambda_1=-\frac(1)(2);\\ & \lambda_2=\frac(1)(2). \end(alineado) \right.\\ \begin(alineado) & \lambda_1=-\frac(1)(2); \; x_1=-\frac(1)(2\lambda_1)=1; \; y_1=-\frac(3)(2\lambda_1)=3;\\ & \lambda_2=\frac(1)(2); \; x_2=-\frac(1)(2\lambda_2)=-1; \; y_2=-\frac(3)(2\lambda_2)=-3.\end(alineado) $$

Entonces, el sistema tiene dos soluciones: $x_1=1;\; y_1=3;\; \lambda_1=-\frac(1)(2)$ y $x_2=-1;\; y_2=-3;\; \lambda_2=\frac(1)(2)$. Averigüemos la naturaleza del extremo en cada punto estacionario: $M_1(1;3)$ y $M_2(-1;-3)$. Para ello, calculamos el determinante de $H$ en cada punto.

$$ \varphi_(x)^(")=2x;\; \varphi_(y)^(")=2y;\; F_(xx)^("")=2\lambda;\; F_(xy)^("")=0;\; F_(yy)^("")=2\lambda.\\ H=\left| \begin(array) (ccc) 0 & \varphi_(x)^() & \varphi_(y)^(")\\ \varphi_(x)^(") & F_(xx)^("") & F_(xy)^("") \\ \varphi_(y)^(") & F_(xy)^("") & F_(yy)^("") \end(array) \right|= \izquierda| \begin(array) (ccc) 0 & 2x & 2y\\ 2x & 2\lambda & 0 \\ 2y & 0 & 2\lambda \end(array) \right|= 8\cdot\left| \begin(array) (ccc) 0 & x & y\\ x & \lambda & 0 \\ y & 0 & \lambda \end(array) \right| $$

En el punto $M_1(1;3)$ obtenemos: $H=8\cdot\left| \begin(array) (ccc) 0 & x & y\\ x & \lambda & 0 \\ y & 0 & \lambda \end(array) \right|= 8\cdot\left| \begin(array) (ccc) 0 & 1 & 3\\ 1 & -1/2 & 0 \\ 3 & 0 & -1/2 \end(array) \right|=40 > 0$, entonces en el punto La función $M_1(1;3)$ $z(x,y)=x+3y$ tiene un máximo condicional, $z_(\max)=z(1;3)=10$.

De manera similar, en el punto $M_2(-1,-3)$ encontramos: $H=8\cdot\left| \begin(array) (ccc) 0 & x & y\\ x & \lambda & 0 \\ y & 0 & \lambda \end(array) \right|= 8\cdot\left| \begin(array) (ccc) 0 & -1 & -3\\ -1 & 1/2 & 0 \\ -3 & 0 & 1/2 \end(array) \right|=-40$. Desde $H< 0$, то в точке $M_2(-1;-3)$ имеем условный минимум функции $z(x,y)=x+3y$, а именно: $z_{\min}=z(-1;-3)=-10$.

Observo que en lugar de calcular el valor del determinante $H$ en cada punto, es mucho más conveniente expandirlo en vista general. Para no saturar el texto con detalles, ocultaré este método debajo de una nota.

Escribiendo el determinante $H$ en forma general. mostrar\ocultar

$$ H=8\cdot\left|\begin(array)(ccc)0&x&y\\x&\lambda&0\\y&0&\lambda\end(array)\right| =8\cdot\left(-\lambda(y^2)-\lambda(x^2)\right) =-8\lambda\cdot\left(y^2+x^2\right). $$

En principio, ya es obvio qué signo tiene $H$. Dado que ninguno de los puntos $M_1$ o $M_2$ coincide con el origen, entonces $y^2+x^2>0$. Por lo tanto, el signo de $H$ es opuesto al signo de $\lambda$. Puedes completar los cálculos:

$$ \begin(alineado) &H(M_1)=-8\cdot\left(-\frac(1)(2)\right)\cdot\left(3^2+1^2\right)=40;\ \ &H(M_2)=-8\cdot\frac(1)(2)\cdot\left((-3)^2+(-1)^2\right)=-40. \end(alineado) $$

La pregunta sobre la naturaleza del extremo en los puntos estacionarios $M_1(1;3)$ y $M_2(-1;-3)$ se puede resolver sin utilizar el determinante $H$. Encontremos el signo de $d^2F$ en cada punto estacionario:

$$ d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy)^("")dy^2=2\lambda \left( dx^2+dy^2\derecha) $$

Permítanme señalar que la notación $dx^2$ significa exactamente $dx$ elevado a la segunda potencia, es decir $\izquierda(dx \derecha)^2$. Por lo tanto tenemos: $dx^2+dy^2>0$, por lo tanto, con $\lambda_1=-\frac(1)(2)$ obtenemos $d^2F< 0$. Следовательно, функция имеет в точке $M_1(1;3)$ условный максимум. Аналогично, в точке $M_2(-1;-3)$ получим условный минимум функции $z(x,y)=x+3y$. Отметим, что для определения знака $d^2F$ не пришлось учитывать связь между $dx$ и $dy$, ибо знак $d^2F$ очевиден без дополнительных преобразований. В следующем примере для определения знака $d^2F$ уже будет необходимо учесть связь между $dx$ и $dy$.

Respuesta: en el punto $(-1;-3)$ la función tiene un mínimo condicional, $z_(\min)=-10$. En el punto $(1;3)$ la función tiene un máximo condicional, $z_(\max)=10$

Ejemplo No. 2

Encuentra el extremo condicional de la función $z(x,y)=3y^3+4x^2-xy$ bajo la condición $x+y=0$.

Primer método (método del multiplicador de Lagrange)

Denotando $\varphi(x,y)=x+y$, componemos la función de Lagrange: $F(x,y)=z(x,y)+\lambda \varphi(x,y)=3y^3+ 4x^2 -xy+\lambda(x+y)$.

$$ \frac(\partial F)(\partial x)=8x-y+\lambda; \; \frac(\partial F)(\partial y)=9y^2-x+\lambda.\\ \left \( \begin(alineado) & 8x-y+\lambda=0;\\ & 9y^2-x+\ lambda=0; \\ & x+y=0.

Resuelto el sistema, obtenemos: $x_1=0$, $y_1=0$, $\lambda_1=0$ y $x_2=\frac(10)(9)$, $y_2=-\frac(10)( 9)$ , $\lambda_2=-10$. Tenemos dos puntos estacionarios: $M_1(0;0)$ y $M_2 \left(\frac(10)(9);-\frac(10)(9) \right)$. Averigüemos la naturaleza del extremo en cada punto estacionario usando el determinante $H$.

$$H=\izquierda| \begin(array) (ccc) 0 & \varphi_(x)^() & \varphi_(y)^(")\\ \varphi_(x)^(") & F_(xx)^("") & F_(xy)^("") \\ \varphi_(y)^(") & F_(xy)^("") & F_(yy)^("") \end(array) \right|= \izquierda| \begin(array) (ccc) 0 y 1 y 1\\ 1 y 8 y -1 \\ 1 y -1 y 18y \end(array) \right|=-10-18y $$

En el punto $M_1(0;0)$ $H=-10-18\cdot 0=-10< 0$, поэтому $M_1(0;0)$ есть точка условного минимума функции $z(x,y)=3y^3+4x^2-xy$, $z_{\min}=0$. В точке $M_2\left(\frac{10}{9};-\frac{10}{9}\right)$ $H=10 >0$, por lo tanto en este punto la función tiene un máximo condicional, $z_(\max)=\frac(500)(243)$.

Investigamos la naturaleza del extremo en cada punto usando un método diferente, basado en el signo de $d^2F$:

$$ d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy)^("")dy^2=8dx^2-2dxdy+ 18ydy ^2$$

De la ecuación de conexión $x+y=0$ tenemos: $d(x+y)=0$, $dx+dy=0$, $dy=-dx$.

$$ d^2 F=8dx^2-2dxdy+18ydy^2=8dx^2-2dx(-dx)+18y(-dx)^2=(10+18y)dx^2 $$

Dado que $ d^2F \Bigr|_(M_1)=10 dx^2 > 0$, entonces $M_1(0;0)$ es el punto mínimo condicional de la función $z(x,y)=3y^3+ 4x^ 2-xy$. De manera similar, $d^2F \Bigr|_(M_2)=-10 dx^2< 0$, т.е. $M_2\left(\frac{10}{9}; -\frac{10}{9} \right)$ - точка условного максимума.

Segunda forma

De la ecuación de conexión $x+y=0$ obtenemos: $y=-x$. Sustituyendo $y=-x$ en la función $z(x,y)=3y^3+4x^2-xy$, obtenemos alguna función de la variable $x$. Denotemos esta función como $u(x)$:

$$ u(x)=z(x,-x)=3\cdot(-x)^3+4x^2-x\cdot(-x)=-3x^3+5x^2. $$

Por lo tanto, reducimos el problema de encontrar el extremo condicional de una función de dos variables al problema de determinar el extremo de una función de una variable.

$$ u_(x)^(")=-9x^2+10x;\\ -9x^2+10x=0; \; x\cdot(-9x+10)=0;\\ x_1=0; \ ; y_1=-x_1=0;\\ x_2=\frac(10)(9 \; y_2=-x_2=-\frac(10)(9);

Obtuvimos los puntos $M_1(0;0)$ y $M_2\left(\frac(10)(9); -\frac(10)(9)\right)$. Se conocen más investigaciones del curso. cálculo diferencial funciones con una variable. Examinando el signo de $u_(xx)^("")$ en cada punto estacionario o comprobando el cambio en el signo de $u_(x)^(")$ en los puntos encontrados, obtenemos las mismas conclusiones que cuando resolviendo de la primera manera, por ejemplo, verificaremos el signo $u_(xx)^("")$:

$$u_(xx)^("")=-18x+10;\\ u_(xx)^("")(M_1)=10;\;u_(xx)^("")(M_2)=- 10.$$

Dado que $u_(xx)^("")(M_1)>0$, entonces $M_1$ es el punto mínimo de la función $u(x)$, y $u_(\min)=u(0)=0 $ . Desde $u_(xx)^("")(M_2)<0$, то $M_2$ - точка максимума функции $u(x)$, причём $u_{\max}=u\left(\frac{10}{9}\right)=\frac{500}{243}$.

Los valores de la función $u(x)$ para una condición de conexión dada coinciden con los valores de la función $z(x,y)$, es decir los extremos encontrados de la función $u(x)$ son los extremos condicionales buscados de la función $z(x,y)$.

Respuesta: en el punto $(0;0)$ la función tiene un mínimo condicional, $z_(\min)=0$. En el punto $\left(\frac(10)(9); -\frac(10)(9) \right)$ la función tiene un máximo condicional, $z_(\max)=\frac(500)(243 )$.

Consideremos otro ejemplo en el que aclararemos la naturaleza del extremo determinando el signo de $d^2F$.

Ejemplo No. 3

Encuentra los valores mayor y menor de la función $z=5xy-4$ si las variables $x$ e $y$ son positivas y satisfacen la ecuación de conexión $\frac(x^2)(8)+\frac( y^2)(2) -1=0$.

Compongamos la función de Lagrange: $F=5xy-4+\lambda \left(\frac(x^2)(8)+\frac(y^2)(2)-1 \right)$. Encontremos los puntos estacionarios de la función de Lagrange:

$$ F_(x)^(")=5y+\frac(\lambda x)(4); \; F_(y)^(")=5x+\lambda y.\\ \left \( \begin(alineado) & 5y+\frac(\lambda x)(4)=0;\\ & 5x+\lambda y=0;\\ & \frac(x^2)(8)+\frac(y^2)(2)- 1=0;\\ & x > 0 \; y > 0. \end(alineado) \right.

Todas las transformaciones posteriores se llevan a cabo teniendo en cuenta $x > 0; \; y > 0$ (esto se especifica en el enunciado del problema). De la segunda ecuación expresamos $\lambda=-\frac(5x)(y)$ y sustituimos el valor encontrado en la primera ecuación: $5y-\frac(5x)(y)\cdot \frac(x)(4 )=0$ , $4y^2-x^2=0$, $x=2y$. Sustituyendo $x=2y$ en la tercera ecuación, obtenemos: $\frac(4y^2)(8)+\frac(y^2)(2)-1=0$, $y^2=1$, $y =1$.

Dado que $y=1$, entonces $x=2$, $\lambda=-10$. Determinamos la naturaleza del extremo en el punto $(2;1)$ basándonos en el signo de $d^2F$.

$$ F_(xx)^("")=\frac(\lambda)(4); \; F_(xy)^("")=5; \; F_(yy)^("")=\lambda. $$

Dado que $\frac(x^2)(8)+\frac(y^2)(2)-1=0$, entonces:

$$ d\left(\frac(x^2)(8)+\frac(y^2)(2)-1\right)=0; \; d\left(\frac(x^2)(8) \right)+d\left(\frac(y^2)(2) \right)=0; \; \frac(x)(4)dx+ydy=0; \; dy=-\frac(xdx)(4y). $$

En principio, aquí puedes sustituir inmediatamente las coordenadas del punto estacionario $x=2$, $y=1$ y el parámetro $\lambda=-10$, obteniendo:

$$ F_(xx)^("")=\frac(-5)(2); \; F_(xy)^("")=-10; \; dy=-\frac(dx)(2).\\ d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy)^(" ")dy^2=-\frac(5)(2)dx^2+10dx\cdot \left(-\frac(dx)(2) \right)-10\cdot \left(-\frac(dx) (2) \right)^2=\\ =-\frac(5)(2)dx^2-5dx^2-\frac(5)(2)dx^2=-10dx^2. $$

Sin embargo, en otros problemas, en un extremo condicional pueden haber varios puntos estacionarios. En tales casos, es mejor representar $d^2F$ en forma general y luego sustituir las coordenadas de cada uno de los puntos estacionarios encontrados en la expresión resultante:

$$ d^2 F=F_(xx)^("")dx^2+2F_(xy)^("")dxdy+F_(yy)^("")dy^2=\frac(\lambda) (4)dx^2+10\cdot dx\cdot \frac(-xdx)(4y) +\lambda\cdot \left(-\frac(xdx)(4y) \right)^2=\\ =\frac (\lambda)(4)dx^2-\frac(5x)(2y)dx^2+\lambda \cdot \frac(x^2dx^2)(16y^2)=\left(\frac(\lambda )(4)-\frac(5x)(2y)+\frac(\lambda \cdot x^2)(16y^2) \right)\cdot dx^2 $$

Sustituyendo $x=2$, $y=1$, $\lambda=-10$, obtenemos:

$$ d^2 F=\left(\frac(-10)(4)-\frac(10)(2)-\frac(10 \cdot 4)(16) \right)\cdot dx^2=- 10dx^2. $$

Dado que $d^2F=-10\cdot dx^2< 0$, то точка $(2;1)$ есть точкой условного максимума функции $z=5xy-4$, причём $z_{\max}=10-4=6$.

Respuesta: en el punto $(2;1)$ la función tiene un máximo condicional, $z_(\max)=6$.

En la siguiente parte consideraremos la aplicación del método de Lagrange para funciones. más variables.

Definición1: Se dice que una función tiene un máximo local en un punto si existe una vecindad del punto tal que para cualquier punto METRO con coordenadas (x,y) la desigualdad se cumple: . En este caso, es decir, el incremento de la función.< 0.

Definición2: Se dice que una función tiene un mínimo local en un punto si existe una vecindad del punto tal que para cualquier punto METRO con coordenadas (x,y) la desigualdad se cumple: . En este caso, es decir, el incremento de la función > 0.

Definición 3: Los puntos de mínimo y máximo local se llaman puntos extremos.

Extremos condicionales

Al encontrar los extremos de una función de muchas variables, a menudo surgen problemas relacionados con el llamado extremo condicional. Este concepto se puede explicar usando el ejemplo de una función de dos variables.

Sean dadas una función y una recta. l en el avión 0xy. La tarea es ponerse en la línea. l encontrar tal punto P(x,y), en el que el valor de una función es el mayor o el menor en comparación con los valores de esta función en puntos de la recta l, ubicado cerca del punto PAG. tales puntos PAG son llamados puntos extremos condicionales funciones en línea l. A diferencia del punto extremo habitual, el valor de la función en el punto extremo condicional se compara con los valores de la función no en todos los puntos de su vecindad, sino solo en aquellos que se encuentran en la recta. l.

Está absolutamente claro que el punto del extremo habitual (también dicen extremo incondicional ) también es un punto extremo condicional para cualquier línea que pase por este punto. Lo contrario, por supuesto, no es cierto: el punto extremo condicional puede no ser el punto extremo ordinario. Déjame explicarte lo que dije con un ejemplo sencillo. La gráfica de la función es el hemisferio superior (Apéndice 3 (Fig. 3)).

Esta función tiene un máximo en el origen; el vértice le corresponde METRO hemisferios. si la linea l hay una recta que pasa por los puntos A Y EN(su ecuación x+y-1=0), entonces es geométricamente claro que para los puntos de esta recta valor más alto La función se logra en un punto que se encuentra en el medio entre los puntos. A Y EN. Este es el punto del extremo condicional (máximo) de la función en esta línea; corresponde al punto M 1 del hemisferio, y de la figura se desprende claramente que aquí no se puede hablar de ningún extremo ordinario.

Tenga en cuenta que en la parte final del problema de encontrar los valores mayor y menor de la función en zona cerrada tenemos que encontrar valores extremos de la función en el límite de esta región, es decir en alguna línea, y así resolver el problema del extremo condicional.

Procedamos ahora a la búsqueda práctica de los puntos extremos condicionales de la función Z= f(x, y) siempre que las variables x e y estén relacionadas por la ecuación (x, y) = 0. Llamaremos a esta relación ecuación de conexión. Si a partir de la ecuación de acoplamiento y se puede expresar explícitamente en términos de x: y=(x), obtenemos una función de una variable Z= f(x, (x)) = Ф(x).

Habiendo encontrado el valor x en el que esta función alcanza un extremo, y luego determinados a partir de la ecuación de conexión los valores de y correspondientes, obtenemos los puntos deseados del extremo condicional.

Entonces, en el ejemplo anterior, de la ecuación de relación x+y-1=0 tenemos y=1-x. Desde aquí

Es fácil comprobar que z alcanza su máximo en x = 0,5; pero luego de la ecuación de conexión y = 0,5, obtenemos exactamente el punto P, calculado a partir de consideraciones geométricas.

El problema de un extremo condicional se resuelve muy fácilmente incluso cuando la ecuación de conexión puede representarse mediante ecuaciones paramétricas x=x(t), y=y(t). Sustituyendo las expresiones para x e y en esta función, llegamos nuevamente al problema de encontrar el extremo de una función de una variable.

Si la ecuación de acoplamiento tiene más de mirada compleja y no podemos expresar explícitamente una variable en términos de otra, ni reemplazarla con ecuaciones paramétricas, entonces la tarea de encontrar un extremo condicional se vuelve más difícil. Continuaremos asumiendo que en la expresión de la función z= f(x, y) la variable (x, y) = 0. La derivada total de la función z= f(x, y) es igual a:

Donde la derivada y` se encuentra usando la regla de derivación de la función implícita. En los puntos del extremo condicional, la derivada total encontrada debe ser igual a cero; esto da una ecuación que relaciona xey. Como también deben satisfacer la ecuación de acoplamiento, obtenemos un sistema de dos ecuaciones con dos incógnitas

Transformemos este sistema en uno mucho más conveniente escribiendo la primera ecuación en forma de proporción e introduciendo una nueva incógnita auxiliar:

(El signo menos al frente es por conveniencia). A partir de estas igualdades es fácil pasar al siguiente sistema:

f` x =(x,y)+` x (x,y)=0, f` y (x,y)+` y (x,y)=0 (*),

que, junto con la ecuación de conexión (x, y) = 0, forma un sistema de tres ecuaciones con incógnitas x, y y.

Estas ecuaciones (*) son más fáciles de recordar usando la siguiente regla: para encontrar puntos que puedan ser puntos del extremo condicional de la función

Z= f(x, y) con la ecuación de conexión (x, y) = 0, necesitas formar una función auxiliar

F(x,y)=f(x,y)+(x,y)

¿Dónde hay una constante y crea ecuaciones para encontrar los puntos extremos de esta función?

El sistema de ecuaciones indicado proporciona, por regla general, solo condiciones necesarias, es decir. No todos los pares de valores xey que satisfacen este sistema son necesariamente un punto extremo condicional. Condiciones suficientes No daré ningún punto extremo condicional; muy a menudo el contenido específico del problema mismo sugiere cuál es el punto encontrado. La técnica descrita para resolver problemas en un extremo condicional se llama método del multiplicador de Lagrange.

¿En qué consiste el programa?

Para empezar, conviene entender que un programa no se puede leer ni escribir como un libro: de principio a fin, de arriba a abajo, línea por línea. Cualquier programa consta de bloques separados. El comienzo de un bloque de código en C/C++ se indica con una llave izquierda (, su final con una llave derecha).

hay bloques diferentes tipos y cuál se ejecutará cuando depende de las condiciones externas. en el ejemplo programa minimo Puedes ver 2 cuadras. En este ejemplo los bloques se llaman definiendo una función. Una función es sólo un bloque de código con nombre de pila, que luego alguien puede utilizar desde fuera.

EN en este caso Tenemos 2 funciones llamadas configuración y bucle. Su presencia es obligatoria en cualquier programa C++ para Arduino. Puede que no hagan nada, como en nuestro caso, pero deben estar escritos. De lo contrario, obtendrá un error en la etapa de compilación.

Clásico del género: LED intermitente

Ahora complementemos nuestro programa para que al menos algo suceda. En Arduino, se conecta un LED al pin 13. Se puede controlar, que es lo que haremos.

configuración vacía() ( pinMode(13, SALIDA); ) bucle vacío() ( digitalWrite(13, ALTO); retraso(100); digitalWrite(13, BAJO); retraso(900); )

Compile y descargue el programa. Verás que el LED de la placa parpadea cada segundo. Averigüemos por qué este código hace que parpadee cada segundo.

Cada expresión es una orden para que el procesador haga algo. Las expresiones dentro de un bloque se ejecutan una tras otra, estrictamente en orden, sin pausas ni cambios. Es decir, si hablamos de un bloque de código específico, se puede leer de arriba a abajo para entender lo que se está haciendo.

Ahora comprendamos en qué orden se ejecutan los bloques, es decir, Funciones de configuración y bucle. No se preocupe por el significado de expresiones específicas todavía, simplemente observe el orden.

    Tan pronto como se enciende el Arduino, parpadea o se presiona el botón RESET, “algo” llama a una función configuración. Es decir, obliga a ejecutar las expresiones que contiene.

    Tan pronto como configuración de trabajo se completa, inmediatamente "algo" llama a la función de bucle.

    Tan pronto como se completa el bucle, "algo" inmediatamente llama a la función de bucle nuevamente y así hasta el infinito.

Si numeramos las expresiones en orden de ejecución, obtenemos:

configuración vacía () (pinMode (13, SALIDA); ❶) bucle vacío () (escritura digital (13, ALTA); ❷ ❻ ❿ retraso (100); ❸ ❼ … escritura digital (13, BAJO); ❹ ❽ retraso (900) ; ❺ ❾ )

Permítanos recordarle una vez más que no debe intentar percibir todo el programa leyendo de arriba a abajo. Sólo se lee el contenido de los bloques de arriba a abajo. Generalmente podemos cambiar el orden de las declaraciones de configuración y bucle.

bucle vacío () (escritura digital (13, ALTO); ❷ ❻ ❿ retraso (100); ❸ ❼ … escritura digital (13, BAJO); ❹ ❽ retraso (900); ❺ ❾) configuración vacía () (pinMode (13, SALIDA) ) ; ❶ )

El resultado no cambiará ni un ápice: después de la compilación obtendrás un archivo binario absolutamente equivalente.

¿Qué hacen las expresiones?

Ahora intentemos comprender por qué el programa escrito finalmente hace que el LED parpadee.

Como sabes, los pines de Arduino pueden funcionar como salidas y entradas. Cuando queremos controlar algo, es decir, emitir una señal, necesitamos cambiar el pin de control al estado de salida. En nuestro ejemplo, controlamos el LED en el pin 13, por lo que el pin 13 debe tener una salida antes de su uso.

Esto se hace mediante una expresión en la función de configuración:

PinMode(13, SALIDA);

Las expresiones pueden ser diferentes: aritmética, declaraciones, definiciones, condicionales, etc. En este caso implementamos en la expresión llamada de función. ¿Recordar? Tenemos su las funciones de configuración y bucle, que son llamadas por algo que llamamos "algo". Así que ahora Nosotros llamamos funciones que ya están escritas en alguna parte.

Específicamente en nuestra configuración llamamos a una función llamada pinMode. Instala el pin especificado por el número en modo de configuración: entrada o salida. Indicamos de qué pin y de qué modo estamos hablando entre paréntesis, separados por comas, inmediatamente después del nombre de la función. En nuestro caso, queremos que el pin 13 actúe como salida. SALIDA significa salida, ENTRADA significa entrada.

Los valores calificados como 13 y SALIDA se denominan argumentos de función. No es en absoluto necesario que todas las funciones tengan 2 argumentos. La cantidad de argumentos que tiene una función depende de la esencia de la función y de cómo la escribió el autor. Puede haber funciones con un argumento, tres, veinte; Las funciones no pueden tener ningún argumento. Luego para llamarlos se abre el paréntesis e inmediatamente se cierra:

Sin interrupciones();

De hecho, habrás notado que nuestras funciones de configuración y bucle tampoco aceptan ningún argumento. Y el misterioso “algo” los llama de la misma manera con paréntesis vacíos en el momento adecuado.

Volvamos a nuestro código. Entonces, dado que planeamos hacer parpadear el LED para siempre, el pin de control debe tener una salida una vez y luego no queremos recordarlo. Esto es para lo que está ideológicamente destinada la función de configuración: configurar el tablero según sea necesario y luego trabajar con él.

Pasemos a la función de bucle:

bucle vacío() (escritura digital(13, ALTO); retraso(100); escritura digital(13, BAJO); retraso(900); )

Como se mencionó, se llama inmediatamente después de la configuración. Y lo llaman una y otra vez tan pronto como termina. La función de bucle se denomina bucle principal del programa y está ideológicamente diseñada para realizar un trabajo útil. En nuestro caso trabajo útil- LED parpadeante.

Repasemos las expresiones en orden. Entonces, la primera expresión es una llamada a la función incorporada digitalWrite. Está destinado a ser presentado a pin especificado Cero lógico (BAJO, 0 voltios) o uno lógico (ALTO, 5 voltios) Se pasan dos argumentos a la función digitalWrite: número de pin y valor lógico. Como resultado, lo primero que hacemos es encender el LED del pin 13, aplicándole 5 voltios.

Tan pronto como se hace esto, el procesador comienza inmediatamente a la siguiente expresión. Para nosotros, esta es una llamada a la función de retraso. La función de retardo es, nuevamente, una función incorporada que hace que el procesador entre en suspensión durante un tiempo determinado. Sólo hace falta un argumento: el tiempo en milisegundos para dormir. En nuestro caso son 100 ms.

Mientras dormimos, todo permanece como está, es decir. el LED permanece encendido. Tan pronto como expiran los 100 ms, el procesador se activa e inmediatamente pasa a la siguiente expresión. En nuestro ejemplo, esto es nuevamente una llamada a la familiar función incorporada digitalWrite. Es cierto que esta vez pasamos el valor BAJO como segundo argumento. Es decir, ponemos un cero lógico en el pin 13, es decir, suministramos 0 voltios, es decir, apagamos el LED.

Una vez que se apaga el LED, procedemos a la siguiente expresión. Una vez más, esta es una llamada a la función de retraso. Esta vez nos quedamos dormidos durante 900 ms.

Una vez que termina el sueño, la función de bucle sale. Al finalizar, “algo” inmediatamente lo vuelve a llamar y todo vuelve a suceder: el LED se enciende, se enciende, se apaga, espera, etc.

Si traduces lo que está escrito al ruso, obtendrás el siguiente algoritmo:

    Encendiendo el LED

    Dormir durante 100 milisegundos

    Apagar el LED

    Dormimos durante 900 milisegundos.

    vamos al punto 1

Así obtuvimos un Arduino con una baliza que parpadea cada 100 + 900 ms = 1000 ms = 1 segundo.

¿Qué se puede cambiar?

Usemos sólo el conocimiento que hemos adquirido para hacer varias variaciones del programa para comprender mejor el principio.

Puede conectar un LED externo u otro dispositivo que deba "parpadear" a un pin diferente. Por ejemplo, el día 5. ¿Cómo debería cambiar el programa en este caso? Debemos reemplazar el número por el 5º donde accedimos al pin 13:

Compilar, descargar, probar.

¿Qué hay que hacer para que el LED parpadee 2 veces por segundo? Reduzca el tiempo de sueño para que el total sea 500 ms:

configuración vacía() ( pinMode(5, SALIDA); ) bucle vacío() ( digitalWrite(5, ALTO); retraso(50); digitalWrite(5, BAJO); retraso(450); )

¿Cómo puedo hacer que el LED parpadee dos veces cada vez que parpadea? Debes encenderlo dos veces con una breve pausa entre encendidos:

configuración vacía() ( pinMode(5, SALIDA); ) bucle vacío() ( digitalWrite(5, ALTO); retraso(50); digitalWrite(5, BAJO); retraso(50); digitalWrite(5, ALTO); retraso (50); escritura digital(5, BAJO);

¿Cómo puedo hacer que el dispositivo tenga 2 LED que parpadeen alternativamente cada segundo? Necesita comunicarse con dos pines y trabajar en bucle con uno u otro:

configuración vacía() ( pinMode(5, SALIDA); pinMode(6, SALIDA); ) void loop() ( digitalWrite(5, ALTO); retraso(100); digitalWrite(5, BAJO); retraso(900); digitalWrite (6, ALTO); retraso (100); escritura digital (6, BAJO);

¿Cómo puedo asegurarme de que el dispositivo tenga 2 LED que se enciendan como un semáforo de ferrocarril: uno u otro está encendido? Simplemente no apague el LED encendido de inmediato, sino que espere el momento de cambiar:

configuración vacía() ( pinMode(5, SALIDA); pinMode(6, SALIDA); ) void loop() ( digitalWrite(5, ALTO); digitalWrite(6, BAJO); retraso(1000); digitalWrite(5, BAJO) ; escritura digital(6, ALTA); retraso(1000);

No dude en comprobar otras ideas usted mismo. Como puedes ver, ¡es simple!

Sobre el espacio vacío y el código hermoso

En C++, los espacios, los saltos de línea y los caracteres de tabulación no tienen de gran importancia para el compilador. Donde hay un espacio, puede haber un salto de línea y viceversa. De hecho, 10 espacios seguidos, 2 saltos de línea y 5 espacios más equivalen a un espacio.

El espacio vacío es una herramienta de programador con la que se puede hacer que un programa sea comprensible y visual, o desfigurarlo hasta dejarlo irreconocible. Por ejemplo, recuerde el programa para hacer parpadear un LED:

configuración vacía() ( pinMode(5, SALIDA); ) bucle vacío() ( digitalWrite(5, ALTO); retraso(100); digitalWrite(5, BAJO); retraso(900); )

Podemos cambiarlo así:

configuración vacía () (pinMode (5, SALIDA);) bucle vacío () (escritura digital (5, ALTO); retraso (100); escritura digital (5, BAJO); retraso (900); )

Lo único que hicimos fue trabajar un poco con el espacio vacío. Ahora puedes ver claramente la diferencia entre código armonioso y código ilegible.

Para seguir la ley tácita del diseño de programas, que se respeta en los foros, cuando la leen otras personas y usted la percibe fácilmente, siga algunas reglas simples:

1. Aumente siempre la sangría entre ( y ) al comenzar un nuevo bloque. Normalmente se utilizan 2 o 4 espacios. Elija uno de los valores y manténgalo en todo momento.

Gravemente:

bucle vacío() (escritura digital(5, ALTO); retraso(100); escritura digital(5, BAJO); retraso(900); )

Bien:

bucle vacío() (escritura digital(5, ALTO); retraso(100); escritura digital(5, BAJO); retraso(900); )

2. Como en el lenguaje natural: pon un espacio después de la coma y no antes.

Gravemente:

Escritura digital(5, ALTO);

Bien:

escritura digital(5, ALTA);

3. escritura digital(5, ALTO); Escritura digital(5, ALTA); Coloque el carácter de inicio de bloque (en una nueva línea en el nivel de sangría actual o al final de la anterior. Y el carácter de fin de bloque) en

Gravemente:

linea separada

Bien:

en el nivel de sangría actual:

4. configuración nula() ( pinMode(5, SALIDA); ) configuración nula() ( pinMode(5, SALIDA); ) configuración nula() ( pinMode(5, SALIDA); ) configuración vacía() ( pinMode(5, SALIDA); ) configuración vacía() ( pinMode(5, SALIDA); ) Usar

Bien:

lineas vacias

para separar bloques semánticos:

Aún mejor:

bucle vacío () (escritura digital (5, ALTO); retraso (100); escritura digital (5, BAJO); retraso (900); escritura digital (6, ALTO); retraso (100); escritura digital (6, BAJO); retraso ( 900); Acerca del punto y coma Quizás te preguntes: ¿por qué hay un punto y coma al final de cada expresión? Estas son las reglas de C++. Estas reglas se llaman

sintaxis del lenguaje

. Por símbolo; el compilador comprende dónde termina la expresión.

El programa es correcto y equivalente a lo que ya hemos visto. Sin embargo, escribir así es de mala educación. El código es mucho más difícil de leer. Entonces si no tienes el 100% buenas razones Escribe varias expresiones en una línea, no hagas esto.

Acerca de los comentarios

Una de las reglas de una buena programación es: “escribir código de manera que quede tan claro que no necesite explicación”. Esto es posible, pero no siempre. Para explicar algunos puntos no obvios del código a sus lectores: a sus colegas o a usted mismo en un mes, existen los llamados comentarios.

Estos son los diseños en código de programa, que el compilador ignora por completo y solo le importan al lector. Los comentarios pueden ser de varias líneas o de una sola línea:

/* La función de configuración se llama primero, cuando se aplica energía al Arduino. Y este es un comentario de varias líneas */. configuración nula() ( // establece el pin 13 en modo de salida pinMode(13, SALIDA);

) bucle vacío() ( digitalWrite(13, ALTO); retraso(100); // suspensión durante 100 ms digitalWrite(13, BAJO); retraso(900); )

Como puede ver, puede escribir tantas líneas de comentarios como desee entre los símbolos /* y */. Y después de la secuencia //, todo lo que sigue hasta el final de la línea se considera comentario.

Entonces, esperamos que los principios más básicos de la escritura de programas hayan quedado claros. El conocimiento adquirido le permite controlar mediante programación la fuente de alimentación a los pines Arduino de acuerdo con ciertos patrones de sincronización. Esto no es tanto, pero sí suficiente para los primeros experimentos.

Fig.1 Estructura del programa en lenguaje C. Estructura interna

programas programa ejecutable

en C consta de 4 partes: área de comando, área de datos estáticos, área de datos dinámicos, área de pila. ver Fig.2.

1. El área de comando contiene comandos de la máquina; Instrucciones que el microprocesador debe ejecutar.

2. Área de datos estáticos para almacenar variables con las que trabaja el programa;

3. Área de datos dinámicos para almacenar datos adicionales que aparecen durante la operación del programa (por ejemplo, variables temporales).


4. La pila se utiliza para almacenar temporalmente datos y direcciones de retorno de funciones. cuerpo funcional

/*cuerpo de la función*/ imprimirf("!");

Hola Mundo 1ra linea – directiva de conexión archivo de encabezado E/S estándar



. Hay pocos operadores en C, pero existe una biblioteca de funciones. Para usarlos necesitas conectarlos, que es lo que hace la directiva: la primera línea del programa. El carácter # indica que la cadena debe ser procesada por el preprocesador del lenguaje C. – nombre de la función principal principal(), esta función no devuelve ningún parámetro (hablaré de esto un poco más adelante). Un programa en C siempre tiene una función. principal(). Con ello comienza la ejecución del programa.

3ra linea – el comienzo del cuerpo funcional. () define el cuerpo de la función (en Pascal son inicio y fin)

4ta linea – un comentario, no está recopilado, solo explica lo que se está haciendo.

5ta linea – función de biblioteca – imprimir en la pantalla, la expresión entre paréntesis en esta línea es un parámetro de función, siempre está entre comillas.

; - este es un signo del operador C, es parte del operador y no un separador de operadores, como en Pascal.

Consejos sobre cómo hacer que un programa sea legible:

1) Elija nombres significativos

2) Usa comentarios

3) Utilice líneas vacías para separar una parte de una función de otra

4) Coloque cada afirmación en una línea diferente.

ELEMENTOS BÁSICOS DEL LENGUA C

Consideremos los elementos requeridos con los que se debe diseñar un programa en C:

1. Comentarios – utilizado para documentar el programa. Cualquier programa debe contener comentarios: qué algoritmo se utiliza, qué hace el programa...

Ø 1 vía: /* Texto */ - en cualquier parte del programa.

Tan pronto como el compilador encuentra /**/, los omite. El compilador ignora /* */ porque no puede interpretar un lenguaje que no sea C. Es decir, si desea excluir alguna línea de la compilación, enciérrela en /**/.

Ø Método 2: si el comentario es grande, utilice este tipo

/* Línea 1 - para un comentario de cualquier longitud

línea 3*/

Ø 3 vías: // - texto hasta el final de la línea.

2. Identificador es un nombre que se asigna a un objeto (variable). Minúsculas y letras mayúsculas, números y guión bajo. Las letras minúsculas y mayúsculas son diferentes. (No se diferencian en BASIC). Si llama al nombre de una variable, Nombre o NOMBRE, entonces serán variables diferentes.

Los identificadores comienzan con una letra o un guión bajo. Por ejemplo, _nombre. Pero no se recomienda comenzar con _, ya que este carácter se usa para nombres globales en lenguaje C.

EN programación moderna A menudo se utiliza para crear identificadores la notación húngara, donde se utilizan ciertos caracteres para caracterizar el identificador, por ejemplo:

b – byte; ch – carácter de un solo byte;

w – palabra; f – bandera;

yo – palabra larga; fn – función;

tu – sin firmar; pag – puntero;

с – contador; d – diferencia de dos pre-x

cz – cadena; etc.

3. Palabras funcionales - estas son palabras con las que ciertas palabras están rígidamente asociadas en el idioma significados semánticos y que no se puede utilizar para otros fines. Estos son los nombres de los operadores, funciones de biblioteca, comandos de preprocesador, etc. Estas palabras no se pueden utilizar para crear nombres de funciones, variables...

DATOS EN EL PROGRAMA SI

Cada programa opera con datos. Están presentes en el programa en forma de variables y constantes.

Los datos que pueden cambiar o se les puede asignar un valor durante la ejecución del programa se llaman variables.

Datos que se establecen ciertos valores y conservan sus valores durante todo el programa, se llaman constantes.

Constantes

Las constantes son valores fijos. El valor, una vez establecido, ya no cambia. Las constantes vienen en varios tipos. Los tipos difieren en el principio de ubicación en la memoria de la computadora y, para una persona, en el tipo de grabación. Hay 7 en C palabras clave, usado para indicar varios tipos datos: int, long, short, unsigned, char, float, double.

Tipos de constantes :

a) Enteros y enteros largos . Están escritos en sistemas numéricos decimal, octal y hexadecimal. Pueden estar firmados o sin firmar.

sistema decimal: constantes enteras ocupar 16 bits memoria y toma un rango de valores: -32768 a +32767 (2 15) . Si la constante no tiene signo, entonces el rango se duplica: 0 a 65535(debido al hecho de que para el número se utiliza el dígito 15, firmado). El sufijo se utiliza para indicar un número sin signo. tu (sin firmar), por ejemplo 123u.

Si el número es mayor que 40000, el compilador lo convertirá automáticamente a número negativo, entonces el sufijo tu requerido: 40000u. En el ejemplo de 123u, al compilador no le importa si hay un sufijo o no, ya que este número está en el rango 32767.

Entero largo acepta 32 bits , rango de valores

± 2147483648 (firmado largo – largo). Si pones el sufijo yo, entonces, a pesar del número, se ocuparán 32 bits. Por ejemplo: -5326 yo

0 – 4294967295 largo sin firmar- (largo sin firmar). El rango aumenta en el bit 31. Sufijos utilizados ul por ejemplo, 32659ul.

sistema octal :

Si un número comienza con el dígito 0, se interpreta como un número octal.

16 bits 0 ¸ 077777

0100000¸ 0177777u

32 bits 0200000 ¸ 01777777777l

020000000000¸ 037777777777ul

sistema hexadecimal :

Si un número comienza con el carácter 0x, entonces se interpreta como hexadecimal.

16 bits 0x0000 ¸ 0x7FFF

0x8000 ¸ 0xEFFFu

32 bits 0x10000 ¸ 0x7FFFFFFFl

0x80000000 ¸ 0xFFFFFFFFul

b) Constantes reales. Estos son números de coma flotante. importa parte fraccionaria. Por defecto, todas las constantes reales son del tipo de doble precisión. doble . Ocupa memoria 8 bytes (incluso si es 0,0). Rango de valores ±1*10 ±307 , también se puede escribir en forma científica, por ejemplo: 0,5e+15 o

1,2e-3=1,2*10-8 =0,0012.

Puedes forzar que el formato sea de precisión simple. flotar . El número tomará 4 bytes , se utiliza el sufijo F(5,7 f). En consecuencia, el rango se estrecha ±1*10 ±37

Y también precisión extendida doble largo – 10 bytes . (3.14L)

Se puede omitir el signo +. Se permite omitir la coma decimal o la parte exponencial, pero no ambas (.2; 4e16). Puedes omitir escribir la parte fraccionaria o entera, pero no al mismo tiempo (100.; .8е-5)

c) Constantes simbólicas. Este es un conjunto de caracteres utilizados en una computadora.

Divididos en 2 grupos: impreso y no impreso(códigos de control). Una constante de carácter incluye solo 1 carácter, que debe estar encerrado entre apóstrofes y ocupa 1 byte memoria.

Cualquier símbolo tiene su doble representación en tabla ASCII. En el programa, las constantes simbólicas se ingresan en comillas simples, al compilar, el valor numérico del símbolo de ASCII se sustituye en el programa. Un carácter ocupa 1 byte.

Carácter "A" "a" " " "\n"

Su código es 65 97 32 10

Cómo tipo entero datos "A"=0101 8, 01000001 2, 41 16, 65 10. No es necesario recordar códigos.

Los códigos de control comienzan con el carácter \ y también están encerrados entre apóstrofes. Los códigos de control más comunes son:

\n – transición a nueva linea

\t – tabulador (desplaza el cursor por algún valor fijo)

\b – retroceder (desplazarse una posición hacia atrás)

\r – retorno de carro (regresar al principio de la línea)

\f – alimentación de formulario (alimentación de papel en 1 página)

\’ - apóstrofe

\" - citas

Pueden aparecer los últimos tres caracteres. constantes simbólicas, y también se usan en la función printf(), por lo que usarlos como caracteres puede causar un error. Por ejemplo, si queremos generar la cadena "El carácter \ se llama barra diagonal", entonces el operador debería verse así:

printf("El caracter \\ se llama barra");

a) Constantes de cadena - contener una secuencia de 1 o más caracteres encerrados en " ". Se gasta 1 byte por cualquier carácter + 1 byte por el llamado carácter cero, un signo del final de la línea. El carácter cero no es el número cero, significa que el número de caracteres en la línea (N) debe ser 1 byte más (N+1) para indicar el final de la línea (el compilador lo agrega automáticamente). Por ejemplo: “línea de texto” ocupa (13+1) bytes;

"Mundo" -

Suspenda AdBlock en este sitio.

Espero que ya hayas instalado algún IDE en tu computadora y hayas aprendido a compilar programas en él. Si no, entonces

Todos los programas escritos en C tienen una estructura común. Del cual hablaremos en esta lección. Nuestro primer programa, escrito en el paso anterior, nos ayudará con esto.

vamos a llenar mapa sencillo. En en este momento Sabemos que los programas existen, pero no sabemos cómo están estructurados internamente. Por lo tanto, nuestro mapa se verá así.

Fig.1 Mapa "Estructura de programas en lenguaje C". Nivel de entrada.

A lo largo del curso volveremos a este mapa, lo aclararemos y lo complementaremos con nuevos elementos y bloques.

Ahora atención. ¡No tengas miedo! A continuación se muestra el original. código de tres programas simples. Tu tarea es observarlos detenidamente e intentar encontrar algún tipo de patrón en su código (algo común que tiene todo programa).

Listado 1. Programa 1. Imprime “¡Hola, mundo!”

#incluir

Listado 2. Programa 2

Int principal(vacío) ( int a, b, c; a = 5; b = 10; c = a+b; devuelve 0; )

Listado 3. Programa 3

#incluir int main(void) ( ARCHIVO *fp; fp = fopen("input.txt", "w"); fprintf(fp, "¡Esto es Esparta!"); fclose(fp); devuelve 0; )

Tómate tu tiempo para ver la continuación de la lección y la respuesta correcta a este problema. Primero, intenta responderte a ti mismo. Después de eso, haga clic en el botón "¡Ver continuación!".

Entonces, la respuesta: en todos los programas anteriores existe la siguiente construcción:

Listado 4. La función principal de cualquier programa C es función principal.

Int principal (vacío) (devuelve 0;)

¿Qué tipo de diseño es este? Esta es la declaración de la función principal. Todo programa escrito en lenguaje C debe tener dicha función, ya sea que el programa sea grande o pequeño. juego de computadora o el programa "¡Hola, mundo!", escrito por usted o por Bill Gates (si el programa está escrito en C), tiene una función principal. eso es todo para decir función principal nuestro programa. Cuando ejecutamos un programa, podemos considerarlo como si estuviera ejecutando la función principal del programa.

Detengámonos un segundo. Parece que ya hemos descubierto algo sobre la estructura de los programas en C. Cualquier programa en C debe contener una función principal. Muestremos este hecho en nuestro mapa de conocimiento "Estructura de programas en lenguaje C".

Fig.2 Mapa "Estructura de programas en lenguaje C". Función principal.

Ahora el mapa no nos molesta con su enorme vacío. Sigamos nuestra investigación.

Déjame contarte un poco sobre la función principal y sobre funciones en general.

El nombre de la función está precedido por int, que es una abreviatura de la palabra entero, que se traduce del inglés como "entero". Esto significa que cuando la función principal complete su trabajo, debería regresar programa de llamadas(en nuestro caso es Sistema operativo) algún número entero. Normalmente, para la función principal, este es el número cero, que notifica al sistema operativo: "Todo está bien, no ha ocurrido ningún incidente".

¿Alguna vez has visto mensajes de error en la pantalla de tu computadora? Por lo general, escriben algo como "El programa finalizó de manera anormal... bla, bla, bla... Código -314". Esto es más o menos lo mismo. La diferencia es que cuando ocurren problemas el sistema operativo nos avisa y cuando todo está bien no vuelve a molestarnos.

Después del nombre de la función, la palabra void se escribe entre paréntesis. En general, los argumentos de una función suelen escribirse entre paréntesis, pero en nuestro caso, cuando void se escribe entre paréntesis, significa que la función no tiene argumentos. Es decir, para que la función principal empiece a funcionar no necesita ningún dato adicional del exterior. Hablaremos de todo esto en detalle más adelante, pero por ahora recuerde que la palabra void en lugar de argumentos de función significa que no se requieren argumentos para esta función.

Dentro de las llaves hay una descripción de la función principal, es decir. exactamente lo que se supone que debe hacer esta función.

Antes de la llave de cierre vemos comando de retorno. Es este comando el responsable de devolver el valor de la función. Aquellos. Mira, si el programa llegó a este punto, entonces todo estuvo bien y no se produjeron errores, lo que significa que puedes devolver el valor cero.

Te preguntarás, ¿por qué exactamente cero? ¡Y el diablo lo sabe! Así es como suelen hacerlo. En principio, puede devolver algún otro número entero, por ejemplo 100 o -236. Si tan sólo fuera un número entero. ¿Recuerdas sobre int? Por tanto el todo.

Entonces descubrimos la función principal. Una cosa más. Lo que está escrito entre llaves generalmente se llama "cuerpo de la función" (o descripción de la función), y la primera parte, la que está antes de las llaves, se llama encabezado de la función.

Volvamos ahora a nuestro primer programa "Hola, mundo" y veamos qué es qué.

Listado 5. Programa Hola, Mundo

#incluir int main(void) ( printf("¡Hola, mundo!\n"); retorno 0; )

Ahora entendemos algo en este programa. Sólo quedan dos líneas sin aclarar, vayamos en orden.

Listado 6. La directiva de inclusión

#incluir

Esta línea es un mensaje para el compilador. Estos mensajes, que comienzan con el símbolo #, se denominan directivas del compilador. Literalmente: "conectar el archivo stdio.h". Durante la compilación, se insertará el contenido del archivo stdio.h en lugar de esta línea. Ahora hablemos un poco de este archivo. stdio.h (del inglés STanDart Entrada Salida) es un archivo de encabezado que describe varias funciones estándar relacionadas con la entrada y la salida.

Surge una pregunta razonable: "¿Por qué necesitamos escribir esta línea? ¿Por qué necesitamos insertar este archivo aquí?" Esto es necesario para que en nuestro programa podamos utilizar función estándar salida a la pantalla printf().

Aquí está la cosa. Antes de que podamos usar algo en nuestro programa, primero debemos describirlo. Imagínate una situación: te pidieron que trajeras un candelabro, pero no sabes qué es. No está claro qué hacer.

También lo hace el compilador. Cuando encuentra una función, busca su descripción (es decir, qué debe hacer y qué significa) al principio del programa (desde el principio hasta el momento en que se utiliza en el programa). Entonces, la función printf() se describe en el archivo stdio.h. Por eso lo conectamos. Pero cuando lo conectemos, el compilador podrá encontrar la función printf(); de lo contrario, arrojará un error.

Por cierto, es hora de complementar nuestro mapa de conocimiento. Antes de la función principal, agregaremos un bloque más, un bloque para conectar archivos de encabezado.

Fig.3 Mapa "Estructura de programas en lenguaje C". Bloque para conectar archivos de encabezado.

Sigamos con nuestro programa.

Listado 7. Función printf()

Printf("¡Hola mundo!\n");

En esta línea llamamos a la función estándar printf(). En este caso más simple, le pasamos un parámetro, una cadena escrita entre comillas que debe mostrarse en la pantalla; en nuestro caso es ¡Hola, mundo! \norte. Pero espera, ¿qué es esto\n? No había ningún \n en la pantalla cuando se inició el programa. ¿Por qué entonces escribimos esto aquí? Esta secuencia es un carácter especial, que es un comando para ir a siguiente línea. Es como hacer clic en MS Word Introducir clave. Semejante personajes especiales varios, todos están escritos con el carácter "\" - barra invertida. Estos caracteres especiales se denominan caracteres de control. Luego te los mostraré de nuevo. De lo contrario, aparecerá en pantalla lo que escribiste entre comillas dobles.

Por cierto, tenga en cuenta que cada comando en lenguaje C termina con el símbolo ";" (punto y coma). Es como un punto al final de una frase en ruso. En el lenguaje ordinario, separamos las oraciones con un punto y en el lenguaje de programación C usamos punto y coma para separar los comandos entre sí. Por lo tanto, es obligatorio utilizar punto y coma. De lo contrario, el compilador se quejará y arrojará un error.

Para llamar a una función, debe escribir su nombre e indicar entre paréntesis los parámetros que se le han pasado. Una función puede tener uno o más parámetros. O puede que no haya ningún parámetro, en cuyo caso no es necesario escribir nada entre paréntesis. Por ejemplo, arriba llamamos a la función printf() y le pasamos un parámetro: la cadena que debe mostrarse.

Por cierto, consejos útiles. Dado que cada programa debe tener una función principal, y literalmente en cada programa necesitaremos mostrar algo en la pantalla, te recomiendo que crees inmediatamente un archivo con la siguiente plantilla, para no escribir lo mismo cada vez.

Listado 8. Plantilla estándar para programas en lenguaje C.

#incluir int principal (vacío) (devuelve 0;)

Bueno, eso parece ser todo. Con esto, la primera lección se puede considerar completa. Aunque no, hay un punto más.

Lo más importante en esta lección es, por supuesto, estructura general programas. Pero además, hemos aprendido a mostrar texto libre. Parece que no aprendieron nada de nada, pero incluso esto es suficiente para, por ejemplo, darle un pequeño regalo a tu madre el 8 de marzo.


El código fuente del programa de postales está en el archivo con códigos fuente esta lección. ¡Experimento! Lo lograrás.




Arriba