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

PDF-файл лекции (2008) (by Kravets), страница 9 Языки программирования (54051): Лекции - 7 семестрлекции (2008) (by Kravets): Языки программирования - PDF, страница 9 (54051) - СтудИзба2019-09-19СтудИзба

Описание файла

PDF-файл из архива "лекции (2008) (by Kravets)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 9 страницы из PDF

Åäèíñòâåííûé òèï äàííûõ, äîáàâëåííûé â Ñ++ èçíà÷àëüíî ññûëî÷íûé òèï. Âñîâðåìåííûõ áèáëèîòåêàõ Ñ++ ïðèñóòñòâóåò ñïåö òèï äàííûõ smartpointer. Îí ìîæåò íàïðèìåð ïðîâåðÿòü âàëèäíîñòü îáúåêòà äîñòóïà, àâòîìàòè÷åñêîå óäàëåíèå îáúåêòà íà êîòîðûé îí óêàçûâàåò è òàê äàëåå.41Ëåêöèÿ11.Ãëàâà 2. Ñîñòàâíûå òèïû äàííûõ.Òèïû äàííûõ, âñòðîåííûå â ÿçûê ïðîãðàììèðîâàíèÿ, íî ïðè ýòîìèìåþò âíóòðåííþþ ñòðóêòóðó.Ìàññèâû.Çàïèñè / ñòðóêòóðû / îáúåäèíåíèÿ.Ìíîæåñòâà.(Ñòàíäàðòíûé Ïàñêàëü)Ôàéëû (ñòàíäàðòíûé Ïàñêàëü)Ñòðîêè (íå ñîâñåì òèï (â ÿçûêå Ïàñêàëü) packed array of char).Êëàññû ÿçûêà Ñ++ íå ÿâëÿþòñÿ ñîñòàâíûìè òèïàìè äàííûõ.Îòäåëüíîìîæíî äîáàâèòü àññîöèàòèâíûå ìàññèâû è Hash òàáëèöû. ñîâðåìåííûõ ßÏ ìíîãèå òàêèå ñòðóêòóðû äàííûõ âìåñòî äîáàâëåíèÿ èõ â êîìïèëÿòîð, äîáàâëÿåòñÿ â ñòàíäàðòíóþ áèáëèîòåêó ÿçûêà.Äëÿ ìíîæåñòâà èç íèõ íå ñóùåñòâóåò óíèâåðñàëüíîãî, îäíîâðåìåííî ýôôåêòèâíîãî ñðåäñòâà ïðåäñòàâëåíèÿ äàííûõ.

Âìåñòî ýòîãî âûáèðàåòñÿíåêîòîðàÿ ðåàëèçàöèÿ êîòîðàÿ âõîäèò â ñòàíäàðòíóþ áèáëèîòåêó. Ïðèýòîì ñîõðàíÿåòñÿ âîçìîæíîñòü âûáîðà îïòèìàëüíîé ðåàëèçàöèè ïîä êîíêðåòíóþ çàäà÷ó. Äëÿ ïðèìåðà ðàññìîòðèì ñîðòèðîâêó. Äëÿ áîëüøèíñòâàçàäà÷ èñïîëüçóåòñÿ quick Sort, íî âî âñå áèáëèîòåêè ßÏ âêëþ÷àþò êàêìèíèìóì åùå îäèí àëãîðèòì, íàïðèìåð heap Sort. Òî åñòü âñòðàèâàÿïîäîáíûå âåùè â êîìïèëÿòîð, ìû ñòàíîâèìñÿ çàâèñèìûìè îò ìåòîäà ðåàëèçàöèè, êîòîðûé ìîæåò áûòü è íå îïòèìàëåí. Ñ òî÷êè çðåíèÿ ïðîñòûõ òèïîâ äàííûõ, áàçèñ ßÏ ïîñòîÿííî ðàñøèðÿåòñÿ (íà÷èíàÿ ñ íà÷àëàðàçâèòèÿ ßÏ), ïðè ýòî ñ òî÷êè çðåíèÿ ñîñòàâíûõ òèïîâ, íî ïîñòåïåííîñóæàåòñÿ.Ïóíêò 2. Ñ# åñòü êëàññû string è dictionary. Ïðè ýòîì êîìïèëÿòîð çíàåò ïðîêëàññ string (âûãëÿäèò êàê áèáëèîòå÷íûé êëàññ, íî âñòðîåí â êîìïèëÿòîð), à ïðî êëàññ dictionary îí íå çíàåò íè÷åãî (ïðîñòî áèáëèîòå÷íûéêëàññ).Ðàññìîòðèì ñîñòàâíûå òèïû äàííûõ.1.Ìàññèâû.Àáñòðàêöèÿ ïîñëåäîâàòåëüíîñòè îäíîòèïíûõ ýëåìåíòîâ.DxDxDxD ìàññèâ.Dn ìàññèâ êàê äåêàðòîâî ïðîèçâåäåíèå îäíîìåðíûõ òèïîâ äàííûõ.Ïðè ýòîì ýòà ïîñëåäîâàòåëüíîñòü äîëæíà ïðåäñòàâëÿòüñÿ â ïàìÿòè ââèäå íåïðåðûâíîé ïîñëåäîâàòåëüíîñòè ýëåìåíòîâ.

Òàêàÿ íåïðåðûâíîñòüðàñïîëîæåíèÿ â ïàìÿòè òðåáóåòñÿ äëÿ îïòèìèçàöèè äîñòóïà. Ñàìàÿ ðàñïðîñòðàíåííàÿ îïåðàöèÿ äëÿ ìàññèâîâ îïåðàöèÿ èíäåêñèðîâàíèÿ. Ñóùåñòâóåò 2 ñïîñîáà èçîáðàæåíèÿ ýòîé îïåðàöèè.421.A[i]2.A (i)Èíäåêñàöèÿ âîçâðàùàåò ññûëêó íà ñîîòâåòñòâóþùèé îáúåêò. Ñ# è java îáÿçàòåëüíà èíèöèàëèçàöèÿ ìàññèâà. Ê îïåðàöèè èíäåêñèðîâàíèÿ çà÷àñòóþ äîáàâëÿåòñÿ íàáîð àòðèáóòîâ.Àòðèáóòû ìàññèâîâ:1.Àòðèáóòû âñåõ îáúåêòîâ äàííûõ (áàçîâûå àòðèáóòû ëþáîãî òèïà äàííûõ).2.Áàçîâûé òèï.3.Òèï èíäåêñà. Äîëæåí áûòü íåêîòîðîé íåïðåðûâíîé ïîñëåäîâàòåëüíîñòüþ çíà÷åíèé.

Ïðè ýòîì îïòèìàëåí äèñêðåòíûé òèï. Äèñêðåòíûé òèï òàêîé òèï äàííûõ, ÷òî äëÿ íåãî îïðåäåëåíû îïåðàöèè succ è pred, ïðè÷åì èõ ðàáîòà íà âñåõ àðõèòåêòóðàõ îïðåäåëåíà îäíîçíà÷íî.4.Ãðàíèöû / Äëèíà ìàññèâà.Êîãäà ìû çíàåì áàçîâûé òèï ìàññèâà è îí íåïðåðûâíî ðàñïîëîæåí âïàìÿòè, òî êîìïèëÿòîð ìîæåò ýôôåêòèâíî îïðåäåëèòü îïåðàöèþ èíäåêñèðîâàíèÿ.  ðÿäå ÿçûêîâ òèï èíäåêñà ôèêñèðóåòñÿ ñòàòè÷åñêè âî âðåìÿòðàíñëÿöèè. Ïðèìåð ÿçûê Ïàñêàëü array [Index] of T.

Òàê æå ïðîèñõîäèò â ÿçûêå Àäà.  ÿçûêå Ñ íàïðèìåð, òàê æå êàê è âî ìíîãèõ ïîäîáíûõÿçûêàõ, òèï èíäåêñà âñåãäà integer. Èòàê òèï èíäåêñà ôèêñèðóåòñÿñàìîå ïîçäíåå íà ýòàïå òðàíñëÿöèè. Ìàññèâ ýòî âñåãäà êîìïðîìèññìåæäó òðåìÿ âåùàìè íàäåæíîñòü, ýôôåêòèâíîñòü, ãèáêîñòü. Ñ òî÷êèçðåíèÿ ýòèõ òðåáîâàíèé îïòèìàëüíûé âàðèàíò ìàññèâû èç ÿçûêà Àäà.Äâå êðàéíîñòè ìàññèâû â Ñ è â Ïàñêàëå. Ìåæäó íèìè Ìîäóëà -2 èÎáåðîí à òàê æå Ñ# è java. ßçûêå ïàñêàëü âñå àòðèáóòû ñòàòè÷åñêèå, ñëåäîâàòåëüíî îí íàäåæåí. Òî åñòü ïðè èíäåêñàöèè ïðîèçâîäèòñÿ ñòàòè÷åñêèé/êâàçèñòàòè÷åñêèéêîíòðîëü.

Áîëåå òîãî âñå àòðèáóòû íå òîëüêî ñòàòè÷åñêèå, íî è ÿâëÿþòñÿàòðèáóòàìè òèïà. Òàêàÿ ðåàëèçàöèÿ äàåò íàäåæíîñòü è ýôôåêòèâíîñòü,íî ñèëüíî âðåäèò ãèáêîñòè. Ïðè ýòîì Ïàñêàëü íå ãíàëñÿ çà ãèáêîñòüþ,òî åñòü äëÿ ñâîèõ íóæä îí áûë äîñòàòî÷íî ãèáîê. Ïðè ýòîì òåðÿåòñÿòîëüêî óíèâåðñàëüíîñòü, â óãîäó ïðîñòîòå.ßçûê Ñ.

Îðèåíòèðîâàí íå íà ãèáêîñòü èëè íàäåæíîñòü, íî íà ýôôåêòèâíîñòü. Ñ ýòîé òî÷êè çðåíèÿ, ïàñêàëü è Ñ îáà îðèåíòèðîâàííû íà ýôôåêòèâíîñòü, íî åñòü è ðàçëè÷èÿ. êà÷åñòâå òèïà èíäåêñà áåðåòñÿ âñåãäàinteger. Ôèêñèðóåòñÿ ëåâàÿ ãðàíèöà 0. Òèï ýëåìåíòà è äëèíà ÿâëÿþòñÿ ñòàòè÷åñêèìè àòðèáóòàìè òèïà. Òàèì îáðàçîì ìû íåìíîãî óìåíüøèëèãèáêîñòü. Â Ñ àäðåñ íà÷àëà ìàññèâà è åãî ðàçìåð îäíîçíà÷íî îïðåäåëÿåòìàññèâ.

Ïðè ýòîì äëèíà òðåáóåòñÿ òîëüêî äëÿ ðàñïðåäåëåíèÿ ïàìÿòè.Òî åñòü ÷àùå âñåãî ìàññèâ çàäàåòñÿ àäðåñîì ñâîåãî íà÷àëà. Çàäàíèå èíäåêñà îò 0 ïîçâîëÿåò òàê æå ìàêñèìàëüíî ýôôåêòèâíî âû÷èñëÿòü àäðåñ43ýëåìåíòà ïðè èíäåêñèðîâàíèè.Òî åñòü âñå ÷òî íóæíî ÷òîá îïåðèðîâàòü ñ ìàññèâîì ýòî àäðåñ åãîíà÷àëà == àäðåñ åãî ïåðâîãî ýëåìåíòà ÷òî ÿâëÿåòñÿ D*. Ñëåäîâàòåëüíîëþáîé ìàññèâ ñîïîñòàâèì ñ D*.Òî åñòü:int a[20];a[1] = *(a+1);Ïðè ýòîì íèêàêîãî êâàçèñòàòè÷åñêîãî êîíòðîëÿ âûïîëíåíî íå áóäåò. Òàêèì îáðàçîì îáåñïå÷åíà ìàêñèìàëüíàÿ ýôôåêòèâíîñòü è íåêîòîðàÿ ãèáêîñòü ñòî÷êè çðåíèÿ óíèâåðñàëüíîñòè.×òî æå êàñàåòñÿ ÿçûêà Ìîäóëà-2, òî òàì òàê æå êàê è â ÿçûêå ïàñêàëüôèêñèðóåòñÿ áàçîâûé òèï è òèï èíäåêñà.

Ïðè ýòîì ïðîöåäóðû è ôóíêöèèìîãóò èìåòü îñîáûé òèï äàííûõ îòêðûòûé ìàññèâ. Íàïðèìåð:procedure P(var A:T) ãäå T îòêðûòûé ìàññèâ.ARRAY OF TO. Òî åñòü ìû íå ôèêñèðóåì òèï èíäåêñà.Ïðîöåäóðà, âûäàþùàÿ ñóììó ýëåìåíòîâ ìàññèâà.PROCEDURE SUM (VAR A:ARRAY OF T):T;var R:T;BeginT:=A[0];for I:=1 to HIGH(A) DOR:=R+A[i];return R; end SUM;Ñ òî÷êè çðåíèÿ ýôôåêòèâíîñòè äîñòóïà, Ìîäóëà-2 îïòèìàëüíûéêîìïðîìèññ. ÿçûêå Îáåðîí îñòàëîñü ïîíÿòèå îòêðûòîãî ìàññèâà.

È ôèêñèðóåòñÿòîëüêî áàçîâûé òèï ìàññèâà è åãî äëèíà.Type T = array N of D;Àíàëîãè÷íî D T[N];Ìàêñèìàëüíûé êîìïðîìèññ äîñòèãíóò â ÿçûêå Àäà. Ðàçíûå òèïû äàííûõ àáñîëþòíî íåñîâìåñòèìû ìåæäó ñîáîé. Ïðè ýòîì ýëåìåíòû ïîäòèïîâïðèâîäèìû ê áàçîâîìó òèïó. Type TNew is new T [îãðàíè÷åíèå]. Òóò ìîæåò áûòü îãðàíè÷åíèå äèàïàçîíà.

 ìàññèâàõ åñòü ïîíÿòèÿ íåîãðàíè÷åííîãî ìàññèâà è îãðàíè÷åííîãî ìàññèâà.  íåîãðàíè÷åííîì ôèêñèðóåòñÿòîëüêî òèï äàííûõ è òèï èíäåêñà.Type arr is array (Index range<>) of D;Type limarr is array (Index range 1..N) of D; êà÷åñòâå èíäåêñíîãî áåðåòñÿ ëþáîé äèñêðåòíûé òèï äàííûõ. Íåîãðàíè÷åííûå ìàññèâû ìîãóò áûòü ôîðìàëüíûìè ïàðàìåòðàìè ïðîöåäóð èôóíêöèé.X:limarr; íîðìàëüíî.44X: arr; íåëüçÿ.Ïðè ýòîìZ:arr range 0..10 íîðìàëüíî.Z- ïîäòèï òèïà arr.W:arr range 1..11;U:arr range 0..11;Âñå ýòè ïåðåìåííûå ïðèíàäëåæàò ðàçíûì ïîäòèïàì îäíîãî è òîãîæå òèïà. Íåÿâíàÿ ñîâìåñòèìîñòü â ñëó÷àå åñëè êîìïèëÿòîð ïðîâåðèòäèàïàçîí çíà÷åíèé.

Òðåáîâàíèå äëèíû ìàññèâîâ äîëæíû ñîâïàäàòü.Òî åñòüZ:=W;W:=Z; ìîæíî.Íî Z:=U íàðóøåíèå âî âðåìÿ ïðîâåðêè íà ýòàïå êâàçèñòàòè÷åñêîãîêîíòðîëÿ.function SUM(A:arr) return D isR:D;beginfor i in A'RANGE loopR:=R+A(i);end loop;return R;end SUM;A'LENGTHA'RANGE45Ëåêöè 12.Êàê óæå ãîâîðèëîñü, íàèëó÷øåãî êîìïðîìèññà ìåæäó íàäåæíîñòüþè ãèáêîñòüþ óäàëîñü äîñòè÷ü â ÿçûêå Àäà. Ïîâòîðíîå îïèñàíèå ìàññèâîâÿçûêà Àäà (áûëî â ëåêöèè 11). Ïåðåïèøåì ïðèìåð ñ ïðîøëîé ëåêöèè.Åñëè â îáúÿâëåíèè ôóíêöèè ÿâíî óêàçàòü ïîëíîñòüþ îïðåäåëåííûéòèï ìàññèâà, òî òåðÿåòñÿ ñâîéñòâî ãèáêîñòè.

Ïîýòîìó ïèøåì òàê.function SUM (A:ARRUNL) return real;R:real:=0.0;beginfor i in A'RANGE loopR:=R+A(i);end loop;return R;end SUM;A'LENGTHA'FIRSTA'LASTA'RANGE <=> A'FIRST..A'LASTX:ARRUNL range 0..9;êîððåêòíîY:ARRUNL range -10..10;êîððåêòíîi:=SUM (X);êîððåêòíîj:=SUM (Y);êîððåêòíîÄëèíû ìàññèâîâ ìîãóò áûòü ëþáûìè. Íî òðåáóåòñÿ ÷òîá òèï èíäåêñà è òèï ýëåìåíòîâ ìàññèâîâ ñîâïàäàëè.

Äëÿ òîãî ÷òîáû èçáàâèòüñÿ îòýòèõ îãðàíè÷åíèé íåîáõîäèìî èñïîëüçîâàòü íåêèé àíàëîã øàáëîíîâ (íàïðèìåð èõ àíàëîã â ÿçûêå Àäà).Ðàññìîòðèì ñîâðåìåííûå ÿçûêè ïðîãðàììèðîâàíèÿ Ñ#, Java, Delphi. Delphi åñòü âñå ÷òî áûëî â ñòàíäàðòíîì Pascal ïëþñ, äîáàâèëèñü íåîãðàíè÷åííûå ìàññèâû. Ñîâðåìåííûé ïîäõîä ê èíäåêñàöèè òèï èíäåêñàâñåãäà int è íà÷èíàåòñÿ ñ 0. Äëèíà ÿâëÿåòñÿ ñâîéñòâîì íå òèïà, íî ýêçåìïëÿðà. Ìàññèâû îáúåêòû îñîáîãî òèïà, êîòîðûå âûâîäÿòñÿ èç íåêîòîðîãî êëàññà èëè ïîääåðæèâàþò íåêîòîðûé êëàññ/èíòåðôåéñ.

Èòàê ñòèðàåòñÿ ðàçëè÷èå ìåæäó ìàññèâîì è îáúåêòîì. Íî ïðè ýòîì ñîõðàíÿåòñÿñâîéñòâî íåïðåðûâíîñòè ðàñïîëîæåíèÿ â ïàìÿòè.Îáúÿâëåíèå:T[] x;òåïåðü x ññûëêà íà ìàññèâ. Äëèíà ïðè ýòîì íå óêàçûâàåòñÿ.46x = new T[len]; Äëèíà óêàçûâàåòñÿ êàê ñâîéñòâî êîíêðåòíîãî îáúåêòà.len íå îáÿçàíà áûòü êîíñòàíòîé. Ìåñòî ïîä ìàññèâ îòâîäèòñÿ â äèíàìè÷åñêîé ïàìÿòè. Ïðè ýòîì ìàññèâû âåäóò ñåáÿ êàê êëàññû îíè èìåþòíå ñâîéñòâà, à ìåòîäû è ïîääåðæèâàþò íåêîòîðûå ñòàíäàðòíûå ìåòîäûâñåõ êëàññîâ. Ïîñëå âûäåëåíèÿ ïàìÿòè ïîä ìàññèâ, ìû íå ìîæåì èçìåíèòü åãî äëèíó, ìû òîëüêî ìîæåì ïðîèçâåñòè ïåðåðàñïðåäåëåíèå ïàìÿòè,òî åñòü âûäåëèòü ïàìÿòü ïîä íîâûé ìàññèâ. Òàêîé ïîäõîä ðåàëèçîâàí âÑ# è Java.Äëÿ ýêçåìïëÿðà äëèíà êâàçèñòàòè÷åñêèé àòðèáóò, òî åñòü çàäàåòñÿâî âðåìÿ âûïîëíåíèÿ, íî íåò âîçìîæíîñòè ìåíÿòü åå âî âðåìÿ âûïîëíåíèÿ. Àíàëîãè÷íàÿ ñèòóàöèÿ ñî ñòðîêàìè.

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