Mysl_jak_programista_Techniki_kreatywnego_rozwiazywania_problemow_myprog.pdf

(1826 KB) Pobierz
Tytuł oryginału: Think Like a Programmer: An Introduction to Creative Problem Solving
Tłumaczenie: Jacek Janusz
ISBN: 978-83-246-7284-4
Original edition copyright © 2012 by V. Anton Spraul.
All rights reserved.
Published by arrangement with No Starch Press, Inc.
Polish edition copyright © 2013 by HELION SA.
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były
kompletne i rzetelne. Nie biorą jednak
żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane
z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie
ponoszą również
żadnej
odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/myprog
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/myprog.zip
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
Spis tre ci
PODZI}KOWANIA ..................................................................................... 7
WST}P ........................................................................................................ 9
O ksiÈ ce ................................................................................................................................11
Wymagania wstÚpne ..........................................................................................................11
Wybrane zagadnienia .........................................................................................................12
Styl programowania ...........................................................................................................12
mwiczenia ...........................................................................................................................12
Dlaczego C++? .................................................................................................................13
1
STRATEGIE ROZWIkZYWANIA PROBLEMÓW ......................................... 15
Klasyczne ïamigïówki .............................................................................................................17
Lis, gÚ i kukurydza ............................................................................................................17
amigïówki z przesuwanymi elementami ..........................................................................22
Sudoku ...............................................................................................................................26
Zamek Quarrasi .................................................................................................................30
Ogólne techniki rozwiÈzywania problemów ..........................................................................32
Miej zawsze jaki plan ........................................................................................................32
Ponownie zaprezentuj problem .........................................................................................33
Podziel problem .................................................................................................................34
Rozpocznij z wiedzÈ, którÈ posiadasz ................................................................................35
Upro Ê problem .................................................................................................................36
Szukaj analogii ....................................................................................................................37
Eksperymentuj ...................................................................................................................38
Nie popadaj we frustracjÚ ..................................................................................................38
mwiczenia ...............................................................................................................................40
Kup książkę
Poleć książkę
2
PRAWDZIWE AMIGÓWKI ..................................................................... 41
Elementy jÚzyka C++ wykorzystywane w tym rozdziale .................................................... 42
Tworzenie wzorów na wyj ciu ............................................................................................. 42
Przetwarzanie danych wej ciowych ...................................................................................... 48
Analiza problemu ............................................................................................................... 49
Èczenie wszystkich elementów w caïo Ê ......................................................................... 58
¥ledzenie stanu ...................................................................................................................... 60
Podsumowanie ...................................................................................................................... 73
mwiczenia .............................................................................................................................. 74
3
ROZWIkZYWANIE PROBLEMÓW ZA POMOCk TABLIC .......................... 77
Podstawowe informacje o tablicach ...................................................................................... 78
Przechowywanie danych ................................................................................................... 79
Kopiowanie ........................................................................................................................ 79
Odczytywanie i przeszukiwanie ........................................................................................ 80
Sortowanie ........................................................................................................................ 81
Obliczenia statystyczne ..................................................................................................... 84
RozwiÈzywanie problemów za pomocÈ tablic ....................................................................... 85
Optymalizacja .................................................................................................................... 89
Tablice ze staïymi warto ciami .............................................................................................. 91
Tablice z warto ciami nieskalarnymi ..................................................................................... 94
Tablice wielowymiarowe ...................................................................................................... 96
Kiedy nale y u ywaÊ tablic .................................................................................................... 99
mwiczenia ............................................................................................................................ 104
4
ROZWIkZYWANIE PROBLEMÓW
ZA POMOCk WSKA½NIKÓW I PAMI}CI DYNAMICZNEJ ....................... 107
Podstawowe informacje o wska nikach .............................................................................. 108
Korzy ci z u ywania wska ników ........................................................................................ 109
Struktury danych o wielko ci definiowanej w trakcie dziaïania programu ...................... 109
Struktury danych o zmiennych rozmiarach ..................................................................... 110
Wspóïdzielenie pamiÚci ................................................................................................... 110
Kiedy nale y u ywaÊ wska ników? ...................................................................................... 111
PamiÚÊ ma znaczenie ........................................................................................................... 112
Stos i sterta ...................................................................................................................... 113
Rozmiar pamiÚci .............................................................................................................. 116
Czas ycia ........................................................................................................................ 118
RozwiÈzywanie problemów za pomocÈ wska ników ......................................................... 119
añcuchy o zmiennej dïugo ci ......................................................................................... 119
Listy powiÈzane ............................................................................................................... 130
Wnioski i nastÚpne dziaïania ................................................................................................ 139
mwiczenia ............................................................................................................................ 139
4
Spis tre ci
Kup książkę
Poleć książkę
5
ROZWIkZYWANIE PROBLEMÓW ZA POMOCk KLAS ............................ 143
PrzeglÈd podstawowych informacji o klasach ......................................................................144
Cele u ycia klas ....................................................................................................................146
Enkapsulacja .....................................................................................................................146
Ponowne u ycie kodu ......................................................................................................147
Dzielenie problemu ..........................................................................................................147
Hermetyzacja ...................................................................................................................148
Czytelno Ê ........................................................................................................................150
Wyrazisto Ê ......................................................................................................................150
Tworzenie przykïadowej klasy .............................................................................................151
Podstawowy schemat klasy ..............................................................................................152
Metody wspierajÈce .........................................................................................................156
Klasy z danymi dynamicznymi ..............................................................................................160
Dodawanie wÚzïa .............................................................................................................162
Reorganizacja listy ............................................................................................................165
Destruktor .......................................................................................................................169
Kopiowanie gïÚbokie ........................................................................................................170
Obraz caïo ci dla klas z pamiÚciÈ dynamicznÈ .................................................................175
BïÚdy, jakich nale y unikaÊ ...................................................................................................176
Klasa fikcyjna ....................................................................................................................176
Jednozadaniowce .............................................................................................................177
mwiczenia .............................................................................................................................178
6
ROZWIkZYWANIE PROBLEMÓW ZA POMOCk REKURENCJI ................ 181
PrzeglÈd podstawowych informacji o rekurencji .................................................................182
Rekurencja nieogonowa i ogonowa .....................................................................................182
Wielki Pomysï Rekurencyjny ................................................................................................191
CzÚsto popeïniane bïÚdy ......................................................................................................194
Zbyt wiele parametrów ...................................................................................................195
Zmienne globalne .............................................................................................................196
U ywanie rekurencji w dynamicznych strukturach danych .................................................198
Rekurencja i listy powiÈzane ............................................................................................198
Rekurencja i drzewa binarne ............................................................................................201
Funkcje opakowujÈce ...........................................................................................................204
Kiedy nale y wybieraÊ rekurencjÚ? ......................................................................................207
Argumenty przeciwko rekurencji ....................................................................................207
mwiczenia .............................................................................................................................211
7
ROZWIkZYWANIE PROBLEMÓW
ZA POMOCk PONOWNEGO WYKORZYSTANIA KODU ......................... 213
Poprawne i niewïa ciwe wykorzystanie kodu ......................................................................214
PrzeglÈd podstawowych informacji o komponentach .........................................................215
Spis tre ci
5
Kup książkę
Poleć książkę
Zgłoś jeśli naruszono regulamin