ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ свободными Ρ‡Π»Π΅Π½Π°ΠΌΠΈ

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Double **bv — Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ значСния базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ инициализируСтся Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом num_v x 2, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ стобцС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТатся нСпосрСдствСнно. Π‘Π°ΠΌΠΈ значСния базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. НомСра базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ свободными Ρ‡Π»Π΅Π½Π°ΠΌΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π“ΠžΠ£ БПО Волгоградский тСхнологичСский ΠΊΠΎΠ»Π»Π΅Π΄ΠΆ Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 230 105 «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… систСм»

ΠšΠ£Π Π‘ΠžΠ’ΠΠ― Π ΠΠ‘ΠžΠ’Π ΠŸΠž Π”Π˜Π‘Π¦Π˜ΠŸΠ›Π˜ΠΠ• «ΠœΠ°Ρ‚СматичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹»

«Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ свободными Ρ‡Π»Π΅Π½Π°ΠΌΠΈ»

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»:

Π’Π΅Ρ‚ΠΊΠΈΠ½ А.А.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»:

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚ Π³Ρ€. Π’Π’-3−1

Π›Π΅Π²ΠΈΡ‚ΠΈΠ½ Π‘. А Π’ΠΎΠ»Π³ΠΎΠ³Ρ€Π°Π΄ 2011

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ обСспСчСниС Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Основной Ρ†Π΅Π»ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ тСорСтичСских Π·Π½Π°Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования симплСкс — ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅ΠΌ Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΠ»Π°Π½Π° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘++.

БимплСксный ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования — Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, основанная Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ — ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ базисной Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅-Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ большС (эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΡΠΈΠΌΠΏΠ»Π΅ΠΊΡ-Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅). Π”ΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΡƒΡˆΠ΅ΡΡ‚-Π²ΡƒΠ΅Ρ‚, Ρ‚ΠΎ ΠΎΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число шагов (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ «Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ; ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ явлСниС «Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡ», Ρ‚. Π΅. ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ полоТСнию).

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ амСриканским ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ Π”ΠΆΠΎΡ€Π΄ΠΆΠ΅ΠΌ Π”Π°Π½Ρ†ΠΈΠ³ΠΎΠΌ (George Dantzig) Π² 1947 Π³ΠΎΠ΄Ρƒ.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ НСобходимо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΡƒΡŽ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†. Π‘Π²ΠΎΠ±ΠΎΠ΄Π½Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ обСспСчСниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования являСтся цСлСвая функция с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ экстрСмума ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ для этой Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр:

F (X) = 3×1 + 5×2 + 4×3 => max

0,1×1 + 0,2×2 + 0,4×3 <= 1100

0.05×1 + 0.02×2 — 0.02×3 <= 120

3x1 + x2 + 2×3 <= 8000

НСобходимо Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ симплСкс-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Для этого Ρ€Π΅ΡˆΠ°Π»ΠΎΡΡŒ нСсколько Π·Π°Π΄Π°Ρ‡ письмСнно. ПослС освоСниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π° структора самого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ Π±Ρ‹Π» написан класс user_data, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚. Π΅. Π‘Π°ΠΌΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Рассмотрим содСрТимоС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° этого класса.

Листинг 1. user_data.h

#ifndef _USER_DATA_H_

#define _USER_DATA_H_

class user_data {

public:

void get_data_from_user ();

void user_data_is_valid ();

protected:

double *function;

double *fm;

double **system;

int *sign;

int num_v;

int num_l;

bool way;

};

#endif /* _USER_DATA_H_ */

Рассмотрим всС Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

int num_v Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ количСства ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… исходной Π·Π°Π΄Π°Ρ‡ΠΈ.

Int num_l Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ количСства ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ исходной Π·Π°Π΄Π°Ρ‡ΠΈ.

double *function Ρ…Ρ€Π°Π½ΠΈΡ‚ значСния коэффициСнтов Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° double, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ся инициализация Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_v.

double *fm Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ значСния свободных Ρ‡Π»Π΅Π½ΠΎΠ² систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° double, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_l.

double **system Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ значСния коэффициСнтов самой систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Ρ‡Π»Π΅Π½ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ систСмС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ (num_l x num_v).

int *sign Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ Π·Π½Π°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ограничСния систСмы. ЯвляСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° int, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‚ΠΈΠΏΠ° с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_l. Π Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС цСлочислСнный Ρ‚ΠΈΠΏ, Π° Π½Π΅ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ. Ρ‚.ΠΊ. Π£ Π½Π°Ρ Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π·Π½Π°ΠΊΠ°: <=, = ΠΈ >=, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² *sign ΠΊΠ°ΠΊ 0, 1 ΠΈ 2 соотвСтствСнно.

bool way Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ (min/max). ΠŸΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ эта пСрСмСнная-Ρ‡Π»Π΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΡΠ΅Π±Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ истины (true). А ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, соотвСтствСнно, лоТь (false). Π’Π°ΠΊΠΎΠΉ способ хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»Π΅Π½ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏ bool идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этого.

Ѐункция void get_data_from_user (), собствСнно Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅-Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ хранится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π°ΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ находится Π² Ρ„Π°ΠΉΠ»Π΅ user_data.cpp. Рассмотрим содСрТимоС этого Ρ„Π°ΠΉΠ»Π°.

Листинг 2. user_data.cpp

#include

#include

#include

#include «user_data.h»

using std: cout;

using std: cin;

using std: endl;

using std: string;

void error (int err_no)

{

switch (err_no) {

case 0:

cout << «nΠ’Ρ‹ Π²Π²Π΅Π»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. n» << endl;

break;

case 1:

cout << «nΠ’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡƒΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. n» << endl;

break;

case 2:

cout << «nΠ’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ большС 500 ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. n» << endl;

break;

case 3:

cout << «nΠ’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. n» << endl;

break;

case 4:

cout << «nΠ’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 500 ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. n» << endl;

break;

}

}

void user_data:get_data_from_user ()

{

string num_limits, num_vars, s_var, fr_m, sn, func, w;

int i, j;

bool validator = false;

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅: «;

getline (cin, num_limits);

if (atoi (num_limits.c_str ()) < 2)

error (1);

else if (atoi (num_limits.c_str ()) > 500)

error (2);

else

validator = true;

} while (!validator);

num_l = atoi (num_limits.c_str ());

validator = false;

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ: «;

getline (cin, num_vars);

if (atoi (num_vars.c_str ()) < 2)

error (3);

else if (atoi (num_vars.c_str ()) > 500)

error (4);

else

validator = true;

} while (!validator);

num_v = atoi (num_vars.c_str ());

validator = false;

function = new double [num_v];

system = new double *[num_l];

for (i = 0; i < num_l; i++)

system[i] = new double [num_v];

fm = new double [num_l];

sign = new int [num_l];

cout << «nΠ—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ коэффициСнты ΠΏΡ€ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. n» << endl;

for (i = 0; i < num_v; i++) {

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ коэффициСнт Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠΊΠ½Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ x» << i + 1 << «: «;

getline (cin, func);

if (atof (func.c_str ()) == 0)

error (0);

else {

validator = true;

function[i] = atof (func.c_str ());

}

} while (!validator);

validator = false;

}

do while (!validator);

cout << «nΠ—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ систСму ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. n» << endl;

for (i = 0; i < num_l; i++) {

cout << «Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ «<< i + 1 << «-Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. n» << endl;

for (j = 0; j < num_v; j++) {

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ коэффициэнт ΠΏΡ€ΠΈ x» << j + 1 << «: «;

getline (cin, s_var);

if (atof (s_var.c_str ()) == 0)

error (0);

else {

validator = true;

}

} while (!validator);

system[i][j] = atof (s_var.c_str ());

validator = false;

}

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°ΠΊ ΠΏΡ€ΠΈ «<< i + 1 << «-ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ (<=, =, >=): «;

getline (cin, sn);

if (sn == «<=» || sn == «=» || sn == «>=») {

validator = true;

if (sn == «<=»)

sign[i] = 0;

if (sn == «=»)

sign[i] = 1;

if (sn == «>=»)

sign[i] = 2;

}

else

error (0);

cout << sign[i] << endl;

} while (!validator);

validator = false;

do {

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свободный Ρ‡Π»Π΅Π½ ΠΏΡ€ΠΈ «<< i + 1 << «-ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ: «;

getline (cin, fr_m);

if (atof (fr_m.c_str ()) == 0)

error (0);

else

validator = true;

} while (!validator);

fm[i] = atof (fr_m.c_str ());

validator = false;

cout << endl;

}

}

Ѐункция error (int err_no) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½ΠΎΠΌΠ΅Ρ€ ошибки, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π²Π΅ΡΡ‚ΠΈΡΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ½ Π²Π²Π΅Π» Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π”Π°Π»Π΅Π΅ Π½ΠΎΠΌΠ΅Ρ€ ошибки, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ обрабатываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ switch (), ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, выводится ошибка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° cout.]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ get_data_from_user () класса user_data. ВсС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° string, Π° Π·Π°Ρ‚Π΅ΠΌ провСряСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, Ссли всС Π²Π²Π΅Π΄Π΅Π½ΠΎ Π²Π΅Ρ€Π½ΠΎ, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· std: string Π² int ΠΈΠ»ΠΈ double с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ atoi () ΠΈ atof () соотвСтствСнно.

Π‘Π½Π°Ρ‡Π°Π»Π° Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ количСство ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅. Если Π±Ρ‹Π»ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΎΡ‚ 2 Π΄ΠΎ 500, Ρ‚ΠΎ ΡΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСобразуСтся Π² int ΠΈ Π·Π°Π½ΠΎΡΡ‚ится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-Ρ‡Π»Π΅Π½ num_l. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС вызываСтся функция error () с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ошибки ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Π»Π΅Π΅, Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ.

Π—Π°Ρ‚Π΅ΠΌ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ массив function ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ system, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ коэффициСнтов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ†Π΅Π»ΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅. ПослС ΠΈΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ значСния направлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если ΠΎΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π²Π΅Ρ€Π½ΠΎ, Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ-Ρ‡Π»Π΅Π½ way заносится true ΠΈΠ»ΠΈ false, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ значСния. РСгистр ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ направлСния Π½Π΅ ΡƒΡ‡ΠΈΡ‚ываСтся ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅. Если всС Π²Π΅Ρ€Π½ΠΎ, заполняСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° system коэффициСнтами систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ исходной Π·Π°Π΄Π°Ρ‡ΠΈ. Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ происходит Π² Π΄Π²ΡƒΡ… Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°Ρ…, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Ρ‚Π°ΠΊΠΆΠ΅ вводится Π·Π½Π°ΠΊ ограничСния ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свободного Ρ‡Π»Π΅Π½Π° ΠΏΡ€ΠΈ этом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ Π²Π²ΠΎΠ΄, всС пСрСмСнная-Ρ‡Π»Π΅Π½Ρ‹ класса user_data Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ°ΠΌΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΊΠ»Π°ΡΡΠ΅ simplex, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ прямым наслСдником класса user_data. Рассмотрим содСрТимоС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° этого класса.

Листинг 3. simplex. h

#ifndef _SIMPLEX_H_

#define _SIMPLEX_H_

#include

#include «user_data.h»

class simplex: public user_data {

public:

void init ();

void gen_plane ();

bool plane_is_valid ();

bool function_is_undefined ();

void print_result_to_file (int it_num);

private:

double func;

double **bv;

double **sv;

double *istr;

double *th;

double alm;

int i_lrow;

int i_lcol;

std:stringstream table;

};

#endif /* _SIMPLEX_H_ */

Π‘Π½Π°Ρ‡Π°Π»Π° рассмотрим Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ пСрСмСннаячлСны Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

double func — содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ΠΎ мСняСтся.

double **bv — Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ значСния базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ инициализируСтся Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом num_v x 2, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ стобцС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ содСрТатся нСпосрСдствСнно. Π‘Π°ΠΌΠΈ значСния базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. НомСра базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ вывСсти ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

double **sv — ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_l x num_v * 2. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ num_v столбцы Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ коэффициСнтами исходной систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ num_v столбцы Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, Ссли Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π°Π΄Π°Ρ‡Π° Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ, Ссли ΠΆΠ΅ производится Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ свой Π·Π½Π°ΠΊ.

double *istr — индСксная строка, являСтся ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_v * 2, пСрвая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ заполняСтся коэффициСнтами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ†Π΅Π»ΠΈ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ, Π° Π²Ρ‚орая нулями Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. На ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… итСрациях значСния индСксной строки ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

Int i_lcol = индСкс Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.

double *th (Π³Ρ€Π΅Ρ‡. «Ρ‚Π΅Ρ‚Π°») — послСдний столбСц симплСксной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, инициализируСтся ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ массивом Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ num_l.

Int i_lrow = индСкс Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°.

double alm — Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ элСмСнт, находящийся Π½Π° ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠΈ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца ΠΈ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки.

std:stringstream table — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса std: stringstream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит вСсь ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ».

БобствСнно, сСйчас Π±Ρ‹Π»ΠΈ рассмотрСны прСдназначСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ пСрСмСнная-Ρ‡Π»Π΅Π½Π° класса simplex. Π’Π΅ΡΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ вычислСния Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ производится Π² Ρ„Π°ΠΉΠ»Π΅ simplex.cpp.

Листинг 4. simplex. cpp

#include

#include

#include

#include

#include

#include «user_data.h»

#include «simplex.h»

using std: cout;

using std: endl;

void simplex: init ()

{

int i, j;

func = 0;

sv = new double *[num_l];

for (i = 0; i < num_l; i++)

sv[i] = new double [num_v * 2];

for (i = 0; i < num_l; i++) {

for (j = 0; j < num_v; j++)

sv[i][j] = system[i][j];

for (; j < num_v * 2; j++)

if (i + num_v == j)

if (way)

sv[i][j] = 1;

else

sv[i][j] = -1;

else

sv[i][j] = 0;

}

istr = new double [num_v * 2];

bv = new double *[num_l];

for (i = 0; i < num_l; i++) {

bv[i] = new double [2];

bv[i][0] = i + num_v;

bv[i][1] = fm[i];

}

for (i = 0; i < num_v * 2; i++)

if (i < num_v)

istr[i] = function[i] * -1;

else

istr[i] = 0;

i_lcol = 0;

for (i = 0; i < num_v * 2 — 1; i++) {

if (istr[i] < 0)

if (fabs (istr[i + 1]) > fabs (istr[i]))

i_lcol = i + 1;

}

th = new double [num_l];

for (i = 0; i < num_l; i++)

th[i] = bv[i][1] / sv[i][i_lcol];

i_lrow = 0;

for (i = 0; i < num_l — 1; i++)

if (th[i] > th[i + 1])

i_lrow = i + 1;

alm = sv[i_lrow][i_lcol];

print_result_to_file (0);

}

bool simplex: plane_is_valid ()

{

int i;

bool result = true;

if (way)

for (i = 0; i < num_v * 2; i++)

if (istr[i] < 0) {

result = false;

break;

}

if (!way)

for (i = 0; i < num_v * 2; i++)

if (istr[i] >= 0) {

result = false;

break;

}

return result;

}

bool simplex: function_is_undefined ()

{

int i;

for (i = 0; i < num_l; i++)

if (th[i] < 0) {

return false;

}

return true;

}

void simplex: gen_plane ()

{

int i, j, it_num = 0;

double A, B;

while (!plane_is_valid () && function_is_undefined ()) {

A = bv[i_lrow][1];

B = istr[i_lcol];

func -= A * B / alm;

double *tmp_bv = new double [num_l];

bv [i_lrow][0] = i_lcol;

A = bv[i_lrow][1];

for (i = 0; i < num_l; i++) {

B = sv[i][i_lcol];

tmp_bv[i] = bv[i_lrow][1];

if (i ≠ i_lrow)

tmp_bv[i] = bv[i][1] - A * B / alm;

else

tmp_bv[i] /= alm;

}

for (i = 0; i < num_l; i++)

bv[i][1] = tmp_bv[i];

double *tmp_istr = istr;

B = istr[i_lcol];

for (i = 0; i < num_v * 2; i++) {

A = sv[i_lrow][i];

tmp_istr[i] = istr[i] - A * B / alm;

}

istr = tmp_istr;

double **tmp_sv = new double *[num_l];

for (i = 0; i < num_l; i++)

tmp_sv[i] = new double [num_v * 2];

for (i = 0; i < num_l; i++)

for (j = 0; j < num_v * 2; j++) {

tmp_sv[i][j] = sv[i][j];

A = sv[i_lrow][j];

B = sv[i][i_lcol];

if (i == i_lrow)

tmp_sv[i][j] /= alm;

else

tmp_sv[i][j] = sv[i][j] - A * B / alm;

}

sv = tmp_sv;

i_lcol = 0;

for (i = 0; i < num_l; i++)

th[i] = bv[i][1] / sv[i][i_lcol];

i_lrow = 0;

for (i = 0; i < num_l -1; i++)

if (th[i] > th[i + 1])

i_lrow = i + 1;

alm = sv[i_lrow][i_lcol];

it_num++;

print_result_to_file (it_num);

}

if (!function_is_undefined ())

cout << «nЦСлСвая фукнция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, данная Π·Π°Π΄Π°Ρ‡Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚n» << endl;

else {

cout << «nf (x) = «<< func << «n» << endl;

for (i = 0; i < num_l; i++) {

cout << «x» << bv[i][0] + 1 << «= «<< bv[i][1] << endl;

}

cout << «nВсС вычислСния Π±Ρ‹Π»ΠΈ записаны Π² Ρ„Π°ΠΉΠ» table. txtn» << endl;

}

}

void simplex: print_result_to_file (int it_num)

{

int i, j;

if (!it_num) {

table << «Π—Π°Π΄Π°Π½Π° цСлСвая функция: n» << endl;

std:stringstream f_x;

f_x << «f (x) = «;

for (i = 0; i < num_v; i++) {

if (!i)

f_x << function[i] << «x» << i + 1 << ««;

else {

if (function[i] < 0)

f_x << «- «<< fabs (function[i]) << «x» << i + 1 << ««;

if (function[i] > 0)

f_x << «+ «<< function[i] << «x» << i + 1 << ««;

}

}

std:string minmax;

if (way)

minmax = «max» ;

else

minmax = «min» ;

f_x << «=> «<< minmax << «n» << endl;

table << f_x.str ();

table << «Π˜ ΡΠΈΡΡ‚Π΅ΠΌΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ: n» << endl;

std:stringstream math_sys;

std:string math_sign;

for (i = 0; i < num_l; i++) {

for (j = 0; j < num_v; j++) {

if (!j)

math_sys << system[i][j] << «x» << j + 1 << ««;

else

if (system[i][j] == 1)

if (!j)

math_sys << «x» << j + 1 << ««;

else

math_sys << «+ x» << j + 1 << ««;

else

if (system[i][j] == -1)

if (!j)

math_sys << «-x» << j + 1 << ««;

else

math_sys << «- x» << j + 1 << ««;

else {

if (system[i][j] < 0)

math_sys << «- «<< fabs (system[i][j])<< «x» << j + 1 << ««;

else

math_sys << «+ «<< system[i][j] << «x» << i + 1 << ««;

if (!sign[i])

math_sign = «<=»;

if (sign[i] == 1)

math_sign = «=»;

if (sign[i] == 2)

math_sign = «>=»;

}

}

math_sys << math_sign << «» << fm[i];

math_sys << endl;

}

std:string min_or_max;

if (way)

min_or_max = «ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ» ;

else

min_or_max = «ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ» ;

table << math_sys.str () << endl;

table << «Π Π΅ΡˆΠΈΠΌ Π΄Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° «<< min_or_max << «ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ симплСксных Ρ‚Π°Π±Π»ΠΈΡ†. nΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½: n» << endl;

}

for (i = 0; i < num_l; i++) {

table << «x» << bv[i][0] + 1 << «t» << bv[i][1] << «t» ;

for (j = 0; j < num_v * 2; j++)

table << sv[i][j] << «t» ;

if (!plane_is_valid ())

table << th[i];

table << «n» << endl;

}

table << «f (x)t» << func << «t» ;

for (i = 0; i < num_v * 2; i++)

table << istr[i] << «t» ;

table << «n» ;

if (plane_is_valid ()) {

if (plane_is_valid () && function_is_undefined ())

table << «nΠ”Π°Π½Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ. РСшСниС Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.» << endl;

std:ofstream outfile («table.txt»);

outfile << table. str ();

}

else {

std:string ln_or_gn;

if (way)

ln_or_gn = «Π½Π΅ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅» ;

else

ln_or_gn = «ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅» ;

std:stringstream num_of_plane;

if (!it_num)

num_of_plane << «ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½» ;

else

num_of_plane << it_num + 1 << «-ΠΉ ΠΏΠ»Π°Π½ Ρ‚Π°ΠΊΠΆΠ΅» ;

table << «n» << num_of_plane.str () << «Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒnΠ² индСксной строкС ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ «<< ln_or_gn << «ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹.nErΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ. n» << endl;

}

}

Π‘Π½Π°Ρ‡Π°Π»Π° выполняСтся инициализация ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°. Π­Ρ‚ΠΈΠΌ занимаСтся функция-Ρ‡Π»Π΅Π½ init () класса simplex.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ†Π΅Π»ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΏΠΎΡ€Π½ΠΎΠΌ ΠΏΠ»Π°Π½Π΅ всСгда Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, поэтому Π² init () выполняСтся инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ-Ρ‡Π»Π΅Π½Π° func класса simplex ΠΈΠΌΠ΅Π½Π½ΠΎ Π½ΡƒΠ»Π΅ΠΌ.

Π—Π°Ρ‚Π΅ΠΌ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ коэффициСнтов sv. И ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡΡ Π΅Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ заполняСтся коэффициСнтами систСмы ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ исходной Π·Π°Π΄Π°Ρ‡ΠΈ, вторая Ρ‡Π°ΡΡ‚ΡŒ являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, Π² ΡΠ»ΡƒΡ‡Π°Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ, Ссли ΠΆΠ΅ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π°Π΄Π°Ρ‡Π° Π½Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ свой Π·Π½Π°ΠΊ.

ПослС заполнСния sv ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив istr ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ этого массива (индСксной строки ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°). ΠŸΠ΅Ρ€Π²Π°Ρ Π΅Π΅ Ρ‡Π°ΡΡ‚ΡŒ заполняСтся коэффициСнтами Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ, вторая Π΅Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° инициализируСтся нулями.

Π—Π°Ρ‚Π΅ΠΌ вычисляСтся индСкс Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Π°Π½Π½Ρ‹ΠΉ индСкс соотвСтствуСт индСксу максимального ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта индСксной строки.

Π”Π°Π»Π΅Π΅ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ массив th ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся Π΅Π³ΠΎ инициализация. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ этого массива Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ дСлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ базисных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚cΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния коэффициСнтов Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца.

ПослС вычислСния ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ th ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ся вычислСниС индСкса Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ соотвСтствуСт индСксу минимального значСния Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ th.

Π Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ элСмСнт ΠΏΠ»Π°Π½Π° находится Π½Π° ΠΏΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠΈ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ столбца ΠΈ Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°. ПослС Π΅Π³ΠΎ вычислСния производится Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print_result_to_file (), которая заносит Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ table класса std: stringstream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ являСтся пСрСмСнная-Ρ‡Π»Π΅Π½ΠΎΠΌ класса simplex.

ПослС построСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½ исходной Π·Π°Π΄Π°Ρ‡ΠΈ. Π“Ρ€ΡƒΠ±ΠΎ говоря, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°, ΠΏΠΎΠΊΠ° ΠΏΠ»Π°Π½ Π½Π΅ ΡΡ‚Π°Π½Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ»Π°Π½Π° занимаСтся функция bool plane_is_valid, которая провСряСт ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡƒΡŽ строку Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π² ΡΠ»ΡƒΡ‡Π°Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡƒΠΌ ΠΈ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Если Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΎΠΉ строкС, Ρ‚ΠΎ ΠΏΠ»Π°Π½ являСтся Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, поэтому функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false Π² Π΄Π°Π½Π½ΠΎΠΌ случаС. Если ΠΏΠ»Π°Π½ являСтся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ сигналом ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠΈ итСрирования для Ρ†ΠΈΠΊΠ»Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ gen_pane ().

Но, Ρ‚Π°ΠΊΠΆΠ΅, Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, функция Ρ†Π΅Π»ΠΈ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°. Данная ситуация Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ th («Ρ‚Π΅Ρ‚Π°») ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты. Π”Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ занимаСтся функция bool function_is_undefined (), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ истину, Ссли Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ th Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов, ΠΈ Π»ΠΎΠΆΡŒ, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°, Ρ‚. Π΅. Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠ»Π°Π½ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ ΠΈ Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΈΠΌ занимаСтся функция gen_plane ().

ВычислСниС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π° вСсьма схоТС с Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°. ЕдинствСнным вСсомым ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ «ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°», ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ всС элСмСнты Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² Π²Π΅Π΄ΡƒΡ‰Π΅ΠΉ строкС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°. ПослСдниС Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ дСлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта этой строки Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ элСмСнт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Π½Π°. Π‘Π°ΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ «ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°» ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

НЭ = Π‘Π’Π­ — (A * B) / Π Π­.

Π“Π΄Π΅ «ΠΠ­» — вычисляСмыС элСмСнт Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°, «Π‘Π’Π­» — элСмСнт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡˆΠ΅Π³ΠΎ ΠΏΠ»Π°Π½Π°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ вычисляСмому элСмСнту, Π Π­ — Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ элСмСнт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡˆΠ΅Π³ΠΎ ΠΏΠ»Π°Π½Π°. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ A ΠΈ B — это элСмСнты старого ΠΏΠ»Π°Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ «ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π‘Π’Π­ = 1 A = 2

B = 3 Π Π­ = 4.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС элСмСнт Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ ΠΏΠΎ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅, Ρ‚. Π΅.

НЭ = 1 — (2 * 3) / 4 = 1 — 1.5 = 0.5

ВычислСниС Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ это практичСски ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ. Π’ ΡΡ‚ΠΎΠΌ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ся наибольший смысл Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Когда Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠ»Π°Π½ станСт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ окаТСтся, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Ρ†ΠΈΠΊΠ» Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ, послС Ρ‡Π΅Π³ΠΎ Π½Π° ΡΠΊΡ€Π°Π½ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ†Π΅Π»ΠΈ ΠΈ Π±Π°Π·ΠΈΡΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π°, Ссли послСдний имССтся. Если ΠΆΠ΅ функция Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°, Ρ‚ΠΎ Π½Π° ΡΠΊΡ€Π°Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Но ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ вывСсти Π½Π° ΡΠΊΡ€Π°Π½ ΠΎΡ‚Π²Π΅Ρ‚, Π² Ρ†ΠΈΠΊΠ»Π΅ производится Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print_result_to_file (), которая Π² Π΄Π°Π½Π½ΠΎΠΌ случаСт ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½ΠΎΠΌΠ΅Ρ€ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, начиная с Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹. Ѐункция ΠΏΠΈΡˆΠ΅Ρ‚ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ table класса std: stringstream вСсь Π²Ρ‹Π²ΠΎΠ΄, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π΅Π»Π°Π΅Ρ‚ это «ΠΏΠΎ ΡƒΠΌΠ½ΠΎΠΌΡƒ», Ρ‚. Π΅. Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ чСловСчСским языком. Если ΠΏΠ»Π°Π½ ΠΏΡ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ стал ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½, функция print_result_to_file () создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ outfile класса std: oftream, Ρ‚. Π΅. Π“Ρ€ΡƒΠ±ΠΎ говоря, Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ table класса std: stringstream. Π­Ρ‚ΠΎ являСтся Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‚. ΠΊ., Ссли Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ всС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ ΠΊΡƒΠ΄Π°-Π»ΠΈΠ±ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ «outfile <<οΏ½» Π½Π° «cout <<οΏ½» ΠΈΠ»ΠΈ Π½Π° Π»ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄Π°.

Но, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вСсь Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… исходниках завСлся, Π½Π°ΠΌ, СстСствСнно, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° функция main (), Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Листинг 5. main. cpp

#include «simplex.h»

int main ()

{

setlocale (LC_ALL, «Russian»);

simplex *ud = new simplex;

ud->get_data_from_user ();

ud->init ();

ud->gen_plane ();

return 0;

}

Π‘Π½Π°Ρ‡Π°Π»Π° задаСтся русская локаль для консоли Windows, Π·Π°Ρ‚Π΅ΠΌ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса simplex, послС Ρ‡Π΅Π³ΠΎ вызываСтся функция get_data_from_user () наслСдуСмого класса user_data, Π° Π·Π°Ρ‚Π΅ΠΌ init () ΠΈ gen_plane () ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ рассмотрСны Π²Ρ‹ΡˆΠ΅. return 0. сообщаСт систСмС ΠΎΠ± ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π—Π°Π΄Π°Π½Π° цСлСвая функция:

F (X) = 3×1 + 5×2 + 4×3 => max

И ΡΠΈΡΡ‚Π΅ΠΌΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:

0,1×1 + 0,2×2 + 0,4×3 <= 1100

0.05×1 + 0.02×2 — 0.02×3 <= 120

3x1 + x2 + 2×3 <= 8000

РСшим Π΄Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π» описан Ρ€Π°Π½Π΅Π΅.

ЗаглянСм Π² Ρ„Π°ΠΉΠ» table. txt

РСшСниС, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°Ρ… Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π² MS Excel с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «ΠŸΠΎΠΈΡΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ» ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π²Π΅Ρ€Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ данная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡΡ‚Ρ€ΠΎΠΈΠ»Π°ΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ, тСсты ΠΈ ΡΠ°ΠΌ исполняСмый Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π»ΠΎΠΆΠ΅Π½ Π² Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ записку.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Основная Ρ†Π΅Π»ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — освоСниС тСорСтичСских Π·Π½Π°Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ программирования ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ практичСских Π½Π°Π²Ρ‹ΠΊΠΎΠ² программирования Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘++.

ПослС написания Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Ρ†Π΅Π»ΡŒ, нСсомнСнно Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Π‘Ρ‹Π» ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ освоСн Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ симплСкс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ поднят ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ программирования, Ρ‡Ρ‚ΠΎ для Π°Π²Ρ‚ΠΎΡ€Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ нСсомнСнно, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ, Π² ΡΠΊΠΎΡ€ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ искусствСнного базиса ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ графичСский интСрфСйс с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ кроссплатформСнной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ QT. Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Π°Ρ вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСна Π² Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° симплСкс Ρ‚Π°Π±Π»ΠΈΡ†Π° функция Π‘ΡŒΠ΅Ρ€Π½ Бтрауструп — Π―Π·Ρ‹ΠΊ программирования Π‘++ 2-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ 2007 Π³ΠΎΠ΄.

Π›ΡƒΠ½Π³Ρƒ К. Н. — Π›ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Руководство ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π·Π°Π΄Π°Ρ‡. — 2005 Π³ΠΎΠ΄.

ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΈΠ³Π° Gentoo Linux — Π²Π΅Π±-ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, 2008 Π³ΠΎΠ΄.

А.Π’. АндрССв — ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах — 2006 Π³ΠΎΠ΄.

БистСма управлСния вСрсиями GIT, ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство — Π²Π΅Π± ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, 2011 Π³ΠΎΠ΄.

Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈΠ· Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ — Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π±-энциклопСдии ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-рСсурсов.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ