1 ÅñãáóôÞñéï 1 ÄïìÝò ÄåäïìÝíùí ôìþìá: Äéá åßñéóçò Ðëçñïöïñéþí, ÔÅÉ ÊáâÜëáò äéäüóêùí: Äñ. Âáóßëåéïò áôæþò, Åð. ÊáèçãçôÞò ôï êåßìåíï áõôü âñßóêåôáé óôï äéáäßêôõï óôç óåëßäá www.it.teithe.gr/ chatzis 1.1 Óôü ïé Óôï åñãáóôþñéï áõôü áñ éêü èá ãßíåé ìéá åðáíüëçøç ôçò ñþóçò ôïõ ðåñéâüëëïíôïò ôçò Borland C++ ôï ïðïßï èá ñçóéìïðïéçèåß ãéá ôçí ðëçêôñïëüãçóç, êáé ôçí ìåôáãëþôôéóç ôùí ðñïãñáììüôùí ðïõ èá äçìéïõñãçèïýí óôï ðáñüí êáé óôá åðüìåíá åñãáóôþñéá. Óôü ïò åßíáé ç åêìüèçóç ôçò ñþóçò óõãêåêñéìýíùí äõíáôïôþôùí ôïõ ðåñéâüëëïíôïò ôçò Borland C++, áëëü êáé ç êáôáíüçóç ôùí âçìüôùí ðïõ ïäçãïýí áðü ôçí ðëçêôñïëüãçóç ôïõ êþäéêá åíüò ðñïãñüììáôïò óôçí äçìéïõñãßá åíüò åêôåëýóéìïõ áñ åßïõ êáé óôçí óõíý åéá óôçí åêôýëåóþ ôïõ áðü ôçí ãñáììþ åíôïëþí åíüò ðáñáèýñïõ Command prompt (MS-DOS prompt). Óôç óõíý åéá ôï åñãáóôþñéï áöéåñþíåôáé óôçí ìíþìç êáé óôïõò äåßêôåò. Ðïëý óçìáíôéêþ ãéá ôçí åîýëéîç ôïõ åñãáóôçñßïõ êñßíåôáé ç áöïìïßùóç áðü ôïõò öïéôçôýò ôïõ ôñüðïõ ìå ôïí ïðïßï ãßíåôáé ç áðïèþêåõóç ôùí ôéìþí ôùí ìåôáâëçôþí óôçí ìíþìç ôïõ õðïëïãéóôþ. ôóé ãßíåôáé áíáöïñü óôïí ôñüðï ìå ôïí ïðïßï äåéêôïäïôåßôáé ç ìíþìç êáé óôïí ôñüðï ìå ôïí ïðïßï ãßíåôáé ç äéá åßñéóþ ôçò áðü ôïõò ìåôáãëùôéóôýò ôçò C++ ìýóù ôùí ëåéôïõñãéêþí óõóôçìüôùí. Åðåîçãïýíôáé ôá ôñßá âáóéêü áñáêôçñéóôéêü ìßáò ìåôáâëçôþò (üíïìá, ôéìþ êáé äéåýèõíóç ìíþìçò). Åðßóçò åéóüãïíôáé ïé äåßêôåò (pointers) ïé ïðïßïé åßíáé ìßá Üëëç ìïñöþ ìåôáâëçôþí ðïõ ñçóéìåýïõí óôçí åõêïëüôåñç äéá åßñéóç ôçò ìíþìçò. 1.2 Áðáñáßôçôï Õëéêü ÊÜèå öïéôçôþò ïöåßëåé íá Ý åé ìáæß ôïõ: ôçí äéóêýôá ìå ôïõò êþäéêåò ôùí ðñïçãïýìåíùí åñãáóôçñßùí. ôéò óçìåéþóåéò Þ ôï âéâëßï ôïõ ìáèþìáôïò (åöüóïí Ý ïõí ìïéñáóôåß). õëéêü ãéá íá ìðïñåß íá êñáôü óçìåéþóåéò.
2 1.3 Ðñïåôïéìáóßá ôïõ Ç/Õ ÅëÝãîôå áí óôïí äßóêï ôïõ õðïëïãéóôþ óáò õðüñ åé ï êáôüëïãïò USERS óôçí ñßæá ôïõ óêëçñïý äßóêïõ (C:\USERS). Áí äåí õðüñ åé äçìéïõñãþóôå ôïí. ÅëÝãîôå áí óôïí êáôüëïãï áõôü õðüñ åé êáôüëïãïò ìå ôïí ïíïìáôåðþíõìü óáò. Áí äåí õðüñ åé äçìéïõñãþóôå ôïí óôçí ìïñöþ ÅÐÙÍÕÌÏ ÏÍÏÌÁ ( ùñßò êåíü áíüìåóá áëëü ìå ). ÌÝóá óôïí êáôüëïãï áõôü äçìéïõñãþóôå áí äåí õðüñ åé ôïí êáôüëïãï DSLAB. Ôþñá, ðñýðåé íá õðüñ åé óôïí äßóêï ôïõ õðïëïãéóôþ óáò ç äéáäñïìþ êáôáëüãùí C:\USERS\ÅÐÙÍÕÌÏ ÏÍÏÌÁ\DSLAB. ÌÝóá óå áõôüí ôïí êáôüëïãï èá áðïèçêåýåôå ïðïéïäþðïôå áñ åßï ðïõ áöïñü áõôü êáé ôá åðüìåíá åñãáóôþñéá ôïõ áíôéêåéìåíïóôñáöïýò ðñïãñáììáôéóìïý. Óôï ôýëïò ôïõ åñãáóôçñßïõ èá áíôéãñüöåôå êüðïéá áðü ôá ðåñéå üìåíá ôïõ êáôáëüãïõ áõôïý óôçí äéóêýôá ðïõ Ý åôå ìáæß óáò. Áðü ôï ìåíïý Tools ôïõ ðáñáèýñïõ ôïõ êáôáëüãïõ DSLAB åðéëýîôå ôçí åðéëïãþ Folder Options... Óôï ðáñüèõñï ðïõ áíïßãåé êüíôå êëéê óôï ìåíïý View êáé áðåíåñãïðïéþóôå ôçí åðéëïãþ Hide file extensions for known file types åöüóïí åßíáé åíåñãïðïéçìýíç. Åëá éóôïðïéþóôå ôï ðáñüèõñï ôïõ êáôáëüãïõ óáò êáé êëåßóôå üëá ôá Üëëá ðáñüèõñá ôïõ õðïëïãéóôþ óáò. 1.4 Ãíùñéìßá ìå ôçí Borland C++ Ãéá íá îåêéíþóïõìå ôçí åöáñìïãþ C++ ôçò åôáéñßáò Borland áíáæçôïýìå áñ éêü óôçí åðéöüíåéá åñãáóßáò (desktop) ôïõ õðïëïãéóôþ áí õðüñ åé åéêïíßäéï ìå üíïìá Borland C++. Áí õðüñ åé îåêéíüìå ôçí åöáñìïãþ êüíïíôáò äéðëü êëéê óôï åéêïíßäéï. Áí äåí õðüñ åé ôüôå êüíïõìå êëéê óôï êïõìðß íáñîç (Start), áíáæçôïýìå ôçí åðéëïãþ ÐñïãñÜììáôá (Programs), óôçí óõíý åéá ôçí åðéëïãþ Borland C++ 5.02 êáé ôýëïò ôçí åðéëïãþ Borland C++ óôçí ïðïßá êüíïõìå êëéê. Áí üëá ðüíå êáëü åìöáíßæåôáé óôçí ïèüíç ôï ðåñéâüëëïí åñãáóßáò ôçò Borland C++ ìå ìéá óåéñü áðü ìåíïý êáé ìéá óåéñü áðü åéêïíßäéá. Ôï ìåãáëýôåñï ìýñïò ôçò ïèüíçò üìùò êáëýðôåôáé áðü ôïí êåéìåíïãñüöï óôïí ïðïßï ðñýðåé íá åéóüãïõìå ôïí êþäéêá ôïõ ðñïãñüììáôïò. 1. Áðü ôï ìåíïý File ðáôþóôå ôçí åðéëïãþ Close ãéá íá êëåßóåé ôï åíäå üìåíï áíïé ôü ðáñüèõñï. ÅðáíáëÜâáôå ìý ñé íá êëåßóïõí üëá ôá áíïé ôü ðáñüèõñá ìýóá óôï ðåñéâüëëïí ôçò Borland C++, ïðüôå ç åðéëïãþ Close ôïõ ìåíïý åßíáé áðåíåñãïðïéçìýíç. 2. Áðü ôï ìåíïý File ðáôþóôå ôçí åðéëïãþ New êáé óôçí óõíý åéá ôçí åðéëïãþ Text Edit. íá íýï ðáñüèõñï áíïßãåé ðñïêåéìýíïõ åêåß íá ðëçêôñïëïãçèåß êþäéêáò. Óáí üíïìá áñ åßïõ ðñïôåßíåôáé Ýíá üíïìá ôçò ìïñöþò C:\BC5\BIN\NONAME00.CPP ôï ïðïßï êáé èá áëëüîïõìå óôçí óõíý åéá. 3. ÐáôÞóôå ôï ìåíïý File êáé óôçí óõíý åéá ôçí åðéëïãþ Save as. Óôï ðáñüèõñï Save File As ðïõ èá åìöáíéóôåß êáé óôçí åðéëïãþ Look in åðéëýîôå ôïí êáôüëïãü óáò óôçí äéáäñïìþ C:\USERS\ÅÐÙÍÕÌÏ ÏÍÏÌÁ\DSLAB Óáí üíïìá áñ åßïõ óôçí åðéëïãþ File Name: ðëçêôñïëïãåßóôå ôï üíïìá prog1a.cpp êáé áðïèçêåýóôå ôï áñ åßï óôï äßóêï ðáôþíôáò ôï ðëþêôñï Open. Ôï áñ åßï óáò Ý åé ìåôïíïìáóôåß. 4. Ðëçêôñïëïãåßóôå ôï êåßìåíï ðïõ áêïëïõèåß. ÐÑÏÓÏ Ç: ç C++ åßíáé ìßá case sensitive ãëþóóá äçëáäþ äéáêñßíåé ôá ìéêñü áðü ôá êåöáëáßá ãñüììáôá, ãéáõôü áíôéãñüøôå ôï áêüëïõèï êåßìåíï äéáôçñþíôáò ôá ìéêñü êáé ôá êåöáëáßá üðïõ õðüñ ïõí:
3 cout "Hello world!" endl; 5. ÅëÝãîôå üôé ôï êåßìåíï Ý åé áíôéãñáöåß óùóôü êáé óþóôå ôï óôï äßóêï ìå ôçí åðéëïãþ File->Save åöüóïí äåí èýëåôå íá ôï ìåôïíïìüóåôå. 6. ÅëÝãîôå üôé ôï áñ åßï ìå ôï üíïìá prog1a.cpp âñßóêåôáé óôï äßóêï ìåãéóôïðïéþíôáò ôï ðáñüèõñï ôïõ êáôáëüãïõ óáò. Áí ôï áñ åßï äåí õðüñ åé óôïí êáôüëïãü óáò áíáæçôþóôå ôï óôïí äßóêï, äéáãñüøôå ôï áí ôï âñåßôå êáé îåêéíþóôå ôçí äéáäéêáóßá áðïèþêåõóçò áðü ôçí áñ Þ. 7. ÅðéóôñÝøôå óôï ðñüãñáììá Borland C++ êáé åðéëýîôå áðü ôï ìåíïý Project ôçí åðéëïãþ Compile. ôóé îåêéíüåé ç ìåôáãëþôôéóç ôïõ ðñïãñüììáôïò êáé åöüóïí Ý åôå áíôéãñüøåé óùóôü ôïí êþäéêá, ç ìåôáãëþôôéóç ïëïêëçñþíåôáé ùñßò ðñïåéäïðïéþóåéò (Warnings) êáé óöüëìáôá (Errors). ÐáôÞóôå ôï ðëþêôñï ÏÊ ãéá íá êëåßóåé ôï ðáñüèõñï. Áí êáôü ôçí äéüñêåéá ôçò ìåôáãëþôôéóçò ðáñïõóéáóôïýí óöüëìáôá ôüôå äéïñèþóôå ôá ëüèç óôçí áíôéãñáöþ ôïõ êþäéêá, áðïèçêåýóôå ôï áñ åßï êáé ìåôáãëùôôßóôå îáíü. 8. Ìåãéóôïðïéåßóôå ôï ðáñüèõñï ôïõ êáôáëüãïõ óáò êáé åëýãîôå áí Ý åé äçìéïõñãçèåß ôï áíôéêåßìåíï áñ åßï ìå üíïìá prog1a.obj. 9. ÅðéóôñÝøôå óôï ðñüãñáììá Borland C++ êáé åðéëýîôå áðü ôï ìåíïý Project ôçí åðéëïãþ Build All. ôóé îåêéíüåé ç äéáäéêáóßá ìåôáãëþôôéóçò êáé óýíäåóçò ôïõ ðñïãñüììáôïò êáé åöüóïí Ý åôå áíôéãñüøåé óùóôü ôïí êþäéêá, ç äéáäéêáóßá ïëïêëçñþíåôáé ùñßò ðñïåéäïðïéþóåéò (Warnings) êáé óöüëìáôá (Errors). ÐáôÞóôå ôï ðëþêôñï ÏÊ ãéá íá êëåßóåé ôï ðáñüèõñï. Áí êáôü ôçí äéüñêåéá ôçò ìåôáãëþôôéóçò ðáñïõóéáóôïýí óöüëìáôá ôüôå äéïñèþóôå ôá ëüèç óôçí áíôéãñáöþ ôïõ êþäéêá, áðïèçêåýóôå ôï áñ åßï êáé ìåôáãëùôôßóôå îáíü. 10. Ìåãéóôïðïéåßóôå ôï ðáñüèõñï ôïõ êáôáëüãïõ óáò êáé åëýãîôå áí Ý åé äçìéïõñãçèåß ôï åêôåëýóéìï áñ åßï ìå üíïìá prog1a.exe. 11. Áðü ôï ðëþêôñï Start ôïõ õðïëïãéóôþ óáò åðéëýîôå Programs->Accessories->Command Prompt ïðüôå êáé åìöáíßæåôáé Ýíá ðáñüèõñï ãñáììþí åíôïëþí óôç ñßæá ôïõ äßóêïõ óáò C:\>. Ðëçêôñïëïãåßóôå äéáäï éêü ðáôþíôáò ENTER ìåôü áðü êüèå ãñáììþ. cd USERS cd ÅÐÙÍÕÌÏ ÏÍÏÌÁ cd DSLAB dir ïðüôå êáé åìöáíßæïíôáé ôá ðåñéå üìåíá ôïõ êáôáëüãïõ óáò óå ëßóôá. Ðëçêôñïëïãåßóôå ôï üíïìá ôïõ åêôåëýóéìïõ áñ åßïõ óáò (prog1a.exe) êáé ðáôþóôå ENTER. Ðïéü åßíáé ôï áðïôýëåóìá ôïõ ðñïãñüììáôïò; Åëá éóôïðïéþóôå ôï ðáñüèõñï Command Prompt áðü ôï ïðïßï óôçí óõíý åéá èá äïêéìüæåôå üëá ôá åêôåëýóéìá áñ åßá ðïõ èá äçìéïõñãåßôå. 12. ÅñùôÞóåéò
4 Åßíáé áðáñáßôçôç ç Borland C++ ãéá ôçí ãñáöþ ôïõ êþäéêá; Èá ìðïñïýóá åíáëëáêôéêü íá ðëçêôñïëïãþóù ôïí êþäéêá óå Üëëï êåéìåíïãñüöï (ð.. Notepad, Textpad ê.ë.ð.). ÕðÜñ ïõí Üëëïé ìåôáãëùôôéóôýò åêôüò áðü áõôüí ôçò åôáéñßáò Borland ðïõ ñçóéìïðïéþóáìå; ÕðÜñ ïõí ìåôáãëùôôéóôýò ðïõ äßíïíôáé åëåýèåñá ãéá ñþóç; Ãéá íá åêôåëåóôåß êüèå ðñüãñáììá ðïõ äçìéïõñãåßôáé áðü ôïí ìåôáãëùôôéóôþ åßíáé áðáñáßôçôç ç ýðáñîç ôïõ ìåôáãëùôôéóôþ óôïí õðïëïãéóôþ; Ôï åêôåëýóéìï ðïõ äçìéïõñãåßôáé åßíáé óõìâáôü ìå üëá ôá ëåéôïõñãéêü óõóôþìáôá; ÄçëáäÞ ìðïñþ íá ðüñù ôï áñ åßï prog1a.exe, íá ôï ìåôáöýñù êáé íá ôï åêôåëýóù óå Ýíá Üëëï õðïëïãéóôéêü óýóôçìá ìå ßäéï Þ Üëëï ëåéôïõñãéêü (ð.. Windows, Windows NT, UNIX ê.ë.ð.); Ìå ôïí üñï "ìåôáãëþôôéóç" õðïíïïýíôáé ç êëþóç ôïõ ðñïìåôáãëùôôéóôþ (pre-compiler), ôïõ ìåôáãëùôôéóôþ (compiler) êáé ôïõ ðñïãñüììáôïò óýíäåóçò (linker). Ðïéüò ï ñüëïò ôùí ðñïãñáììüôùí áõôþí; Ôé åßíáé ôá áñ åßá ðïõ Ý ïõí åðýêôáóç obj; 1.5 ÌåôáâëçôÝò êáé ìíþìç Ç ìíþìç åíüò õðïëïãéóôþ åßíáé Ýíá ìýóï áðïèþêåõóçò ðëçñïöïñßáò. Ç ìíþìç ùñßæåôáé óå ôìþìáôá ôïõ 1 byte (ëýîç). Ç áðïèþêåõóç óôç ìíþìç ãßíåôáé ìå óåéñéáêü ôñüðï (üðùò óå ìßá ìáãíçôéêþ ôáéíßá) óå áíôßèåóç ìå ôçí áðïèþêåõóç óå äßóêïõò ç ïðïßá ãßíåôáé óôï äéäéüóôáôï åðßðåäï. Ãéá íá áíáöåñèïýìå ëïéðüí óå ìßá óõãêåêñéìýíç èýóç ôçò ìíþìçò, åßôå ãéá áíüãíùóç åßôå ãéá åããñáöþ ðëçñïöïñßáò, ñåéáæüìáóôå Ýíáí áñéèìü (äåßêôç) ï ïðïßïò íá äåß íåé óôç èýóç ðïõ èýëïõìå. ÊÜèå èýóç ôçò ìíþìçò Ý åé ëïéðüí ìßá äéåýèõíóç ìå ôçí ïðïßá áíáöåñüìáóôå óå áõôþí. Ïé äéåõèýíóåéò ìíþìçò åßíáé äåêáåîáäéêïß áñéèìïß (äçëáäþ ñçóéìïðïéïýí ôá øçößá áðü ôï 0 ìý ñé ôï 9 êáé áðü ôï Á ìý ñé êáé ôï F). Óôçí óõíý åéá üôáí ãñüöïõìå Ýíáí äåêáåîáäéêü áñéèìü èá ðáñåìâüëïõìå ìðñïóôü ôï óýìâïëï 0x ðñïêåéìýíïõ íá áðïöåõ èïýí óõã ýóåéò ìå ôïõò áñéèìïýò ôïõ äåêáäéêïý óõóôþìáôïò. Ãéá ðáñüäåéãìá Ýíáò õðïëïãéóôþò ðïõ Ý åé 65536 bytes (64Kbytes) ìíþìç äåéêôïäïôåß ôéò èýóåéò áõôýò ìå äéåõèýíóåéò áðü ôçí 0x0001 ìý ñé ôçí 0xFFFF. Ôá ôåôñáøþöéá äåêáåîáäéêü íïýìåñá ìðïñïýí íá ðåñéãñüøïõí ìý ñé 16 4 = 65536 èýóåéò ìíþìçò. Áíôßóôïé á Ýíáò õðïëïãéóôþò ìå ìíþìç 4Gbytes äåéêôïäïôåß ôçí ìíþìç ìå äéåõèýíóåéò áðü 0x00000001 ìý ñé êáé 0xFFFFFFFF áöïý ïêôáøþöéá äåêáåîáäéêü íïýìåñá ìðïñïýí íá ðåñéãñüøïõí ìý ñé 16 8 = 4294967296 = 4G èýóåéò ìíþìçò. Ç äþëùóç ìßáò ìåôáâëçôþò óå Ýíá ðñüãñáììá ïäçãåß óôçí äýóìåõóç åíüò áñéèìïý èýóåùí ìíþìçò êáôü ôçí äéüñêåéá ôçò åêôýëåóçò ôïõ ðñïãñüììáôïò. Ï áñéèìüò ôùí èýóåùí ìíþìçò ðïõ äåóìåýïíôáé åîáñôüôáé áðü ôïí ôýðï ôçò ìåôáâëçôþò. Ç ðåñéï Þ ç ïðïßá èá äåóìåõôåß ãéá ôçí ìåôáâëçôþ áðïöáóßæåôáé áðü ôï ëåéôïõñãéêü óýóôçìá (äåí ìðïñåß ï ðñïãñáììáôéóôþò íá åðéëýîåé ðéï ìýñïò ôçò ìíþìçò èá ñçóéìïðïéþóåé). ¼ôáí ìßá ðåñéï Þ ìíþìçò åßíáé äåóìåõìýíç ôüôå ìðïñåß íá ñçóéìïðïéçèåß áðïêëåéóôéêü áðü ôï óõãêåêñéìýíï ðñüãñáììá ðïõ åêôåëåßôáé êáé ìå áðïêëåéóôéêü óêïðü ôçí äéáôþñçóç ôçò ôéìþò ôçò ìåôáâëçôþò ç ïðïßá ôçí äýóìåõóå. Ôï ëåéôïõñãéêü óýóôçìá åðßóçò óõíôçñåß ôçí óõó Ýôéóç áíüìåóá óôç ðåñéï Þ ôçò ìíþìçò êáé ôï
5 üíïìá ôçò ìåôáâëçôþò ðïõ ôçí äýóìåõóå. ÔÝëïò, ç ôéìþ ìßáò ìåôáâëçôþò áðïèçêåýåôáé óôïí äåóìåõìýíï ãéá ôçí ìåôáâëçôþ þñï ìíþìçò ìå ôçí åêôýëåóç ìéáò åíôïëþò åê þñçóçò ôéìþò (ð.. i=1;). Ìßá äåóìåõìýíç ìíþìç áðïäåóìåýåôáé üôáí ïé ìåôáâëçôýò ðïõ ôçí äýóìåõóáí âñåèïýí åêôüò åìâýëåéáò (ìå ëþîç ïìüäáò åíôïëþí, óõíüñôçóçò, Þ ðñïãñüììáôïò). Åðßóçò ìðïñåß íá áðïäåóìåýåôáé ìå ôçí åíôïëþ delete üôáí ðñüêåéôáé ãéá äõíáìéêü äåóìåõìýíç ðåñéï Þ ìíþìçò. ÐñïêåéìÝíïõ íá ãßíåé ðåñéóóüôåñï êáôáíïçôüò ï êüóìïò ôçò ìíþìçò èá åðé åéñþóïõìå ìßá ìåôáöïñü ôïõ óôïí êüóìï ôùí áíèñþðùí. Öáíôáóôåßôå ôçí ìíþìç óáí Ýíá åõèý äñüìï üðïõ õðüñ ïõí ïéêüðåäá ôïõ 1 byte ìüíï óôçí äåîéü ðëåõñü ôïõ äñüìïõ. Ãéá ôá ïéêüðåäá áõôü éó ýïõí ôá ðáñáêüôù: ÊÜèå ïéêüðåäï Ý åé ìßá äéåýèõíóç, ôçí äéåýèõíóç ìíþìçò. ÊÜèå öïñü ðïõ ìßá ìåôáâëçôþ ìå üíïìá x äåóìåýåé ìßá ðåñéï Þ ìíþìçò öáíôáóôåßôáé üôé ãýñù áðü Ýíáí óõãêåêñéìýíï áñéèìü ïéêïðýäùí ôßæåôáé Ýíá óðßôé ìå üíïìá x (ôï üíïìá ôçò ìåôáâëçôþò). Ùò äéåýèõíóç ôïõ óðéôéïý êáèïñßæåôáé ç ðñþôç áðü ôéò äéåõèýíóåéò ðïõ äåóìåýïíôáé. ÊÜèå öïñü ðïõ ìßá ôéìþ åê ùñåßôáé óå ìßá ìåôáâëçôþ Ýíáò Ýíïéêïò êáôïéêåß óôï óðßôé. ÊÜèå öïñü ðïõ ç ôéìþ ìßáò ìåôáâëçôþò áëëüæåé ôüôå áëëüæåé ï Ýíïéêïò ôïõ óðéôéïý. ÊÜèå öïñü ðïõ ìßá ìåôáâëçôþ êáôáóôñýöåôáé êáé êüèå öïñü ðïõ áðïäåóìåýåôáé äõíáìéêü ìßá ðåñéï Þ ìíþìçò ôüôå ãêñåìßæåôáé ôï óðßôé ðïõ ðåñéâüëëåé ôçí óõãêåêñéìýíç ðåñéï Þ ìíþìçò. Áõôü üìùò äåí åðçñåüæåé ôïí Ýíïéêï ï ïðïßïò óõíå ßæåé íá âñßóêåôáé åêåß. Ç ôéìþ äçëáäþ äåí Üíåôáé áëëü êáôáóôñýöåôáé ôï üíïìá ôï ïðïßï Þôáí óõíäåäåìýíï ìå ôçí óõãêåêñéìýíç ðåñéï Þ. Ðñïöáíþò ç óõãêåêñéìýíç ðåñéï Þ ìðïñåß íá ñçóéìïðïéçèåß åßôå áðü ôï ßäéï åßôå áðü êüðïéï Üëëï ðñüãñáììá. ôóé ìéá íýá ìåôáâëçôþ ðïõ èá äçëùèåß ùñßò íá åê ùñçèåß ôéìþ óå áõôþ õðüñ åé ðåñßðôùóç íá ìçí Ý åé ìçäåíéêþ ôéìþ áëëü íá Ý åé ôçí ôéìþ ôùí îå áóìýíùí åíïßêùí. ¼ëåò ïé ãëþóóåò ðñïãñáììáôéóìïý äßíïõí ôçí äõíáôüôçôá ôçò äþëùóçò ìåôáâëçôþí êáé ôçò åê þñçóçò ôéìþí óå áõôýò. Ç C++ ìáò äßíåé åðéðëýïí ôçí äõíáôüôçôá íá âëýðïõìå êáé íá ñçóéìïðïéïýìå ôçí äéåýèõíóç ìíþìçò ôùí ìåôáâëçôþí. Óå ìßá ìåôáâëçôþ ëïéðüí äéáêñßíïõìå ôá åîþò áñáêôçñéóôéêü: ôï üíïìá ôçí ôéìþ ôçí äéåýèõíóç ìíþìçò Ôá áíôßóôïé á áñáêôçñéóôéêü óôç ìåôáöïñü ðïõ åðé åéñþóáìå èá Þôáí: ôï üíïìá ôïõ êôéñßïõ, ï Ýíïéêïò êáé ç äéåýèõíóç ôïõ êôéñßïõ.
6 1. Óôï åðüìåíï ðáñüäåéãìá ôõðþíïõìå êáé ôá ôñßá áñáêôçñéóôéêü ìßáò ìåôáâëçôþò ôýðïõ int. Ðáñáôçñåßóôå ôçí ñþóç ôïõ óõìâüëïõ & ôï ïðïßï üôáí ôïðïèåôåßôáé ìðñïóôü áðü ôï üíïìá ìßáò ìåôáâëçôþò ìáò åðéóôñýöåé ôçí äéåýèõíóç ìíþìçò ôçò. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1a.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá: / ôá áñáêôçñéóôéêü ìßáò ìåôáâëçôþò / int i=12; cout "The name of the variable is i" endl; cout "The value of the variable is " i endl; cout "The address of the variable is " &i endl; 2. Ôñïðïðïéåßóôå ôï ðáñáðüíù ðñüãñáììá ðñïóèýôïíôáò ìßá óåéñü êþäéêá ç ïðïßá íá áõîüíåé ôçí ôéìþ ôçò ìåôáâëçôþò i êáôü 1 êáé åðáíáëüâåôå ôéò ôñåéò ãñáììýò êþäéêá ðïõ ôõðþíïõí ôá ôñßá áñáêôçñéóôéêü ôçò ìåôáâëçôþò. Aðïèçêåýóôå ùò prog1b.cpp, ìåôáãëùôßóôå êáé åêôåëýóôå ôï ðñüãñáììá. Óõãêñßíåôå áí Ý åé áëëüîåé ç ôéìþ ôçò ìåôáâëçôþò Þ ç äéåýèõíóþ ôçò ìíþìçò ôçò. 3. Ôñïðïðïéåßóôå ôï ðñüãñáììá prog1a.cpp Ýôóé þóôå íá äçëþóåôå äýêá ìåôáâëçôýò ôýðïõ double ùñßò íá ôéò áñ éêïðïéþóåôå. Ôõðþóôå ôï üíïìá, ôçí ôéìþ êáé ôçí äéåýèõíóç ìíþìçò ãéá üëåò ôéò ìåôáâëçôýò ðïõ äçëþóáôå. Aðïèçêåýóôå ùò prog1c.cpp, ìåôáãëùôßóôå êáé åêôåëýóôå ôï ðñüãñáììá. Ôé ôéìýò Ý ïõí ïé ìåôáâëçôýò; Ðáñáôçñåßôå êüôé óôéò äéåõèýíóåéò ìíþìçò ðïõ ôõðþíïíôáé; 4. ÅñùôÞóåéò Ðïéåò èýóåéò ìíþìçò êáôáëáìâüíåé ç ìåôáâëçôþ i óôï ðáñüäåéãìá prog1a.cpp (ãñüøôå ôéò äéåõèýíóåéò ìíþìçò); Ìðïñåß êáôü ôçí äéüñêåéá åêôýëåóçò åíüò ðñïãñüììáôïò ìßá ìåôáâëçôþ íá áëëüîåé üíïìá; Ìðïñåß êáôü ôçí äéüñêåéá åêôýëåóçò åíüò ðñïãñüììáôïò ìßá ìåôáâëçôþ íá áëëüîåé ôéìþ; Ìðïñåß êáôü ôçí äéüñêåéá åêôýëåóçò åíüò ðñïãñüììáôïò ìßá ìåôáâëçôþ íá áëëüîåé äéåýèõíóç ìíþìçò; 1.6 Äåßêôåò (Pointers) Ïé äåßêôåò åßíáé ìßá äéáöïñåôéêþ ìïñöþ ìåôáâëçôþí. Óôçí ðñáãìáôéêüôçôá Ýíáò äåßêôçò åßíáé ìßá ìåôáâëçôþ ðïõ óáí ôéìþ ëáìâüíåé äéåõèýíóåéò ìíþìçò. Ç äéåýèõíóç ìíþìçò ðïõ åßíáé ç ôéìþ ìßáò ìåôáâëçôþò-äåßêôç áíôéóôïé åß óå ìßá õðáñêôþ èýóç ôçò ìíþìçò ôïõ õðïëïãéóôþ óôçí ïðïßá ìðïñåß íá îåêéíüåé ç áðïèþêåõóç ìßáò Üëëçò ôéìþò (ð.. Ýíáò áñéèìüò ôýðïõ int Þ float Ýíáò áñáêôþñáò ôýðïõ char ê.ë.ð.). íáò äåßêôçò ëïéðüí ìå ôçí ôéìþ ôïõ äåß íåé ìßá äéåýèõíóç ìíþìçò óôçí ïðïßá îåêéíüåé ç áðïèþêåõóç ìßáò ìåôáâëçôþò åíüò ïðïéïõäþðïôå ôýðïõ. Ï ìåôáãëùôéóôþò ôçò C++
7 ðñýðåé êáôü ôçí äþëùóç åíüò äåßêôç íá ãíùñßæåé óå ôé ôýðï ìåôáâëçôþò èá äåß íåé ç ôéìþ ôïõ äåßêôç. ÐñïêåéìÝíïõ íá äçëùèåß Ýíáò äåßêôçò óå Ýíá ðñüãñáììá C++ ñçóéìïðïéåßôáé Ýíáò áóôåñßóêïò ( ) ôï ïðïßï ôïðïèåôåßôáé ìðñïóôü áðü ôï üíïìá ôïõ äåßêôç. Ï ôýðïò ôçò ìåôáâëçôþò óôçí äéåýèõíóç ìíþìçò ôçò ïðïßáò äåß íåé ç ôéìþ ôïõ äåßêôç äçëþíåôáé ìðñïóôü áðü ôïí áóôåñßóêï. ôóé Ý ïõìå äåßêôåò óå int, char, bool, double áëëü êáé óå ïðïéïäþðïôå Üëëï ôýðï áêüìç êáé óôïõò ïñéæüìåíïõò áðü ôïí ñþóôç ôýðïõò. 1. ¼ðùò åßðáìå êüèå äåßêôçò Ý åé ôéìþ ìßá äéåýèõíóç ìíþìçò. Ç ôéìþ áõôþ áðïèçêåýåôáé åðßóçò óôçí ìíþìç ôïõ õðïëïãéóôþ. Ðüóï þñï êáôáëáìâüíåé; Ôï åðüìåíï ðáñüäåéãìá äåß íåé ôçí äþëùóç äåéêôþí êáé áðáíôüåé óôï ðñïçãïýìåíï åñþôçìá. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1d.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá: / ç äþëùóç äåéêôþí äéáöüñùí ôýðùí êáé ç áðáéôïýìåíç ìíþìç / int i; bool b; char c; float f; double d; cout "One pointer to int needs " sizeof(i) " bytes" endl; cout "One pointer to bool needs " sizeof(b) " bytes" endl; cout "One pointer to char needs " sizeof(c) " bytes" endl; cout "One pointer to float needs " sizeof(f) " bytes" endl; cout "One pointer to double needs " sizeof(d) " bytes" endl; 2. Ôï óýìâïëï óôçí äþëùóç ôïõ äåßêôç ñçóéìïðïéåßôáé ùò åíäåéêôéêü ôçò ìïñöþò ôçò ìåôáâëçôþò êáé äåí áðïôåëåß ìýñïò ôïõ ïíüìáôüò ôïõ. ¼ðùò êáé ïé êáíïíéêýò ìåôáâëçôýò Ýôóé êáé ïé äåßêôåò Ý ïõí üíïìá, ôéìþ êáé äéåýèõíóç ìíþìçò ôá ïðïßá ôõðþíïõìå ìå ôï áêüëïõèï ðáñüäåéãìá. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1e.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá: int i; cout "The name of the variable is i" endl; cout "The value of the variable is " i endl; cout "The address of the variable is " &i endl; bool b; cout "The name of the variable is b" endl; cout "The value of the variable is " b endl; cout "The address of the variable is " &b endl; float f;
8 cout "The name of the variable is f" endl; cout "The value of the variable is " f endl; cout "The address of the variable is " &f endl; double d; cout "The name of the variable is d" endl; cout "The value of the variable is " d endl; cout "The address of the variable is " &d endl; Ï êþäéêáò ôïõ ðñïãñüììáôïò äåí äßíåé ôéìþ óôéò ìåôáâëçôýò. Áðü ðïõ Ý ïõí ðñïêýøåé ïé ôéìýò (values) ðïõ ôõðþíïíôáé. Åßóôå óßãïõñïé üôé ïé ôéìýò áõôýò áíôéóôïé ïýí óå ðñáãìáôéêýò äéåõèýíóåéò ìíþìçò ôïõ õðïëïãéóôþ; Åßóôå óßãïõñïé üôé óôéò äéåõèýíóåéò áõôýò îåêéíüåé ç áðïèþêåõóç ìßáò ìåôáâëçôþò ôïõ ôýðïõ ôïõ êüèå äåßêôç üðùò èá Ýðñåðå; Åßóôå óßãïõñïé üôé ç äéåýèõíóç áõôþ äåí åßíáé äåóìåõìýíç áðü Üëëï ðñüãñáììá; Ç áðüíôçóç åßíáé ü é êáé óôéò ôñåéò åñùôþóåéò. Ìßá ôýôïéá ñþóç äåéêôþí èá ïäçãþóåé ãñþãïñá óå óöüëìá ìíþìçò êáôü ôçí åêôýëåóç ôïõ ðñïãñüììáôïò êáé ôçí êáôüññåõóþ ôïõ. 3. ÐñïêåéìÝíïõ íá áðïöåõ èïýí ôýôïéá óöüëìáôá, ãéá êüèå äåßêôç ðïõ äçëþíïõìå ðñýðåé íá åßìáóôå óßãïõñïé üôé äåß íåé óå ìßá äåóìåõìýíç ðåñéï Þ ìíþìçò áíôßóôïé ïõ ôýðïõ. ÕðÜñ ïõí äýï ôñüðïé ãéá íá ãßíåé áõôü. Ï ðñþôïò ôñüðïò åßíáé íá äåßîåé ï äåßêôçò óå ìßá ðåñéï Þ ìíþìçò ðïõ Ý åé äåóìåõèåß áðü ìåôáâëçôþ ôïõ ßäéïõ ôýðïõ, üðùò óôï åðüìåíï ðáñüäåéãìá. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1f.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá:: int k, i; i=&k; cout "The address of the variable k is " &k endl; cout "The value of the pointer i is " i endl; 4. Ï äåýôåñïò ôñüðïò åßíáé ç ëåãüìåíç äõíáìéêþ äýóìåõóç ìíþìçò, ç ïðïßá åðéôõã Üíåôáé ìå ôçí ñþóç ôçò ëýîçò new áêïëïõèïýìåíç áðü Ýíáí ôýðï ï ïðïßïò êáé êáèïñßæåé ôï ìýãåèïò ôçò ìíþìçò ðïõ èá äåóìåõèåß. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1g.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá:: int i; i=new int;
9 cout "The value of the pointer i is " i endl; cout "The address of the pointer i is " &i endl; ÂÜëôå óå ó üëéá ôçí ãñáììþ åíôïëþò i=new int; ìåôáãëùôßóôå êáé åêôåëýóôå îáíü ôï ðñüãñáììá. Ôé äéáöïñýò ðáñáôçñåßôå; 5. Ôï óýìâïëï ôïõ ñçóéìïðïéåßôáé óôïõò äåßêôåò êáé ãéá Ýíáí áêüìç ëüãï. ¼ôáí ñçóéìïðïéåßôáé ìðñïóôü áðü ôï üíïìá ôïõ äåßêôç (ü é óå ãñáììþ äþëùóçò) ôüôå åðéóôñýöåé ôçí ôéìþ ðïõ åßíáé áðïèçêåõìýíç óôçí äéåýèõíóç ìíþìçò üðïõ äåß íåé ç ôéìþ ôïõ äåßêôç. ËÝìå üôé åðéóôñýöåé ôï ðåñéå üìåíï ôçò äéåýèõíóçò üðïõ äåß íåé ï äåßêôçò Þ ãéá ëüãïõò óõíôïìßáò ôï ðåñéå üìåíï ôïõ äåßêôç. íáò äåßêôçò ëïéðüí Ý åé Ýíá ðáñáðüíù áñáêôçñéóôéêü óå ó Ýóç ìå ôéò êáíïíéêýò ìåôáâëçôýò. Eêôüò áðü üíïìá, ôéìþ, äéåýèõíóç ìíþìçò Ý åé êáé ðåñéå üìåíï. ôóé ãéá Ýíáí äåßêôç ôýðïõ int ìßá åíôïëþ ôçò ìïñöþò: cout << *i ; èá ôõðþóåé ìßá áêýñáéá ôéìþ (ôï ðåñéå üìåíï åßíáé ðüíôá ìßá ôéìþ ôïõ ôýðïõ ôïõ äåßêôç). Ðñïõðüèåóç ãéá áõôü åßíáé ï äåßêôçò íá äåß íåé óå ìßá ðñáãìáôéêþ äéåýèõíóç ìíþìçò ðïõ Ý åé äåóìåõèåß óùóôü. Ôï åðüìåíï ðáñüäåéãìá åßíáé ôñïðïðïßçóç ôïõ ðñïãñüììáôïò prog1f.cpp. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1h.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá: int k=32, i; i=&k; cout "The address of the variable k is " &k endl; cout "The value of the variable k is " k endl; cout endl; cout "The value of the pointer i is " i endl; cout "The content of the pointer i is " i endl; 6. Áíôßóôïé ç ìðïñåß íá åßíáé ç ñþóç ôïõ óõìâüëïõ êáé ãéá ôïõò äåßêôåò ðïõ äåóìåýïõí ìíþìç äõíáìéêü. Ôï åðüìåíï ðáñüäåéãìá åßíáé ôñïðïðïßçóç ôïõ ðñïãñüììáôïò prog1g.cpp. ÐëçêôñïëïãÞóôå, ìåôáãëùôßóôå, áðïèçêåýóôå ùò prog1i.cpp êáé åêôåëýóôå ôï áêüëïõèï ðñüãñáììá: int i; i=new int; cout "The value of the pointer i is " i endl; cout "The address of the pointer i is " &i endl; i=7;
10 cout "The content of the pointer i is " i endl; ÂÜëôå óå ó üëéá ôçí ãñáììþ åíôïëþò i=new int; ìåôáãëùôßóôå êáé åêôåëýóôå îáíü ôï ðñüãñáììá. Ôé äéáöïñýò ðáñáôçñåßôå; 7. ÄçìéïõñãÞóôå Ýíá ðñüãñáììá ìå üíïìá prog1j.cpp óôï ïðïßï: Äçëþóôå Ýíá äåßêôç ôýðïõ float, Ýíá äåßêôç ôýðïõ double êáé ìßá ìåôáâëçôþ ôýðïõ float. Áñ éêïðïéþóôå ôçí ìåôáâëçôþ ìå ôçí ôéìþ 3.14. ÂÜëôå ôïí äåßêôç ôïõ ôýðïõ float íá äåß íåé ôçí äéåýèõíóç ôçò ìåôáâëçôþò. Äåóìåýóôå äõíáìéêü ìíþìç ãéá ôïí äåßêôç ôýðïõ double. ÊÜíôå ôï ðåñéå üìåíï ôïõ äåßêôç ôýðïõ double ßóï ìå 6.86. Åê ùñþóôå óôçí ìåôáâëçôþ ôï Üèñïéóìá ôùí ðåñéå ïìýíùí ôùí äýï äåéêôþí. Ôõðþóôå ôçí ôéìþ ôçò ìåôáâëçôþò êáé ôá ðåñéå üìåíá ôùí äåéêôþí. ÅîçãÞóôå ôï áðïôýëåóìá ðïõ ðñïêýðôåé. 8. ÅñùôÞóåéò Ðïéá åßíáé ôá áñáêôçñéóôéêü åíüò äåßêôç; Ïé äåßêôåò êáôáëáìâüíïõí ôïí ßäéï þñï ìíþìçò áíåîáñôþôùò ôýðïõ; Ôé åßíáé äõíáìéêþ äýóìåõóç ìíþìçò; Ðïéï åßíáé ôï ðëåïíýêôçìá åíüò äåßêôç óå óýãêñéóç ìå ìßá ìåôáâëçôþ; Ìðïñåß Ýíáò äåßêôçò íá äåß íåé óå äåßêôç; 9. Ìåãéóôïðïéåßóôå ôï ðáñüèõñï ìå ôá ðåñéå üìåíá ôïõ êáôáëüãïõ DSLAB. ÅðéëÝîôå üëá ôá áñ åßá ðïõ Ý ïõí åðýêôáóç.cpp êáé áíôéãñüøôå ôá óôçí äéóêýôá óáò. Ôçí äéóêýôá áõôþ èá ôçí Ý åôå ìáæß óáò óôï åðüìåíï åñãáóôþñéï.