ÔÅÄÅÐÀËÜÍÎÅ ÀÃÅÍÒÑÒÂÎ ÏÎ ÎÁÐÀÇÎÂÀÍÈÞ Государственное образовательное учреждение высшего профессионального образования СА...
20 downloads
474 Views
180KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ÔÅÄÅÐÀËÜÍÎÅ ÀÃÅÍÒÑÒÂÎ ÏÎ ÎÁÐÀÇÎÂÀÍÈÞ Государственное образовательное учреждение высшего профессионального образования САНКТПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÅ ÍÀ ßÇÛÊÀÕ ÂÛÑÎÊÎÃÎ ÓÐÎÂÍß Ìåòîäè÷åñêèå óêàçàíèÿ ê âûïîëíåíèþ ëàáîðàòîðíûõ ðàáîò ¹ 18
СанктПетербург 2005
Ñîñòàâèòåëü Ò. Ì. Ìàêñèìîâà Ðåöåíçåíò Â. Ï. Ïîïîâ  ìåòîäè÷åñêèå óêàçàíèÿ âêëþ÷åíû êðàòêèå òåîðåòè÷åñêèå ñâåäåíèÿ, íåîáõîäèìûå äëÿ âûïîëíåíèÿ ëàáîðàòîðíûõ ðàáîò, òðåáîâàíèÿ ê ñîäåðæàíèþ îò÷åòà, à òàêæå âàðèàíòû èíäèâèäóàëüíûõ çàäàíèé. Ïðåäíàçíà÷åíû äëÿ ñòóäåíòîâ âñåõ ôîðì îáó÷åíèÿ, ïðîõîäÿùèõ ïîäãîòîâêó ïî ñïåöèàëüíîñòÿì 220400 è 351500. Ïîäãîòîâëåíû êàôåäðîé êîìïüþòåðíîé ìàòåìàòèêè è ïðîãðàììèðîâàíèÿ è ðåêîìåíäîâàíû ê èçäàíèþ ðåäàêöèîííî-èçäàòåëüñêèì ñîâåòîì Ñàíêò-Ïåòåðáóðãñêîãî ãîñóäàðñòâåííîãî óíèâåðñèòåòà àýðîêîñìè÷åñêîãî ïðèáîðîñòðîåíèÿ.
Ðåäàêòîð À. Ì. Êàðòóõèíà Êîìïüþòåðíàÿ âåðñòêà Î. È. Áóðäèíîé Ñäàíî â íàáîð 20. 05.05. Ïîäïèñàíî ê ïå÷àòè 10.09.05. Ôîðìàò 60´84 1/16. Áóìàãà îôñåòíàÿ. Ïå÷àòü îôñåòíàÿ. Óñë. ïå÷. ë. 1,27. Ó÷.-èçä. ë. 1,22. Òèðàæ 200 ýêç. Çàêàç ¹ Ðåäàêöèîííî-èçäàòåëüñêèé îòäåë Îòäåë ýëåêòðîííûõ ïóáëèêàöèé è áèáëèîãðàôèè áèáëèîòåêè Îòäåë îïåðàòèâíîé ïîëèãðàôèè ÃÓÀ Ï 190000, Ñàíêò-Ïåòåðáóðã, óë. Á. Ìîðñêàÿ, 67
© ÃÎÓ ÂÏÎ «ÑÏáÃÓÀÏ», 2005
2
1. ÎÁÙÈÅ ÒÐÅÁÎÂÀÍÈß Ê ÑÎÄÅÐÆÀÍÈÞ ÎÒ×ÅÒÎÂ
 ìåòîäè÷åñêèå óêàçàíèÿ âêëþ÷åíû çàäàíèÿ ëàáîðàòîðíûõ ðàáîò ¹ 18, ñîäåðæàíèåì êîòîðûõ ÿâëÿåòñÿ ðàçðàáîòêà ïðîãðàììû íà ÿçûêå Ñ. Ïðîöåññ ðàçðàáîòêè ïðîãðàììû ñòóäåíò äîëæåí îòðàçèòü â ïèñüìåííîì îò÷åòå î âûïîëíåíèè ëàáîðàòîðíîé ðàáîòû, êîòîðûé äîëæåí ñîñòîÿòü èç ñëåäóþùèõ ðàçäåëîâ: 1. Ïîñòàíîâêà çàäà÷è. 2. Îïèñàíèå âõîäíûõ è âûõîäíûõ äàííûõ. 3. Íàáîð òåñòîâ. 4. Îïèñàíèå àëãîðèòìà. 5. Òåêñò ïðîãðàììû. 6. Àíàëèç ðåçóëüòàòîâ è âûâîäû. Ïåðâûå òðè ïóíêòà îò÷åòà ñëåäóåò ïîäãîòîâèòü è îáñóäèòü ñ ïðåïîäàâàòåëåì äî íàïèñàíèÿ òåêñòà ïðîãðàììû. Ïðè ýòîì â ïîñòàíîâêó çàäà÷è â äîïîëíåíèå ê òåêñòó èç íàñòîÿùèõ ìåòîäè÷åñêèõ óêàçàíèé ñëåäóåò âíåñòè îïèñàíèå ðåàêöèè áóäóùåé ïðîãðàììû íà íåêîòîðûå íåîãîâîðåííûå â çàäàíèè çíà÷åíèÿ èñõîäíûõ äàííûõ, â òîì ÷èñëå íà íåêîððåêòíûå ñ òî÷êè çðåíèÿ ïîñòàíîâêè çàäà÷è çíà÷åíèÿ. Âî âòîðîì ðàçäåëå äëÿ âõîäíûõ è âûõîäíûõ ïàðàìåòðîâ íåîáõîäèìî ââåñòè ñèìâîëè÷åñêèå îáîçíà÷åíèÿ (èìåíà) è ïðèâåñòè îïèñàíèÿ òèïîâ ýòèõ èìåí â òåðìèíîëîãèè ÿçûêà Ñ.  òðåòüåì ðàçäåëå ñëåäóåò ïåðå÷èñëèòü íåñêîëüêî âàðèàíòîâ çíà÷åíèé âõîäíûõ ïàðàìåòðîâ ñ ñîîòâåòñòâóþùèìè èì çíà÷åíèÿìè âûõîäíûõ, âû÷èñëåííûìè âðó÷íóþ. Îñíîâíîå òðåáîâàíèå ê îïèñàíèþ àëãîðèòìà çàêëþ÷àåòñÿ â òîì, ÷òîáû îíî áûëî áîëåå ïîäðîáíûì îïèñàíèåì ïðîöåññà ðåøåíèÿ çàäà÷è, ÷åì ïîñòàíîâêà çàäà÷è èç ï. 1, íî ìåíåå ïîäðîáíûì, ÷åì òåêñò ïðîãðàììû.  îïèñàíèè äîëæíà íàéòè îòðàæåíèå îñíîâíàÿ èäåÿ ðåøåíèÿ ïîñòàâëåííîé çàäà÷è. Äîïóñêàåòñÿ èñïîëüçîâàíèå ëþáîé èç îáùåïðèíÿòûõ ôîðì îïèñàíèÿ àëãîðèòìà, â òîì ÷èñëå áëîê-ñõåìû è ñëîâåñíîå îïèñàíèå. Òåêñò ïðîãðàììû íåîáõîäèìî ñíàáäèòü êîììåíòàðèÿìè. Ðåøåíèå çàäà÷è äîëæíî áûòü îôîðìëåíî â âèäå ôóíêöèè, ïàðàìåòðàìè êîòîðîé ÿâëÿåòñÿ âñå ïåðå÷èñëåííîå â ï. 2 îò÷åòà.  ýòîì æå ïóíêòå îò÷åòà ñëåäóåò ïðèâåñòè îïåðàòîð ïðîòîòèïà ýòîé ôóíêöèè. Îíà íå äîëæíà ñîäåðæàòü îïåðàöèé ââîäà-âûâîäà, åñëè ýòî íå òðåáóåòñÿ â ïîñòàíîâêå çàäà÷è. Ââîä èñõîäíûõ äàííûõ è âûâîä ðåçóëüòàòîâ âûïîëíÿþòñÿ â ãî3
ëîâíîé ïðîãðàììå, òàê íàçûâàåìîì èìèòàòîðå âíåøíåé ñðåäû (òåõíîëîãè÷åñêîé ÷àñòè), â êîòîðîé ìîæåò ýêñïëóàòèðîâàòüñÿ ôóíêöèÿ.  çàêëþ÷èòåëüíîì ðàçäåëå äîëæåí áûòü ïðèâåäåí êðèòè÷åñêèé àíàëèç ïðîäåëàííîé ðàáîòû ñ óêàçàíèåì äîñòîèíñòâ è íåäîñòàòêîâ ðàçðàáîòàííîãî àëãîðèòìà ðåøåíèÿ çàäà÷è è åãî ïðîãðàììíîé ðåàëèçàöèè, à òàêæå êîëè÷åñòâåííûå õàðàêòåðèñòèêè ïðîãðàììû: åå îáúåì, îáúåì äîïîëíèòåëüíîé ïàìÿòè, ïðèâëåêàåìîé äëÿ ðåàëèçàöèè àëãîðèòìà, âðåìÿ ðàáîòû ïðîãðàììû, èçìåðåííîå â êîëè÷åñòâå âûïîëíÿåìûõ òèïè÷íûõ îïåðàöèé â çàâèñèìîñòè îò ðàçìåðîâ èñõîäíûõ äàííûõ. 2. ÏÐÈÌÅÐ ÎÒ×ÅÒÀ Î ÂÛÏÎËÍÅÍÈÈ ËÀÁÎÐÀÒÎÐÍÎÉ ÐÀÁÎÒÛ
Ëàáîðàòîðíàÿ ðàáîòà ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÅ ÀËÃÎÐÈÒÌΠÑÎÐÒÈÐÎÂÊÈ ÌÀÑÑÈÂΠ1. Ïîñòàíîâêà çàäà÷è Íàïèñàòü ïðîãðàììó ñîðòèðîâêè ìàññèâà, ñîäåðæàùåãî íå áîëåå 100 öåëûõ ÷èñåë. 2. Îïèñàíèå âõîäíûõ è âûõîäíûõ äàííûõ Âõîäíûå äàííûå: int *a óêàçàòåëü íà ìàññèâ, ïîäëåæàùèé ñîðòèðîâêå; char n êîëè÷åñòâî ðåàëüíî ââåäåííûõ ýëåìåíòîâ ìàññèâà a. Âûõîäíûå äàííûå: int *a óêàçàòåëü íà ìàññèâ, îòñîðòèðîâàííûé ïî âîçðàñòàíèþ çíà÷åíèé åãî ïåðâûõ n ýëåìåíòîâ. 3. Îïåðàòîð ïðîòîòèïà ôóíêöèè ñîðòèðîâêè void sort(int *a, char n) 4. Íàáîð òåñòîâ Âõîäíûå äàííûå: *a={10, 30, 20, 50, 30} n=5 4
Âûõîäíûå äàííûå: *a={10, 20, 30, 30, 50} 5. Îïèñàíèå àëãîðèòìà Ñîðòèðîâêà ýëåìåíòîâ ìàññèâà âûïîëíÿåòñÿ ìåòîäîì ïðÿìîãî îáìåíà. Ïðè ïðîñìîòðå ñ 1-ãî ïî n-é ýëåìåíòîâ ìàññèâà àíàëèçèðóþòñÿ êàæäûå äâà ðÿäîì ñòîÿùèå ýëåìåíòà, è, åñëè èõ ðàçìåùåíèå íå óäîâëåòâîðÿåò óñëîâèþ óïîðÿäî÷åííîñòè, îíè îáìåíèâàþòñÿ ñâîèìè çíà÷åíèÿìè. Òàêèå ïðîñìîòðû ìàññèâà âûïîëíÿþòñÿ äî òåõ ïîð, ïîêà íà î÷åðåäíîì íå áóäåò âûïîëíåíî íè îäíîãî îáìåíà. 6. Òåêñò ïðîãðàììû void sort(int *a, char n) //ôóíêöèÿ ñîðòèðîâêè n ïåðâûõ ýëåìåíòîâ (n < = 100) ìàññèâà a { bool f =t rue; //ïðèçíàê âûïîëíåíèÿ îïåðàöèè îáìåíà char i: int r; while (f) { f = false; //ñáðîñ ïðèçíàêà îáìåíà} //ïðîñìîòð ìàññèâà for (i = 0; i < n1; n ++) if (a[i]>a[i+1]) { //îáìåí äâóõ ýëåìåíòîâ r = a[i]; a[i] = a[i+1]; a[i+1] = r; //óñòàíîâêà ïðèçíàêà îáìåíà f = true; } } } 7. Àíàëèç ðåçóëüòàòîâ è âûâîäû Îáúåì ðàçðàáîòàííîé ïðîãðàììû ñîðòèðîâêè âìåñòå ñ òåõíîëîãè÷åñêîé ÷àñòüþ, âûïîëíÿþùåé ââîä èñõîäíûõ äàííûõ è âûâîä ðåçóëüòà5
òîâ, ñîñòàâëÿåò 11260 áàéò. Ìàññèâ óïîðÿäî÷èâàåòñÿ â îòâåäåííîé äëÿ íåãî ïàìÿòè ñ ïðèâëå÷åíèåì â êà÷åñòâå äîïîëíèòåëüíîé ïàìÿòè, íåîáõîäèìîé äëÿ ðàçìåùåíèÿ îäíîãî ýëåìåíòà òèïà int. Âðåìÿ ðàáîòû ïðîãðàììû â êîëè÷åñòâå îïåðàöèé îáìåíà äâóõ ýëåìåíòîâ çíà÷åíèÿìè â õóäøåì ñëó÷àå (åñëè èñõîäíûé ìàññèâ óïîðÿäî÷åí ïî óáûâàíèþ) ñîñòàâëÿåò (n*nn)/2 îïåðàöèé, â ëó÷øåì ñëó÷àå 0 îïåðàöèé, à â êîëè÷åñòâå îïåðàöèé ñðàâíåíèÿ äâóõ ñîñåäíèõ ýëåìåíòîâ ìàññèâà â õóäøåì ñëó÷àå (n*n+n)/21 îïåðàöèé; â ëó÷øåì n1 îïåðàöèé.  êà÷åñòâå íåäîñòàòêà ïðîãðàììíîé ðåàëèçàöèè ìîæíî îòìåòèòü îòñóòñòâèå êîíòðîëÿ êîððåêòíîñòè çíà÷åíèÿ ïàðàìåòðà n. 3. ËÀÁÎÐÀÒÎÐÍÛÅ ÐÀÁÎÒÛ
Ëàáîðàòîðíàÿ ðàáîòà ¹ 1 ÂÑÒÐÎÅÍÍÛÅ ÒÈÏÛ ÄÀÍÍÛÕ 1. Îñíîâíûå òèïû äàííûõ ßçûê Ñ ïîääåðæèâàåò íåñêîëüêî áàçîâûõ òèïîâ äàííûõ, êîòîðûå òàêæå íàçûâàþò ïðîñòûìè. Ïåðå÷èñëèì íåêîòîðûå èç íèõ. ñhar îäíîáàéòîâîå öåëîå ñî çíàêîì (äèàïàçîí ïðåäñòàâëåíèÿ ÷èñåë: îò 128 äî 127); òèï äàííûõ char èñïîëüçóåòñÿ òàêæå è äëÿ îïèñàíèÿ ñèìâîëüíûõ äàííûõ; unsigned char îäíîáàéòîâîå öåëîå áåç çíàêà (äèàïàçîí ïðåäñòàâëåíèÿ ÷èñåë: îò 0 äî 255); int äâóõáàéòîâîå öåëîå ñî çíàêîì (äèàïàçîí ïðåäñòàâëåíèÿ ÷èñåë: îò 32768 äî 32767); unsigned int äâóõáàéòîâîå öåëîå ñî çíàêîì (äèàïàçîí ïðåäñòàâëåíèÿ ÷èñåë: îò 0 äî 65535); long ÷åòûðåõáàéòîâîå öåëîå ñî çíàêîì (äèàïàçîí ïðåäñòàâëåíèÿ ÷èñåë: îò 2147483648 äî 2147483647); float ÷åòûðåõáàéòîâîå âåùåñòâåííîå; double âîñüìèáàéòîâîå âåùåñòâåííîå. Äëÿ ÷èñëîâûõ òèïîâ îïðåäåëåíû àðèôìåòè÷åñêèå îïåðàöèè: ñëîæåíèå (+), âû÷èòàíèå (), óìíîæåíèå(*) è äåëåíèå (/ è %). Ðåçóëüòàòîì îïåðàöèè «/» íàä âåùåñòâåííûìè ÷èñëàìè ÿâëÿåòñÿ âåùåñòâåííîå ÷àñòíîå, à íàä öåëûìè öåëàÿ ÷àñòü îò äåëåíèÿ. Äëÿ ïîëó÷åíèÿ îñòàòêà îò öåëî÷èñëåííîãî äåëåíèÿ èñïîëüçóåòñÿ îïåðàöèÿ «%». 6
Ïðè âûïîëíåíèè ëàáîðàòîðíîé ðàáîòû íóæíî îãðàíè÷èòüñÿ ìèíèìàëüíûì êîëè÷åñòâîì ïåðåìåííûõ, õðàíÿùèõ ðåçóëüòàòû àðèôìåòè÷åñêèõ äåéñòâèé, èñïîëüçóÿ îêíî îòñëåæèâàíèÿ èõ ïîñëåäîâàòåëüíûõ çíà÷åíèé ïðè ïîøàãîâîì âûïîëíåíèè ïðîãðàììû. Îêíî îòñëåæèâàíèÿ âûçûâàåòñÿ ïîñðåäñòâîì êîìàíä ìåíþ DEBUG ñðåäû turbo C (Visual C). 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó 1. Äëÿ äâóõ íåîòðèöàòåëüíûõ âåùåñòâåííûõ ÷èñåë ñ öåëîé ÷àñòüþ íå áîëåå 9 âûïîëíèòü âñå àðèôìåòè÷åñêèå îïåðàöèè â ïîøàãîâîì ðåæèìå ðàáîòû ïðîãðàììû, ïðîñìîòðåâ ðåçóëüòàòû âû÷èñëåíèé â îêíå «Watch» îòëàä÷èêà. 2. Ïðîäåëàòü àíàëîãè÷íóþ ïðîöåäóðó íàä öåëûìè ÷èñëàìè, ðàâíûìè öåëûì ÷àñòÿì ââåäåííûõ âåùåñòâåííûõ. 3. Ñôîðìèðîâàòü êîä öèôðû, ðàâíîé îäíîìó èç öåëûõ ÷èñåë, ïîëó÷åííûõ â ï. 2. Ëàáîðàòîðíàÿ ðàáîòà ¹ 2 ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈÅ ÎÏÅÐÀÖÈÉ ÂÂÎÄÀ-ÂÛÂÎÄÀ 1. Íåêîòîðûå áèáëèîòå÷íûå ôóíêöèè äëÿ ðàáîòû ñ ôàéëàìè Ôóíêöèè ôàéëîâîãî ââîäà-âûâîäà èñïîëüçóþò óêàçàòåëü ôàéëîâîãî ïîòîêà (óêàçàòåëü íà ôàéë): FILE *f . Äëÿ îòêðûòèÿ ôàéëà èñïîëüçóåòñÿ ôóíêöèÿ: FILE *fopen (const char *filename, const char *mode), êîòîðàÿ îòêðûâàåò ôàéë äëÿ ÷òåíèÿ èëè äëÿ çàïèñè, èëè äëÿ òîãî è äðóãîãî (â çàâèñèìîñòè îò çíà÷åíèÿ ïàðàìåòðà mode) è âîçâðàùàåò çíà÷åíèÿ óêàçàòåëÿ íà ôàéë. Äàëåå ïîëó÷åííûé óêàçàòåëü ìîæåò èñïîëüçîâàòüñÿ äëÿ âûïîëíåíèÿ îïåðàöèé ÷òåíèÿ èëè çàïèñè. Íåêîòîðûå çíà÷åíèÿ ïàðàìåòðà mode: «r» îòêðûòèå òåêñòîâîãî ôàéëà äëÿ ÷òåíèÿ; «w» ñîçäàíèå òåêñòîâîãî ôàéëà äëÿ çàïèñè; «a» îòêðûòèå òåêñòîâîãî ôàéëà äëÿ äîáàâëåíèÿ.  ñëó÷àå íåóäà÷íîé ïîïûòêè îòêðûòü ôàéë fopen âîçâðàùàåò NULL. Ôóíêöèÿ int fclose (FILE *f) çàêðûâàåò ôàéë. Ôóíêöèÿ int feof (FILE *f) âîçâðàùàåò íåíóëåâîå (èñòèííîå) çíà÷åíèå ïðè îáíàðóæåíèè êîíöà ôàéëà. 7
Ôóíêöèÿ int fputs (char *s, FILE *f) çàïèñûâàåò ñòðîêó ñèìâîëîâ â ôàéë (ïðè ýòîì ñèìâîë êîíöà ñòðîêè â ôàéë íå çàïèñûâàåòñÿ). Ôóíêöèÿ char *fgets (char *s,int n, FILE *f) ÷èòàåò íå áîëåå n-1 áàéò èç ôàéëà â ñòðîêó s, ïðåêðàùàÿ ÷òåíèå ïðè îáíàðóæåíèè ñèìâîëà íîâîé ñòðîêè èëè êîíöà ôàéëà. Ïðî÷èòàííàÿ ñòðîêà äîïîëíÿåòñÿ íóëü-òåðìèíàòîðîì (\0). Áîëåå óíèâåðñàëüíûìè ïî èñïîëüçîâàíèþ äëÿ ââîäà-âûâîäà ÿâëÿþòñÿ ôóíêöèè fscanf è fprintf. Ôóíêöèÿ int fscanf (FILE *f, const char *fmt, ) ââîäèò äàííûå (ñòðîêè, öåëûå è âåùåñòâåíííûå ÷èñëà è ò. ä.) â ôîðìàòå, îïðåäåëÿåìîì ñòðîêîé fmt.  êà÷åñòâå àðãóìåíòîâ ââîäà ñëåäóåò óêàçûâàòü íå ñàìè ïåðåìåííûå, à èõ àäðåñà. Ôóíêöèÿ int fprintf (FILE *f, const char *fmt, ) âûâîäèò äàííûå (ñòðîêè, öåëûå è âåùåñòâåíííûå ÷èñëà è ò. ä.) â ôîðìàòå, îïðåäåëÿåìîì ñòðîêîé fmt. Äëÿ ââîäà ñòðîê àðãóìåíò fmt äîëæåí ñîäåðæàòü ñïåöèôèêàöèþ ôîðìàòà âèäà: %s. Äëÿ èñïîëüçîâàíèÿ âûøåïåðå÷èñëåííûõ ôóíêöèé ñëåäóåò îáúÿâèòü çàãîëîâî÷íûé ôàéë stdio.h . 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Íàïèñàòü ïðîãðàììó âûïîëíåíèÿ â ñîîòâåòñòâèè ñ âàðèàíòîì çàäàíèÿ îäíîé èç íèæåïåðå÷èñëåííûõ îïåðàöèé ñ òåêñòîâûìè ôàéëàìè. 1.  çàäàííîì ôàéëå íàéòè çàïèñü ñ çàäàííûì íîìåðîì è çàïèñàòü åå â êîíåö äðóãîãî ôàéëà. 2.  çàäàííîì ôàéëå îïðåäåëèòü ìåñòîïîëîæåíèå çàäàííîé ñòðîêè â âèäå íîìåðà çàïèñè, åå ñîäåðæàùåé. 3. Ñôîðìèðîâàòü òåêñòîâûé ôàéë íà îñíîâå ñîäåðæèìîãî çàäàííîãî òåêñòîâîãî ôàéëà, ïîìåíÿâ ìåñòàìè äâå çàïèñè ñ çàäàííûìè íîìåðàìè. 4. Âûïîëíèòü êîïèðîâàíèå çàïèñåé çàäàííîãî ôàéëà â äðóãîé ôàéë â îáðàòíîì ïîðÿäêå. 5. Ñôîðìèðîâàòü òåêñòîâûé ôàéë íà îñíîâå ñîäåðæèìîãî çàäàííîãî òåêñòîâîãî ôàéëà, óäàëèâ çàïèñü ñ çàäàííûì íîìåðîì. 6. Ðàçáèòü çàäàííûé ôàéë ïîïîëàì, çàïèñàâ êàæäóþ ïîëîâèíó â íîâûé ôàéë. 7. Ñôîðìèðîâàòü òåêñòîâûé ôàéë íà îñíîâå ñîäåðæèìîãî çàäàííîãî òåêñòîâîãî ôàéëà, âûïîëíèâ êîïèðîâàíèå çàïèñè ñ çàäàííûì íîìå8
ðîì â ñëåäóþùóþ çà íåé çàïèñü ñî ñìåùåíèåì âñåõ çàïèñåé ñ áîëüøèìè íîìåðàìè. 8. Ðàçáèòü çàäàííûé ôàéë íà äâà îòíîñèòåëüíî òî÷êè äåëåíèÿ, çàäàííîé â âèäå íîìåðà çàïèñè èñõîäíîãî ôàéëà. 9. Ñôîðìèðîâàòü òåêñòîâûé ôàéë íà îñíîâå ñîäåðæèìîãî çàäàííîãî òåêñòîâîãî ôàéëà, âûïîëíèâ ïåðåìåùåíèå çàïèñè ñ çàäàííûì íîìåðîì â íîâóþ ïîçèöèþ, òàêæå çàäàííóþ ïîðÿäêîâûì íîìåðîì çàïèñè, ñ ñîõðàíåíèåì ïîðÿäêà ñëåäîâàíèÿ îñòàëüíûõ çàïèñåé ôàéëà. 10. Âûïîëíèòü ñëèÿíèå ñîäåðæèìîãî äâóõ çàäàííûõ ôàéëîâ â òðåòèé ôàéë. Ëàáîðàòîðíàÿ ðàáîòà ¹ 3 ÖÅËÎ×ÈÑËÅÍÍÀß ÀÐÈÔÌÅÒÈÊÀ 1. Ââåäåíèå â ïîñòàíîâêó çàäà÷è Ïîçèöèîííûå ñèñòåìû ñ÷èñëåíèÿ Ïðè çàïèñè ÷èñëà â ïîçèöèîííîé ñèñòåìå ñ÷èñëåíèÿ âêëàä êàæäîé öèôðû â ÷èñëîâóþ âåëè÷èíó îïðåäåëÿåòñÿ ñàìîé öèôðîé è âåñîì ïîçèöèè, êîòîðóþ îíà çàíèìàåò. Äëÿ ñèñòåìû ñ÷èñëåíèÿ ñ îñíîâàíèåì p âåñ ïîçèöèè ñ íîìåðîì i (i = 0¸n 1, n êîëè÷åñòâî öèôð â ÷èñëå) îïðåäåëÿåòñÿ êàê pi. ×òîáû ïåðåâåñòè ÷èñëî an1...a0 èç ñèñòåìû ñ÷èñëåíèÿ ñ îñíîâàíèåì p â ñèñòåìó ñ÷èñëåíèÿ ñ îñíîâàíèåì q, ìîæíî âîñïîëüçîâàòüñÿ ëþáûì èç äâóõ àëãîðèòìîâ: àëãîðèòìîì «óìíîæåíèÿ», âû÷èñëÿþùèì ìíîãî÷ëåí an1 p n1+a1 p+...+a0, èëè àëãîðèòìîì «äåëåíèÿ», âû÷èñëÿþùèì ïîñëåäîâàòåëüíûå îñòàòêè îò äåëåíèÿ íà q èñõîäíîãî ÷èñëà è öåëûõ ÷àñòåé ÷àñòíîãî îò äåëåíèÿ íà q. Ñëåäóþùèé ïðèìåð ÿâëÿåòñÿ èëëþñòðàöèåé ê àëãîðèòìàì «äåëåíèÿ» è «óìíîæåíèÿ» ïðè «ïåðåâîäå» ÷èñëà èç äåñÿòè÷íîé â äåñÿòè÷íóþ ñèñòåìó ñ÷èñëåíèÿ. N = 85462 = 10*8546+2 8546 = 10*854+6 854 = 10*85+4 85 = 10*8+5 8 = 10*0+8 Ïîëó÷åííûå îñòàòêè ÿâëÿþòñÿ ïîñëåäîâàòåëüíûìè öèôðàìè ÷èñëà, çàïèñàííîãî â ïîçèöèîííîé ñèñòåìå. 9
N = 85462 = 10*8546 + 2 = 10 (10*854 + 6) + 2 = 10 (10(10*85 + 4) + 6)+ + 2 = 10 (10 (10 (10*8 + 5) + 4) + 6) +2. Ïîñëå ïðåîáðàçîâàíèé ïîëó÷èì: N = 85462 = 8*104 +5*103 +4*102 +6*101 +2*100. Âûáîð îäíîãî èç äâóõ àëãîðèòìîâ îïðåäåëÿåòñÿ òåì, â êàêîé ñèñòåìå ñ÷èñëåíèÿ áóäóò âûïîëíÿòüñÿ âû÷èñëåíèÿ.  àëãîðèòìå «óìíîæåíèÿ» äåéñòâèÿ âûïîëíÿþòñÿ â ñèñòåìå ñ÷èñëåíèÿ ñ îñíîâàíèåì q, â àëãîðèòìå «äåëåíèÿ» â ñèñòåìå ñ÷èñëåíèÿ ñ îñíîâàíèåì p. Ïðèíöèï ïðåäñòàâëåíèÿ ÷èñëà â ëþáîé ïîçèöèîííîé ñèñòåìå ñ÷èñëåíèÿ îñòàåòñÿ îáùèì, ïðè ýòîì öèôðû-çíàêè â ñèñòåìå ñ îñíîâàíèåì p ýòî àðàáñêèå öèôðû îò 0 äî p 1 è, ïðè íåîáõîäèìîñòè, áóêâû ëàòèíñêîãî àëôàâèòà. Ðåêîìåíäàöèè ïî îðãàíèçàöèè ðàáîòû ñî ñòðîêàìè Ñòðîêà â Ñ-ïðîãðàììå ìîæåò áûòü ïðåäñòàâëåíà îäíîìåðíûì ìàññèâîì ñèìâîëîâ (íàïðèìåð: char string1[100]) èëè óêàçàòåëåì íà äàííûå ñèìâîëüíîãî òèïà (íàïðèìåð: char *string2). Âî âòîðîì ñëó÷àå êîìïèëÿòîð îòâîäèò ïàìÿòü òîëüêî äëÿ ðàçìåùåíèÿ ïåðåìåííîé-óêàçàòåëÿ, íî íå äëÿ ðàçìåùåíèÿ ñîáñòâåííî ñèìâîëüíûõ äàííûõ, êîòîðûå â ýòîì âàðèàíòå îðãàíèçàöèè ñòðîêè äîëæíû áûòü ðàçìåùåíû â äèíàìè÷åñêîé ïàìÿòè. Äëÿ âûäåëåíèÿ äèíàìè÷åñêîé ïàìÿòè ìîæíî âîñïîëüçîâàòüñÿ, íàïðèìåð, îïåðàòîðîì new (string2 = new char[100]) èëè malloc (string2 = (char *)malloc (100)).  ëþáîì ñëó÷àå, äëÿ îáðàùåíèÿ ê îäíîìó ñèìâîëó ñòðîêè, èìåþùåìó òèï char, èñïîëüçóåòñÿ îïåðàòîð [] (íàïðèìåð: string1[10] èëè string2[i+1]). Äëÿ ðàáîòû ñî ñòðîêàìè èìååòñÿ íàáîð ôóíêöèé (çàãîëîâî÷íûé ôàéë string.h), èç êîòîðûõ ïðè âûïîëíåíèè äàííîé ëàáîðàòîðíîé ðàáîòû ìîãóò ïîíàäîáèòüñÿ: char * strcpy(char *s1, char *s2) êîïèðîâàíèå ñòðîêè s2 â ñòðîêó s1; char * strcat(char *s1, char *s2) ñöåïëåíèå (êîíêàòåíàöèÿ) äâóõ ñòðîê; int strlen(char *s) îïðåäåëåíèå äëèíû ñòðîêè.  ëàáîðàòîðíîé ðàáîòå íåîáõîäèìî âûïîëíèòü ïåðåâîä ÷èñëà èç îäíîé ñèñòåìû ñ÷èñëåíèÿ (íà÷àëüíîé) â äðóãóþ (êîíå÷íóþ) ñîãëàñíî âàðèàíòó, èñïîëüçóÿ â êà÷åñòâå ïðîìåæóòî÷íîé ñèñòåìû ñ÷èñëåíèÿ âíóòðåííåå ïðåäñòàâëåíèå ÷èñëà â ïàìÿòè êîìïüþòåðà (äâîè÷íàÿ ñèñòåìà). Íà âõîä ïîäàåòñÿ öåïî÷êà ñèìâîëîâ (ñòðîêà), ñîäåðæàùàÿ òîëüêî öèôðû íà÷àëüíîé ñèñòåìû ñ÷èñëåíèÿ, íà âûõîäå ôîðìèðóþòñÿ äâà ðåçóëüòàòà: ÷èñëî â ïðîìåæóòî÷íîé ñèñòåìå â ôîðìàòå long è ÷èñëî â êîíå÷10
íîé ñèñòåìå ñ÷èñëåíèÿ â âèäå öåïî÷êè ñèìâîëîâ. Ïåðåâîä èç âíóòðåííåãî ïðåäñòàâëåíèÿ â êîíå÷íóþ ñèñòåìó îñóùåñòâëÿåòñÿ ïóòåì äåëåíèÿ íà îñíîâàíèå êîíå÷íîé ñèñòåìû ñ÷èñëåíèÿ. Âñå öèêëè÷åñêèå îïåðàöèè äîëæíû áûòü îðãàíèçîâàíû ðàöèîíàëüíî. Ñîäåðæàòåëüíûå ÷àñòè ïðîãðàììû îôîðìëÿþòñÿ ôóíêöèÿìè (ñì. ï. 1). Íåîáõîäèìî ïðåäóñìîòðåòü êîíòðîëü îøèáîê ââîäà, êîãäà öèôðû â ñòðîêå ââîäà íå ÿâëÿþòñÿ öèôðàìè-çíàêàìè íà÷àëüíîé ñèñòåìû ñ÷èñëåíèÿ. 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Íàïèñàòü ïðîãðàììó, âûïîëíÿþùóþ ïåðåâîä ÷èñëà èç çàäàííîé ñèñòåìû ñ÷èñëåíèÿ â äâîè÷íóþ è èç äâîè÷íîé â äðóãóþ çàäàííóþ ñèñòå12345 675879 7
8 4378498 8292287
8 4378498 6292287
ìó ñ÷èñëåíèÿ. Èñõîäíîå ÷èñëî ñ÷èòàòü çàäàííûì â âèäå ñòðîêè ñèìâîëîâ, èçîáðàæàþùåé öèôðû äàííîé ñèñòåìû ñ÷èñëåíèÿ. Äâîè÷íîå ÷èñëî ïðåäñòàâèòü â ôîðìàòå long, à âòîðîé âûõîäíîé ïàðàìåòð â ôîðìàòå ñòðîêè ñèìâîëîâ. Ñèñòåìû ñ÷èñëåíèÿ âûáðàòü â ñîîòâåòñòâèè ñ âàðèàíòîì çàäàíèÿ. Ëàáîðàòîðíàÿ ðàáîòà ¹ 4 ÂÅÙÅÑÒÂÅÍÍÀß ÀÐÈÔÌÅÒÈÊÀ 1. Ãåíåðàòîð ïñåâäîñëó÷àéíûõ ÷èñåë Äëÿ ìíîãèõ çàäà÷ ïðîãðàììèðîâàíèÿ, ñâÿçàííûõ ñ ìàòåìàòè÷åñêèìè ìîäåëÿìè ñëó÷àéíûõ ÿâëåíèé, íåîáõîäèìî èìåòü â ðàñïîðÿæåíèè ïîñëåäîâàòåëüíîñòè ÷èñåë, êîòîðûå ìîæíî ðàññìàòðèâàòü êàê çíà÷åíèÿ íåçàâèñèìûõ ñëó÷àéíûõ âåëè÷èí. Ñóùåñòâóåò ìíîãî ðàçëè÷íûõ ïðîãðàìì, âûðàáàòûâàþùèõ äåòåðìèíèðîâàííûå ïîñëåäîâàòåëüíîñòè ÷èñåë, êîòîðûå èìåþò äîñòàòî÷íî ñëîæíóþ íåðåãóëÿðíóþ ñòðóêòóðó è ïîýòîìó ïîõîæè íà ïîñëåäîâàòåëüíîñòè ñëó÷àéíûõ ÷èñåë. Òàêèå ïðî11
ãðàììû íàçûâàþò äàò÷èêàìè ïñåâäîñëó÷àéíûõ ÷èñåë. Âñå IBM PC èñïîëüçóþò â êà÷åñòâå òàêîãî äàò÷èêà ïîêàçàíèÿ ðåãèñòðà ñ÷åò÷èêà êàíàëà òàéìåðà. Ôóíêöèÿ int rand() âîçâðàùàåò ïñåâäîñëó÷àéíîå ÷èñëî â äèàïàçîíå îò 0 äî RAND_MAX. Äåëåíèåì ÷èñëà, ïîëó÷åííîãî rand(), íà RAND_MAX ìîæíî ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî â äèàïàçîíå îò 0 äî 1. Äëÿ óëó÷øåíèÿ «ñëó÷àéíîñòè» ïîëó÷àåìûõ ÷èñåë ìîæåò áûòü èñïîëüçîâàíà ôóíêöèÿ void srand (unsigned int seed), êîòîðàÿ óñòàíàâëèâàåò íà÷àëüíîå çíà÷åíèå ïîñëåäîâàòåëüíîñòè ñëó÷àéíûõ ÷èñåë.  êà÷åñòâå åå àðãóìåíòà ðåêîìåíäóåòñÿ èñïîëüçîâàòü òåêóùåå ñèñòåìíîå âðåìÿ: srand (time (NULL)). Íåîáõîäèìûå ôàéëû çàãîëîâêîâ: stdlib.h, time.h. Íàáîð òåñòîâ (ï. 3 îò÷åòà) â äàííîé ðàáîòå ñëåäóåò îôîðìèòü â ðåçóëüòàòå ïðîâåäåíèÿ ýêñïåðèìåíòà ñ ïðîãðàììîé; â ï. 6 ñðàâíèâàþòñÿ è îáîñíîâûâàþòñÿ ðåçóëüòàòû. 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Íàïèñàòü ôóíêöèè âû÷èñëåíèÿ ÷èñëà p äâóìÿ ñïîñîáàìè. Ñðàâíèòü ðåçóëüòàòû âû÷èñëåíèé. Ñòàòèñòè÷åñêèé ñïîñîá. Ïîëàãàÿ ÷èñëî p ðàâíûì îòíîøåíèþ 4Sêð/Sêâ, ãäå Sêâ ïëîùàäü ÷åòâåðòîé ÷àñòè êâàäðàòà ñî ñòîðîíîé, ðàâíîé 2, à Sêð ïëîùàäü ñåêòîðà, ñîñòàâëÿþùåãî ÷åòâåðòóþ ÷àñòü êðóãà, âïèñàííîãî â âûøåóêàçàííûé êâàäðàò, îöåíèòü Sêð è Sêâ êîëè÷åñòâîì ñëó÷àéíûõ òî÷åê, ïîïàâøèõ â ñåêòîð è â ÷àñòü êâàäðàòà ñîîòâåòñòâåííî. Ïîëîæåíèå êàæäîé ñëó÷àéíîé òî÷êè îïðåäåëèòü ñ ïîìîùüþ ãåíåðàòîðà ïñåâäîñëó÷àéíûõ ÷èñåë rand, èíòåðïðåòèðóÿ ïàðó ñëó÷àéíûõ ÷èñåë êàê êîîðäèíàòû òî÷êè â äâóìåðíîé ñèñòåìå êîîðäèíàò ñ íà÷àëîì â öåíòðå êðóãà. Êîëè÷åñòâî ýêñïåðèìåíòîâ ïî ñîçäàíèþ ñëó÷àéíîé òî÷êè ñ÷èòàòü âõîäíûì ïàðàìåòðîì ôóíêöèè, âû÷èñëÿþùåé p. Ãåîìåòðè÷åñêèé ñïîñîá. Ãåîìåòðè÷åñêèé ñïîñîá âû÷èñëåíèÿ ÷èñëà p èñïîëüçóåò èçâåñòíîå îïðåäåëåíèå ÷èñëà p êàê ïðåäåëà îòíîøåíèÿ ïåðèìåòðà ëîìàíîé, âïèñàííîé â ïîëóêðóã åäèíè÷íîãî ðàäèóñà, ïðè óñëîâèè, ÷òî ÷èñëî ñòîðîí ëîìàíîé ñòðåìèòñÿ ê áåñêîíå÷íîñòè. Ïîëàãàÿ ÷èñëî p ðàâíûì ïîëîâèíå äëèíû îêðóæíîñòè åäèíè÷íîãî ðàäèóñà, îöåíèòü åãî ñóììîé äëèí îòðåçêîâ ëîìàíîé, âïèñàííîé â ýòó äóãó. Êàæäîå î÷åðåäíîå ïðèáëèæåíèå ÷èñëà p ïîëó÷èòü èç ïðåäûäóùå12
ãî óäâîåíèåì êîëè÷åñòâà îòðåçêîâ ëîìàíîé, âîñïîëüçîâàâøèñü ïðè ýòîì ðåêóððåíòíûì ñîîòíîøåíèåì: 1
1 1 1 1 1 2 1 5 13 24 6 3 1 7 1 7 13 24 4 2 839 3 839 4 8 9 ãäå x äëèíà îòðåçêà ëîìàíîé. Ïîãðåøíîñòü âû÷èñëåíèÿ ÷èñëà p ñ÷èòàòü âõîäíûì ïàðàìåòðîì ðàçðàáàòûâàåìîé ôóíêöèè.
Ëàáîðàòîðíàÿ ðàáîòà ¹ 5 ÎÏÅÐÀÖÈÈ ÍÀÄ ÌÍÎÃÎÑËÎÂÍÛÌÈ ÎÏÅÐÀÍÄÀÌÈ 1. Ìíîãîñëîâíûå îïåðàíäû Àðèôìåòè÷åñêèå âûðàæåíèÿ â ÿçûêå C ïðåäñòàâëÿþò ñîáîé ôîðìóëû äëÿ âû÷èñëåíèÿ çíà÷åíèé. Îíè ñîñòîÿò èç îïåðàíäîâ: ïåðåìåííûõ, êîíñòàíò è ò. ä.; è îïåðàöèé: ñëîæåíèÿ, âû÷èòàíèÿ è ò. ä.  êà÷åñòâå îïåðàíäîâ ìîãóò èñïîëüçîâàòüñÿ êàê ïðîñòûå òèïû ïåðåìåííûõ (int, float...), òàê è ñòðóêòóðèðîâàííûå (ìàññèâû, ìíîæåñòâà...).  ïîñëåäíåì ñëó÷àå îïåðàíäû íàçûâàþòñÿ ìíîãîñëîâíûìè. Äëÿ îïåðàöèé íàä íèìè â áîëüøèíñòâå ñëó÷àåâ íåîáõîäèìî ïèñàòü ïðîãðàììû.  äàííîé ëàáîðàòîðíîé ðàáîòå íåîáõîäèìî ñëîæèòü è âû÷åñòü äâà öåëûõ ÷èñëà.  ïðîñòåéøåì ñëó÷àå ýòè îïåðàöèè âûïîëíÿëèñü áû äîñòàòî÷íî ïðîñòî, íàïðèìåð: a = x + y; b = x y (åñëè òèïû ÷èñåë ïðîñòûå). Îäíàêî èñõîäíûå öåëûå ÷èñëà íå óêëàäûâàþòñÿ â ñòàíäàðòíîå îïðåäåëåíèå ïðîñòûõ òèïîâ ïåðåìåííûõ, îíè ïðåäñòàâëåíû â âèäå ìàññèâîâ áàéòîâ (ïî óñëîâèþ çàäà÷è), ïîýòîìó âîçíèêàåò íåîáõîäèìîñòü ïðîãðàììèðîâàíèÿ ñïåöèàëüíûõ ïðîöåäóð ñëîæåíèÿ è âû÷èòàíèÿ. Îáà ìàññèâà îäíîìåðíûå, ðàçìåðîì (äëÿ êîíêðåòíîé çàäà÷è) íå áîëåå øåñòè áàéò. Ïóñòü â ïåðâîì áàéòå õðàíèòñÿ çíàê ÷èñëà, à â îñòàëüíûõ åãî çíà÷àùèå äâîè÷íûå öèôðû (áóäåì ýòî ïðåäñòàâëåíèå ñ÷èòàòü ïðÿìûì êîäîì ÷èñëà). Èñõîäíûå ìàññèâû (÷èñëà) æåëàòåëüíî çàïèñàòü â âèäå øåñòíàäöàòåðè÷íûõ êîíñòàíò â òåõíîëîãè÷åñêîé ÷àñòè ïðîãðàììû. Íåîáõîäèìî ïðåäóñìîòðåòü âñå âîçìîæíûå âàðèàíòû ñîîòíîøåíèé èñõîäíûõ äàííûõ: ÷èñëà ìîãóò áûòü êàê îäíîãî çíàêà, òàê è ðàçíûõ çíàêîâ; âû÷èòàåìîå ìåíüøå óìåíüøàåìîãî (ïî ìîäóëþ) è íàîáîðîò; ðåçóëüòàò ñëîæåíèÿ «íå âïèñûâàåòñÿ» â ìàññèâ ðåçóëüòàòà (ïåðåïîëíåíèå) è ò. ä. 13
Àëãåáðàè÷åñêîå ñëîæåíèå äâóõ ÷èñåë óäîáíî âûïîëíÿòü â äîïîëíèòåëüíîì êîäå: ñóììèðóþòñÿ âñå ðàçðÿäû ÷èñåë, âêëþ÷àÿ çíàêîâûé, à âîçìîæíûé ïåðåíîñ èç çíàêîâîãî ðàçðÿäà èãíîðèðóåòñÿ. Çíàêîâûé ðàçðÿä ñóììû (0 +, 1 ) ïðè ýòîì ôîðìèðóåòñÿ àâòîìàòè÷åñêè, è ñàìà ñóììà ïîëó÷àåòñÿ â äîïîëíèòåëüíîì êîäå. Äîïîëíèòåëüíûì êîäîì ïîëîæèòåëüíîãî ÷èñëà ÿâëÿåòñÿ ïðÿìîé êîä ýòîãî ÷èñëà. Äëÿ ïîëó÷åíèÿ äîïîëíèòåëüíîãî êîäà îòðèöàòåëüíîãî ÷èñëà íåîáõîäèìî ïðè ïðîñìîòðå öèôð ÷èñëà ñïðàâà íàëåâî îñòàâèòü íåèçìåííûìè âñå öèôðû «0» è ïåðâóþ âñòðå÷åííóþ öèôðó «1», âñå îñòàëüíûå öèôðû, çà èñêëþ÷åíèåì çíàêà ÷èñëà, ïðîèíâåðòèðîâàòü. Ïåðåâîä îòðèöàòåëüíîãî ÷èñëà èç äîïîëíèòåëüíîãî êîäà â ïðÿìîé ìîæíî âûïîëíèòü ïî ýòîìó æå ïðàâèëó. 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Íàïèñàòü ôóíêöèþ àëãåáðàè÷åñêîãî ñëîæåíèÿ äâóõ öåëûõ ÷èñåë, êàæäîå èç êîòîðûõ ïðåäñòàâëåíî ìàññèâîì áàéòîâ. Ïåðâûé áàéò ìàññèâà ñîäåðæèò êîä çíàêà ÷èñëà: 0 +, 225 , à îñòàëüíûå áàéòû çíà÷àùèå äâîè÷íûå öèôðû ÷èñëà. Ëàáîðàòîðíàÿ ðàáîòà ¹ 6 ÐÀÁÎÒÀ ÑÎ ÑÒÐÓÊÒÓÐÀÌÈ 1. Ïîíÿòèå òàáëè÷íîé ñòðóêòóðû äàííûõ Òàáëèöåé íàçûâàåòñÿ ñòðóêòóðà äàííûõ, ýëåìåíòû êîòîðîé ïðåäñòàâëÿþò ñîáîé çàïèñè, ñîñòîÿùèå èç íåñêîëüêèõ ïîëåé. Ïðè ýòîì îäíî èç ïîëåé íàçûâàåòñÿ ïîëåì êëþ÷à, à îñòàëüíûå ïîëÿìè äàííûõ. Êàæäàÿ çàïèñü òàáëèöû èìååò óíèêàëüíûé êîä â ïîëå êëþ÷à. Ïî ýòîìó êîäó îñóùåñòâëÿåòñÿ ïîèñê äàííûõ â òàáëèöå. Çàäà÷à ïîèñêà â òàáëèöå èìååò ñëåäóþùóþ ôîðìóëèðîâêó. Òàáëè÷íàÿ ñòðóêòóðà Ò ñîñòîèò èç ìíîæåñòâà çàïèñåé Òi , i = 1¸n, êàæäàÿ èç êîòîðûõ èìååò ïîëå êëþ÷à Êi è ìíîæåñòâî ïîëåé äàííûõ Dj, j = 1¸m. Îïðåäåëèòü çíà÷åíèÿ ïîëåé äàííûõ òàêîé çàïèñè òàáëèöû, ïîëå êëþ÷à êîòîðîé ñîäåðæèò çíà÷åíèå x, íàçûâàåìîå àðãóìåíòîì ïîèñêà. Êëþ÷îì â ïðèâåäåííîé òàáëèöå ÿâëÿåòñÿ ïîëå, îçàãëàâëåííîå «Ïëàíåòà», à ïîëÿ «Ðàäèóñ» è «Ìàññà» ÿâëÿþòñÿ ïîëÿìè äàííûõ. Ðåçóëüòàòîì ðåøåíèÿ çàäà÷è ïîèñêà â òàêîé òàáëèöå äëÿ àðãóìåíòà ïîèñêà, íàïðèìåð, x = Þïèòåð áóäóò çíà÷åíèÿ äàííûõ 11,2 è 318. 14
Ïðèìåð òàáëè÷íîé ñòðóêòóðû 1234563
7389 389 3529
33 33529
5 9
5453
52!
3
"
#$965
%36 4
&34
'
(5$6 4
'
"
12 6)4
'
Òàáëèöà íàçûâàåòñÿ óïîðÿäî÷åííîé, åñëè åå çàïèñè êàêèì-ëèáî îáðàçîì óïîðÿäî÷åíû ïî çíà÷åíèþ ïîëÿ êëþ÷à. Íàïðèìåð, åñëè ïðè i < j çíà÷åíèÿ êëþ÷åé Êi < Êj. Î÷åâèäíî, ÷òî äëÿ óïîðÿäî÷åííîé òàáëèöû ìîãóò èñïîëüçîâàòüñÿ àëãîðèòìû ïîèñêà çàïèñè, ìèíèìèçèðóþùèå âðåìÿ ïîèñêà. Âðåìÿ ïîèñêà, èçìåðÿåìîå â êîëè÷åñòâå çàïèñåé, ïðîñìîòðåííûõ â ïðîöåññå ðåøåíèÿ çàäà÷è, ÿâëÿåòñÿ îñíîâíîé õàðàêòåðèñòèêîé ñïîñîáà óïîðÿäî÷åííîñòè òàáëèöû è, ñîîòâåòñòâåííî, àëãîðèòìà àëãîðèòìà ïîèñêà â íåé. Òàáëèöà âûøåðàññìîòðåííîãî ïðèìåðà ÿâëÿåòñÿ íåóïîðÿäî÷åííîé (åå ìîæíî áûëî áû óïîðÿäî÷èòü, ðàñïîëîæèâ íàçâàíèÿ ïëàíåò â àëôàâèòíîì ïîðÿäêå). Åäèíñòâåííûé ñïîñîá îðãàíèçàöèè ïîèñêà â òàêîé òàáëèöå ëèíåéíûé ïîèñê: ïîñëåäîâàòåëüíûé ïðîñìîòð âñåõ çàïèñåé, íà÷èíàÿ ñ ïåðâîé, äî òåõ ïîð, ïîêà íå áóäåò îáíàðóæåí çàäàííûé àðãóìåíò ïîèñêà ëèáî ïîêà ïî îêîí÷àíèè ïðîñìîòðà âñåé òàáëèöû íå áóäåò ñäåëàí âûâîä îá îòñóòñòâèè â íåé çàïèñè ñ èñêîìûì êëþ÷îì. Äëÿ îðãàíèçàöèè òàáëèöû ñðåäñòâàìè ÿçûêà Ñ óäîáíî âîñïîëüçîâàòüñÿ òèïîì struct ñî ñëåäóþùèì ñèíòàêñèñîì: 15
struct { } ::=|; ::= ::=|, Îïèñàâ îäíó çàïèñü òàáëèöû â âèäå òèïà struct, ñîáðàòü ìíîæåñòâî çàïèñåé â åäèíóþ òàáëèöó ìîæíî, íàïðèìåð, ñ ïîìîùüþ îäíîìåðíîãî ìàññèâà. Òàê, âûøåïðèâåäåííàÿ òàáëèöà â C-ïðîãðàììå ìîæåò áûòü îïèñàíà â âèäå ìàññèâà table: struct line { char *planet; float radius,mass; }; struct line table[9]; 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Ïîëàãàÿ, ÷òî íåêîòîðàÿ òàáëè÷íàÿ ñòðóêòóðà ïðåäñòàâëÿåò ñîáîé ïîñëåäîâàòåëüíîñòü çàïèñåé, ñîäåðæàùèõ ïî äâà ïîëÿ êàæäàÿ: ïîëå êëþ÷à òèïà char* è ïîëå äàííûõ òèïà int, íàïèñàòü ôóíêöèè âêëþ÷åíèÿ íîâîé çàïèñè â òàáëèöó è âûáîðêè äàííûõ èç òàáëèöû ïî çàäàííîìó êëþ÷ó, ñîáëþäàÿ ïðè ýòîì óñëîâèå óíèêàëüíîñòè êàæäîãî çíà÷åíèÿ ïîëÿ êëþ÷à. Ëàáîðàòîðíàÿ ðàáîòà ¹ 7 ÎÏÅÐÀÖÈÈ ÍÀÄ ÑÏÈÑÊÎÂÛÌÈ ÑÒÐÓÊÒÓÐÀÌÈ 1. Ïðèíöèïû ðåàëèçàöèè äèíàìè÷åñêèõ ñòðóêòóð äàííûõ Ëèíåéíûé ñïèñîê ÿâëÿåòñÿ ïðèìåðîì äèíàìè÷åñêîé ñòðóêòóðû äàííûõ, ò. å. òàêîé, êîòîðàÿ ôîðìèðóåòñÿ â ïðîöåññå âûïîëíåíèÿ ïðîãðàììû. Êàæäûé ýëåìåíò ëèíåéíîé ñòðóêòóðû èìååò ñâîé ïîðÿäêîâûé íîìåð â íåé, è äëÿ êàæäîãî ýëåìåíòà, êðîìå ïåðâîãî, ñóùåñòâóåò ïðåäûäóùèé ñ íîìåðîì, íà åäèíèöó ìåíüøèì, è äëÿ êàæäîãî ýëåìåíòà, êðîìå ïîñëåäíåãî, ñóùåñòâóåò ïîñëåäóþùèé ýëåìåíò ñ íîìåðîì, íà åäèíèöó áîëüøèì. Òàêàÿ ëèíåéíàÿ óïîðÿäî÷åííîñòü â äèíàìè÷åñêîé ñòðóêòóðå îðãàíèçóåòñÿ ñ ïîìîùüþ äîïîëíèòåëüíîãî ïîëÿ, êîòîðîå, ïîìèìî íåêî16
òîðîãî êîëè÷åñòâà èíôîðìàöèîííûõ ïîëåé, ïðèñóòñòâóåò â êàæäîì ýëåìåíòå ñïèñêà è êîòîðîå ñîäåðæèò óêàçàòåëü, èëè àäðåñ, ñëåäóþùåãî ýëåìåíòà ëèíåéíîé ñòðóêòóðû.  C-ïðîãðàììå îïèñàíèå òàêîé ñòðóêòóðû âûïîëíÿåòñÿ ïî ñõåìå: struct listrec{ info1; //èíôîðìàöèîííûå ... infon; //ïîëÿ struct listrec *link; //ïîëå óêàçàòåëÿ }; Äèíàìè÷åñêèé ëèíåéíûé ñïèñîê ÿâëÿåòñÿ ïðèìåðîì ñòðóêòóðû ñ ïîñëåäîâàòåëüíûì äîñòóïîì. Îí çàäàåòñÿ óêàçàòåëåì (ò. å. ñ èñïîëüçîâàíèåì âûøåïðèâåäåííûõ îáîçíà÷åíèé ïåðåìåííîé-óêàçàòåëåì íà äàííûå òèïà struct listrec) íà ïåðâûé ýëåìåíò ñïèñêà. Äëÿ òîãî ÷òîáû ïîëó÷èòü äîñòóï ê i-ìó ýëåìåíòó, íåîáõîäèìî ïîñëåäîâàòåëüíî ïðîñìîòðåòü i1 ýëåìåíòîâ ñïèñêà, íà÷èíàÿ ñ ïåðâîãî: base = first; for(j = 1; jlink; Ïðèâåäåííûé ôðàãìåíò ïðîãðàììû ïîäðàçóìåâàåò, ÷òî ïåðåìåííûå base è first èìåþò òèï: struct listrec *first, *base ; â ïåðåìåííîé first ñîäåðæèòñÿ àäðåñ ïåðâîãî ýëåìåíòà ñïèñêà. Ðåçóëüòàòîì âûïîëíåíèÿ ôðàãìåíòà ÿâëÿåòñÿ çíà÷åíèå ïåðåìåííîé base àäðåñ i-ãî ýëåìåíòà ñïèñêà. Ôîðìèðîâàíèå ýëåìåíòîâ äèíàìè÷åñêîé ñòðóêòóðû âûïîëíÿåòñÿ â äâà äåéñòâèÿ: îòâåäåíèå ïàìÿòè äëÿ ýëåìåíòà è çàïîëíåíèå îòâåäåííîé ïàìÿòè íåêîòîðûìè çíà÷åíèÿìè. Ïåðâîå äåéñòâèå âûïîëíÿåòñÿ îïåðàòîðîì: = new . Ðåçóëüòàòîì ÿâëÿåòñÿ âûäåëåíèå èç äèíàìè÷åñêîé îáëàñòè ôðàãìåíòà ïàìÿòè, îáúåì êîòîðîãî îïðåäåëÿåòñÿ òèïîì, óêàçàííûì ïîñëå new, à àäðåñ âûäåëåííîãî ôðàãìåíòà áóäåò ïîìåùåí â ïåðåìåííóþ-óêàçàòåëü. Òàêèì îáðàçîì, ïîëó÷åííîå çíà÷åíèå ñëåäóåò ïîìåñòèòü â ïîëå link ïðåäûäóùåãî ïî îòíîøåíèþ ê ôîðìèðóåìîìó ýëåìåíòó ñïèñêà.  ïîëå link ïîñëåäíåãî ýëåìåíòà ñïèñêà ñëåäóåò ïîìåñòèòü «ïóñòîé» àäðåñ, êîòîðûé îáîçíà÷àåòñÿ çàðåçåðâèðîâàííûì ñëîâîì NULL. Çàïîëíåíèå îñòàëüíûõ (èíôîðìàöèîííûõ) ïîëåé ýëåìåíòà ñïèñêà îñóùåñòâëÿåòñÿ â ñîîòâåòñòâèè ñ íàçíà÷åíèåì ñïèñêà â êîíêðåòíîé çàäà÷å è àëãîðèòìîì åå ðåøåíèÿ. Ïðè ýòîì äîñòóï ê ïîëþ îðãàíèçóåòñÿ ÷åðåç óêàçàòåëü íà ýëåìåíò ñïèñêà, íàïðèìåð: base>info1=, 17
åñëè base ñîäåðæèò àäðåñ ôîðìèðóåìîãî ýëåìåíòà ñïèñêà. Íèæåïðèâåäåííàÿ ïðîãðàììà ôîðìèðóåò ëèíåéíûé ñïèñîê èç ïîñëåäîâàòåëüíîñòè çàïèñåé òåêñòîâîãî ôàéëà. void main() { struct list{ //òèï ýëåìåíòà ñïèñêà char *inf; struct list *link; } FILE *f; struct list *first, *base, *r; f=fopen("file.txt","r") //ôàéë ñ äàííûìè äëÿ ñïèñêà first=new stuct list; //îòâåäåíèå ïàìÿòè äëÿ ïåðâîãî ýëåìåíòà ñïèñêà base=first; r=base; while( !feof(f)) { base>inf=new char [5]; // çàïîëíåíèå èíôîðìàöèîííîãî fgets(base>inf,5,f,); // ïîëÿ ýëåìåíòà ñïèñêà base>link=new struct list; //îòâåäåíèå ïàìÿòè äëÿ î÷åðåäíîãî ýëåìåíòà è çàïîëíåíèå //ïîëÿ óêàçàòåëÿ ïðåäûäóùåãî ýëåìåíòà ñïèñêà r=base; base=base>link; //ïåðåìåùåíèå òåêóùåãî óêàçàòåëÿ íà ñëåäóþùèé ýëåìåíò ñïèñêà }; delete base; //îñâîáîæäåíèå íàïðàñíî îòâåäåííîé ïàìÿòè if (r!=first ) r>link=NULL; else first=NULL; //çàïîëíåíèå ïîëÿ óêàçàòåëÿ ïîñëåäíåãî //ýëåìåíòà ñïèñêà } 2. Çàäàíèå íà ëàáîðàòîðíóþ ðàáîòó Íàïèñàòü ïðîãðàììó ïîñòðîåíèÿ ëèíåéíîé ñïèñêîâîé ñòðóêòóðû, ñîäåðæàùåé äàííûå ñèìâîëüíîãî òèïà, à òàêæå ïðîöåäóðó, ðåàëèçóþùóþ â ñîîòâåòñòâèè ñ âàðèàíòîì çàäàíèÿ îäíó èç îïåðàöèé íàä ñïèñêîâîé ñòðóêòóðîé. 1. Âêëþ÷åíèå â ñïèñîê íîâîé çàïèñè ïîñëå çàïèñè ñ çàäàííûì íîìåðîì k. 2. Óäàëåíèå èç ñïèñêà çàïèñè ñ çàäàííûì íîìåðîì k. 18
3. Îáìåí äàííûìè çàïèñåé ñ çàäàííûìè íîìåðàìè k è l. 4. Âêëþ÷åíèå â ñïèñîê íîâîé çàïèñè ïîñëå çàïèñè ñ çàäàííûì çíà÷åíèåì ïîëÿ äàííûõ. 5. Óäàëåíèå èç ñïèñêà çàïèñè ñ çàäàííûì çíà÷åíèåì ïîëÿ äàííûõ. 6. Ðàçáèåíèå ñïèñêà íà äâà ñïèñêà îäèíàêîâîé äëèíû (+1). 7. Èçìåíåíèå ïîðÿäêà ñëåäîâàíèÿ çàïèñåé â ñïèñêå íà ïðîòèâîïîëîæíûé. 8. Îáúåäèíåíèå äâóõ çàäàííûõ ñïèñêîâ â îäèí. 9. Ïîñòðîåíèå êîïèè çàäàííîãî ñïèñêà. 10. Ïðåîáðàçîâàíèå çàäàííîãî ëèíåéíîãî ñïèñêà â êîëüöåâîé ñ óêàçàòåëåì íà ïåðâóþ çàïèñü, èìåâøóþ â ëèíåéíîì ñïèñêå íîìåð k. Ëàáîðàòîðíàÿ ðàáîòà ¹ 8 ØÀÁËÎÍÛ ÔÓÍÊÖÈÉ 1. Ïåðåãðóçêà è øàáëîíû ôóíêöèé  ïðîãðàììå ìîæåò áûòü ðàçìåùåíî íåñêîëüêî ôóíêöèé ñ îäíèì è òåì æå èìåíåì, åñëè ñïèñêè ôîðìàëüíûõ ïàðàìåòðîâ ó íèõ ðàçëè÷íû. Òàêèì îáðàçîì, òðåáîâàíèå óíèêàëüíîñòè ïðåäúÿâëÿåòñÿ ê ðàñøèðåííîìó èìåíè ôóíêöèè, ñîñòîÿùåìó èç ñîáñòâåííî èìåíè ôóíêöèè è ñïèñêà ôîðìàëüíûõ ïàðàìåòðîâ. Äëÿ îïèñàíèÿ ñåìåéñòâà ôóíêöèé, ðåàëèçóþùèõ àíàëîãè÷íûå àëãîðèòìû, ìîæíî âîñïîëüçîâàòüñÿ øàáëîíîì ôóíêöèè â ñîîòâåòñòâèè ñî ñëåäóþùèì ñèíòàêñèñîì: template () {} Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ øàáëîíà ñîäåðæèò ôîðìàëüíûå ïàðàìåòðû òèïà, ðàçäåëåííûå çàïÿòûìè. Ôîðìàëüíûé ïàðàìåòð ìîæåò ñîñòîÿòü èç êëþ÷åâîãî ñëîâà class è èäåíòèôèêàòîðà òèïà. Ïðèìåð îïèñàíèÿ øàáëîíà: template min(T t1,T t2) {if(t1, t2) return t1; else return t2;} Êîíêðåòíàÿ ôóíêöèÿ ãåíåðèðóåòñÿ èç øàáëîíà êîìïèëÿòîðîì ïðè îáðàáîòêå âûçîâà ôóíêöèè ñ êîíêðåòíûìè ôàêòè÷åñêèìè ïàðàìåòðàìè. 19
×òîáû óòî÷íèòü øàáëîí äëÿ îñîáûõ òèïîâ ïàðàìåòðîâ ôóíêöèè, ìîæíî îïðåäåëèòü ñïåöèàëèçèðîâàííûå øàáëîííûå ôóíêöèè. Òàê, â äîïîëíåíèå ê âûøåïðèâåäåííîìó ïðèìåðó: //ñïåöèàëèçèðîâàííàÿ âåðñèÿ min(): char *min(char*t1,char*t2) {if(strcmp(t1, t2)