Главная » Просмотр файлов » лекции (2008) (by Kravets)

лекции (2008) (by Kravets) (1160829), страница 13

Файл №1160829 лекции (2008) (by Kravets) (лекции (2008) (by Kravets)) 13 страницалекции (2008) (by Kravets) (1160829) страница 132019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 13)

À äëÿ ïðîñòûõ òèïîâ äàííûõ îñòàåòñÿ òîëüêî in ñåìàíòèêà. Ðàñìîòðèì ïîíÿòèå ïîáî÷íîãî ýôôåêòà ôóíêöèè. Ïîáî÷íé ýôôåêòîçíà÷àåò, ÷òî ôóíêöèÿ ìîæåò ìåíÿòü ëèáî êàêèå - òî ãëîáàëüíûå îáúåêòû è/èëè ìåíÿåò ñâîè ôàêòè÷åñêèå ïàðàìåòðû. Òàêèì îáðàçîì, îñíîâíàÿçàäà÷à ïðîöåäóðû - èìååííî ïîáî÷íûå ýôôåêòû, êîãäà êàê ôóíêöèÿ ïîõîðîøîìå íå äîëæíà èìåòü îíûõ.Ãëîáàëüíàÿ ïåðåìåííàÿ - ïðèçíàê äóðíîãî äèçàéíà ïðîãðàììû â ñîâðåìåííîì ïîíèìàíèè.function F(x: T) return T; { in }procedure FF(x: inout T): return T; { inout } íå âîøëî â îêîí÷àòåëüíûþâåðñèþ Àäàprocedure P(x: out T; r: inout T); Java äëÿ êàæäîãî ïðîñòîãî òèïà äàííûõ ñóùåñòâóåò êëàññ - îáåðòêàâ ïàêåòå java.lang.int a;Integer v = a;f(v); //inoutÂñå ÷òî íàõîäèòñÿ â ïàêåòå java.lang - âñòðîåíî â êîìïèëÿòîð.Ðàññìîòðìè ÿçûê Ñ#.

Äëÿ íåãî áûëè êðàéíå àêòóàëüíû âîïðîñû ýôôåêòèâíîñòè. Âñå ïàðàìåòðû òàì ïåðåäàþòñÿ ïî çíà÷åíèþ ïî óìîë÷àíèþ, òî åñòü ïåðåäà÷à ïîëíîñòüþ àíàëîãè÷íà Java. Íî åñòü äâà îòäåëüíûõ ìîæäèôèêàòîðà - ref è out, êîòîðûå ðåàëèçóþò ïåðåäà÷ó ïàðàìåòðîâïî ññûëêå.Òî åñòüvoid f(ref int a) {a = -1};// ïåðåäà÷à ïî ññûëêåint a = 0;69f(ref a);{a == -1}Îäíàêî çäåñü òðåáóåòñÿ ïåðåäà÷à èíèöèàëèçèðîâàííîé ïåðåìåííîé.Äëÿ ïåðåäà÷è íå èíèöèàëèçèðîâàííîé ïåðåìåííîé èñïîëüçóåòñÿ ìîäèôèêàòîð out. ÿçûêå Delphiprocedure P ([var] a: X);Ñïèñîê àðãóìåíòîâ ïåðåìåííîé äëèíûprintf (const char *, ...);va_listva_startva_nextva_endÍåäîñòàòîê - íåíàäåæíîñòü. Òî åñòü íåò âîçìîæíîñòè êîíòðîëèðîâàòüêîëè÷åñòâî ïåðåäàííûõ ôóíêöèè àðãóìåíòîâ.CString.format (const char *, ...);Íåñìîòðÿ íà òî ÷òî â Ñ++ ñóùåñòâóåò ñâîé ìåõàíèçì ââîäà - âûâîäà,ìíîãèå äî ñèõ ïîð èñïîëüçóþò Ñ-øíûé printf èç-çà åãî óäîáñòâà. ÿçûêå îáåðîí èëè ìîäóëà-2 íåò ñïèñêîâ ïåðåìåííîé äëèíû, òî åñòüîïåðàöèè âûâîäà íàìíîãî ìåíåå óäîáíû, ÷åì â Ñ.printf ("Count = %d i); // CInOut.WriteString ("Count = ");InOut.WriteInt (i); ìîäóëà - 2 Ñ++ îñòàëèñü ñèøíûå ìàêðîñû äëÿ ñïèñêîâ àðãóìåíòîâ ïåðåìåííîé äëèíû. Java è Ñ# ïðîáëåìà îáåñïå÷åíèÿ íàäåæíîñòè áûëà ðåøåíà.

 ýòèõÿçûêàõ ðåàëèçàöèÿ îïèðàëàñü íà òî, ÷òî âñå îáúåêòû èìåëè îáùåãî ïðåäêà - êëàññ Object. Òàêèì îáðàçîì, ñïèñîê ïåðåìåííîé äëèíû - ìàññèâîáúåêòîâ òèïà object.void f(params int[] integer);Òàêèì îáðàçîì, write (String format, params Object[] objs);Íàäåæíîñòü îáåñïå÷èâàåòñÿ íà óðîâíå âûïîëíåíèÿ, ïóòåì êîíòðîëÿïàðàìåòðîâ.Ñëåäóåò ðàçëè÷àòü îáúÿâëåíèÿvoid f(params int [] elements);void f(int [] integers);70Àíàëîãè÷íàÿ ïðîáëåìà áûëà â ÿçûêå java, ïðè÷åì ñîçäàòåëè ÿçûêàíå õîòåëè ðàñøèðÿòü ÿçûê, ââîäÿ íîâûå êëþ÷åâûå ñëîâà. Âìåñòî ýòîãîîíè ïðîñòî ñèíòàêñè÷åñêè ðàñøèðèëè ÿçûê. Òî åñòüvoid f(int ... integers){ for (int i:integers) {..} }Íà ýòîì çàêîí÷èì ñ ïåðåäà÷åé ïàðàìåòðîâ.Ïóíêò 3. Ïîäïðîãðàìíûå òèïû äàííûõTYPE PROCINT = PROCEDURE (INTEGER);VAR P: PROCINT;TYPE F = PROCEDURE (REAL):REAL;PROC PP = PROCEDURE (VAR T);V:= const {êîíñòàíòû - èìåíà ïðîöåäóð}P(5); Ñ/Ñ++ èìååòñÿ ìåõàíèçì óêàçàòåëåé íà ôóíêöèþ.

 Àäà - 95 ïîÿâèëñÿ êàê ïîäïðîãðàìíûé òèï, òàê è ïîäïðîãðàìíûå ïåðåìåííûå. Êîãäàêàê â Àäà 85 èõ íå áûëî. Çà âðåìÿ ñ Àäà 83 äî Àäà 95 èçìåíèëèñü êàêâçãëÿäè íà ïðîãðàììèðîâàíèå, òàê è óñëîâèÿ, â êîòîðûõ äîëæíû áûëèðàáîòàòü ïðîãðàììû íà ýòîì ÿçûêå.-ðåôåðåíöèÿ-êîìïîçèöèÿ-íàñëåäîâàíèå-äåëåãèðîâàíèåÄåëåãèðîâàíèå ïîñëóæèëî ïðè÷èíîé ââåäåíèåÿ ïîäïðîãðàìíûõ òèïîâ.  ÿçûêå Îáåðîí îáðàáîò÷èê (handler) - àíàëîã ïîäïðîãðàìíîãî òèïà. Íåâîçìîæíî ïîëíîñòüþ ðåàëèçîâàòü ÎÎ ïîâåäåíèå áåç ïðîöåäóðíîãîòèïà.71Ëåêöèÿ 18.30.10.2008Ðàññìîòðìè ðåàëèçàöèþ ïîäïðîãðàìíûõ òèïîâ äàííûõ.1.

Ïîäïðîãðàììû - óêàçàòåëè (CALL P). Ïðèìåðû ÿçûêîâ - Ñ, Ñ++,Îáåðîí, Ìîäóëà-2, Ïàñêàëü (Delphi), Ada-95.M-2, Oberon, Delphi: type PRCI = procedure (integer).Íàä îáúåêòàìè òàêîãî òèïà åñòü òîëüêî äâå îïåðàöèè - ïðèñâàèâàíèåè âûçîâ.  Àäà - 83 íå áûëî ïîäïðîãðàìíîãî òèïà, îí ïîÿâèëñÿ ëèøü âÀäà - 95. Àäà - 95 áûë ââåäåí ïîäïðîãðàìíûé òèï äàííûõ, êîòîðûé îïèñûâàëñÿ àíàëîãè÷íî óêàçàòåëþ.type PRCI is access procedure PRCi (i : in integer);procedure FCALL (p: PRCi) isbeginP(0);end FCALL;Ïîÿâëÿåòñÿ ñïåöèàëüíàÿ ðàçíîâèäíîñòü ôîðìàëüíûõ ïàðàìåòðîâà,êîòîðûå ÿâíî ïåðåäàâàëèñü ïî ññûëêå. Òàêèì îáðàçîì ïîïûòêà èñïîëüçîâàòü çàäàíèå ñåìàíòèêè, à íå ñïîñîáà ïåðåäà÷è ïðîâàëèëàñü.Îòäåëüíî ðàññìîòðèì Ñ++ è Delphi.

 ýòèõ ÿçûêàõ åñòü ïîíÿòèåêëàññà, ÷òî äàáàâëÿåò ê ïîíÿòèþ ïðîöåäóðû èëè ôóíêöèè ïîíÿòèå ìåòîäà êëàññà, òî åñòü ïðîöåäóðû èëè ôóíêöèè, êîòîðîé íåÿâíî ïåðåäàåòñÿîáúåêò êëàññà (this â C++, self â Delphi).void foo (int);typedef void (*footype)(int)footype f;f = foo;(*f)(0);f(0);class Bar{void foo (int);int i;};Òàêèì îáðàçîì, ïîÿâëÿåòñÿ ïîíÿòèå óêàçàòåëÿ íà ÷ëåí êëàññà.int Bar::*pb;pb = Bar::i;//îøèáêàBar b;72pb = &b.i;//óêàçàòåëü íà ÷ëåí êëàññà òèïà inttypedef void (Bar::*)foom(int);foom f;f = Bar::foo;Îïåðàöèè .* èëè ->*type MEMPRC = procedure (integer) of Bar;Îòäåëüíî ðàññìîòðìè C# è java.

 ÿçûêå java ïîíÿòèå ôóíêöèîíàëüíîãî òèïà îòñóòñòâóåò, òî åñòü ïåðåäàâàòü ôóíêöèè êàê ïàðàìåòðû íåëüçÿ. Ïðè ýòîì â java ìîæíî ðåàëèçîâàòü ïîäîáíûé ìåõàíèçì íà îñíîâåíàñëåäîâàíèÿ.Ðàññìîòðèì ïðèìåð - ïðîöåäóðó èíòåãðèðîâàíèÿ, òî åñòü âû÷èñëåíèÿîïðåäåëåííîãî èíòåãðàëà f(x)typedef doube (*FI)(double);double Integer (double a, double b, double eps, IF f); ÿçûêå java âñå íåñêîëüêî èíà÷å, ïîäîáíàÿ ðåàëèçàöèÿ âîçìîæíàòîëüêî ñ ïîìîùüþ êëàññîâ.class integral{public double IF (double) ..public double integrate (double a, double b, double eps);}Òåïåðü ÷òîáû ïåðåäàòü â êëàññ íóæíóþ ôóíêöèþ, íóæíî óíàñëåäîâàòü êëàññ integral è ïåðåîïðåäåëèòü â íîâîì êëàññå ôóíêöèþ IF. Òàêîåðåøåíèå áûëî âûçâàíî òåì, ÷òî èç - çà ñîîáðàæåíèé áåçîïàñíîñòè ðàçðàáîò÷èêè java ïîëíîñòü îòêàçàëèñü îò âñåõ óêàçàòåëåé, â òîì ÷èñëå èóêàçàòåëåé íà ôóíêöèè.×òî æå êàñàåòñÿ ÿçûêà C#, òî òàì åñòü ïîíÿòèå delegate - ñïåöèàëèçèðîâàííîãî ôèóíêöèîíàëüíîãî òèïà äàííûõ, êîòîðûé ñâîäèòñÿ ê óêàçàòåëþ íà ôóíêöèè.public delegate void Operation(int);Äåëåãàòó ìîæíî ïðèñâàèâàòü íîâûå çàí÷åíèåÿ.public Operation dlgt;73class Bar{public Foo (int x) {..}public static void Foo2 (int i) {...}};Bar b;dlgt = new Operation (b.Foo);Òåïåðü dlgt (0) == b.Foo (0);Ïðè ýòîì ìîæíî íàïèñàòü è òàê:dlgt = new Operation (Bar.Foo2);// òåïåðü óêàçûâàåò íà ñòàòè÷åñêóþôóíêöèþ.Áîëåå òîãî äëÿ äåëåãàòîâ îïðåäåëåíèà îïåðàöèÿ += è -=, ñîçäàþùèåöåïî÷êè îïåðàöèé.dlgt += new Operation (b.Foo);dlgt += new Operation (Bar.Foo2);dlgt += new Operation (new X().b);Òî åñòü ìû ïðèâÿçûâåì ê äåëåãàòó ôóíêöèþ îò íîâîãî êëàññà, îïðåäåëåííîãî ïðè âûçîâå.Ïðè âûçîâå dlgt (0), áóäóò ïðèìåíåíû âñå ýòè îïåðàöèè â òîì ïîðÿäêå,â êîòîðîì îíè áûëè çàäàíû.

Âñå êëàññû delegate ïðîèñõîäÿò îò êëàññàSystem.Delegate {static Delegate Combine (Delegate rst, Delegate second);static Delegate Remove (Delegate rst, Delegate second);static Delegate GetInvocationList (Delegation smth); }Ïîíÿòèå ñîáûòèÿ.subcribe - æåëàíèå ïîëó÷àòü óâåäîìëåíèå î òîì ÷òî ïðîèçîøëî ñîáûòèå.distribute - ãåíåðàöèÿ ñîáûòèÿ.Ïðèìåð îáðàòíîãî - òàéìåð èëè ïî÷òîâàÿ ñèñòåìà.EventSource - åìó ïðèíàäëåæèò ïåðåìåííàÿ äèëàãàòñêîãî òèïà, à EventConsumer- ïîäïèñ÷èê, îí èñïîëüçóåò += è -=.Ñîáûòèÿ - ÷àñòíûå ñëó÷àè äåëåãàòîâ, òî åñòü Event - ÷àñòíûé ñëó÷àéýêçàìïëÿðà äåëåãàòà.public event Operation;Ïðè ýòîì ó ñîáûòèÿ îãðàíè÷åííû îïåðàöèè.Äëÿ áîëüøèíñòâà ßÏ åäèíèöåé èíêàïñóëÿöèè ÿâëÿåòñÿ òèï, îäíàêîýòî íå òàê â ñëó÷àå ñîáèòèé, òàê êàê â çàâèñèìîñòè îò îáúåêòà ðàçëè÷à74åòñÿ íàáîð îïåðàöèé (+= è -= èëè ñîçäàíèå ñîáûòèÿ (âûçîâ)).Operation op;public delegate int Operation2(int x, int y);Operation2 op;op = delegate (int x, int y){return x+y}int i;op = delegate (int x, int y){return x + y + i};Oper0 o;public Delegate[] Create(){Oper0 [] ops = new Oper0 [3];int i = 0;for (int k = 0; k < 3; k ++) ops [k] = delegate ()return i ++;return ops;}Àíîíèìíûé äåëåãàò ìîæåò çàõâàòûâàòü íå òîëüêî ëîêàëüíûå ïåðåìåííûå, íî è íàïðèìåð ñâîé êîíòåêñò - êëàññ.

Òî åñòü ñóùåñòâóåò âîçìîæíîñòü ðåàëèçàöèè ñâÿçûâàíèÿ.class Binder{private Operation2 d;private int arg;public Buiner (Operation2 a, int x)del = a, arg = xpublic Operation1 Get_Bind (){return delegate(int a){return d (a, arg)}}}Âñå ýòî ÿâëÿåòñÿ àíàëîãîì çàìûêàíèÿ è Lambda ôóíêöèé.75Ëåêöèÿ 196.11.2008Ãëàâà 5. Ëîãè÷åñêèå ìîäóëè òðàäèöèîííûõ ßÏ.Îïðåäåëåíèå íîâûõ òèïîâ äàííûé ñ ïîìîùüþ ëîãè÷åñêèõ ìîäóëåé.Èíêàïñóëÿóöèÿ è ÀÒÄ.Ïóíêò 1. Ïîíÿòèå ËÌ.Ëîãè÷åñêèé ìîäóëü - ÿçûêîâàÿ êîíñòðóêöèÿ, îáúåäèíÿþùàÿ âçàèìîñâÿçàííûå ðåñóðñû â èìåíîâàííûé íàáîð, êîòîðûé ïîçâîëÿåò ñîãëàñîâàííî- èñïîëüçîâàòü- ðàñïîñòðàíÿòü- èçìåíÿòü- òðàíñëèðîâàòüýòè ðåñóðñûÏîíÿòèå ëîãè÷åñêîãî ìîäóëÿ òåñíî ñâÿçàííî ñ ïîíÿòèåì ôèçè÷åñêîãîìîäóëÿ.

Íî â îáùåì ñëó÷àå îíè íå ðàâíîçíà÷íû.Ãëàâíàÿ çàäà÷à ëîãè÷åñêîãî ìîäóëÿ â áîëüøèíñòâå òðàäèöèîííûõ ßÏ- ñâÿçàòü âî åëèíî ñòðóêòóðà äàííûõ è ñîîòâåñòâóþùèå ìíîæåñòâî îïåðàöèé, òî åñòü ñîçäàíèå íîâîãî òèïà äàííûõ.Ïîíÿòèå êëàññà (â Ñ++)- ìÿãêàÿ ýâîëþöèÿ ïîíÿòèå ñòðóêòóðû. Òåïåðü êëàññ ÿâëÿåòñÿ âçàèìîñâÿçàííûì íàáîðîì ðåñóðñîâ. Òàêèì îáðàçîì,êëàññ ÿâëÿåòñÿ êàê òèïîì äàííûõ, òàê è ëîãè÷åñêèì ìîäóëåì.Ïðè ýòîì îñíîâíîé çàäà÷å êëàññà âñå æå îñòàåòñÿ çàäà÷à ñîçäàíèÿíîâîãî òèïà. ÿçûêå Ôîðòðàí -âñå ïîäïðîãðàììû - ôèçè÷åñêèå ìîäóëè.Ëîãè÷åñêèå ìîäóëè â ñëó÷àÿõ Ì-2, Îáåðîí, Delphi Ìîäóëà - 2:- Ãëàâíûé ìîäóëü- Áèáëèîòå÷íûé ìîäóëü- Ëîêàëüíûå ìîäóëè.MODULE èìÿ;ÎáúÿâëåíèÿBEGINÎïåðàòîðûEND èìÿ.Áèáëèîòå÷íûå ìîäóëè:76DEFINITION MODULE M;Îáúÿâëåíèÿ;END M;- Ìîäóëü îïðåäåëåíèåÿ- îáúåêòû äàííûõ- òèïû äàííûõ- çàãîëîâêè ïðîöåäóð è ôóíêöèé- Ìîäóëü ðåàëèçàöèè:IMPLEMENTATION MODULE M;Îáúÿâëåíèÿ è ðåàëèçàöèèEND M.- ÎïðåäåëåíèÿDEFINITION MODULE STACK;CONST N = 256;TYPE Stack =RECORDTOP:INTEGERBODY:ARRAY [0..N] of REALEND;PROCEDURE INIT (VAR S:Stack);PROCEDURE POP (VAR S: Stack) : REAL;VAR Done : Boolean; ìîäóëå ðåàëèçàöèè äîëæíû áûòü ðåàëèçàöèè îáúÿâëåííûõ ôóíêöèé.Âñå ñòðóêòóðû äàííûõ, îáúÿâëåííûå â ìîäóëå ðåàëèçàöèè íå äîñòóïíûèçâíå..DEF => .SYM.MOD => .OBJDM=> unit => DFVIM77DM=> unit (unit stack)interface...implemenation...end (stack);Âçàèìîäåéñòâèå ìîäóëåé ìåæäó ñîáîé.Êàæäûé áèáëèîòå÷íûé ìîäóëü ýêñïîðòèðóå âñå èìåíà, êîòîðûå îáúÿâëåíèû â ìîäóëå îïðåäåëåíèÿ.Ìîäóëü âèäèìîñòè - èìÿ ëèáî âèäèìî, ëèáî íå âèäèìî.Âèäèìîñòü (âèäèìûå èìåíà) äåëÿòñÿ íà äâà êëàññà- ïîòåíöèàëüíàÿ âèäèìîñòü (òðåáóåò óòî÷íåíèÿ)- íåïîñðåäñòâåííàÿ âèäèìîñòü (ìîæåò áûòü èñïîëüçîâàííî áåç âñÿêèõóòî÷íåíèé)Èìååòñÿ ñïåöèàëüíàÿ êîíñòðóêöèÿ IMPORT, êîòîðàÿ èìååò 2 âèäà.

Характеристики

Тип файла
PDF-файл
Размер
414,21 Kb
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6547
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее